import { DebugValue, UserConfig } from "../shared/types.mjs"; import { FrameworkDescriptor } from "../detect-fw/index.mjs"; import { Dictionary } from "../api/dictionary.mjs"; import { SessionPayload } from "../tasks/session.mjs"; //#region src/types/Plugin.d.ts type BossPropPrimitive = string | number | boolean | null | undefined; type BossProp = { value: BossPropValue; dynamic?: boolean; isFn?: boolean; ast?: unknown; code?: string; selectorValue?: unknown; selectorName?: string; classToken?: string; important?: boolean; named?: string; rawName?: string; query?: string | null; tokenKey?: string; tokenPath?: string; [key: string]: unknown; }; type BossPropTree = Record; type BossPropValue = BossPropPrimitive | BossPropTree | BossProp[] | Record | unknown[]; type BossParseInput = { content: string; path?: string; file?: string; preparedOnly?: boolean; [key: string]: unknown; }; type BossPropTreePayload = { input: Record; tree: BossPropTree; preferVariables?: boolean; parser?: 'jsx' | 'classname' | string; file?: BossParseInput | { path?: string; file?: string; } | null; code?: string; }; type BossPropPayload = { name: string; prop: BossProp; contexts: string[]; preferVariables?: boolean; file?: BossParseInput | { path?: string; file?: string; } | null; }; type BossCompilePropPayload = { name: string; prop: BossProp; output: Record; tag?: string; file?: BossParseInput | { path?: string; file?: string; } | null; keep?: boolean; remove?: boolean; }; type BossBrowserObjectPayload = { input: Record; output?: Record; tag?: string; contexts?: string[]; }; type BossMetaDataPayload = { kind: string; data?: unknown; label?: string; type?: string; [key: string]: unknown; }; type BossPluginEventName = 'onBoot' | 'onReady' | 'onParse' | 'onPropTree' | 'onProp' | 'onCompileProp' | 'onInit' | 'onBrowserObjectStart' | 'onSession' | 'onMetaData'; type BossPluginEventPayload = { onBoot: void; onReady: void; onParse: BossParseInput; onPropTree: BossPropTreePayload; onProp: BossPropPayload; onCompileProp: BossCompilePropPayload; onInit: void; onBrowserObjectStart: BossBrowserObjectPayload; onSession: SessionPayload; onMetaData: BossMetaDataPayload; }; type BossCssSelectorInput = { className?: string | null; selector?: string | null; pseudos?: string[]; query?: string | null; source?: string | null; }; type BossCssRuleOptions = { important?: boolean; }; type BossCssCustomBlock = { start: number; end: number; cssText: string; }; type BossLogger = { namespace: string; enabled: boolean; log: (...args: any[]) => void; child: (name: string) => BossLogger; }; interface BossCssLike { text: string; source?: string | null; setSource?: (source: string | null) => void; selector: (input: BossCssSelectorInput) => void; rule: (property: string, value: unknown, options?: BossCssRuleOptions) => void; addRule: (rule: string, query?: string | null, source?: string | null) => void; addImport: (url: string) => void; addRoot: (value: string, source?: string | null) => void; removeSource: (source: string | null | undefined) => void; write: () => void; reset: () => void; snapshot?: () => unknown; restore?: (snapshot: unknown) => void; syncCustomBlocks?: (file: string | undefined, blocks: BossCssCustomBlock[]) => void; getCustomText?: () => string; current?: unknown; imports?: Set; root?: Set; } type BossFileSection = 'head' | 'import' | 'body' | 'foot'; type BossFileEntry = { content: unknown; test?: () => boolean; }; interface BossFileBase { get: (section: BossFileSection) => Map; set: (section: BossFileSection, key: unknown, content: unknown, test?: () => boolean) => this; append: (section: BossFileSection, key: unknown, content: string, test?: () => boolean) => this; prepend: (section: BossFileSection, key: unknown, content: string, test?: () => boolean) => this; replace: (section: BossFileSection, key: unknown, callback: (value: BossFileEntry | BossFileEntry['content']) => BossFileEntry | string) => this; write: () => Promise; text: string; hasContent: boolean; } interface BossDtsFile extends BossFileBase {} interface BossJsFile extends BossFileBase { dts: BossDtsFile; import: (options: { name?: string | null; from: string; as?: string | null; }, test?: () => boolean) => string; importAndConfig: (options: { name: string; from: string; }, test?: () => boolean) => string; config: (options: { from: string; config: Record; }, test?: () => boolean) => void; } type BossApiFiles = { js: BossJsFile; native: BossJsFile; [key: string]: BossJsFile; }; type BossRuntimeAdapter = { createElement: (component: unknown, props: Record | null, children?: unknown, dev?: unknown) => unknown; getChildren?: (restArgs: unknown[]) => unknown; getFactoryChildren?: (props: unknown, ref: unknown, restArgs: unknown[]) => unknown; applyRef?: (props: Record, ref: unknown) => void; getDev?: (ref: unknown, restArgs: unknown[]) => unknown; }; type BossApiConfig = UserConfig & { plugins?: BossPluginModule[] | unknown[]; debug?: DebugValue; baseDir?: string; runtimeApi?: BossRuntimeAdapter; framework?: FrameworkDescriptor | UserConfig['framework']; strategy?: string; }; interface BossApiBase extends Omit { unit: string; plugins: BossPluginModule[]; trigger: BossPluginTrigger; dictionary: Dictionary; css?: BossCssLike; file?: BossApiFiles; log: BossLogger; isServer?: boolean; isBrowser?: boolean; baseDir?: string; userConfig?: UserConfig; framework?: FrameworkDescriptor | UserConfig['framework']; strategy?: string; emitAllTokens?: boolean; runtimeApi?: BossRuntimeAdapter; tokenVars?: (tokens?: Record) => Record; tokenPropGroups?: Record; propTreeToObject: (tree: BossPropTree) => Record; propTreeToArray: (tree: BossProp[]) => unknown[]; propTreeToValue: (tree: BossPropTree | BossProp[] | BossProp | unknown) => unknown; walkPropTree: (tree: BossPropTree, callback: (name: string, prop: BossProp) => void) => void; objectToPropTree: (obj: Record, output?: BossPropTree) => BossPropTree; mapPropTree: (tree: BossPropTree, callback: (name: string, prop: BossProp, depth: number) => BossProp, depth?: number) => BossPropTree; escapeClassName: (value: string) => string; contextToCSSVariable: (name: string, value: unknown, contexts: string[], selectorPrefix?: string) => string; contextToClassName: (name: string, value: unknown, contexts: string[], useSelector?: boolean, selectorPrefix?: string) => string; camelCaseToDash: (value: string) => string; dashToCamelCase: (value: string) => string; classTokenToSelector: (value: string) => string; applyChildSelectors: (selector: string, contexts: string[]) => string; } interface BossServerApi extends BossApiBase { isServer: true; css: BossCssLike; file: BossApiFiles; } interface BossBrowserApi extends BossApiBase { isBrowser: true; } type BossApi = BossServerApi | BossBrowserApi; type BossPluginEventApiMap = { onBoot: BossServerApi; onReady: BossServerApi; onParse: BossServerApi; onPropTree: BossServerApi; onProp: BossServerApi; onCompileProp: BossServerApi; onInit: BossBrowserApi; onBrowserObjectStart: BossBrowserApi; onSession: BossServerApi; onMetaData: BossServerApi; }; type BossPluginTest = (plugin: BossPluginModule) => boolean | Promise; type BossPluginHandler = BossPluginEventPayload[Event] extends void ? (api: BossPluginEventApiMap[Event], payload?: BossPluginEventPayload[Event]) => void | Promise : (api: BossPluginEventApiMap[Event], payload: BossPluginEventPayload[Event]) => void | Promise; type BossPluginHandlers = { [Event in BossPluginEventName]?: BossPluginHandler | Array> }; interface BossPluginModule extends BossPluginHandlers { name: string; dependencies?: Set; settings?: Map; [key: string]: unknown; } type BossPluginTrigger = (eventName: Event, payload?: BossPluginEventPayload[Event], test?: BossPluginTest) => void | Promise; type Plugin = BossPluginHandler; //#endregion export { BossApi, BossApiBase, BossApiConfig, BossApiFiles, BossBrowserApi, BossBrowserObjectPayload, BossCssCustomBlock, BossCssLike, BossCssRuleOptions, BossCssSelectorInput, BossDtsFile, BossFileBase, BossFileEntry, BossFileSection, BossJsFile, BossMetaDataPayload, BossParseInput, BossPluginEventName, BossPluginEventPayload, BossPluginHandler, BossPluginHandlers, BossPluginModule, BossPluginTest, BossPluginTrigger, BossProp, BossPropPayload, BossPropPrimitive, BossPropTree, BossPropTreePayload, BossPropValue, BossRuntimeAdapter, BossServerApi, Plugin };