@kithinji/pod 1.0.28 → 1.0.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/main.ts", "../src/dev/server.ts", "../src/config/config.ts", "../src/plugins/index.ts", "../src/plugins/my.ts", "../src/macros/index.ts", "../src/macros/expand_macros.ts", "../src/macros/macro_executer.ts", "../src/store/index.ts", "../src/store/store.ts", "../src/plugins/generators/generate_controller.ts", "../src/plugins/generators/utils.ts", "../src/plugins/generators/tsx_server_stub.ts", "../src/plugins/transformers/j2d.ts", "../src/plugins/generators/generate_server_component.ts", "../src/plugins/generators/generate_rpc.ts", "../src/plugins/analyzers/graph.ts", "../src/plugins/css/index.ts", "../src/html/index.ts", "../src/config/index.ts", "../src/add/component/component.ts", "../src/utils/cases.ts", "../src/utils/create.ts", "../src/add/new/index.ts", "../src/add/module/module.ts", "../src/add/ts/index.ts", "../src/docker/docker.ts", "../src/deploy/deploy.ts"],
4
- "sourcesContent": ["#!/usr/bin/env node\nimport { Command } from \"commander\";\nimport { startDevServer } from \"./dev\";\n\nimport * as store from \"./store\";\nexport { store };\n\nimport * as config from \"./config\";\nexport { config };\n\nexport * from \"./config/config\";\n\nimport * as macros from \"./macros\";\nexport { macros };\n\nexport * from \"./macros/expand_macros\";\n\nimport * as plugins from \"./plugins\";\nexport { plugins };\nexport * from \"./plugins/css\";\n\nimport { addComponent, addNew, addTs } from \"./add\";\nimport { addFeature } from \"./add/module\";\n\nimport path from \"path\";\nimport { exec, execSync } from \"child_process\";\nimport { dockerize } from \"./docker\";\nimport { deploy } from \"./deploy\";\nimport chalk from \"chalk\";\n\nconst program = new Command();\n\nprogram.name(\"pod\").description(\"Pod cli tool\").version(\"1.0.28\");\n\nprogram\n .command(\"new <name> [type]\")\n .description(\"Start a new Orca Project\")\n .action(async (name: string, type?: string) => {\n const orca = async () => {\n await addNew(name);\n\n const appDir = path.resolve(process.cwd());\n\n const shell =\n process.platform === \"win32\"\n ? process.env.ComSpec || \"cmd.exe\"\n : \"/bin/sh\";\n\n console.log(\"Installing dependencies...\");\n execSync(\"npm install\", { stdio: \"inherit\", cwd: appDir, shell });\n\n console.log(\"Starting development server...\");\n execSync(\"npm run dev\", { stdio: \"inherit\", cwd: appDir, shell });\n\n console.log(\n `All done! Your app \"${name}\" is running in development mode.`\n );\n };\n\n const ts = () => {\n addTs(name);\n };\n\n switch (type) {\n case \"orca\":\n return await orca();\n case \"ts\":\n return await ts();\n default:\n return await orca();\n }\n });\n\nprogram\n .command(\"dev\")\n .description(\"Start Pod development server\")\n .action(async (opts) => {\n await startDevServer();\n });\n\nprogram\n .command(\"add <type> <name>\")\n .description(\"Add a component (c) or a feature (f)\")\n .action(async (type, name) => {\n try {\n if (type === \"c\") {\n await addComponent(name);\n } else if (type === \"f\") {\n // create a module (service, component, module)\n await addFeature(name);\n } else {\n console.error(\"\u274C Unknown type. Use 'c' or 'f'.\");\n }\n } catch (err: any) {\n console.error(\"\u274C Error:\", err.message);\n }\n });\n\nprogram\n .command(\"dockerize <env>\")\n .description(\"Dockerize a pod project.\")\n .action(async (env) => {\n try {\n await dockerize(env);\n } catch (err: any) {\n console.error(\"\u274C Error:\", err.message);\n }\n });\n\nprogram\n .command(\"deploy\")\n .description(\"Deploy to a target environment\")\n .argument(\"<target>\", \"Target environment (e.g., ec2)\")\n .option(\"--force-install\", \"Force reinstallation even if already installed\")\n .action(async (target: string, options: { forceEnsure?: boolean }) => {\n try {\n await deploy(target, options);\n } catch (error: any) {\n console.error(chalk.red(error.message));\n process.exit(1);\n }\n });\n\nprogram.parse(process.argv);\n", "import * as esbuild from \"esbuild\";\nimport { spawn, ChildProcess } from \"child_process\";\nimport * as fs from \"fs/promises\";\nimport { WebSocketServer, WebSocket } from \"ws\";\nimport { loadConfig, mergeConfig, getDefaultConfig } from \"../config/config\";\nimport { buildGraph, useMyPlugin } from \"@/plugins\";\nimport { Store } from \"@/store\";\nimport {\n HtmlPreprocessor,\n HtmlPreprocessorOptions,\n createHotReloadTransformer,\n} from \"../html\";\n\ninterface VirtualFile {\n output: string;\n code: string;\n}\n\nconst virtualClientFiles: Record<string, VirtualFile> = {\n \"virtual:navigate\": {\n output: \"navigate\",\n code: `\nexport async function navigate(event, url) {\n event.preventDefault(); \n \n try {\n const { Navigate, getCurrentInjector } = await import(\"./src/client/client.js\");\n const injector = getCurrentInjector();\n \n if (injector) {\n const navigate = injector.resolve(Navigate);\n navigate.go(url);\n } else {\n window.location.href = url;\n }\n } catch (error) {\n console.error(\"Navigation error:\", error);\n window.location.href = url;\n }\n}\n `.trim(),\n },\n};\n\nfunction createVirtualModulePlugin(\n virtualFiles: Record<string, VirtualFile>\n): esbuild.Plugin {\n return {\n name: \"virtual-module\",\n setup(build) {\n build.onResolve({ filter: /^virtual:/ }, (args) => {\n if (virtualFiles[args.path]) {\n return {\n path: args.path,\n namespace: \"virtual\",\n };\n }\n });\n\n build.onLoad({ filter: /.*/, namespace: \"virtual\" }, (args) => {\n const virtualFile = virtualFiles[args.path];\n\n if (virtualFile) {\n return {\n contents: virtualFile.code,\n loader: \"js\",\n };\n }\n });\n },\n };\n}\n\nclass HotReloadManager {\n private wss: WebSocketServer | null = null;\n private clients: Set<WebSocket> = new Set();\n private port: number;\n\n constructor(port: number = 3001) {\n this.port = port;\n }\n\n start(): void {\n this.wss = new WebSocketServer({ port: this.port });\n\n this.wss.on(\"connection\", (ws: WebSocket) => {\n this.clients.add(ws);\n\n ws.on(\"close\", () => {\n this.clients.delete(ws);\n });\n\n ws.on(\"error\", (error) => {\n console.error(\"WebSocket error:\", error);\n this.clients.delete(ws);\n });\n });\n\n console.log(`Hot reload server listening on ws://localhost:${this.port}`);\n }\n\n reload(): void {\n const activeClients = Array.from(this.clients).filter(\n (client) => client.readyState === WebSocket.OPEN\n );\n\n if (activeClients.length === 0) {\n return;\n }\n\n activeClients.forEach((client) => {\n try {\n client.send(\"reload\");\n } catch (error) {\n console.error(\"Failed to send reload signal:\", error);\n this.clients.delete(client);\n }\n });\n }\n\n close(): void {\n if (this.wss) {\n this.clients.forEach((client) => client.close());\n this.wss.close();\n }\n }\n}\n\nasync function copyAndProcessHtml(\n hotReloadPort: number,\n preprocessorOptions?: HtmlPreprocessorOptions\n): Promise<void> {\n try {\n await fs.mkdir(\"public\", { recursive: true });\n\n const preprocessor = new HtmlPreprocessor({\n transformers: [createHotReloadTransformer(hotReloadPort)],\n injectScripts: [\"./navigate.js\"],\n ...preprocessorOptions,\n });\n\n await preprocessor.processFile(\n \"./src/client/index.html\",\n \"./public/index.html\"\n );\n } catch (error) {\n console.error(\"Failed to copy and process index.html:\", error);\n throw error;\n }\n}\n\nasync function cleanDirectories(): Promise<void> {\n await Promise.all([\n fs.rm(\"dist\", { recursive: true, force: true }),\n fs.rm(\"public\", { recursive: true, force: true }),\n ]);\n}\n\nfunction createRestartServerPlugin(\n serverProcess: { current: ChildProcess | null },\n onServerBuildComplete: () => void,\n hotReloadManager: HotReloadManager\n): esbuild.Plugin {\n return {\n name: \"restart-server\",\n setup(build) {\n build.onEnd((result) => {\n if (result.errors.length > 0) {\n console.error(\n `Server build failed with ${result.errors.length} error(s)`\n );\n return;\n }\n\n if (serverProcess.current) {\n serverProcess.current.kill(\"SIGTERM\");\n }\n\n serverProcess.current = spawn(\"node\", [\"dist/main.js\"], {\n stdio: \"inherit\",\n });\n\n serverProcess.current.on(\"error\", (err) => {\n console.error(\"Server process error:\", err);\n });\n\n setTimeout(() => {\n hotReloadManager.reload();\n }, 500);\n\n onServerBuildComplete();\n });\n },\n };\n}\n\nexport async function startDevServer(): Promise<void> {\n const store = Store.getInstance();\n const userConfig = await loadConfig();\n const config = mergeConfig(getDefaultConfig(), userConfig);\n\n const HOT_RELOAD_PORT = 3001;\n const hotReloadManager = new HotReloadManager(HOT_RELOAD_PORT);\n\n await cleanDirectories();\n await copyAndProcessHtml(HOT_RELOAD_PORT, config.htmlPreprocessor);\n\n hotReloadManager.start();\n\n const entryPoints = [\"src/main.ts\"];\n const clientFiles = new Set<string>([\"src/client/client.tsx\"]);\n const serverProcessRef = { current: null as ChildProcess | null };\n let clientCtx: esbuild.BuildContext | null = null;\n let virtualCtx: esbuild.BuildContext | null = null;\n let isShuttingDown = false;\n\n let pendingClientFiles = new Set<string>();\n let needsClientRebuild = false;\n\n async function buildVirtualFiles(): Promise<void> {\n if (isShuttingDown) return;\n\n try {\n if (virtualCtx) {\n await virtualCtx.dispose();\n virtualCtx = null;\n }\n\n const virtualEntryPoints: Record<string, string> = {};\n Object.entries(virtualClientFiles).forEach(([key, value]) => {\n virtualEntryPoints[value.output] = key;\n });\n\n virtualCtx = await esbuild.context({\n entryPoints: virtualEntryPoints,\n bundle: true,\n outdir: \"public\",\n platform: \"browser\",\n format: \"iife\",\n globalName: \"Orca\",\n sourcemap: config.build?.sourcemap ?? true,\n minify: config.build?.minify ?? false,\n plugins: [createVirtualModulePlugin(virtualClientFiles)],\n write: true,\n });\n\n await virtualCtx.rebuild();\n } catch (error) {\n console.error(\"Failed to build virtual files:\", error);\n throw error;\n }\n }\n\n async function rebuildClient(): Promise<void> {\n if (isShuttingDown) return;\n\n try {\n if (clientCtx) {\n await clientCtx.dispose();\n clientCtx = null;\n }\n\n if (clientFiles.size === 0) return;\n\n const entryPoints = Array.from(clientFiles);\n const graph = buildGraph(entryPoints);\n\n clientCtx = await esbuild.context({\n entryPoints,\n bundle: true,\n outdir: \"public\",\n outbase: \".\",\n platform: \"browser\",\n format: \"esm\",\n sourcemap: config.build?.sourcemap ?? true,\n splitting: true,\n minify: config.build?.minify ?? false,\n plugins: [\n ...(config.plugins?.map((cb) => cb(store)) || []),\n ...(config.client_plugins?.map((cb) => cb(store)) || []),\n useMyPlugin({\n graph,\n isServerBuild: false,\n onClientFound: () => {},\n }),\n {\n name: \"client-build-logger\",\n setup(build: any) {\n build.onEnd((result: any) => {\n if (result.errors.length > 0) {\n console.error(\n `Client build failed with ${result.errors.length} error(s)`\n );\n } else {\n console.log(\"Client build completed\");\n hotReloadManager.reload();\n }\n });\n },\n },\n ],\n write: true,\n });\n\n await clientCtx.watch();\n pendingClientFiles.clear();\n needsClientRebuild = false;\n } catch (error) {\n console.error(\"Failed to rebuild client:\", error);\n throw error;\n }\n }\n\n async function onServerBuildComplete(): Promise<void> {\n if (needsClientRebuild && pendingClientFiles.size > 0) {\n await rebuildClient();\n }\n }\n\n const serverCtx = await esbuild.context({\n entryPoints,\n bundle: true,\n outdir: config.build?.outDir || \"dist\",\n platform: \"node\",\n format: \"esm\",\n packages: \"external\",\n sourcemap: config.build?.sourcemap ?? true,\n minify: config.build?.minify ?? false,\n plugins: [\n ...(config.plugins?.map((cb) => cb(store)) || []),\n useMyPlugin({\n isServerBuild: true,\n onClientFound: async (filePath) => {\n const isNewFile = !clientFiles.has(filePath);\n\n if (isNewFile) {\n clientFiles.add(filePath);\n pendingClientFiles.add(filePath);\n needsClientRebuild = true;\n }\n },\n }),\n createRestartServerPlugin(\n serverProcessRef,\n onServerBuildComplete,\n hotReloadManager\n ),\n ],\n write: true,\n });\n\n async function shutdown(): Promise<void> {\n if (isShuttingDown) return;\n isShuttingDown = true;\n\n console.log(\"\\nShutting down dev server...\");\n\n try {\n if (serverProcessRef.current) {\n serverProcessRef.current.kill(\"SIGTERM\");\n await new Promise((resolve) => setTimeout(resolve, 1000));\n }\n\n await serverCtx.dispose();\n if (clientCtx) await clientCtx.dispose();\n if (virtualCtx) await virtualCtx.dispose();\n hotReloadManager.close();\n\n console.log(\"Dev server shut down successfully\");\n process.exit(0);\n } catch (error) {\n console.error(\"Error during shutdown:\", error);\n process.exit(1);\n }\n }\n\n process.on(\"SIGINT\", shutdown);\n process.on(\"SIGTERM\", shutdown);\n\n console.log(\"Starting dev server...\");\n\n await buildVirtualFiles();\n\n await serverCtx.watch();\n}\n", "import * as path from \"path\";\nimport { pathToFileURL } from \"url\";\nimport * as fs from \"fs/promises\";\nimport { Store } from \"@/store\";\nimport type { Plugin } from \"esbuild\";\nimport { HtmlPreprocessorOptions } from \"@/html\";\n\nexport type PodPlugin = (store: Store) => Plugin;\n\nexport interface PodConfig {\n name: string;\n build?: {\n outDir?: string;\n sourcemap?: boolean;\n minify?: boolean;\n };\n plugins?: Array<PodPlugin>;\n client_plugins?: Array<PodPlugin>;\n server_plugins?: Array<PodPlugin>;\n htmlPreprocessor?: HtmlPreprocessorOptions;\n}\n\nconst CONFIG_FILES = [\n \"pod.config.js\",\n \"pod.config.mjs\",\n \"pod.config.ts\",\n \"pod.config.mts\",\n];\n\nexport async function loadConfig(\n root: string = process.cwd()\n): Promise<PodConfig> {\n for (const configFile of CONFIG_FILES) {\n const configPath = path.resolve(root, configFile);\n\n try {\n await fs.access(configPath);\n\n if (configFile.endsWith(\".ts\") || configFile.endsWith(\".mts\")) {\n return await loadTsConfig(configPath);\n }\n\n return await loadJsConfig(configPath);\n } catch (error) {\n continue;\n }\n }\n\n return getDefaultConfig();\n}\n\nasync function loadJsConfig(configPath: string): Promise<PodConfig> {\n try {\n const fileUrl = pathToFileURL(configPath).href;\n\n const configModule = await import(`${fileUrl}?t=${Date.now()}`);\n\n const config = configModule.default || configModule;\n\n if (typeof config === \"function\") {\n return await config();\n }\n\n return config;\n } catch (error) {\n console.error(`\u274C Failed to load config from ${configPath}:`, error);\n throw error;\n }\n}\n\nasync function loadTsConfig(configPath: string): Promise<PodConfig> {\n try {\n const esbuild = await import(\"esbuild\");\n\n const result = await esbuild.build({\n entryPoints: [configPath],\n bundle: true,\n platform: \"node\",\n format: \"esm\",\n write: false,\n sourcemap: \"inline\",\n packages: \"external\",\n });\n\n const tempFile = `${configPath}.${Date.now()}.mjs`;\n await fs.writeFile(tempFile, result.outputFiles[0].text);\n\n try {\n const fileUrl = pathToFileURL(tempFile).href;\n\n const configModule = await import(fileUrl);\n\n const config = configModule.default || configModule;\n\n if (typeof config === \"function\") {\n return await config();\n }\n\n return config;\n } finally {\n await fs.unlink(tempFile).catch(() => {});\n }\n } catch (error) {\n console.error(\n `\u274C Failed to load TypeScript config from ${configPath}:`,\n error\n );\n throw error;\n }\n}\n\nexport function getDefaultConfig(): PodConfig {\n return {\n name: \"app\",\n build: {\n outDir: \"dist\",\n sourcemap: true,\n minify: false,\n },\n plugins: [],\n client_plugins: [],\n server_plugins: [],\n };\n}\n\nexport function mergeConfig(\n defaults: PodConfig,\n userConfig: PodConfig\n): PodConfig {\n return {\n name: userConfig.name,\n build: { ...defaults.build, ...userConfig.build },\n plugins: [...(defaults.plugins || []), ...(userConfig.plugins || [])],\n client_plugins: [\n ...(defaults.client_plugins || []),\n ...(userConfig.client_plugins || []),\n ],\n server_plugins: [\n ...(defaults.server_plugins || []),\n ...(userConfig.server_plugins || []),\n ],\n };\n}\n", "export * from \"./my\";\nexport * from \"./analyzers/graph\";\nexport * from \"./css\";\n", "import type { Plugin, OnLoadArgs, OnLoadResult } from \"esbuild\";\nimport * as fs from \"fs/promises\";\nimport { ReactConfig, transform } from \"@swc/core\";\nimport * as babel from \"@babel/core\";\nimport * as path from \"path\";\nimport { expandMacros } from \"@/macros\";\nimport { DependencyGraph, FileNode } from \"./analyzers/graph\";\nimport { generateController } from \"./generators/generate_controller\";\nimport { generateServerStub } from \"./generators/tsx_server_stub\";\nimport { j2d } from \"./transformers/j2d\";\nimport { generateServerComponent } from \"./generators/generate_server_component\";\nimport { generateRpcStub } from \"./generators/generate_rpc\";\nimport { Store } from \"@/store\";\n\ninterface MyPluginParams {\n isServerBuild: boolean;\n graph?: DependencyGraph;\n onClientFound: (path: string) => void;\n}\n\ntype FileDirective = \"interactive\" | \"public\" | null;\n\ninterface FileMetadata {\n source: string;\n path: string;\n isTsx: boolean;\n directive: FileDirective;\n isPublicFile: boolean;\n isInteractiveFile: boolean;\n}\n\nasync function swcTransform(\n source: string,\n pathStr: string,\n tsx: boolean = false,\n react?: ReactConfig\n): Promise<OnLoadResult> {\n const resolveDir = path.dirname(pathStr);\n\n const swcResult = await transform(source, {\n filename: pathStr,\n jsc: {\n parser: {\n syntax: \"typescript\",\n tsx,\n decorators: true,\n },\n transform: {\n legacyDecorator: true,\n decoratorMetadata: true,\n react,\n },\n target: \"esnext\",\n },\n isModule: true,\n });\n\n return {\n contents: swcResult.code,\n loader: \"js\",\n resolveDir,\n };\n}\n\nfunction parseFileMetadata(source: string, path: string): FileMetadata {\n const isTsx = path.endsWith(\".tsx\");\n const isInteractiveFile =\n source.startsWith('\"use interactive\"') ||\n source.startsWith(\"'use interactive'\");\n const isPublicFile =\n source.startsWith('\"use public\"') || source.startsWith(\"'use public'\");\n\n let directive: FileDirective = null;\n if (isInteractiveFile) directive = \"interactive\";\n else if (isPublicFile) directive = \"public\";\n\n return {\n source,\n path,\n isTsx,\n directive,\n isPublicFile,\n isInteractiveFile,\n };\n}\n\nclass ServerBuildTransformer {\n async transformPublicFile(\n source: string,\n path: string\n ): Promise<OnLoadResult> {\n const controllerCode = generateController(path, source);\n\n if (controllerCode) {\n source = `${source}\\n\\n${controllerCode}\\n`;\n }\n\n return swcTransform(source, path);\n }\n\n async transformRegularTypeScript(\n source: string,\n path: string,\n isPublic: boolean\n ): Promise<OnLoadResult> {\n if (isPublic) {\n return this.transformPublicFile(source, path);\n }\n return swcTransform(source, path);\n }\n\n async transformServerTsx(\n source: string,\n path: string\n ): Promise<OnLoadResult> {\n return swcTransform(source, path, true, {\n runtime: \"automatic\",\n importSource: \"@kithinji/orca\",\n });\n }\n\n async transformInteractiveTsxStub(\n source: string,\n path: string\n ): Promise<OnLoadResult> {\n const stubSource = generateServerStub(path, source);\n\n return swcTransform(stubSource, path);\n }\n\n async process(\n metadata: FileMetadata,\n onClientFound: (path: string) => void\n ): Promise<OnLoadResult> {\n const expandedSource = await expandMacros(metadata.source, metadata.path);\n\n const expandedMetadata = { ...metadata, source: expandedSource };\n const { source, path, isTsx, isInteractiveFile, isPublicFile } =\n expandedMetadata;\n\n if (isTsx) {\n if (isInteractiveFile) {\n onClientFound(path);\n const clientCode = await this.transformInteractiveTsxStub(source, path);\n\n const store = Store.getInstance();\n\n store.set(path, clientCode.contents);\n\n return clientCode;\n }\n return this.transformServerTsx(source, path);\n }\n\n return this.transformRegularTypeScript(source, path, isPublicFile);\n }\n}\n\nclass ClientBuildTransformer {\n async transformInteractiveTsx(\n source: string,\n path: string\n ): Promise<OnLoadResult> {\n const swcResult = await swcTransform(source, path, true, {\n runtime: \"preserve\",\n });\n\n const babelResult = await babel.transformAsync(\n swcResult.contents as string,\n {\n filename: path,\n sourceType: \"module\",\n plugins: [j2d],\n parserOpts: {\n plugins: [\"jsx\"],\n },\n configFile: false,\n babelrc: false,\n }\n );\n\n return {\n contents: babelResult?.code || \"\",\n loader: \"js\",\n resolveDir: swcResult.resolveDir,\n };\n }\n\n async transformServerComponent(\n node: FileNode,\n source: string,\n path: string\n ): Promise<OnLoadResult> {\n const scSource = generateServerComponent(path, source);\n return swcTransform(scSource, path);\n }\n\n async transformPublicFileRpc(\n node: FileNode,\n source: string,\n path: string\n ): Promise<OnLoadResult> {\n const stubSource = generateRpcStub(path, source);\n return swcTransform(stubSource, path);\n }\n\n async transformSharedCode(\n source: string,\n path: string\n ): Promise<OnLoadResult> {\n return swcTransform(source, path);\n }\n\n async process(node: FileNode, metadata: FileMetadata): Promise<OnLoadResult> {\n const expandedSource = await expandMacros(metadata.source, metadata.path);\n\n const expandedMetadata = { ...metadata, source: expandedSource };\n const { source, path, isTsx, directive } = expandedMetadata;\n\n if (isTsx) {\n if (directive === \"interactive\") {\n return this.transformInteractiveTsx(source, path);\n } else if (directive === null) {\n return this.transformServerComponent(node, source, path);\n } else {\n throw new Error(\n `Unexpected directive \"${directive}\" for TSX file: ${path}`\n );\n }\n }\n\n if (directive === \"public\") {\n return this.transformPublicFileRpc(node, source, path);\n }\n\n if (directive === null) {\n return this.transformSharedCode(source, path);\n }\n\n return {\n contents: source,\n loader: isTsx ? \"tsx\" : \"ts\",\n };\n }\n}\n\nexport function useMyPlugin(options: MyPluginParams): Plugin {\n const serverTransformer = new ServerBuildTransformer();\n const clientTransformer = new ClientBuildTransformer();\n\n return {\n name: \"Orca\",\n setup(build) {\n build.onLoad(\n { filter: /\\.tsx?$/ },\n async (args: OnLoadArgs): Promise<OnLoadResult> => {\n const source = await fs.readFile(args.path, \"utf8\");\n const metadata = parseFileMetadata(source, args.path);\n\n if (options.isServerBuild) {\n return serverTransformer.process(metadata, options.onClientFound);\n }\n\n if (!options.graph) {\n throw new Error(\n \"Dependency graph is required for client build but was not provided\"\n );\n }\n\n const node = options.graph[args.path];\n\n if (!node) {\n console.log(`File node not found in depend graph: ${args.path}`);\n throw new Error(\"900\");\n }\n\n return clientTransformer.process(node, metadata);\n }\n );\n },\n };\n}\n", "export * from \"./expand_macros\";\nexport * from \"./macro_executer\";\n", "import ts from \"typescript\";\nimport path from \"path\";\nimport Module from \"node:module\";\nimport { macroExecuter } from \"./macro_executer\";\nimport { Store } from \"@/store\";\n\nexport interface MacroContext {\n node: ts.CallExpression;\n sourceFile: ts.SourceFile;\n ts: typeof ts;\n factory: ts.NodeFactory;\n store: Store;\n graph: MacroDependencyGraph;\n get program(): ts.Program;\n get checker(): ts.TypeChecker;\n error(msg: string): never;\n resolveNodeValue(node: ts.Node): any;\n resolveIdentifier(identifier: ts.Identifier): ts.Node;\n}\n\ninterface MacroNode {\n key: string;\n variableName: string;\n node: ts.CallExpression;\n sourceFile: ts.SourceFile;\n filePath: string;\n dependencies: Set<string>;\n astResult?: ts.Node;\n computed: boolean;\n}\n\nclass MacroDependencyGraph {\n private nodes = new Map<string, MacroNode>();\n private projectRoot: string;\n private typeChecker?: ts.TypeChecker;\n\n constructor(projectRoot: string) {\n this.projectRoot = projectRoot;\n }\n\n setTypeChecker(checker: ts.TypeChecker) {\n this.typeChecker = checker;\n }\n\n createKey(sourceFile: ts.SourceFile, variableName: string): string {\n const relativePath = path.relative(this.projectRoot, sourceFile.fileName);\n const normalized = relativePath.replace(/\\\\/g, \"/\");\n return `${normalized}:${variableName}`;\n }\n\n addNode(\n key: string,\n variableName: string,\n node: ts.CallExpression,\n sourceFile: ts.SourceFile\n ) {\n if (!this.nodes.has(key)) {\n this.nodes.set(key, {\n key,\n variableName,\n node,\n sourceFile,\n filePath: sourceFile.fileName,\n dependencies: new Set(),\n astResult: undefined,\n computed: false,\n });\n }\n }\n\n getNode(key: string): MacroNode | undefined {\n return this.nodes.get(key);\n }\n\n addDependency(fromKey: string, toKey: string) {\n const node = this.nodes.get(fromKey);\n if (node) {\n node.dependencies.add(toKey);\n }\n }\n\n setResult(key: string, astResult: ts.Node) {\n const node = this.nodes.get(key);\n if (node) {\n node.computed = true;\n node.astResult = astResult;\n }\n }\n\n getResult(key: string): ts.Node | undefined {\n return this.nodes.get(key)?.astResult;\n }\n\n isComputed(key: string): boolean {\n return this.nodes.get(key)?.computed ?? false;\n }\n\n topologicalSort(): string[] {\n const visited = new Set<string>();\n const inProgress = new Set<string>();\n const sorted: string[] = [];\n\n const visit = (key: string, path: string[] = []) => {\n if (visited.has(key)) return;\n\n if (inProgress.has(key)) {\n const cycle = [...path, key].join(\" -> \");\n throw new Error(`Circular macro dependency detected: ${cycle}`);\n }\n\n const node = this.nodes.get(key);\n if (!node) return;\n\n inProgress.add(key);\n\n for (const depKey of node.dependencies) {\n visit(depKey, [...path, key]);\n }\n\n inProgress.delete(key);\n visited.add(key);\n sorted.push(key);\n };\n\n for (const key of this.nodes.keys()) {\n visit(key);\n }\n\n return sorted;\n }\n\n clear() {\n this.nodes.clear();\n }\n\n getNodesForFile(filePath: string): MacroNode[] {\n return Array.from(this.nodes.values()).filter(\n (node) => node.filePath === filePath\n );\n }\n}\n\nlet globalGraph: MacroDependencyGraph | null = null;\n\nexport function getGlobalMacroGraph(projectRoot: string): MacroDependencyGraph {\n if (!globalGraph) {\n globalGraph = new MacroDependencyGraph(projectRoot);\n }\n return globalGraph;\n}\n\nexport function resetGlobalMacroGraph() {\n globalGraph = null;\n}\n\nfunction resolveImportSpecifier(\n importPath: string,\n fromFile: string,\n compilerOptions: ts.CompilerOptions\n): string | undefined {\n const resolved = ts.resolveModuleName(\n importPath,\n fromFile,\n compilerOptions,\n ts.sys\n );\n\n if (resolved.resolvedModule?.resolvedFileName) {\n return resolved.resolvedModule.resolvedFileName;\n }\n\n try {\n const requireFromFile = Module.createRequire(fromFile);\n return requireFromFile.resolve(importPath);\n } catch (e) {\n return undefined;\n }\n}\n\nfunction resolveImportFullPath(\n symbolName: string,\n sourceFile: ts.SourceFile,\n compilerOptions: ts.CompilerOptions\n): { importPath: string; resolvedPath: string | undefined } | undefined {\n let importPath: string | undefined;\n\n sourceFile.forEachChild((node) => {\n if (!ts.isImportDeclaration(node) || !node.importClause) return;\n\n const { namedBindings, name } = node.importClause;\n\n if (name && name.text === symbolName) {\n importPath = (node.moduleSpecifier as ts.StringLiteral).text;\n }\n\n if (namedBindings && ts.isNamedImports(namedBindings)) {\n for (const specifier of namedBindings.elements) {\n const importedName = specifier.name.text;\n if (importedName === symbolName) {\n importPath = (node.moduleSpecifier as ts.StringLiteral).text;\n }\n }\n }\n\n if (namedBindings && ts.isNamespaceImport(namedBindings)) {\n if (symbolName.startsWith(namedBindings.name.text + \".\")) {\n importPath = (node.moduleSpecifier as ts.StringLiteral).text;\n }\n }\n });\n\n if (!importPath) return undefined;\n\n const resolvedPath = resolveImportSpecifier(\n importPath,\n sourceFile.fileName,\n compilerOptions\n );\n\n return {\n importPath: importPath.startsWith(\".\") ? resolvedPath! : importPath,\n resolvedPath,\n };\n}\n\nfunction isNpmPackage(importPath: string): boolean {\n return (\n !importPath.startsWith(\".\") &&\n !importPath.startsWith(\"/\") &&\n !path.isAbsolute(importPath)\n );\n}\n\nfunction findVariableDeclarationInFile(\n variableName: string,\n sourceFile: ts.SourceFile\n): ts.VariableDeclaration | undefined {\n let found: ts.VariableDeclaration | undefined;\n\n function visit(node: ts.Node) {\n if (found) return;\n\n if (ts.isVariableDeclaration(node)) {\n if (ts.isIdentifier(node.name) && node.name.text === variableName) {\n found = node;\n return;\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return found;\n}\n\nexport function extractValueFromNode(node: ts.Node): any | undefined {\n if (ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node)) {\n return node.text;\n }\n if (ts.isNumericLiteral(node)) return Number(node.text);\n if (node.kind === ts.SyntaxKind.TrueKeyword) return true;\n if (node.kind === ts.SyntaxKind.FalseKeyword) return false;\n if (node.kind === ts.SyntaxKind.NullKeyword) return null;\n if (node.kind === ts.SyntaxKind.UndefinedKeyword) return undefined;\n\n if (ts.isTemplateExpression(node)) {\n let result = node.head.text;\n for (const span of node.templateSpans) {\n const exprValue = extractValueFromNode(span.expression);\n result += String(exprValue) + span.literal.text;\n }\n return result;\n }\n\n if (ts.isObjectLiteralExpression(node)) {\n const obj: any = {};\n for (const prop of node.properties) {\n if (ts.isPropertyAssignment(prop)) {\n const key = ts.isIdentifier(prop.name)\n ? prop.name.text\n : ts.isStringLiteral(prop.name)\n ? prop.name.text\n : ts.isNumericLiteral(prop.name)\n ? prop.name.text\n : ts.isComputedPropertyName(prop.name)\n ? extractValueFromNode(prop.name.expression)\n : undefined;\n\n if (key !== undefined) {\n obj[key] = extractValueFromNode(prop.initializer);\n }\n } else if (ts.isShorthandPropertyAssignment(prop)) {\n obj[prop.name.text] = prop.name.text;\n } else if (ts.isSpreadAssignment(prop)) {\n const spread = extractValueFromNode(prop.expression);\n if (typeof spread === \"object\" && spread !== null) {\n Object.assign(obj, spread);\n }\n }\n }\n return obj;\n }\n\n if (ts.isArrayLiteralExpression(node)) {\n return node.elements\n .map((el) => {\n if (ts.isSpreadElement(el)) {\n const spread = extractValueFromNode(el.expression);\n return Array.isArray(spread) ? spread : [spread];\n }\n return extractValueFromNode(el);\n })\n .flat();\n }\n\n if (ts.isPrefixUnaryExpression(node)) {\n const operand = extractValueFromNode(node.operand);\n switch (node.operator) {\n case ts.SyntaxKind.MinusToken:\n return -operand;\n case ts.SyntaxKind.PlusToken:\n return +operand;\n case ts.SyntaxKind.ExclamationToken:\n return !operand;\n case ts.SyntaxKind.TildeToken:\n return ~operand;\n }\n }\n\n if (ts.isBinaryExpression(node)) {\n const left = extractValueFromNode(node.left);\n const right = extractValueFromNode(node.right);\n\n switch (node.operatorToken.kind) {\n case ts.SyntaxKind.PlusToken:\n return left + right;\n case ts.SyntaxKind.MinusToken:\n return left - right;\n case ts.SyntaxKind.AsteriskToken:\n return left * right;\n case ts.SyntaxKind.SlashToken:\n return left / right;\n case ts.SyntaxKind.PercentToken:\n return left % right;\n case ts.SyntaxKind.AsteriskAsteriskToken:\n return left ** right;\n case ts.SyntaxKind.EqualsEqualsToken:\n return left == right;\n case ts.SyntaxKind.EqualsEqualsEqualsToken:\n return left === right;\n case ts.SyntaxKind.ExclamationEqualsToken:\n return left != right;\n case ts.SyntaxKind.ExclamationEqualsEqualsToken:\n return left !== right;\n case ts.SyntaxKind.LessThanToken:\n return left < right;\n case ts.SyntaxKind.LessThanEqualsToken:\n return left <= right;\n case ts.SyntaxKind.GreaterThanToken:\n return left > right;\n case ts.SyntaxKind.GreaterThanEqualsToken:\n return left >= right;\n case ts.SyntaxKind.AmpersandAmpersandToken:\n return left && right;\n case ts.SyntaxKind.BarBarToken:\n return left || right;\n case ts.SyntaxKind.QuestionQuestionToken:\n return left ?? right;\n }\n }\n\n if (ts.isParenthesizedExpression(node)) {\n return extractValueFromNode(node.expression);\n }\n\n if (ts.isConditionalExpression(node)) {\n const condition = extractValueFromNode(node.condition);\n return condition\n ? extractValueFromNode(node.whenTrue)\n : extractValueFromNode(node.whenFalse);\n }\n\n if (ts.isPropertyAccessExpression(node)) {\n const obj = extractValueFromNode(node.expression);\n const propName = node.name.text;\n return obj?.[propName];\n }\n\n if (ts.isElementAccessExpression(node)) {\n const obj = extractValueFromNode(node.expression);\n const index = extractValueFromNode(node.argumentExpression);\n return obj?.[index];\n }\n\n return undefined;\n}\n\nfunction createNodeResolver(\n graph: MacroDependencyGraph,\n currentFileKey: string,\n sourceFile: ts.SourceFile,\n compilerOptions: ts.CompilerOptions\n) {\n const trackedDependencies: string[] = [];\n\n function resolveIdentifierToNode(identifier: ts.Identifier): ts.Node {\n const name = identifier.text;\n\n // Look for local variable declaration\n const declaration = findVariableDeclarationInFile(name, sourceFile);\n\n if (declaration && declaration.initializer) {\n const varStatement = declaration.parent.parent as ts.VariableStatement;\n const isConst = varStatement.declarationList.flags & ts.NodeFlags.Const;\n\n if (!isConst) {\n throw new Error(\n `Macro argument '${name}' must be a const variable. let/var are not allowed.`\n );\n }\n\n // Check if it's a macro call\n if (ts.isCallExpression(declaration.initializer)) {\n const expr = declaration.initializer.expression;\n\n if (ts.isIdentifier(expr) && expr.text.endsWith(\"$\")) {\n const depKey = graph.createKey(sourceFile, name);\n trackedDependencies.push(depKey);\n\n const result = graph.getResult(depKey);\n if (result !== undefined) {\n return result;\n }\n\n throw new Error(\n `Macro dependency '${name}' has not been computed yet. This should not happen.`\n );\n }\n }\n\n return declaration.initializer;\n }\n\n // Try to resolve from imports\n const resolved = resolveImportFullPath(name, sourceFile, compilerOptions);\n\n if (resolved) {\n if (isNpmPackage(resolved.importPath)) {\n throw new Error(\n `Cannot resolve identifier '${name}' from npm package '${resolved.importPath}'. ` +\n `Macro arguments from npm packages must be constants that can be evaluated at compile time.`\n );\n }\n\n if (!resolved.resolvedPath) {\n throw new Error(\n `Could not resolve import path: ${resolved.importPath}`\n );\n }\n\n const importedSource = ts.sys.readFile(resolved.resolvedPath);\n if (!importedSource) {\n throw new Error(\n `Could not read imported file: ${resolved.resolvedPath}`\n );\n }\n\n const importedSourceFile = ts.createSourceFile(\n resolved.resolvedPath,\n importedSource,\n ts.ScriptTarget.Latest,\n true\n );\n\n const importedDecl = findVariableDeclarationInFile(\n name,\n importedSourceFile\n );\n\n if (importedDecl && importedDecl.initializer) {\n // Check if it's a macro call\n if (ts.isCallExpression(importedDecl.initializer)) {\n const expr = importedDecl.initializer.expression;\n if (ts.isIdentifier(expr) && expr.text.endsWith(\"$\")) {\n const depKey = graph.createKey(importedSourceFile, name);\n trackedDependencies.push(depKey);\n\n const result = graph.getResult(depKey);\n if (result !== undefined) {\n return result;\n }\n\n throw new Error(\n `Cross-file macro dependency '${name}' from '${resolved.resolvedPath}' needs to be computed first.`\n );\n }\n }\n\n return importedDecl.initializer;\n }\n }\n\n throw new Error(\n `Could not resolve identifier '${name}'. Make sure it's a const variable or imported constant.`\n );\n }\n\n function resolveNodeValue(node: ts.Node): any {\n if (ts.isIdentifier(node)) {\n const resolvedNode = resolveIdentifierToNode(node);\n return extractValueFromNode(resolvedNode);\n }\n return extractValueFromNode(node);\n }\n\n return {\n resolveIdentifierToNode,\n resolveNodeValue,\n getTrackedDependencies: () => trackedDependencies,\n };\n}\n\nexport async function expandMacros(\n source: string,\n filePath: string,\n projectRoot: string = process.cwd()\n): Promise<string> {\n if (!source.includes(\"$(\") && !source.includes(\"$`\")) {\n return source;\n }\n\n const compilerOptions: ts.CompilerOptions = {\n module: ts.ModuleKind.ESNext,\n target: ts.ScriptTarget.Latest,\n moduleResolution: ts.ModuleResolutionKind.NodeNext,\n };\n\n const sourceFile = ts.createSourceFile(\n filePath,\n source,\n ts.ScriptTarget.Latest,\n true,\n filePath.endsWith(\".tsx\") ? ts.ScriptKind.TSX : ts.ScriptKind.TS\n );\n\n const graph = getGlobalMacroGraph(projectRoot);\n\n const getProgram = () =>\n ts.createProgram([filePath], {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n });\n\n const getTypeChecker = () => getProgram()?.getTypeChecker();\n\n // Discover all macro calls\n function discoverMacros(node: ts.Node) {\n if (ts.isVariableDeclaration(node) && node.initializer) {\n if (\n ts.isCallExpression(node.initializer) &&\n ts.isIdentifier(node.initializer.expression) &&\n node.initializer.expression.text.endsWith(\"$\")\n ) {\n if (ts.isIdentifier(node.name)) {\n const variableName = node.name.text;\n const key = graph.createKey(sourceFile, variableName);\n graph.addNode(key, variableName, node.initializer, sourceFile);\n }\n }\n }\n ts.forEachChild(node, discoverMacros);\n }\n\n discoverMacros(sourceFile);\n\n // Build dependency graph\n const fileNodes = graph.getNodesForFile(filePath);\n\n for (const macroNode of fileNodes) {\n if (graph.isComputed(macroNode.key)) continue;\n\n const resolver = createNodeResolver(\n graph,\n macroNode.key,\n macroNode.sourceFile,\n compilerOptions\n );\n\n try {\n // Walk through arguments to discover dependencies\n for (const arg of macroNode.node.arguments) {\n function visitForDeps(n: ts.Node) {\n if (ts.isIdentifier(n)) {\n try {\n resolver.resolveIdentifierToNode(n);\n } catch (e) {\n // Ignore resolution errors during dependency discovery\n }\n }\n ts.forEachChild(n, visitForDeps);\n }\n visitForDeps(arg);\n }\n\n const deps = resolver.getTrackedDependencies();\n for (const dep of deps) {\n graph.addDependency(macroNode.key, dep);\n }\n } catch (e) {\n // Ignore errors during dependency discovery\n }\n }\n\n // Execute macros in topological order\n const sortedKeys = graph.topologicalSort();\n\n for (const key of sortedKeys) {\n const macroNode = graph.getNode(key);\n if (!macroNode || graph.isComputed(key)) continue;\n\n const node = macroNode.node;\n const name = (node.expression as ts.Identifier).text;\n\n const resolved = resolveImportFullPath(\n name,\n macroNode.sourceFile,\n compilerOptions\n );\n\n if (!resolved) {\n throw new Error(`Could not resolve macro import for '${name}'`);\n }\n\n const macro = macroExecuter().getMacro(resolved.importPath, name);\n\n if (!macro) {\n throw new Error(`Could not get macro '${name}' for key '${key}'`);\n }\n\n const resolver = createNodeResolver(\n graph,\n key,\n macroNode.sourceFile,\n compilerOptions\n );\n\n const macroContext: MacroContext = {\n node,\n sourceFile: macroNode.sourceFile,\n ts,\n store: Store.getInstance(),\n factory: ts.factory,\n graph,\n get program() {\n return getProgram();\n },\n get checker() {\n return getTypeChecker();\n },\n error: (msg: string) => {\n throw new Error(msg);\n },\n resolveNodeValue: resolver.resolveNodeValue,\n resolveIdentifier: resolver.resolveIdentifierToNode,\n };\n\n try {\n // Pass AST nodes directly to macro\n const result = macro(...node.arguments, macroContext);\n\n if (!result || typeof result !== \"object\" || !(\"kind\" in result)) {\n throw new Error(`Macro '${name}' must return a TypeScript AST node`);\n }\n\n graph.setResult(key, result);\n } catch (e: any) {\n console.error(`Macro '${name}' execution failed: ${e?.message ?? e}`);\n throw e;\n }\n }\n\n // Transform the AST\n const transformer: ts.TransformerFactory<ts.SourceFile> = (context) => {\n const visit = (node: ts.Node): ts.Node => {\n if (ts.isVariableDeclaration(node) && node.initializer) {\n if (\n ts.isCallExpression(node.initializer) &&\n ts.isIdentifier(node.initializer.expression) &&\n node.initializer.expression.text.endsWith(\"$\") &&\n ts.isIdentifier(node.name)\n ) {\n const key = graph.createKey(sourceFile, node.name.text);\n const macroNode = graph.getNode(key);\n\n if (macroNode && graph.isComputed(key)) {\n const result = graph.getResult(key)!;\n\n return context.factory.updateVariableDeclaration(\n node,\n node.name,\n node.exclamationToken,\n node.type,\n result as any\n );\n }\n }\n }\n\n if (ts.isCallExpression(node) && ts.isIdentifier(node.expression)) {\n const name = node.expression.text;\n\n if (name.endsWith(\"$\")) {\n const resolved = resolveImportFullPath(\n name,\n sourceFile,\n compilerOptions\n );\n\n if (resolved) {\n const macro = macroExecuter().getMacro(resolved.importPath, name);\n\n if (macro) {\n const tempKey = `${graph.createKey(sourceFile, \"__temp__\")}:${\n node.pos\n }`;\n const resolver = createNodeResolver(\n graph,\n tempKey,\n sourceFile,\n compilerOptions\n );\n\n const macroContext: MacroContext = {\n node,\n sourceFile,\n ts,\n graph,\n store: Store.getInstance(),\n factory: context.factory,\n get program() {\n return getProgram();\n },\n get checker() {\n return getTypeChecker();\n },\n error: (msg: string) => {\n throw new Error(msg);\n },\n resolveNodeValue: resolver.resolveNodeValue,\n resolveIdentifier: resolver.resolveIdentifierToNode,\n };\n\n try {\n // Pass AST nodes directly to macro\n const result = macro(...node.arguments, macroContext);\n\n if (\n !result ||\n typeof result !== \"object\" ||\n !(\"kind\" in result)\n ) {\n throw new Error(\n `Macro '${name}' must return a TypeScript AST node`\n );\n }\n\n return result;\n } catch (e: any) {\n console.log(\n `Macro '${name}' execution failed: ${e?.message ?? e}`\n );\n return node;\n }\n }\n }\n }\n }\n\n return ts.visitEachChild(node, visit, context);\n };\n\n return (sf) => ts.visitNode(sf, visit) as ts.SourceFile;\n };\n\n const result = ts.transform(sourceFile, [transformer]);\n const output = ts.createPrinter().printFile(result.transformed[0]);\n result.dispose();\n\n return output;\n}\n", "import * as vm from \"node:vm\";\nimport * as esbuild from \"esbuild\";\nimport * as path from \"node:path\";\nimport Module from \"node:module\";\nimport * as fs from \"node:fs\";\n\ntype MacroFunction = Function & { name: string };\ntype LoadedMacros = Record<string, MacroFunction>;\n\nexport class MacroExecutor {\n private cache = new Map<string, LoadedMacros>();\n\n getMacro(specifier: string, macroName?: string): MacroFunction {\n if (!this.cache.has(specifier)) {\n this.load(specifier);\n }\n const macros = this.cache.get(specifier)!;\n if (macroName) {\n const fn = macros[macroName];\n if (!fn) {\n throw new Error(`Macro \"${macroName}\" not found in ${specifier}`);\n }\n return fn;\n }\n const names = Object.keys(macros);\n if (names.length === 1) {\n return macros[names[0]];\n }\n if (macros.default) {\n return macros.default;\n }\n throw new Error(`Multiple macros in ${specifier}: ${names.join(\", \")}`);\n }\n\n private load(specifier: string) {\n const requireFromHere = Module.createRequire(\n process.cwd() + \"/package.json\"\n );\n const entry = requireFromHere.resolve(specifier);\n\n const { outputFiles } = esbuild.buildSync({\n entryPoints: [entry],\n bundle: true,\n write: false,\n platform: \"node\",\n format: \"cjs\",\n external: [\n ...Module.builtinModules,\n ...Module.builtinModules.map((m) => `node:${m}`),\n ],\n target: \"node18\",\n mainFields: [\"module\", \"main\"],\n conditions: [\"node\", \"import\", \"require\"],\n packages: \"bundle\",\n logLevel: \"warning\",\n });\n\n const code = outputFiles[0].text;\n const sandboxRequire = Module.createRequire(entry);\n\n const sandbox: any = {\n // Module system\n module: { exports: {} },\n exports: {},\n require: sandboxRequire,\n\n console,\n Buffer,\n URL,\n URLSearchParams,\n TextEncoder,\n TextDecoder,\n atob,\n btoa,\n\n __filename: entry,\n __dirname: path.dirname(entry),\n\n process: {\n env: process.env,\n cwd: process.cwd,\n version: process.version,\n versions: process.versions,\n platform: process.platform,\n arch: process.arch,\n argv: process.argv,\n execPath: process.execPath,\n pid: process.pid,\n },\n\n setTimeout,\n setInterval,\n setImmediate,\n clearTimeout,\n clearInterval,\n clearImmediate,\n\n Promise,\n\n Object,\n Array,\n String,\n Number,\n Boolean,\n Date,\n Math,\n JSON,\n RegExp,\n Error,\n TypeError,\n RangeError,\n SyntaxError,\n Map,\n Set,\n WeakMap,\n WeakSet,\n Symbol,\n BigInt,\n Proxy,\n Reflect,\n };\n\n sandbox.global = sandbox;\n sandbox.globalThis = sandbox;\n\n const context = vm.createContext(sandbox, {\n name: `macro-${path.basename(entry)}`,\n codeGeneration: {\n strings: true,\n wasm: false,\n },\n });\n\n try {\n const script = new vm.Script(code, {\n filename: entry,\n lineOffset: 0,\n columnOffset: 0,\n });\n\n script.runInContext(context, {\n breakOnSigint: true,\n });\n } catch (error) {\n throw new Error(\n `Failed to execute macro from ${specifier}: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n\n const macros: LoadedMacros = {};\n const exports = sandbox.module.exports;\n\n if (typeof exports === \"function\") {\n macros.default = exports;\n } else if (typeof exports === \"object\" && exports !== null) {\n for (const [name, value] of Object.entries(exports)) {\n if (typeof value === \"function\" && name.endsWith(\"$\")) {\n macros[name] = value as MacroFunction;\n }\n }\n\n if (typeof exports.default === \"function\") {\n macros.default = exports.default;\n }\n }\n\n if (!Object.keys(macros).length) {\n throw new Error(`No macros found in ${specifier}`);\n }\n\n this.cache.set(specifier, macros);\n }\n\n clearCache(specifier?: string) {\n if (specifier) {\n this.cache.delete(specifier);\n } else {\n this.cache.clear();\n }\n }\n}\n\nconst macroExecutor = new MacroExecutor();\n\nexport function macroExecuter(): MacroExecutor {\n return macroExecutor;\n}\n", "export * from \"./store\";\n", "export class Store {\n private static instance: Store;\n private containers: Map<string, unknown[]> = new Map();\n\n private constructor() {}\n\n public static getInstance(): Store {\n if (!Store.instance) {\n Store.instance = new Store();\n }\n return Store.instance;\n }\n\n public set<T>(key: string, value: T): void {\n const existing = this.containers.get(key) || [];\n existing.push(value);\n this.containers.set(key, existing);\n }\n\n public get<T>(key: string): T[] | undefined {\n const values = this.containers.get(key);\n return values as T[] | undefined;\n }\n\n public has(key: string): boolean {\n return this.containers.has(key);\n }\n\n public delete(key: string): boolean {\n return this.containers.delete(key);\n }\n\n public clear(): void {\n this.containers.clear();\n }\n\n public keys(): IterableIterator<string> {\n return this.containers.keys();\n }\n\n public get size(): number {\n return this.containers.size;\n }\n}\n", "import * as path from \"path\";\nimport {\n capitalize,\n extractServiceInfo,\n GenerationError,\n parseTypeScript,\n ServiceInfo,\n ServiceMethod,\n serviceNameToPath,\n StreamType,\n toInstanceName,\n validateServiceInfo,\n} from \"./utils\";\n\nexport function generateController(\n filePath: string,\n code: string\n): string | null {\n try {\n const ast = parseTypeScript(filePath, code);\n const serviceInfo = extractServiceInfo(ast, filePath, true);\n\n if (!serviceInfo || !serviceInfo.hasInjectable) {\n return null;\n }\n\n validateServiceInfo(serviceInfo, filePath);\n return generateControllerCode(serviceInfo, filePath);\n } catch (error) {\n if ((error as any).type) {\n throw error;\n }\n throw {\n type: \"parse\",\n message: `Failed to parse TypeScript file: ${(error as Error).message}`,\n filePath,\n details: error,\n } as GenerationError;\n }\n}\n\nfunction generateControllerCode(\n serviceInfo: ServiceInfo,\n filePath: string\n): string {\n const serviceName = serviceInfo.className;\n const controllerName = serviceName.replace(/Service$/, \"GenController\");\n const serviceImportPath = getImportPath(filePath);\n const controllerPath = serviceNameToPath(serviceName);\n\n const imports = generateImports(serviceInfo, serviceName, serviceImportPath);\n const methods = generateMethods(serviceInfo);\n const serviceInstance = toInstanceName(serviceName);\n\n return `${imports}\n\n@Controller(\"/${controllerPath}\", {\n providedIn: \"root\",\n})\nexport class ${controllerName} {\n constructor(\n private readonly ${serviceInstance}: ${serviceName}\n ) {}\n\n${methods}\n}`;\n}\n\n\nfunction getImportPath(filePath: string): string {\n const basename = path.basename(filePath);\n return `./${basename.replace(/\\.tsx?$/, \"\")}`;\n}\n\nfunction generateImports(\n serviceInfo: ServiceInfo,\n serviceName: string,\n serviceImportPath: string\n): string {\n const importGroups = new Map<string, Set<string>>();\n\n const registerIdentifier = (id: string) => {\n const source = serviceInfo.importMap[id] || serviceImportPath;\n if (!importGroups.has(source)) {\n importGroups.set(source, new Set());\n }\n importGroups.get(source)!.add(id);\n };\n\n serviceInfo.methods.forEach((m) => {\n [...m.paramSchemas, m.returnSchema].filter(Boolean).forEach((s) => {\n const matches = s!.match(/[A-Z][a-zA-Z0-9]*/g);\n matches?.forEach(registerIdentifier);\n if (s!.includes(\"z.\")) {\n registerIdentifier(\"z\");\n }\n });\n });\n\n const hasPost = serviceInfo.methods.some(\n (m) => !m.isStreamable && m.params.length > 0\n );\n const hasGet = serviceInfo.methods.some(\n (m) => !m.isStreamable && m.params.length === 0\n );\n const hasSse = serviceInfo.methods.some(\n (m) => m.isStreamable && m.streamType == StreamType.Observable\n );\n const hasStreamableWithParams = serviceInfo.methods.some(\n (m) => m.isStreamable && m.params.length > 0\n );\n\n const decorators = [\"Controller\"];\n if (hasPost) decorators.push(\"Post\");\n if (hasGet) decorators.push(\"Get\");\n if (hasPost) decorators.push(\"Body\");\n if (hasSse) decorators.push(\"Sse\");\n if (hasStreamableWithParams) decorators.push(\"Query\");\n\n let importStrings = `import { ${decorators.join(\n \", \"\n )} } from \"@kithinji/orca\";\\n`;\n\n importGroups.forEach((ids, source) => {\n const filteredIds = Array.from(ids).filter((id) => id !== serviceName);\n if (filteredIds.length > 0) {\n importStrings += `import { ${filteredIds.join(\n \", \"\n )} } from \"${source}\";\\n`;\n }\n });\n\n return importStrings;\n}\n\nfunction generateMethods(serviceInfo: ServiceInfo): string {\n return serviceInfo.methods\n .map((m) => generateMethod(m, serviceInfo.className))\n .join(\"\\n\\n\");\n}\n\nfunction generateMethod(method: ServiceMethod, serviceName: string): string {\n const hasParams = method.params.length > 0;\n const serviceInstance = toInstanceName(serviceName);\n\n if (method.isStreamable) {\n const queryParams = hasParams\n ? method.params\n .map((p) => `@Query('${p.name}') ${p.name}: ${p.type}`)\n .join(\", \")\n : \"\";\n const body = generateMethodBody(method, serviceInstance, false);\n const returnTypeName = method.streamType || \"Observable\";\n\n return ` @Sse(\"${method.name}\")\n ${method.name}(${queryParams}): ${returnTypeName}<${method.returnType}> {\n${body}\n }`;\n }\n\n const decorator = hasParams ? \"Post\" : \"Get\";\n const bodyParam = hasParams ? `@Body() body: any` : \"\";\n const body = generateMethodBody(method, serviceInstance, true);\n\n return ` @${decorator}(\"${method.name}\")\n async ${method.name}(${bodyParam}): Promise<${method.returnType}> {\n${body}\n }`;\n}\n\nfunction generateMethodBody(\n method: ServiceMethod,\n serviceInstance: string,\n isAsync: boolean\n): string {\n const lines: string[] = [];\n const hasParams = method.params.length > 0;\n\n if (hasParams && method.isStreamable && method.paramSchemas.length > 0) {\n method.params.forEach((p, i) => {\n lines.push(\n ` const validated${capitalize(p.name)} = ${\n method.paramSchemas[i]\n }.parse(${p.name});`\n );\n });\n }\n\n if (hasParams && !method.isStreamable) {\n if (method.paramSchemas.length > 0) {\n lines.push(\n ` const b = typeof body === 'object' && body !== null ? body : {};`\n );\n method.params.forEach((p, i) => {\n lines.push(\n ` const ${p.name} = ${method.paramSchemas[i]}.parse(b.${p.name});`\n );\n });\n } else {\n const paramNames = method.params.map((p) => p.name).join(\", \");\n lines.push(` const { ${paramNames} } = body || {};`);\n }\n }\n\n let callArgs: string;\n if (hasParams && method.isStreamable && method.paramSchemas.length > 0) {\n callArgs = method.params\n .map((p) => `validated${capitalize(p.name)}`)\n .join(\", \");\n } else {\n callArgs = method.params.map((p) => p.name).join(\", \");\n }\n const serviceCall = `${serviceInstance}.${method.name}(${callArgs})`;\n\n if (method.returnSchema && isAsync) {\n lines.push(` const res = await this.${serviceCall};`);\n lines.push(` return ${method.returnSchema}.parse(res);`);\n } else if (isAsync) {\n lines.push(` return this.${serviceCall};`);\n } else {\n lines.push(` return this.${serviceCall};`);\n }\n\n return lines.join(\"\\n\");\n}\n", "import {\n type ClassDeclaration,\n type Decorator,\n type Param,\n type ClassMethod,\n type TsType,\n parseSync,\n ClassMember,\n ImportDeclaration,\n} from \"@swc/core\";\n\nexport interface ServiceMethod {\n name: string;\n params: MethodParam[];\n returnType: string;\n isAsync: boolean;\n isStreamable: boolean;\n streamType?: StreamType;\n paramSchemas: string[];\n returnSchema?: string;\n}\n\nexport interface MethodParam {\n name: string;\n type: string;\n decorators?: string[];\n}\n\nexport interface ServiceInfo {\n className: string;\n methods: ServiceMethod[];\n hasInjectable: boolean;\n importMap: Record<string, string>;\n}\n\nexport interface GenerationError {\n type: \"parse\" | \"validation\" | \"generation\";\n message: string;\n filePath: string;\n details?: any;\n}\n\nexport enum StreamType {\n Observable = \"Observable\",\n}\n\nexport interface ReturnTypeConfig {\n typeName: string;\n isStreamable: boolean;\n streamType?: StreamType;\n decoratorName: string;\n isSubjectLike: boolean;\n}\n\nexport interface ReturnTypeInfo {\n type: string;\n isStreamable: boolean;\n streamType?: StreamType;\n isSubjectLike: boolean;\n}\n\nexport const RETURN_TYPE_CONFIGS: ReturnTypeConfig[] = [\n {\n typeName: \"Observable\",\n isStreamable: true,\n streamType: StreamType.Observable,\n decoratorName: \"Sse\",\n isSubjectLike: false,\n },\n {\n typeName: \"Promise\",\n isStreamable: false,\n decoratorName: \"Post\",\n isSubjectLike: false,\n },\n];\n\nexport function parseTypeScript(filePath: string, code: string) {\n return parseSync(code, {\n syntax: \"typescript\",\n tsx: filePath.endsWith(\"x\") || filePath.endsWith(\".tsx\"),\n decorators: true,\n });\n}\n\nexport function hasInjectableDecorator(decorators?: Decorator[]): boolean {\n if (!decorators) return false;\n\n return decorators.some((d) => {\n const expr = d.expression;\n return (\n (expr.type === \"Identifier\" && expr.value === \"Injectable\") ||\n (expr.type === \"CallExpression\" &&\n expr.callee.type === \"Identifier\" &&\n expr.callee.value === \"Injectable\")\n );\n });\n}\n\nexport function isPublicMethod(member: ClassMember): member is ClassMethod {\n return (\n member.type === \"ClassMethod\" &&\n (member.accessibility === \"public\" || !member.accessibility)\n );\n}\n\nexport function getMethodName(method: ClassMethod): string | null {\n if (method.key.type === \"Identifier\") {\n return method.key.value;\n }\n return null;\n}\n\nexport function extractImportMap(ast: any): Record<string, string> {\n const importMap: Record<string, string> = {};\n\n for (const item of ast.body) {\n if (item.type === \"ImportDeclaration\") {\n const decl = item as ImportDeclaration;\n const source = decl.source.value;\n decl.specifiers.forEach((spec) => {\n if (\n spec.type === \"ImportSpecifier\" ||\n spec.type === \"ImportDefaultSpecifier\" ||\n spec.type === \"ImportNamespaceSpecifier\"\n ) {\n importMap[spec.local.value] = source;\n }\n });\n }\n }\n\n return importMap;\n}\n\nexport function findInjectableClass(ast: any): ClassDeclaration | null {\n for (const item of ast.body) {\n if (\n item.type === \"ExportDeclaration\" &&\n item.declaration?.type === \"ClassDeclaration\"\n ) {\n const classDecl = item.declaration as ClassDeclaration;\n if (hasInjectableDecorator(classDecl.decorators)) {\n return classDecl;\n }\n }\n }\n return null;\n}\n\nexport function analyzeReturnType(method: ClassMethod): ReturnTypeInfo {\n const returnType = method.function.returnType?.typeAnnotation;\n\n if (!returnType) {\n return {\n type: \"any\",\n isStreamable: false,\n isSubjectLike: false,\n };\n }\n\n if (\n returnType.type === \"TsTypeReference\" &&\n returnType.typeName.type === \"Identifier\"\n ) {\n const typeName = returnType.typeName.value;\n const config = RETURN_TYPE_CONFIGS.find((c) => c.typeName === typeName);\n\n if (config) {\n const innerType = returnType.typeParams?.params[0];\n return {\n type: innerType ? stringifyType(innerType) : \"any\",\n isStreamable: config.isStreamable,\n streamType: config.streamType,\n isSubjectLike: config.isSubjectLike,\n };\n }\n }\n\n return {\n type: stringifyType(returnType),\n isStreamable: false,\n isSubjectLike: false,\n };\n}\n\nexport function stringifyType(node: TsType | undefined): string {\n if (!node) return \"any\";\n\n switch (node.type) {\n case \"TsKeywordType\":\n return node.kind;\n\n case \"TsTypeReference\":\n if (node.typeName.type !== \"Identifier\") return \"any\";\n const base = node.typeName.value;\n const args = node.typeParams?.params\n ? `<${node.typeParams.params.map(stringifyType).join(\", \")}>`\n : \"\";\n return base + args;\n\n case \"TsArrayType\":\n return `${stringifyType(node.elemType)}[]`;\n\n case \"TsUnionType\":\n return node.types.map(stringifyType).join(\" | \");\n\n case \"TsIntersectionType\":\n return node.types.map(stringifyType).join(\" & \");\n\n case \"TsTypeLiteral\":\n const props = node.members\n .map((member: any) => {\n if (member.type === \"TsPropertySignature\") {\n const key =\n member.key.type === \"Identifier\" ? member.key.value : \"\";\n const type = member.typeAnnotation\n ? stringifyType(member.typeAnnotation.typeAnnotation)\n : \"any\";\n return `${key}: ${type}`;\n }\n return \"\";\n })\n .filter(Boolean);\n return `{ ${props.join(\"; \")} }`;\n\n default:\n return \"any\";\n }\n}\n\nexport function extractMethodParams(params: Param[]): MethodParam[] {\n return params.map((p) => {\n const pat = (p as any).pat;\n\n if (pat.type !== \"Identifier\") {\n return {\n name: \"param\",\n type: \"any\",\n decorators: [],\n };\n }\n\n return {\n name: pat.value,\n type: pat.typeAnnotation\n ? stringifyType(pat.typeAnnotation.typeAnnotation)\n : \"any\",\n decorators: [],\n };\n });\n}\n\nexport function extractSignature(\n decorators: Decorator[] | undefined,\n paramCount: number\n) {\n if (!decorators) return { paramSchemas: [] };\n\n for (const decorator of decorators) {\n const expr = decorator.expression;\n if (\n expr.type === \"CallExpression\" &&\n expr.callee.type === \"Identifier\" &&\n expr.callee.value === \"Signature\"\n ) {\n const args = expr.arguments;\n if (args.length === 0) return { paramSchemas: [] };\n\n const schemaStrings = args.map((arg) =>\n stringifyExpression(arg.expression)\n );\n\n if (args.length === 1) {\n return { paramSchemas: [], returnSchema: schemaStrings[0] };\n }\n\n return {\n paramSchemas: schemaStrings.slice(0, -1),\n returnSchema: schemaStrings[schemaStrings.length - 1],\n };\n }\n }\n return { paramSchemas: [] };\n}\n\nfunction stringifyExpression(expr: any): string {\n if (!expr) return \"any\";\n\n if (expr.type === \"Identifier\") {\n return expr.value;\n }\n\n if (expr.type === \"MemberExpression\") {\n const object = stringifyExpression(expr.object);\n const property = expr.property.value || stringifyExpression(expr.property);\n return `${object}.${property}`;\n }\n\n if (expr.type === \"CallExpression\") {\n const args = expr.arguments\n .map((a: any) => stringifyExpression(a.expression))\n .join(\", \");\n return `${stringifyExpression(expr.callee)}(${args})`;\n }\n\n return \"any\";\n}\n\nexport function extractMethods(\n classDecl: ClassDeclaration,\n filePath: string,\n includeSignatures: boolean = true\n): ServiceMethod[] {\n const methods: ServiceMethod[] = [];\n const className = classDecl.identifier?.value || \"UnknownClass\";\n\n for (const member of classDecl.body) {\n if (!isPublicMethod(member)) continue;\n\n const method = member as ClassMethod;\n const methodName = getMethodName(method);\n if (!methodName) continue;\n\n const returnTypeInfo = analyzeReturnType(method);\n\n if (!returnTypeInfo.isStreamable && !method.function.async) {\n throw {\n type: \"validation\",\n message: `Method ${className}.${methodName} must be async or return a streamable type (${RETURN_TYPE_CONFIGS.filter(\n (c) => c.isStreamable\n )\n .map((c) => c.typeName)\n .join(\", \")})`,\n filePath,\n details: { className, methodName },\n } as GenerationError;\n }\n\n const signatures = includeSignatures\n ? extractSignature(\n method.function.decorators,\n method.function.params.length\n )\n : { paramSchemas: [] };\n\n methods.push({\n name: methodName,\n params: extractMethodParams(method.function.params),\n returnType: returnTypeInfo.type,\n isAsync: method.function.async,\n isStreamable: returnTypeInfo.isStreamable,\n streamType: returnTypeInfo.streamType,\n paramSchemas: signatures.paramSchemas,\n returnSchema: signatures.returnSchema,\n });\n }\n\n return methods;\n}\n\nexport function serviceNameToPath(serviceName: string): string {\n return serviceName\n .replace(/Service$/, \"\")\n .replace(/([a-z])([A-Z])/g, \"$1-$2\")\n .toLowerCase();\n}\n\nexport function toInstanceName(className: string): string {\n return className.charAt(0).toLowerCase() + className.slice(1);\n}\n\nexport function capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nexport function validateServiceInfo(\n serviceInfo: ServiceInfo,\n filePath: string\n): void {\n if (!serviceInfo.className) {\n throw {\n type: \"validation\",\n message: \"Service class must have a valid name\",\n filePath,\n } as GenerationError;\n }\n\n if (serviceInfo.methods.length === 0) {\n console.warn(\n `Warning: Service ${serviceInfo.className} has no public methods`\n );\n }\n\n serviceInfo.methods.forEach((method) => {\n if (method.params.length > 0 && method.paramSchemas?.length === 0) {\n console.warn(\n `Warning: Method ${serviceInfo.className}.${method.name} has parameters but no @Signature validation`\n );\n }\n });\n}\n\nexport function extractServiceInfo(\n ast: any,\n filePath: string,\n includeSignatures: boolean = true\n): ServiceInfo | null {\n try {\n const serviceClass = findInjectableClass(ast);\n const importMap = extractImportMap(ast);\n\n if (!serviceClass?.identifier) {\n return null;\n }\n\n return {\n className: serviceClass.identifier.value,\n methods: extractMethods(serviceClass, filePath, includeSignatures),\n hasInjectable: true,\n importMap,\n };\n } catch (error) {\n throw {\n type: \"parse\",\n message: `Failed to extract service info: ${(error as Error).message}`,\n filePath,\n details: error,\n } as GenerationError;\n }\n}\n", "import * as path from \"path\";\nimport { createHash } from \"crypto\";\nimport { parseSync, printSync } from \"@swc/core\";\nimport type {\n ModuleItem,\n ClassDeclaration,\n Decorator,\n ImportDeclaration,\n} from \"@swc/core\";\n\ninterface ClassStub {\n name: string;\n propsType: string;\n decorators: string[];\n constructorParams: string[];\n}\n\ninterface ImportMap {\n [localName: string]: string;\n}\n\nexport function generateServerStub(filePath: string, code: string): string {\n const hash = createHash(\"md5\").update(filePath).digest(\"hex\").slice(0, 8);\n const relativeFromSrc = filePath.split(\"/src/\")[1];\n const parsed = path.parse(relativeFromSrc);\n\n const fileName = path.join(\"src\", parsed.dir, parsed.name);\n\n const ast = parseSync(code, {\n syntax: \"typescript\",\n tsx: filePath.endsWith(\"x\"),\n decorators: true,\n });\n\n const importMap: ImportMap = {};\n for (const item of ast.body) {\n if (item.type === \"ImportDeclaration\") {\n const decl = item as ImportDeclaration;\n for (const specifier of decl.specifiers ?? []) {\n let localName: string;\n if (specifier.type === \"ImportSpecifier\") {\n localName = specifier.local.value;\n } else if (specifier.type === \"ImportDefaultSpecifier\") {\n localName = specifier.local.value;\n } else {\n continue;\n }\n importMap[localName] = decl.source.value;\n }\n }\n }\n\n const preservedNodes: ModuleItem[] = [];\n const stubbedClasses: ClassStub[] = [];\n\n for (const item of ast.body) {\n let shouldStub = false;\n\n if (\n item.type === \"ExportDeclaration\" &&\n item.declaration?.type === \"ClassDeclaration\"\n ) {\n const classDecl = item.declaration as ClassDeclaration;\n\n if (hasComponentDecorator(classDecl.decorators)) {\n shouldStub = true;\n const stub = extractClassStub(classDecl);\n if (stub) {\n stubbedClasses.push(stub);\n }\n }\n }\n\n if (!shouldStub) {\n preservedNodes.push(item);\n }\n }\n\n const preservedCode =\n preservedNodes.length > 0\n ? printSync({\n type: \"Module\",\n span: ast.span,\n body: preservedNodes,\n interpreter: ast.interpreter,\n }).code\n : \"\";\n\n const stubCode = stubbedClasses\n .map((stub) => generateClassCode(stub, hash, fileName))\n .join(\"\\n\\n\");\n\n return `\n${preservedCode}\n${stubCode}\n `.trim();\n}\n\nfunction hasComponentDecorator(decorators?: Decorator[]): boolean {\n if (!decorators) return false;\n return decorators.some((decorator) => {\n const expr = decorator.expression;\n if (expr.type === \"Identifier\" && expr.value === \"Component\") {\n return true;\n }\n if (\n expr.type === \"CallExpression\" &&\n expr.callee.type === \"Identifier\" &&\n expr.callee.value === \"Component\"\n ) {\n return true;\n }\n return false;\n });\n}\n\nfunction extractClassStub(classDecl: ClassDeclaration): ClassStub | null {\n const className = classDecl.identifier?.value;\n if (!className) return null;\n\n let propsType = \"{}\";\n const decorators: string[] = [];\n const constructorParams: string[] = [];\n\n if (classDecl.decorators) {\n for (const dec of classDecl.decorators) {\n const str = stringifyDecorator(dec);\n if (str) decorators.push(str);\n }\n }\n\n for (const member of classDecl.body) {\n if (member.type === \"ClassProperty\") {\n if (member.key.type === \"Identifier\" && member.key.value === \"props\") {\n propsType = extractPropsType(member);\n }\n } else if (member.type === \"Constructor\") {\n for (const param of member.params) {\n const paramStr = stringifyParam(param);\n if (paramStr) constructorParams.push(paramStr);\n }\n }\n }\n\n return {\n name: className,\n propsType,\n decorators,\n constructorParams,\n };\n}\n\nexport function stringifyDecorator(decorator: Decorator): string {\n const exprCode = printSync({\n type: \"Module\",\n span: { start: 0, end: 0, ctxt: 0 },\n body: [\n {\n type: \"ExpressionStatement\",\n expression: decorator.expression,\n span: { start: 0, end: 0, ctxt: 0 },\n },\n ],\n interpreter: \"\",\n }).code;\n\n const cleanCode = exprCode.replace(/^#!.*\\n/, \"\").trim();\n\n return `@${cleanCode.replace(/;$/, \"\")}`;\n}\n\nfunction extractPropsType(member: any): string {\n const typeAnn = member.typeAnnotation?.typeAnnotation;\n if (!typeAnn) return \"{}\";\n\n if (typeAnn.type === \"TsTypeLiteral\") {\n const props: string[] = [];\n for (const m of typeAnn.members) {\n if (m.type === \"TsPropertySignature\") {\n const key = m.key.type === \"Identifier\" ? m.key.value : \"?\";\n const t = m.typeAnnotation\n ? stringifyType(m.typeAnnotation.typeAnnotation)\n : \"any\";\n props.push(`${key}: ${t}`);\n }\n }\n return `{ ${props.join(\"; \")} }`;\n }\n\n return stringifyType(typeAnn);\n}\n\nfunction stringifyParam(param: any): string {\n let decorators: string[] = [];\n if (param.decorators) {\n for (const d of param.decorators) {\n const str = stringifyDecorator(d);\n if (str) decorators.push(str);\n }\n }\n const decoratorPrefix = decorators.length ? decorators.join(\" \") + \" \" : \"\";\n\n let typeName = \"any\";\n let paramName = \"\";\n let accessibility = \"\";\n\n if (param.type === \"TsParameterProperty\") {\n accessibility = param.accessibility || \"\";\n const inner = param.param;\n if (inner.type !== \"Identifier\") return \"\";\n\n paramName = inner.value;\n if (inner.typeAnnotation?.typeAnnotation) {\n typeName = extractTypeName(inner.typeAnnotation.typeAnnotation);\n }\n } else if (param.type === \"Parameter\") {\n const pat = param.pat;\n if (pat.type !== \"Identifier\") return \"\";\n\n paramName = pat.value;\n if (pat.typeAnnotation?.typeAnnotation) {\n typeName = extractTypeName(pat.typeAnnotation.typeAnnotation);\n }\n } else {\n return \"\";\n }\n\n const accessPrefix = accessibility ? `${accessibility} ` : \"\";\n const result = `${decoratorPrefix}${accessPrefix}${paramName}: ${typeName}`;\n\n return result;\n}\n\nfunction extractTypeName(typeNode: any): string {\n if (\n typeNode.type === \"TsTypeReference\" &&\n typeNode.typeName.type === \"Identifier\"\n ) {\n return typeNode.typeName.value;\n }\n return stringifyType(typeNode);\n}\n\nfunction stringifyType(typeNode: any): string {\n if (!typeNode) return \"any\";\n\n switch (typeNode.type) {\n case \"TsKeywordType\":\n return typeNode.kind;\n case \"TsTypeReference\":\n if (typeNode.typeName.type === \"Identifier\")\n return typeNode.typeName.value;\n if (typeNode.typeName.type === \"TsQualifiedName\") {\n return `${stringifyQualifiedName(typeNode.typeName.left)}.${\n typeNode.typeName.right.value\n }`;\n }\n return \"any\";\n case \"TsArrayType\":\n return `${stringifyType(typeNode.elemType)}[]`;\n case \"TsUnionType\":\n return typeNode.types.map(stringifyType).join(\" | \");\n case \"TsIntersectionType\":\n return typeNode.types.map(stringifyType).join(\" & \");\n default:\n return \"any\";\n }\n}\n\nfunction stringifyQualifiedName(node: any): string {\n if (node.type === \"Identifier\") return node.value;\n if (node.type === \"TsQualifiedName\") {\n return `${stringifyQualifiedName(node.left)}.${node.right.value}`;\n }\n return \"any\";\n}\n\nfunction generateClassCode(\n stub: ClassStub,\n hash: string,\n fileName: string\n): string {\n const clientId = `${stub.name}_${hash}`;\n const clientPath = `/${fileName}.js`;\n const decoratorsStr =\n stub.decorators.length > 0 ? stub.decorators.join(\"\\n\") + \"\\n\" : \"\";\n\n const constructorStr = stub.constructorParams.length\n ? `constructor(${stub.constructorParams.join(\", \")}) {}`\n : \"constructor() {}\";\n\n return `\n${decoratorsStr}export class ${stub.name} {\n props!: ${stub.propsType};\n ${constructorStr}\n build() {\n const inputProps = { ...this.props };\n return {\n $$typeof: Symbol.for(\"orca.client.component\"),\n id: \"${clientId}_\" + Math.random().toString(36).slice(2, 9),\n type: \"${stub.name}\",\n props: {\n ...inputProps,\n __clientComponent: {\n id: \"${clientId}\",\n path: \"${clientPath}\",\n name: \"${stub.name}\",\n }\n },\n key: null\n };\n }\n}\n`.trim();\n}\n", "import type { PluginObj, NodePath } from \"@babel/core\";\nimport * as BabelTypes from \"@babel/types\";\n\ninterface PluginContext {\n types: typeof BabelTypes;\n}\n\ninterface PluginState {\n helpersImported?: boolean;\n}\n\ninterface TransformContext {\n observables: Map<string, BabelTypes.Expression>;\n observableSignals: Map<string, BabelTypes.Identifier>;\n}\n\ninterface TransformResult {\n id: BabelTypes.Identifier;\n statements: BabelTypes.Statement[];\n}\n\nclass NodeTypeGuards {\n constructor(private t: typeof BabelTypes) {}\n\n isSignalMember(expr: BabelTypes.Node): expr is BabelTypes.MemberExpression {\n return (\n this.t.isMemberExpression(expr) &&\n this.t.isIdentifier(expr.property, { name: \"value\" })\n );\n }\n\n isBehaviorSubjectMember(\n expr: BabelTypes.Node\n ): expr is BabelTypes.MemberExpression {\n return (\n this.t.isMemberExpression(expr) &&\n this.t.isIdentifier(expr.property, { name: \"$value\" })\n );\n }\n}\n\nclass ASTUtilities {\n constructor(private t: typeof BabelTypes, private guards: NodeTypeGuards) {}\n\n getObject(expr: BabelTypes.Expression): BabelTypes.Expression {\n if (\n this.guards.isSignalMember(expr) ||\n this.guards.isBehaviorSubjectMember(expr)\n ) {\n return expr.object as BabelTypes.Expression;\n }\n return expr;\n }\n\n replaceThisWithSelf<T extends BabelTypes.Node>(node: T): T {\n const cloned = this.t.cloneNode(node, true) as T;\n this.walkAndTransform(cloned, (n: any) => {\n if (this.t.isThisExpression(n)) {\n Object.assign(n, this.t.identifier(\"self\"));\n }\n });\n return cloned;\n }\n\n private walkAndTransform(node: any, transform: (node: any) => void): void {\n if (!node || typeof node !== \"object\") return;\n\n transform(node);\n\n for (const key in node) {\n if (this.shouldSkipKey(key)) continue;\n\n const value = node[key];\n if (Array.isArray(value)) {\n value.forEach((item) => this.walkAndTransform(item, transform));\n } else if (value && typeof value === \"object\") {\n this.walkAndTransform(value, transform);\n }\n }\n }\n\n private shouldSkipKey(key: string): boolean {\n return [\"loc\", \"start\", \"end\", \"extra\"].includes(key);\n }\n\n buildMemberExpression(name: string): BabelTypes.Expression {\n const parts = name.split(\".\");\n let expr: BabelTypes.Expression = this.t.identifier(parts[0]);\n for (let i = 1; i < parts.length; i++) {\n expr = this.t.memberExpression(expr, this.t.identifier(parts[i]));\n }\n return expr;\n }\n\n insertBeforeReturn(\n body: BabelTypes.Statement[],\n statements: BabelTypes.Statement[]\n ): void {\n const returnIndex = body.findIndex((stmt) =>\n this.t.isReturnStatement(stmt)\n );\n if (returnIndex !== -1) {\n body.splice(returnIndex, 0, ...statements);\n } else {\n body.push(...statements);\n }\n }\n\n addEffectCleanup(\n scope: any,\n effectCall: BabelTypes.CallExpression\n ): BabelTypes.Statement[] {\n const cleanupId = scope.generateUidIdentifier(\"cleanup\");\n\n return [\n // const _cleanup1 = $effect(...)\n this.t.variableDeclaration(\"const\", [\n this.t.variableDeclarator(cleanupId, effectCall),\n ]),\n // self.__cleanup = [...(self.__cleanup || []), _cleanup1]\n this.t.expressionStatement(\n this.t.assignmentExpression(\n \"=\",\n this.t.memberExpression(\n this.t.identifier(\"self\"),\n this.t.identifier(\"__cleanup\")\n ),\n this.t.arrayExpression([\n this.t.spreadElement(\n this.t.logicalExpression(\n \"||\",\n this.t.memberExpression(\n this.t.identifier(\"self\"),\n this.t.identifier(\"__cleanup\")\n ),\n this.t.arrayExpression([])\n )\n ),\n cleanupId,\n ])\n )\n ),\n ];\n }\n}\n\nclass JSXUtilities {\n constructor(private t: typeof BabelTypes) {}\n\n getComponentName(\n nameNode:\n | BabelTypes.JSXIdentifier\n | BabelTypes.JSXMemberExpression\n | BabelTypes.JSXNamespacedName\n ): string | null {\n if (this.t.isJSXIdentifier(nameNode)) {\n return nameNode.name;\n }\n\n if (this.t.isJSXMemberExpression(nameNode)) {\n const parts: string[] = [];\n let current: BabelTypes.JSXMemberExpression | BabelTypes.JSXIdentifier =\n nameNode;\n\n while (this.t.isJSXMemberExpression(current)) {\n parts.unshift(current.property.name);\n current = current.object;\n }\n\n if (this.t.isJSXIdentifier(current)) {\n parts.unshift(current.name);\n }\n\n return parts.join(\".\");\n }\n\n return null;\n }\n\n isComponentTag(tag: string | null): boolean {\n return tag ? /^[A-Z]/.test(tag) : false;\n }\n}\n\nclass ObservableManager {\n constructor(private t: typeof BabelTypes, private guards: NodeTypeGuards) {}\n\n getObservableKey(expr: BabelTypes.Node): string {\n return this.stringifyNode(expr);\n }\n\n private stringifyNode(node: any): string {\n if (!node) return \"\";\n if (this.t.isThisExpression(node)) return \"this\";\n if (this.t.isIdentifier(node)) return node.name;\n\n if (this.t.isMemberExpression(node)) {\n const obj = this.stringifyNode(node.object);\n const prop = node.computed\n ? `[${this.stringifyNode(node.property)}]`\n : `.${(node.property as BabelTypes.Identifier).name}`;\n return obj + prop;\n }\n\n if (this.t.isCallExpression(node)) {\n const callee = this.stringifyNode(node.callee);\n const args = node.arguments\n .map((arg) => this.stringifyNode(arg))\n .join(\",\");\n return `${callee}(${args})`;\n }\n\n if (this.t.isStringLiteral(node)) return `\"${node.value}\"`;\n if (this.t.isNumericLiteral(node)) return String(node.value);\n\n return node.type + JSON.stringify(node.name || node.value || \"\");\n }\n\n collectObservables(\n node: BabelTypes.Node,\n observables: Map<string, BabelTypes.Expression>,\n astUtils: ASTUtilities\n ): void {\n this.walkNode(node, (n: any) => {\n if (this.guards.isBehaviorSubjectMember(n)) {\n const observable = astUtils.replaceThisWithSelf(\n n.object as BabelTypes.Expression\n );\n const key = this.getObservableKey(observable);\n if (!observables.has(key)) {\n observables.set(key, observable);\n }\n }\n });\n }\n\n replaceObservablesWithSignals<T extends BabelTypes.Node>(\n node: T,\n observableSignals: Map<string, BabelTypes.Identifier>,\n astUtils: ASTUtilities\n ): T {\n const cloned = this.t.cloneNode(node, true) as T;\n\n this.walkNode(cloned, (n: any) => {\n if (this.guards.isBehaviorSubjectMember(n)) {\n const observable = astUtils.replaceThisWithSelf(n.object);\n const key = this.getObservableKey(observable);\n const signalId = observableSignals.get(key);\n\n if (signalId) {\n n.object = signalId;\n n.property = this.t.identifier(\"value\");\n }\n }\n });\n\n return cloned;\n }\n\n private walkNode(node: any, callback: (node: any) => void): void {\n if (!node || typeof node !== \"object\") return;\n\n callback(node);\n\n for (const key in node) {\n if ([\"loc\", \"start\", \"end\", \"extra\"].includes(key)) continue;\n\n const value = node[key];\n if (Array.isArray(value)) {\n value.forEach((item) => this.walkNode(item, callback));\n } else if (value && typeof value === \"object\") {\n this.walkNode(value, callback);\n }\n }\n }\n}\n\nclass ElementTransformer {\n constructor(\n private t: typeof BabelTypes,\n private guards: NodeTypeGuards,\n private astUtils: ASTUtilities,\n private jsxUtils: JSXUtilities,\n private observableManager: ObservableManager\n ) {}\n\n transformElement(\n path: { node: BabelTypes.JSXElement | BabelTypes.JSXFragment },\n scope: any,\n context: TransformContext\n ): TransformResult {\n if (this.t.isJSXFragment(path.node)) {\n return this.transformFragment(\n path as { node: BabelTypes.JSXFragment },\n scope,\n context\n );\n }\n return this.transformJSXElement(\n path as { node: BabelTypes.JSXElement },\n scope,\n context\n );\n }\n\n private transformJSXElement(\n path: { node: BabelTypes.JSXElement },\n scope: any,\n context: TransformContext\n ): TransformResult {\n const jsxElement = path.node;\n const tag = this.jsxUtils.getComponentName(jsxElement.openingElement.name);\n const isComponent = this.jsxUtils.isComponentTag(tag);\n\n if (isComponent && tag) {\n return this.transformComponentElement(jsxElement, tag, scope, context);\n } else if (tag) {\n return this.transformDOMElement(jsxElement, tag, scope, context);\n }\n\n return {\n id: scope.generateUidIdentifier(\"el\"),\n statements: [],\n };\n }\n\n private transformComponentElement(\n jsxElement: BabelTypes.JSXElement,\n tag: string,\n scope: any,\n context: TransformContext\n ): TransformResult {\n const elId = scope.generateUidIdentifier(\"el\");\n const statements: BabelTypes.Statement[] = [];\n const props: Array<\n | BabelTypes.ObjectProperty\n | BabelTypes.ObjectMethod\n | BabelTypes.SpreadElement\n > = [];\n const children: Array<BabelTypes.Expression> = [];\n\n this.processComponentAttributes(\n jsxElement.openingElement.attributes,\n props,\n context\n );\n\n this.processChildren(\n jsxElement.children,\n children,\n statements,\n scope,\n context\n );\n\n if (children.length > 0) {\n props.push(\n this.t.objectProperty(\n this.t.identifier(\"children\"),\n children.length === 1 ? children[0] : this.t.arrayExpression(children)\n )\n );\n }\n\n statements.push(\n this.t.variableDeclaration(\"var\", [\n this.t.variableDeclarator(\n elId,\n this.t.callExpression(this.t.identifier(\"$createComponent\"), [\n this.astUtils.buildMemberExpression(tag),\n this.t.objectExpression(props),\n this.t.identifier(\"self\"),\n ])\n ),\n ])\n );\n\n return { id: elId, statements };\n }\n\n private transformDOMElement(\n jsxElement: BabelTypes.JSXElement,\n tag: string,\n scope: any,\n context: TransformContext\n ): TransformResult {\n const elId = scope.generateUidIdentifier(\"el\");\n const statements: BabelTypes.Statement[] = [];\n\n statements.push(\n this.t.variableDeclaration(\"var\", [\n this.t.variableDeclarator(\n elId,\n this.t.callExpression(\n this.t.memberExpression(\n this.t.identifier(\"document\"),\n this.t.identifier(\"createElement\")\n ),\n [this.t.stringLiteral(tag)]\n )\n ),\n ])\n );\n\n const { hasRef, refValue, hasDangerousHTML, dangerousHTMLValue } =\n this.processDOMAttributes(\n jsxElement.openingElement.attributes,\n elId,\n statements,\n scope,\n context,\n tag\n );\n\n if (hasRef && refValue) {\n statements.push(\n this.t.expressionStatement(\n this.t.assignmentExpression(\"=\", refValue as BabelTypes.LVal, elId)\n )\n );\n }\n\n /*\n let cleanup = effect(() => {\n el.innerHTML = {\n __html: value\n }.__html\n })\n */\n\n if (hasDangerousHTML && dangerousHTMLValue) {\n const effectCall = this.t.callExpression(this.t.identifier(\"$effect\"), [\n this.t.arrowFunctionExpression(\n [],\n this.t.assignmentExpression(\n \"=\",\n this.t.memberExpression(elId, this.t.identifier(\"innerHTML\")),\n this.t.memberExpression(\n dangerousHTMLValue,\n this.t.identifier(\"__html\")\n )\n )\n ),\n ]);\n\n const cleanupStatements = this.astUtils.addEffectCleanup(\n scope,\n effectCall\n );\n\n statements.push(...cleanupStatements);\n }\n\n if (!hasDangerousHTML) {\n this.processDOMChildren(\n jsxElement.children,\n elId,\n statements,\n scope,\n context\n );\n }\n\n return { id: elId, statements };\n }\n\n private transformFragment(\n path: { node: BabelTypes.JSXFragment },\n scope: any,\n context: TransformContext\n ): TransformResult {\n const fragId = scope.generateUidIdentifier(\"frag\");\n const statements: BabelTypes.Statement[] = [];\n\n statements.push(\n this.t.variableDeclaration(\"var\", [\n this.t.variableDeclarator(\n fragId,\n this.t.callExpression(\n this.t.memberExpression(\n this.t.identifier(\"document\"),\n this.t.identifier(\"createDocumentFragment\")\n ),\n []\n )\n ),\n ])\n );\n\n this.processDOMChildren(\n path.node.children,\n fragId,\n statements,\n scope,\n context\n );\n\n return { id: fragId, statements };\n }\n\n private processComponentAttributes(\n attributes: Array<BabelTypes.JSXAttribute | BabelTypes.JSXSpreadAttribute>,\n props: Array<\n | BabelTypes.ObjectProperty\n | BabelTypes.ObjectMethod\n | BabelTypes.SpreadElement\n >,\n context: TransformContext\n ): void {\n for (const attr of attributes) {\n if (this.t.isJSXSpreadAttribute(attr)) {\n this.observableManager.collectObservables(\n attr.argument,\n context.observables,\n this.astUtils\n );\n const replaced = this.observableManager.replaceObservablesWithSignals(\n attr.argument,\n context.observableSignals,\n this.astUtils\n );\n props.push(\n this.t.spreadElement(this.astUtils.replaceThisWithSelf(replaced))\n );\n continue;\n }\n\n const key = (attr.name as BabelTypes.JSXIdentifier).name;\n\n if (this.t.isStringLiteral(attr.value)) {\n props.push(this.t.objectProperty(this.t.identifier(key), attr.value));\n } else if (this.t.isJSXExpressionContainer(attr.value)) {\n const expr = attr.value.expression as BabelTypes.Expression;\n this.observableManager.collectObservables(\n expr,\n context.observables,\n this.astUtils\n );\n\n if (\n this.guards.isSignalMember(expr) ||\n this.guards.isBehaviorSubjectMember(expr)\n ) {\n const replaced = this.observableManager.replaceObservablesWithSignals(\n expr,\n context.observableSignals,\n this.astUtils\n );\n props.push(\n this.t.objectMethod(\n \"get\",\n this.t.identifier(key),\n [],\n this.t.blockStatement([\n this.t.returnStatement(\n this.astUtils.replaceThisWithSelf(replaced)\n ),\n ])\n )\n );\n } else {\n const replaced = this.observableManager.replaceObservablesWithSignals(\n expr,\n context.observableSignals,\n this.astUtils\n );\n props.push(\n this.t.objectProperty(\n this.t.identifier(key),\n this.astUtils.replaceThisWithSelf(replaced)\n )\n );\n }\n } else {\n props.push(\n this.t.objectProperty(\n this.t.identifier(key),\n this.t.booleanLiteral(true)\n )\n );\n }\n }\n }\n\n private processDOMAttributes(\n attributes: Array<BabelTypes.JSXAttribute | BabelTypes.JSXSpreadAttribute>,\n elId: BabelTypes.Identifier,\n statements: BabelTypes.Statement[],\n scope: any,\n context: TransformContext,\n tag?: string\n ): {\n hasRef: boolean;\n refValue: BabelTypes.Expression | null;\n hasDangerousHTML: boolean;\n dangerousHTMLValue: BabelTypes.Expression | null;\n } {\n let hasRef = false;\n let refValue: BabelTypes.Expression | null = null;\n let hasDangerousHTML = false;\n let dangerousHTMLValue: BabelTypes.Expression | null = null;\n let hasClickHandler = false;\n let hrefValue: string | null = null;\n\n for (const attr of attributes) {\n if (this.t.isJSXSpreadAttribute(attr)) {\n this.observableManager.collectObservables(\n attr.argument,\n context.observables,\n this.astUtils\n );\n const replaced = this.observableManager.replaceObservablesWithSignals(\n attr.argument,\n context.observableSignals,\n this.astUtils\n );\n\n const effectCall = this.t.callExpression(this.t.identifier(\"$effect\"), [\n this.t.arrowFunctionExpression(\n [],\n this.t.callExpression(this.t.identifier(\"$spread\"), [\n elId,\n this.astUtils.replaceThisWithSelf(replaced),\n ])\n ),\n ]);\n\n const cleanupStatements = this.astUtils.addEffectCleanup(\n scope,\n effectCall\n );\n\n statements.push(...cleanupStatements);\n\n continue;\n }\n\n const key = (attr.name as BabelTypes.JSXIdentifier).name;\n\n if (key === \"ref\") {\n hasRef = true;\n if (this.t.isJSXExpressionContainer(attr.value)) {\n this.observableManager.collectObservables(\n attr.value.expression,\n context.observables,\n this.astUtils\n );\n const replaced = this.observableManager.replaceObservablesWithSignals(\n attr.value.expression as BabelTypes.Expression,\n context.observableSignals,\n this.astUtils\n );\n refValue = this.astUtils.replaceThisWithSelf(replaced);\n }\n continue;\n }\n\n if (key === \"dangerouslySetInnerHTML\") {\n hasDangerousHTML = true;\n if (this.t.isJSXExpressionContainer(attr.value)) {\n this.observableManager.collectObservables(\n attr.value.expression,\n context.observables,\n this.astUtils\n );\n const replaced = this.observableManager.replaceObservablesWithSignals(\n attr.value.expression as BabelTypes.Expression,\n context.observableSignals,\n this.astUtils\n );\n dangerousHTMLValue = this.astUtils.replaceThisWithSelf(replaced);\n }\n continue;\n }\n\n if (/^on[A-Z]/.test(key)) {\n if (key === \"onClick\") {\n hasClickHandler = true;\n }\n this.processEventListener(key, attr, elId, statements, context);\n continue;\n }\n\n if (key === \"href\" && this.t.isStringLiteral(attr.value)) {\n hrefValue = attr.value.value;\n }\n\n if (key === \"style\" && this.t.isJSXExpressionContainer(attr.value)) {\n this.processStyleAttribute(attr, elId, statements, scope, context);\n continue;\n }\n\n this.processRegularAttribute(key, attr, elId, statements, context);\n }\n\n if (\n tag === \"a\" &&\n !hasClickHandler &&\n hrefValue &&\n this.isRelativeUrl(hrefValue)\n ) {\n statements.push(\n this.t.expressionStatement(\n this.t.callExpression(\n this.t.memberExpression(\n elId,\n this.t.identifier(\"addEventListener\")\n ),\n [\n this.t.stringLiteral(\"click\"),\n this.t.arrowFunctionExpression(\n [this.t.identifier(\"event\")],\n this.t.callExpression(\n this.t.memberExpression(\n this.t.identifier(\"Orca\"),\n this.t.identifier(\"navigate\")\n ),\n [this.t.identifier(\"event\"), this.t.stringLiteral(hrefValue)]\n )\n ),\n ]\n )\n )\n );\n }\n\n return { hasRef, refValue, hasDangerousHTML, dangerousHTMLValue };\n }\n\n private isRelativeUrl(url: string): boolean {\n try {\n new URL(url);\n return false;\n } catch {\n if (\n url.startsWith(\"#\") ||\n url.startsWith(\"mailto:\") ||\n url.startsWith(\"tel:\")\n ) {\n return false;\n }\n\n return true;\n }\n }\n\n private processEventListener(\n key: string,\n attr: BabelTypes.JSXAttribute,\n elId: BabelTypes.Identifier,\n statements: BabelTypes.Statement[],\n context: TransformContext\n ): void {\n const eventName = key.slice(2).toLowerCase();\n let handler: BabelTypes.Expression = this.t.nullLiteral();\n\n if (this.t.isJSXExpressionContainer(attr.value)) {\n this.observableManager.collectObservables(\n attr.value.expression,\n context.observables,\n this.astUtils\n );\n const replaced = this.observableManager.replaceObservablesWithSignals(\n attr.value.expression as BabelTypes.Expression,\n context.observableSignals,\n this.astUtils\n );\n handler = this.astUtils.replaceThisWithSelf(replaced);\n }\n\n statements.push(\n this.t.expressionStatement(\n this.t.callExpression(\n this.t.memberExpression(elId, this.t.identifier(\"addEventListener\")),\n [this.t.stringLiteral(eventName), handler]\n )\n )\n );\n }\n\n private processStyleAttribute(\n attr: BabelTypes.JSXAttribute,\n elId: BabelTypes.Identifier,\n statements: BabelTypes.Statement[],\n scope: any,\n context: TransformContext\n ): void {\n if (!this.t.isJSXExpressionContainer(attr.value)) return;\n\n this.observableManager.collectObservables(\n attr.value.expression,\n context.observables,\n this.astUtils\n );\n const replaced = this.observableManager.replaceObservablesWithSignals(\n attr.value.expression as BabelTypes.Expression,\n context.observableSignals,\n this.astUtils\n );\n\n const effectCall = this.t.callExpression(this.t.identifier(\"$effect\"), [\n this.t.arrowFunctionExpression(\n [],\n this.t.callExpression(this.t.identifier(\"$style\"), [\n elId,\n this.astUtils.replaceThisWithSelf(replaced),\n ])\n ),\n ]);\n const cleanupStatements = this.astUtils.addEffectCleanup(scope, effectCall);\n\n statements.push(...cleanupStatements);\n }\n\n private processRegularAttribute(\n key: string,\n attr: BabelTypes.JSXAttribute,\n elId: BabelTypes.Identifier,\n statements: BabelTypes.Statement[],\n context: TransformContext\n ): void {\n const attrName = key === \"className\" ? \"class\" : key;\n let value: BabelTypes.Expression;\n\n if (this.t.isStringLiteral(attr.value)) {\n value = attr.value;\n } else if (this.t.isJSXExpressionContainer(attr.value)) {\n this.observableManager.collectObservables(\n attr.value.expression,\n context.observables,\n this.astUtils\n );\n const replaced = this.observableManager.replaceObservablesWithSignals(\n attr.value.expression as BabelTypes.Expression,\n context.observableSignals,\n this.astUtils\n );\n value = this.astUtils.replaceThisWithSelf(replaced);\n } else {\n value = this.t.booleanLiteral(true);\n }\n\n statements.push(\n this.t.expressionStatement(\n this.t.callExpression(\n this.t.memberExpression(elId, this.t.identifier(\"setAttribute\")),\n [this.t.stringLiteral(attrName), value]\n )\n )\n );\n }\n\n private processChildren(\n children: Array<\n | BabelTypes.JSXText\n | BabelTypes.JSXExpressionContainer\n | BabelTypes.JSXElement\n | BabelTypes.JSXFragment\n | BabelTypes.JSXSpreadChild\n >,\n childExpressions: Array<BabelTypes.Expression>,\n statements: BabelTypes.Statement[],\n scope: any,\n context: TransformContext\n ): void {\n for (const child of children) {\n if (this.t.isJSXText(child)) {\n const text = child.value.trim();\n if (text) childExpressions.push(this.t.stringLiteral(text));\n } else if (this.t.isJSXExpressionContainer(child)) {\n const expr = child.expression;\n if (!this.t.isJSXEmptyExpression(expr)) {\n this.observableManager.collectObservables(\n expr,\n context.observables,\n this.astUtils\n );\n const replaced = this.observableManager.replaceObservablesWithSignals(\n expr as BabelTypes.Expression,\n context.observableSignals,\n this.astUtils\n );\n childExpressions.push(this.astUtils.replaceThisWithSelf(replaced));\n }\n } else if (this.t.isJSXElement(child) || this.t.isJSXFragment(child)) {\n const childEl = this.transformElement({ node: child }, scope, context);\n statements.push(...childEl.statements);\n childExpressions.push(childEl.id);\n }\n }\n }\n\n private processDOMChildren(\n children: Array<\n | BabelTypes.JSXText\n | BabelTypes.JSXExpressionContainer\n | BabelTypes.JSXElement\n | BabelTypes.JSXFragment\n | BabelTypes.JSXSpreadChild\n >,\n parentId: BabelTypes.Identifier,\n statements: BabelTypes.Statement[],\n scope: any,\n context: TransformContext\n ): void {\n for (const child of children) {\n if (this.t.isJSXText(child)) {\n const text = child.value.trim();\n if (!text) continue;\n statements.push(\n this.t.expressionStatement(\n this.t.callExpression(this.t.identifier(\"$insert\"), [\n parentId,\n this.t.stringLiteral(text),\n ])\n )\n );\n } else if (this.t.isJSXExpressionContainer(child)) {\n const expr = child.expression;\n if (this.t.isJSXEmptyExpression(expr)) continue;\n\n this.observableManager.collectObservables(\n expr,\n context.observables,\n this.astUtils\n );\n\n let insertedValue: BabelTypes.Expression;\n if (this.guards.isSignalMember(expr)) {\n insertedValue = this.astUtils.getObject(\n expr as BabelTypes.Expression\n );\n } else if (this.guards.isBehaviorSubjectMember(expr)) {\n const replaced = this.observableManager.replaceObservablesWithSignals(\n expr as BabelTypes.Expression,\n context.observableSignals,\n this.astUtils\n );\n insertedValue = this.astUtils.getObject(replaced);\n } else {\n const replaced = this.observableManager.replaceObservablesWithSignals(\n expr as BabelTypes.Expression,\n context.observableSignals,\n this.astUtils\n );\n insertedValue = this.t.arrowFunctionExpression(\n [],\n this.astUtils.replaceThisWithSelf(replaced)\n );\n }\n\n statements.push(\n this.t.expressionStatement(\n this.t.callExpression(this.t.identifier(\"$insert\"), [\n parentId,\n insertedValue,\n ])\n )\n );\n } else if (this.t.isJSXElement(child) || this.t.isJSXFragment(child)) {\n const childEl = this.transformElement({ node: child }, scope, context);\n statements.push(...childEl.statements);\n statements.push(\n this.t.expressionStatement(\n this.t.callExpression(this.t.identifier(\"$insert\"), [\n parentId,\n childEl.id,\n ])\n )\n );\n }\n }\n }\n}\n\nexport function j2d({ types: t }: PluginContext): PluginObj<PluginState> {\n const guards = new NodeTypeGuards(t);\n const astUtils = new ASTUtilities(t, guards);\n const jsxUtils = new JSXUtilities(t);\n const observableManager = new ObservableManager(t, guards);\n const elementTransformer = new ElementTransformer(\n t,\n guards,\n astUtils,\n jsxUtils,\n observableManager\n );\n\n return {\n name: \"jsx-to-dom\",\n visitor: {\n Program: {\n exit(path: NodePath<BabelTypes.Program>, state: PluginState) {\n if (state.helpersImported) return;\n\n const helpers = [\n { local: \"$insert\", imported: \"insert\" },\n { local: \"$createComponent\", imported: \"createComponent\" },\n { local: \"$style\", imported: \"style\" },\n { local: \"$spread\", imported: \"spread\" },\n { local: \"$toSignal\", imported: \"toSignal\" },\n { local: \"$effect\", imported: \"effect\" },\n ];\n\n for (const helper of helpers) {\n path.unshiftContainer(\n \"body\",\n t.importDeclaration(\n [\n t.importSpecifier(\n t.identifier(helper.local),\n t.identifier(helper.imported)\n ),\n ],\n t.stringLiteral(\"@kithinji/orca\")\n )\n );\n }\n\n state.helpersImported = true;\n },\n },\n\n ClassMethod(path: NodePath<BabelTypes.ClassMethod>) {\n if (path.getData(\"processed\")) return;\n\n // Check if method contains JSX\n let hasJSX = false;\n path.traverse({\n JSXElement() {\n hasJSX = true;\n },\n JSXFragment() {\n hasJSX = true;\n },\n });\n\n if (!hasJSX) return;\n path.setData(\"processed\", true);\n\n const body = path.node.body;\n if (!t.isBlockStatement(body)) return;\n\n const observables = new Map<string, BabelTypes.Expression>();\n path.traverse({\n JSXElement(jsxPath: NodePath<BabelTypes.JSXElement>) {\n observableManager.collectObservables(\n jsxPath.node,\n observables,\n astUtils\n );\n },\n JSXFragment(jsxPath: NodePath<BabelTypes.JSXFragment>) {\n observableManager.collectObservables(\n jsxPath.node,\n observables,\n astUtils\n );\n },\n });\n\n body.body.unshift(\n t.variableDeclaration(\"const\", [\n t.variableDeclarator(t.identifier(\"self\"), t.thisExpression()),\n ])\n );\n\n const observableSignals = new Map<string, BabelTypes.Identifier>();\n const signalDeclarations: BabelTypes.Statement[] = [];\n\n for (const [key, observable] of observables) {\n const signalId = path.scope.generateUidIdentifier(\"sig\");\n observableSignals.set(key, signalId);\n signalDeclarations.push(\n t.variableDeclaration(\"const\", [\n t.variableDeclarator(\n signalId,\n t.callExpression(t.identifier(\"$toSignal\"), [\n observable,\n t.identifier(\"self\"),\n ])\n ),\n ])\n );\n }\n\n if (signalDeclarations.length > 0) {\n astUtils.insertBeforeReturn(body.body, signalDeclarations);\n }\n\n const context: TransformContext = { observables, observableSignals };\n\n path.traverse({\n JSXElement(jsxPath: NodePath<BabelTypes.JSXElement>) {\n if (jsxPath.getData(\"processed\")) return;\n jsxPath.setData(\"processed\", true);\n\n const { id, statements } = elementTransformer.transformElement(\n jsxPath as any,\n jsxPath.scope,\n context\n );\n\n jsxPath.replaceWith(\n t.callExpression(\n t.arrowFunctionExpression(\n [],\n t.blockStatement([...statements, t.returnStatement(id)])\n ),\n []\n )\n );\n },\n JSXFragment(jsxPath: NodePath<BabelTypes.JSXFragment>) {\n if (jsxPath.getData(\"processed\")) return;\n jsxPath.setData(\"processed\", true);\n\n const { id, statements } = elementTransformer.transformElement(\n jsxPath as any,\n jsxPath.scope,\n context\n );\n\n jsxPath.replaceWith(\n t.callExpression(\n t.arrowFunctionExpression(\n [],\n t.blockStatement([...statements, t.returnStatement(id)])\n ),\n []\n )\n );\n },\n });\n },\n },\n };\n}\n", "import { parseSync, printSync } from \"@swc/core\";\nimport type {\n ClassDeclaration,\n Decorator,\n ImportDeclaration,\n ModuleItem,\n} from \"@swc/core\";\n\ninterface MethodParam {\n name: string;\n type: string;\n}\n\ninterface ComponentMethod {\n name: string;\n params: MethodParam[];\n returnType: string;\n isAsync: boolean;\n}\n\ninterface ClassStub {\n name: string;\n propsType: string;\n decorators: string[];\n constructorParams: string[];\n methods: ComponentMethod[];\n}\n\ninterface ImportMap {\n [localName: string]: string;\n}\n\nexport function generateServerComponent(\n filePath: string,\n code: string\n): string {\n const ast = parseSync(code, {\n syntax: \"typescript\",\n tsx: filePath.endsWith(\"x\"),\n decorators: true,\n });\n\n const importMap: ImportMap = {};\n for (const item of ast.body) {\n if (item.type === \"ImportDeclaration\") {\n const decl = item as ImportDeclaration;\n for (const specifier of decl.specifiers ?? []) {\n let localName: string;\n if (specifier.type === \"ImportSpecifier\") {\n localName = specifier.local.value;\n } else if (specifier.type === \"ImportDefaultSpecifier\") {\n localName = specifier.local.value;\n } else {\n continue;\n }\n importMap[localName] = decl.source.value;\n }\n }\n }\n\n const preservedNodes: ModuleItem[] = [];\n const stubbedClasses: ClassStub[] = [];\n\n for (const item of ast.body) {\n let shouldStub = false;\n\n if (\n item.type === \"ExportDeclaration\" &&\n item.declaration?.type === \"ClassDeclaration\"\n ) {\n const classDecl = item.declaration as ClassDeclaration;\n\n if (hasComponentDecorator(classDecl.decorators)) {\n shouldStub = true;\n const stub = extractClassStub(classDecl);\n if (stub) {\n stubbedClasses.push(stub);\n }\n }\n }\n\n if (!shouldStub) {\n preservedNodes.push(item);\n }\n }\n\n const preservedCode =\n preservedNodes.length > 0\n ? printSync({\n type: \"Module\",\n span: ast.span,\n body: preservedNodes,\n interpreter: ast.interpreter,\n }).code\n : \"\";\n\n const stubCode = stubbedClasses\n .map((stub) => generateStubCode(stub))\n .join(\"\\n\\n\");\n\n return `\n${preservedCode}\n${stubCode}\n `.trim();\n}\n\nfunction hasComponentDecorator(decorators?: Decorator[]): boolean {\n if (!decorators) return false;\n\n return decorators.some((decorator) => {\n const expr = decorator.expression;\n\n if (expr.type === \"CallExpression\") {\n if (\n expr.callee.type === \"Identifier\" &&\n expr.callee.value === \"Component\"\n ) {\n return true;\n }\n }\n\n if (expr.type === \"Identifier\" && expr.value === \"Component\") {\n return true;\n }\n\n return false;\n });\n}\n\nfunction extractClassStub(classDecl: ClassDeclaration): ClassStub | null {\n const className = classDecl.identifier?.value;\n if (!className) return null;\n\n let propsType = \"{}\";\n const decorators: string[] = [];\n const constructorParams: string[] = [];\n\n if (classDecl.decorators) {\n for (const dec of classDecl.decorators) {\n const str = stringifyDecorator(dec);\n if (str) decorators.push(str);\n }\n }\n\n for (const member of classDecl.body) {\n if (member.type === \"ClassProperty\") {\n if (member.key.type === \"Identifier\" && member.key.value === \"props\") {\n propsType = extractPropsType(member);\n }\n } else if (member.type === \"Constructor\") {\n for (const param of member.params) {\n const paramStr = stringifyParam(param);\n if (paramStr) constructorParams.push(paramStr);\n }\n }\n }\n\n const methods = extractMethods(classDecl);\n\n return {\n name: className,\n propsType,\n decorators,\n constructorParams,\n methods,\n };\n}\n\nexport function stringifyDecorator(decorator: Decorator): string {\n const exprCode = printSync({\n type: \"Module\",\n span: { start: 0, end: 0, ctxt: 0 },\n body: [\n {\n type: \"ExpressionStatement\",\n expression: decorator.expression,\n span: { start: 0, end: 0, ctxt: 0 },\n },\n ],\n interpreter: \"\",\n }).code;\n\n const cleanCode = exprCode.replace(/^#!.*\\n/, \"\").trim();\n\n return `@${cleanCode.replace(/;$/, \"\")}`;\n}\n\nfunction extractPropsType(member: any): string {\n const typeAnn = member.typeAnnotation?.typeAnnotation;\n if (!typeAnn) return \"{}\";\n\n if (typeAnn.type === \"TsTypeLiteral\") {\n const props: string[] = [];\n for (const m of typeAnn.members) {\n if (m.type === \"TsPropertySignature\") {\n const key = m.key.type === \"Identifier\" ? m.key.value : \"?\";\n const t = m.typeAnnotation\n ? stringifyType(m.typeAnnotation.typeAnnotation)\n : \"any\";\n props.push(`${key}: ${t}`);\n }\n }\n return `{ ${props.join(\"; \")} }`;\n }\n\n return stringifyType(typeAnn);\n}\n\nfunction stringifyParam(param: any): string {\n let decorators: string[] = [];\n if (param.decorators) {\n for (const d of param.decorators) {\n const str = stringifyDecorator(d);\n if (str) decorators.push(str);\n }\n }\n const decoratorPrefix = decorators.length ? decorators.join(\" \") + \" \" : \"\";\n\n let typeName = \"any\";\n let paramName = \"\";\n let accessibility = \"\";\n\n if (param.type === \"TsParameterProperty\") {\n accessibility = param.accessibility || \"\";\n const inner = param.param;\n if (inner.type !== \"Identifier\") return \"\";\n\n paramName = inner.value;\n if (inner.typeAnnotation?.typeAnnotation) {\n typeName = extractTypeName(inner.typeAnnotation.typeAnnotation);\n }\n } else if (param.type === \"Parameter\") {\n const pat = param.pat;\n if (pat.type !== \"Identifier\") return \"\";\n\n paramName = pat.value;\n if (pat.typeAnnotation?.typeAnnotation) {\n typeName = extractTypeName(pat.typeAnnotation.typeAnnotation);\n }\n } else {\n return \"\";\n }\n\n const accessPrefix = accessibility ? `${accessibility} ` : \"\";\n const result = `${decoratorPrefix}${accessPrefix}${paramName}: ${typeName}`;\n\n return result;\n}\n\nfunction extractTypeName(typeNode: any): string {\n if (\n typeNode.type === \"TsTypeReference\" &&\n typeNode.typeName.type === \"Identifier\"\n ) {\n return typeNode.typeName.value;\n }\n return stringifyType(typeNode);\n}\n\nfunction extractMethods(classDecl: ClassDeclaration): ComponentMethod[] {\n const methods: ComponentMethod[] = [];\n\n for (const member of classDecl.body) {\n if (member.type === \"ClassMethod\") {\n const method = member as any;\n\n const methodName =\n method.key.type === \"Identifier\" ? method.key.value : \"\";\n\n if (!methodName) {\n continue;\n }\n\n const params = extractMethodParams(method.function.params || []);\n const returnType = extractReturnType(method.function.returnType);\n const isAsync = method.function.async || false;\n\n methods.push({\n name: methodName,\n params,\n returnType,\n isAsync,\n });\n }\n }\n\n return methods;\n}\n\nfunction extractMethodParams(params: any[]): MethodParam[] {\n const result: MethodParam[] = [];\n\n for (const param of params) {\n if (param.type === \"Parameter\") {\n const pat = param.pat as any;\n\n if (pat.type === \"Identifier\") {\n const name = pat.value;\n const type = pat.typeAnnotation?.typeAnnotation\n ? stringifyType(pat.typeAnnotation.typeAnnotation)\n : \"any\";\n\n result.push({\n name,\n type,\n });\n }\n }\n }\n\n return result;\n}\n\nfunction extractReturnType(returnType?: any): string {\n if (!returnType || !returnType.typeAnnotation) {\n return \"any\";\n }\n\n const type = returnType.typeAnnotation;\n\n if (type.type === \"TsTypeReference\") {\n const typeName = type.typeName;\n if (typeName.type === \"Identifier\" && typeName.value === \"Promise\") {\n if (type.typeParams && type.typeParams.params.length > 0) {\n return stringifyType(type.typeParams.params[0]);\n }\n }\n }\n\n return stringifyType(type);\n}\n\nfunction stringifyType(typeNode: any): string {\n if (!typeNode) return \"any\";\n\n switch (typeNode.type) {\n case \"TsKeywordType\":\n return typeNode.kind;\n\n case \"TsTypeReference\":\n if (typeNode.typeName.type === \"Identifier\") {\n const baseName = typeNode.typeName.value;\n if (typeNode.typeParams && typeNode.typeParams.params.length > 0) {\n const params = typeNode.typeParams.params\n .map(stringifyType)\n .join(\", \");\n return `${baseName}<${params}>`;\n }\n return baseName;\n }\n return \"any\";\n\n case \"TsArrayType\":\n return `${stringifyType(typeNode.elemType)}[]`;\n\n case \"TsUnionType\":\n return typeNode.types.map(stringifyType).join(\" | \");\n\n case \"TsIntersectionType\":\n return typeNode.types.map(stringifyType).join(\" & \");\n\n case \"TsTypeLiteral\":\n const props = typeNode.members\n .map((member: any) => {\n if (member.type === \"TsPropertySignature\") {\n const key =\n member.key.type === \"Identifier\" ? member.key.value : \"\";\n const type = member.typeAnnotation\n ? stringifyType(member.typeAnnotation.typeAnnotation)\n : \"any\";\n return `${key}: ${type}`;\n }\n return \"\";\n })\n .filter(Boolean);\n return `{ ${props.join(\"; \")} }`;\n\n default:\n return \"any\";\n }\n}\n\nfunction generateStubCode(stub: ClassStub): string {\n const className = stub.name;\n\n const build = stub.methods.find((p) => p.name == \"build\");\n\n if (build == undefined) {\n throw new Error(\"Component has no build function\");\n }\n\n const decoratorsStr =\n stub.decorators.length > 0 ? stub.decorators.join(\"\\n\") + \"\\n\" : \"\";\n\n return `import { \n Inject as _Inject, \n getCurrentInjector as _getCurrentInjector, \n OrcaComponent as _OrcaComponent,\n JSX as _JSX,\n OSC as _OSC,\n HttpClient as _HttpClient,\n symbolValueReviver as _symbolValueReviver\n} from \"@kithinji/orca\";\n\n\n${decoratorsStr}export class ${className} extends _OrcaComponent {\n props!: any;\n\n constructor(\n @_Inject(\"OSC_URL\", { maybe: true }) private oscUrl?: string,\n private readonly http: _HttpClient,\n ${stub.constructorParams.join(\", \")}\n ) {\n super();\n\n if(this.oscUrl === undefined) {\n throw new Error(\"Server component requires osc url be defined\");\n } \n }\n\n build() {\n const root = document.createElement(\"div\");\n root.textContent = \"loading...\";\n\n const injector = _getCurrentInjector();\n\n if(injector == null) {\n throw new Error(\"Injector is null\");\n }\n\n const osc = new _OSC(root);\n\n const subscription = this.http.post<_JSX.Element>(\n \\`\\${this.oscUrl}?c=${className}\\`, {\n body: this.props,\n reviver: _symbolValueReviver,\n }\n ).subscribe((jsx: _JSX.Element) => {\n const action = jsx.action || \"insert\";\n\n if (action === \"insert\") {\n osc.handleInsert(jsx);\n } else if (action === \"update\") {\n osc.handleUpdate(jsx);\n } else {\n console.warn(\\`Unknown action: \\${action}\\`);\n }\n });\n\n this.pushDrop(() => subscription.unsubscribe());\n\n return root;\n }\n}`;\n}\n", "import {\n extractServiceInfo,\n GenerationError,\n parseTypeScript,\n ServiceInfo,\n ServiceMethod,\n serviceNameToPath,\n validateServiceInfo,\n} from \"./utils\";\n\nexport function generateRpcStub(filePath: string, code: string): string {\n try {\n const ast = parseTypeScript(filePath, code);\n const serviceInfo = extractServiceInfo(ast, filePath, false);\n\n if (!serviceInfo) {\n throw {\n type: \"validation\",\n message: \"No exported class with @Injectable decorator found\",\n filePath,\n } as GenerationError;\n }\n\n validateServiceInfo(serviceInfo, filePath);\n return generateStubCode(serviceInfo);\n } catch (error) {\n if ((error as any).type) {\n throw error;\n }\n throw {\n type: \"parse\",\n message: `Failed to parse TypeScript file: ${(error as Error).message}`,\n filePath,\n details: error,\n } as GenerationError;\n }\n}\n\nfunction generateStubCode(serviceInfo: ServiceInfo): string {\n const className = serviceInfo.className;\n const basePath = serviceNameToPath(className);\n\n const methods = serviceInfo.methods\n .map((method) => generateMethod(method, basePath, className))\n .join(\"\\n\\n\");\n\n const hasStreamable = serviceInfo.methods.some((m) => m.isStreamable);\n\n const imports = generateImports(hasStreamable);\n\n return `${imports}\n\n@Injectable()\nexport class ${className} {\n${methods}\n}`;\n}\n\nfunction generateImports(hasStreamable: boolean): string {\n let imports = `import { Injectable } from \"@kithinji/orca\";\\n`;\n\n if (hasStreamable) {\n imports += `import { Observable } from \"@kithinji/orca\";\\n`;\n }\n\n return imports;\n}\n\nfunction generateMethod(\n method: ServiceMethod,\n basePath: string,\n serviceName: string\n): string {\n if (method.isStreamable) {\n return generateSseMethod(method, basePath);\n }\n\n const params = method.params.map((p) => `${p.name}: ${p.type}`).join(\", \");\n const hasParams = method.params.length > 0;\n\n if (!hasParams) {\n return generateGetMethod(method, basePath);\n }\n\n return generatePostMethod(method, basePath, params);\n}\n\nfunction generateSseMethod(method: ServiceMethod, basePath: string): string {\n const params = method.params.map((p) => `${p.name}: ${p.type}`).join(\", \");\n const hasParams = method.params.length > 0;\n\n let urlBuilder: string;\n if (hasParams) {\n const queryParams = method.params\n .map((p) => `${p.name}=\\${encodeURIComponent(${p.name})}`)\n .join(\"&\");\n urlBuilder = `\\`/${basePath}/${method.name}?${queryParams}\\``;\n } else {\n urlBuilder = `\\`/${basePath}/${method.name}\\``;\n }\n\n return ` ${method.name}(${params}): Observable<${method.returnType}> {\n return new Observable((observer) => {\n const eventSource = new EventSource(${urlBuilder});\n\n eventSource.onmessage = (event) => {\n try {\n const data = JSON.parse(event.data);\n observer.next(data);\n } catch (error) {\n observer.error?.(error);\n }\n };\n\n eventSource.onerror = (error) => {\n observer.error?.(error);\n eventSource.close();\n };\n\n return () => {\n eventSource.close();\n };\n });\n }`;\n}\n\nfunction generateGetMethod(method: ServiceMethod, basePath: string): string {\n const params = method.params.map((p) => `${p.name}: ${p.type}`).join(\", \");\n const returnType = `Promise<${method.returnType}>`;\n\n return ` async ${method.name}(${params}): ${returnType} {\n const response = await fetch(\\`/${basePath}/${method.name}\\`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n }\n });\n\n if (!response.ok) {\n throw new Error(\\`HTTP error! status: \\${response.status}\\`);\n }\n\n return response.json();\n }`;\n}\n\nfunction generatePostMethod(\n method: ServiceMethod,\n basePath: string,\n params: string\n): string {\n const paramNames = method.params.map((p) => p.name).join(\", \");\n const returnType = `Promise<${method.returnType}>`;\n\n return ` async ${method.name}(${params}): ${returnType} {\n const response = await fetch(\\`/${basePath}/${method.name}\\`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ ${paramNames} }),\n });\n\n if (!response.ok) {\n throw new Error(\\`HTTP error! status: \\${response.status}\\`);\n }\n\n return response.json();\n }`;\n}\n", "import { parseSync } from \"@swc/core\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport type { Module, Decorator } from \"@swc/core\";\nimport { Store } from \"@/store\";\n\ntype SymbolKind =\n | \"class\"\n | \"function\"\n | \"variable\"\n | \"interface\"\n | \"type\"\n | \"enum\"\n | \"namespace\"\n | \"unknown\";\n\ninterface SymbolInfo {\n name: string;\n kind: SymbolKind;\n decorators?: string[];\n isDefault?: boolean;\n}\n\ninterface ImportInfo {\n sourcePath: string;\n resolvedPath: string | null;\n symbols: SymbolInfo[];\n}\n\nexport interface FileNode {\n filePath: string;\n isTsx: boolean;\n directive: \"public\" | \"interactive\" | null;\n imports: ImportInfo[];\n exports: SymbolInfo[];\n}\n\nexport interface DependencyGraph {\n [filePath: string]: FileNode;\n}\n\nfunction resolveFilePath(fromFile: string, importPath: string): string | null {\n if (!importPath.startsWith(\".\")) return null;\n\n const dir = path.dirname(fromFile);\n const basePath = path.resolve(dir, importPath);\n\n const extensions = [\"\", \".ts\", \".tsx\", \".js\", \".jsx\"];\n for (const ext of extensions) {\n const fullPath = basePath + ext;\n if (fs.existsSync(fullPath) && fs.statSync(fullPath).isFile())\n return fullPath;\n }\n\n const indexFiles = [\"/index.ts\", \"/index.tsx\", \"/index.js\", \"/index.jsx\"];\n for (const indexFile of indexFiles) {\n const fullPath = basePath + indexFile;\n if (fs.existsSync(fullPath) && fs.statSync(fullPath).isFile())\n return fullPath;\n }\n\n return null;\n}\n\nfunction extractDecorators(decorators?: Decorator[]): string[] {\n if (!decorators) return [];\n return decorators\n .map((d) => {\n const exp = d.expression;\n if (exp.type === \"CallExpression\" && exp.callee.type === \"Identifier\")\n return exp.callee.value;\n if (exp.type === \"Identifier\") return exp.value;\n return \"unknown\";\n })\n .filter((n) => n !== \"unknown\");\n}\n\nfunction extractDirective(ast: Module): \"public\" | \"interactive\" | null {\n for (const item of ast.body) {\n if (\n item.type === \"ExpressionStatement\" &&\n item.expression.type === \"StringLiteral\"\n ) {\n const val = item.expression.value;\n if (val === \"use public\") return \"public\";\n if (val === \"use interactive\") return \"interactive\";\n } else {\n break;\n }\n }\n return null;\n}\n\nfunction extractImports(\n ast: Module\n): Array<{ path: string; specifiers: any[] }> {\n const imports: Array<{ path: string; specifiers: any[] }> = [];\n for (const item of ast.body) {\n if (item.type === \"ImportDeclaration\") {\n imports.push({ path: item.source.value, specifiers: item.specifiers });\n }\n }\n return imports;\n}\n\nfunction extractExports(\n ast: Module,\n currentFile: string,\n graph: DependencyGraph,\n processFile: (fp: string) => void\n): SymbolInfo[] {\n const exports: SymbolInfo[] = [];\n\n for (const item of ast.body) {\n if (item.type === \"ExportDeclaration\" && item.declaration) {\n const decl = item.declaration;\n\n if (decl.type === \"ClassDeclaration\" && decl.identifier) {\n const decorators = extractDecorators(decl.decorators);\n exports.push({\n name: decl.identifier.value,\n kind: \"class\",\n decorators: decorators.length > 0 ? decorators : undefined,\n });\n } else if (decl.type === \"FunctionDeclaration\" && decl.identifier) {\n exports.push({ name: decl.identifier.value, kind: \"function\" });\n } else if (decl.type === \"VariableDeclaration\") {\n for (const declarator of decl.declarations) {\n if (declarator.id.type === \"Identifier\") {\n exports.push({ name: declarator.id.value, kind: \"variable\" });\n }\n }\n } else if (decl.type === \"TsInterfaceDeclaration\") {\n exports.push({ name: decl.id.value, kind: \"interface\" });\n } else if (decl.type === \"TsTypeAliasDeclaration\") {\n exports.push({ name: decl.id.value, kind: \"type\" });\n } else if (decl.type === \"TsEnumDeclaration\") {\n exports.push({ name: decl.id.value, kind: \"enum\" });\n }\n }\n\n if (item.type === \"ExportNamedDeclaration\" && item.source) {\n const resolved = resolveFilePath(currentFile, item.source.value);\n if (resolved) {\n processFile(resolved);\n const sourceExports = graph[resolved]?.exports || [];\n for (const spec of item.specifiers) {\n if (spec.type === \"ExportSpecifier\") {\n const exp = sourceExports.find((e) => e.name === spec.orig.value);\n exports.push({\n name: spec.exported?.value || spec.orig.value,\n kind: exp?.kind || \"unknown\",\n decorators: exp?.decorators,\n });\n }\n }\n }\n }\n\n if (item.type === \"ExportAllDeclaration\") {\n const resolved = resolveFilePath(currentFile, item.source.value);\n if (resolved) {\n processFile(resolved);\n const sourceExports = graph[resolved]?.exports || [];\n for (const exp of sourceExports) {\n exports.push({ ...exp });\n }\n }\n }\n\n if (item.type === \"ExportDefaultDeclaration\") {\n const decl = item.decl;\n let kind: SymbolKind = \"unknown\";\n let decorators: string[] | undefined;\n\n if (decl.type === \"ClassExpression\") {\n kind = \"class\";\n decorators = extractDecorators(decl.decorators);\n } else if (decl.type === \"FunctionExpression\") {\n kind = \"function\";\n } else if (decl.type === \"TsInterfaceDeclaration\") {\n kind = \"interface\";\n }\n\n exports.push({\n name: \"default\",\n kind,\n isDefault: true,\n decorators: decorators?.length ? decorators : undefined,\n });\n }\n\n if (item.type === \"ExportDefaultExpression\") {\n exports.push({ name: \"default\", kind: \"unknown\", isDefault: true });\n }\n }\n\n return exports;\n}\n\nexport function buildGraph(entryPoints: string[]): DependencyGraph {\n const graph: DependencyGraph = {};\n const visited = new Set<string>();\n\n function processFile(filePath: string): void {\n const allowedExt = [\".ts\", \".tsx\", \".js\", \".jsx\"];\n if (!allowedExt.includes(path.extname(filePath))) return;\n if (visited.has(filePath)) return;\n visited.add(filePath);\n\n if (!fs.existsSync(filePath)) {\n console.warn(`File not found: ${filePath}`);\n return;\n }\n\n const isTsx = [\".tsx\", \".jsx\"].includes(path.extname(filePath));\n const store = Store.getInstance();\n const newCode = store.get<string>(filePath);\n const content = newCode ? newCode[0] : fs.readFileSync(filePath, \"utf-8\");\n\n const ast = parseSync(content, {\n syntax: \"typescript\",\n tsx: isTsx,\n decorators: true,\n });\n\n const directive = extractDirective(ast);\n const rawImports = extractImports(ast);\n const exports = extractExports(ast, filePath, graph, processFile);\n\n for (const { path: importPath } of rawImports) {\n const resolved = resolveFilePath(filePath, importPath);\n if (resolved) processFile(resolved);\n }\n\n const imports: ImportInfo[] = rawImports.map(\n ({ path: importPath, specifiers }) => {\n const resolvedPath = resolveFilePath(filePath, importPath);\n const sourceExports =\n resolvedPath && graph[resolvedPath]\n ? graph[resolvedPath].exports\n : [];\n const symbols: SymbolInfo[] = [];\n\n for (const spec of specifiers) {\n if (spec.type === \"ImportDefaultSpecifier\") {\n const def = sourceExports.find((e) => e.isDefault);\n symbols.push({\n name: spec.local.value,\n kind: def?.kind || \"unknown\",\n decorators: def?.decorators,\n isDefault: true,\n });\n } else if (spec.type === \"ImportNamespaceSpecifier\") {\n symbols.push({ name: spec.local.value, kind: \"namespace\" });\n } else if (spec.type === \"ImportSpecifier\") {\n const importedName = spec.imported\n ? spec.imported.value\n : spec.local.value;\n const exp = sourceExports.find((e) => e.name === importedName);\n symbols.push({\n name: importedName,\n kind: exp?.kind || \"unknown\",\n decorators: exp?.decorators,\n });\n }\n }\n\n return { sourcePath: importPath, resolvedPath, symbols };\n }\n );\n\n graph[filePath] = { filePath, isTsx, directive, imports, exports };\n }\n\n for (const entry of entryPoints) processFile(path.resolve(entry));\n\n return graph;\n}\n", "import { Store } from \"@/store\";\nimport { PluginBuild } from \"esbuild\";\nimport * as fs from \"fs\";\n\nexport function stylePlugin(store: Store) {\n return {\n name: \"style\",\n setup(build: PluginBuild) {\n build.onEnd(() => {\n const styleRules = store.get(\"style_rules\");\n\n if (!styleRules || styleRules.length === 0) {\n console.log(\"No style rules generated\");\n return;\n }\n\n const allRules = styleRules.flat();\n const uniqueRules = [...new Set(allRules)];\n\n const cssOutput = uniqueRules.join(\"\\n\");\n fs.writeFileSync(\"public/index.css\", cssOutput);\n });\n },\n };\n}\n", "import * as fs from \"fs/promises\";\n\nexport interface HtmlPreprocessorOptions {\n injectScripts?: string[];\n injectStyles?: string[];\n replaceVariables?: Record<string, string>;\n transformers?: HtmlTransformer[];\n minify?: boolean;\n}\n\nexport type HtmlTransformer = (html: string) => string | Promise<string>;\n\nexport class HtmlPreprocessor {\n private options: HtmlPreprocessorOptions;\n\n constructor(options: HtmlPreprocessorOptions = {}) {\n this.options = options;\n }\n\n async processFile(inputPath: string, outputPath: string): Promise<void> {\n const html = await fs.readFile(inputPath, \"utf-8\");\n const processed = await this.process(html);\n await fs.writeFile(outputPath, processed, \"utf-8\");\n }\n\n async process(html: string): Promise<string> {\n let result = html;\n\n if (this.options.transformers) {\n for (const transformer of this.options.transformers) {\n result = await transformer(result);\n }\n }\n\n if (this.options.injectScripts && this.options.injectScripts.length > 0) {\n result = this.injectScripts(result, this.options.injectScripts);\n }\n\n if (this.options.injectStyles && this.options.injectStyles.length > 0) {\n result = this.injectStyles(result, this.options.injectStyles);\n }\n\n if (this.options.replaceVariables) {\n result = this.replaceVariables(result, this.options.replaceVariables);\n }\n\n if (this.options.minify) {\n result = this.minify(result);\n }\n\n return result;\n }\n\n private injectScripts(html: string, scripts: string[]): string {\n const scriptTags = scripts\n .map((src) => ` <script src=\"${src}\"></script>`)\n .join(\"\\n\");\n\n if (html.includes(\"</body>\")) {\n return html.replace(\"</body>\", `${scriptTags}\\n</body>`);\n } else if (html.includes(\"</head>\")) {\n return html.replace(\"</head>\", `${scriptTags}\\n</head>`);\n } else {\n return html + `\\n${scriptTags}`;\n }\n }\n\n private injectStyles(html: string, styles: string[]): string {\n const styleTags = styles\n .map((href) => ` <link rel=\"stylesheet\" href=\"${href}\">`)\n .join(\"\\n\");\n\n if (html.includes(\"</head>\")) {\n return html.replace(\"</head>\", `${styleTags}\\n</head>`);\n } else if (html.includes(\"<head>\")) {\n return html.replace(\"<head>\", `<head>\\n${styleTags}`);\n } else {\n return styleTags + \"\\n\" + html;\n }\n }\n\n private replaceVariables(\n html: string,\n variables: Record<string, string>\n ): string {\n let result = html;\n for (const [key, value] of Object.entries(variables)) {\n result = result.replace(new RegExp(`\\\\{\\\\{${key}\\\\}\\\\}`, \"g\"), value);\n result = result.replace(new RegExp(`\\\\$\\\\{${key}\\\\}`, \"g\"), value);\n }\n return result;\n }\n\n private minify(html: string): string {\n return html\n .replace(/<!--[\\s\\S]*?-->/g, \"\")\n .replace(/\\s+/g, \" \")\n .replace(/>\\s+</g, \"><\")\n .trim();\n }\n}\n\nexport function createHotReloadTransformer(\n port: number\n): (html: string) => string {\n return (html: string) => {\n const hotReloadScript = `\n<script>\n(function() {\n let ws;\n let reconnectAttempts = 0;\n const maxReconnectAttempts = 10;\n\n function connect() {\n ws = new WebSocket('ws://localhost:${port}');\n \n ws.onopen = () => {\n reconnectAttempts = 0;\n };\n \n ws.onmessage = (event) => {\n if (event.data === 'reload') {\n window.location.reload();\n }\n };\n \n ws.onclose = () => { \n if (reconnectAttempts < maxReconnectAttempts) {\n reconnectAttempts++;\n console.log(\\`\uD83D\uDD04 Reconnecting... (attempt \\${reconnectAttempts}/\\${maxReconnectAttempts})\\`);\n setTimeout(connect, 1000 * reconnectAttempts);\n } else {\n console.log('\u274C Max reconnection attempts reached');\n }\n };\n \n ws.onerror = (error) => {\n console.error('\uD83D\uDD25 Hot reload error:', error);\n };\n }\n \n connect();\n})();\n</script>`;\n\n if (html.includes(\"</body>\")) {\n return html.replace(\"</body>\", `${hotReloadScript}\\n</body>`);\n }\n return html + hotReloadScript;\n };\n}\n\nexport const createMetaTagsTransformer = (\n meta: Record<string, string>\n): HtmlTransformer => {\n return (html: string) => {\n const metaTags = Object.entries(meta)\n .map(([name, content]) => ` <meta name=\"${name}\" content=\"${content}\">`)\n .join(\"\\n\");\n\n if (html.includes(\"</head>\")) {\n return html.replace(\"</head>\", `${metaTags}\\n</head>`);\n } else if (html.includes(\"<head>\")) {\n return html.replace(\"<head>\", `<head>\\n${metaTags}`);\n }\n return metaTags + \"\\n\" + html;\n };\n};\n\nexport async function preprocessHtml(\n inputPath: string,\n outputPath: string,\n options?: HtmlPreprocessorOptions\n): Promise<void> {\n const preprocessor = new HtmlPreprocessor(options);\n await preprocessor.processFile(inputPath, outputPath);\n}\n", "export * from \"./config\"", "import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as ts from \"typescript\";\n\nabstract class ComponentDefinition {\n abstract name: string;\n abstract dependencies: string[];\n abstract generate(): string;\n}\n\nclass ButtonComponent extends ComponentDefinition {\n name = \"button\";\n dependencies: string[] = [];\n\n generate(): string {\n return `\"use interactive\";\n\nimport { Component, JSX } from \"@kithinji/orca\";\n\n@Component()\nexport class Button {\n props!: {\n children: any\n };\n \n build() {\n return (\n <button>\n {this.props.children}\n </button>\n );\n }\n}\n`;\n }\n}\n\nclass InputComponent extends ComponentDefinition {\n name = \"input\";\n dependencies: string[] = [];\n\n generate(): string {\n return `\"use interactive\";\n\nimport { Component } from \"@kithinji/orca\";\n\n@Component()\nexport class Input { \n build() {\n return (\n <input />\n );\n }\n}\n`;\n }\n}\n\nclass FormComponent extends ComponentDefinition {\n name = \"form\";\n dependencies = [\"button\", \"input\"];\n\n generate(): string {\n return `\"use interactive\";\n\nimport { Component } from \"@kithinji/orca\";\nimport { Button } from \"./button.component\";\nimport { Input } from \"./input.component\";\n\n@Component()\nexport class Form {\n props!: {\n onSubmit?: () => void;\n };\n \n build() {\n return (\n <form onSubmit={this.props.onSubmit}>\n <Input />\n <Button>Submit</Button>\n </form>\n );\n }\n}\n`;\n }\n}\n\nclass CardComponent extends ComponentDefinition {\n name = \"card\";\n dependencies = [\"button\"];\n\n generate(): string {\n return `\"use interactive\";\n \nimport { Component } from \"@kithinji/orca\";\nimport { Button } from \"./button.component\";\n\n@Component()\nexport class Card {\n props!: {\n title: string;\n children: any;\n onAction?: () => void;\n };\n \n build() {\n return (\n <div className=\"card\">\n <h3>{this.props.title}</h3>\n <div>{this.props.children}</div>\n {this.props.onAction && (\n <Button onClick={this.props.onAction}>Action</Button>\n )}\n </div>\n );\n }\n}\n`;\n }\n}\n\nclass ComponentRegistry {\n private static components = new Map<string, ComponentDefinition>([\n [\"button\", new ButtonComponent()],\n [\"input\", new InputComponent()],\n [\"form\", new FormComponent()],\n [\"card\", new CardComponent()],\n ]);\n\n static get(name: string): ComponentDefinition | undefined {\n return this.components.get(name);\n }\n\n static has(name: string): boolean {\n return this.components.has(name);\n }\n\n static getAll(): string[] {\n return Array.from(this.components.keys());\n }\n\n static register(component: ComponentDefinition): void {\n this.components.set(component.name, component);\n }\n}\n\nexport function addComponent(\n name: string,\n processedComponents: Set<string> = new Set()\n) {\n if (processedComponents.has(name)) {\n return;\n }\n\n const component = ComponentRegistry.get(name);\n if (!component) {\n throw new Error(\n `Component \"${name}\" not found. Available components: ${ComponentRegistry.getAll().join(\n \", \"\n )}`\n );\n }\n\n processedComponents.add(name);\n\n if (component.dependencies.length > 0) {\n console.log(\n `\\nProcessing dependencies for \"${name}\": [${component.dependencies.join(\n \", \"\n )}]`\n );\n for (const dependency of component.dependencies) {\n addComponent(dependency, processedComponents);\n }\n }\n\n const componentModulePath = path.join(\n process.cwd(),\n \"src/component/component.module.ts\"\n );\n const componentPath = path.join(\n process.cwd(),\n `src/component/component/${name}.component.tsx`\n );\n const componentDir = path.dirname(componentPath);\n const appModulePath = path.join(process.cwd(), \"src/app/app.module.ts\");\n\n if (!fs.existsSync(componentModulePath)) {\n const moduleDir = path.dirname(componentModulePath);\n if (!fs.existsSync(moduleDir)) {\n fs.mkdirSync(moduleDir, { recursive: true });\n }\n fs.writeFileSync(componentModulePath, createModule(), \"utf-8\");\n }\n\n if (!fs.existsSync(componentDir)) {\n fs.mkdirSync(componentDir, { recursive: true });\n }\n\n if (!fs.existsSync(componentPath)) {\n fs.writeFileSync(componentPath, component.generate(), \"utf-8\");\n console.log(`Created ${name}.component.tsx`);\n } else {\n console.log(`${name}.component.tsx already exists, skipping file creation`);\n }\n\n const moduleContent = fs.readFileSync(componentModulePath, \"utf-8\");\n const updatedModule = updateModuleWithComponent(moduleContent, name);\n fs.writeFileSync(componentModulePath, updatedModule, \"utf-8\");\n\n if (fs.existsSync(appModulePath)) {\n const appModuleContent = fs.readFileSync(appModulePath, \"utf-8\");\n const updatedAppModule = ensureComponentModuleImported(appModuleContent);\n if (updatedAppModule !== appModuleContent) {\n fs.writeFileSync(appModulePath, updatedAppModule, \"utf-8\");\n }\n }\n}\n\nexport function getComponentDependencies(\n name: string,\n visited: Set<string> = new Set()\n): string[] {\n if (visited.has(name)) {\n return [];\n }\n\n const component = ComponentRegistry.get(name);\n if (!component) {\n return [];\n }\n\n visited.add(name);\n const allDeps: string[] = [];\n\n for (const dep of component.dependencies) {\n allDeps.push(dep);\n allDeps.push(...getComponentDependencies(dep, visited));\n }\n\n return [...new Set(allDeps)];\n}\n\nexport function printDependencyTree(name: string, indent: string = \"\"): void {\n const component = ComponentRegistry.get(name);\n if (!component) {\n console.log(`${indent}${name} (not found)`);\n return;\n }\n\n console.log(`${indent}${name}`);\n for (const dep of component.dependencies) {\n printDependencyTree(dep, indent + \" \u251C\u2500 \");\n }\n}\n\nexport function listComponents(): void {\n console.log(\"\\nAvailable components:\");\n for (const name of ComponentRegistry.getAll()) {\n const component = ComponentRegistry.get(name)!;\n const depsInfo =\n component.dependencies.length > 0\n ? ` (depends on: ${component.dependencies.join(\", \")})`\n : \" (no dependencies)\";\n console.log(` - ${name}${depsInfo}`);\n }\n}\n\nfunction updateModuleWithComponent(\n moduleContent: string,\n componentName: string\n): string {\n const className = capitalize(componentName);\n const importPath = `./component/${componentName}.component`;\n\n const sourceFile = ts.createSourceFile(\n \"component.module.ts\",\n moduleContent,\n ts.ScriptTarget.Latest,\n true\n );\n\n const hasImport = sourceFile.statements.some((statement) => {\n if (ts.isImportDeclaration(statement)) {\n const moduleSpecifier = statement.moduleSpecifier;\n if (ts.isStringLiteral(moduleSpecifier)) {\n return moduleSpecifier.text === importPath;\n }\n }\n return false;\n });\n\n if (hasImport) {\n return moduleContent;\n }\n\n let lastImportEnd = 0;\n sourceFile.statements.forEach((statement) => {\n if (ts.isImportDeclaration(statement)) {\n lastImportEnd = statement.end;\n }\n });\n\n const importStatement = `import { ${className} } from \"${importPath}\";\\n`;\n let updatedContent =\n moduleContent.slice(0, lastImportEnd) +\n \"\\n\" +\n importStatement +\n moduleContent.slice(lastImportEnd);\n\n const newSourceFile = ts.createSourceFile(\n \"component.module.ts\",\n updatedContent,\n ts.ScriptTarget.Latest,\n true\n );\n\n updatedContent = addToDecoratorArray(\n updatedContent,\n newSourceFile,\n \"declarations\",\n className\n );\n updatedContent = addToDecoratorArray(\n updatedContent,\n ts.createSourceFile(\n \"component.module.ts\",\n updatedContent,\n ts.ScriptTarget.Latest,\n true\n ),\n \"exports\",\n className\n );\n\n return updatedContent;\n}\n\nfunction addToDecoratorArray(\n content: string,\n sourceFile: ts.SourceFile,\n arrayName: string,\n className: string\n): string {\n let decoratorNode: ts.Decorator | undefined;\n\n sourceFile.statements.forEach((statement) => {\n if (ts.isClassDeclaration(statement) && statement.modifiers) {\n statement.modifiers.forEach((modifier) => {\n if (ts.isDecorator(modifier)) {\n const expression = modifier.expression;\n if (ts.isCallExpression(expression)) {\n const expressionText = expression.expression.getText(sourceFile);\n if (expressionText === \"Module\") {\n decoratorNode = modifier;\n }\n }\n }\n });\n }\n });\n\n if (!decoratorNode) {\n console.warn(\"Could not find @Module decorator\");\n return content;\n }\n\n const callExpression = decoratorNode.expression as ts.CallExpression;\n const objectLiteral = callExpression\n .arguments[0] as ts.ObjectLiteralExpression;\n\n if (!objectLiteral || !ts.isObjectLiteralExpression(objectLiteral)) {\n return content;\n }\n\n let targetProperty: ts.PropertyAssignment | undefined;\n objectLiteral.properties.forEach((prop) => {\n if (ts.isPropertyAssignment(prop)) {\n const propName = prop.name.getText(sourceFile);\n if (propName === arrayName) {\n targetProperty = prop;\n }\n }\n });\n\n if (!targetProperty) {\n console.warn(`Could not find ${arrayName} property`);\n return content;\n }\n\n const arrayLiteral = targetProperty.initializer;\n if (!ts.isArrayLiteralExpression(arrayLiteral)) {\n return content;\n }\n\n const hasClassName = arrayLiteral.elements.some((element) => {\n return element.getText(sourceFile).trim() === className;\n });\n\n if (hasClassName) {\n return content;\n }\n\n const arrayStart = arrayLiteral.getStart(sourceFile);\n const arrayEnd = arrayLiteral.getEnd();\n\n if (arrayLiteral.elements.length === 0) {\n const newArray = `[${className}]`;\n return (\n content.substring(0, arrayStart) + newArray + content.substring(arrayEnd)\n );\n }\n\n const lastElement = arrayLiteral.elements[arrayLiteral.elements.length - 1];\n const insertPos = lastElement.getEnd();\n const newElement = `, ${className}`;\n\n return (\n content.substring(0, insertPos) + newElement + content.substring(insertPos)\n );\n}\n\nfunction ensureComponentModuleImported(appModuleContent: string): string {\n const sourceFile = ts.createSourceFile(\n \"app.module.ts\",\n appModuleContent,\n ts.ScriptTarget.Latest,\n true\n );\n\n const hasComponentModuleImport = sourceFile.statements.some((statement) => {\n if (ts.isImportDeclaration(statement) && statement.importClause) {\n const namedBindings = statement.importClause.namedBindings;\n if (namedBindings && ts.isNamedImports(namedBindings)) {\n return namedBindings.elements.some(\n (element) => element.name.text === \"ComponentModule\"\n );\n }\n }\n return false;\n });\n\n if (hasComponentModuleImport) {\n return ensureInImportsArray(appModuleContent, sourceFile);\n }\n\n let lastImportEnd = 0;\n sourceFile.statements.forEach((statement) => {\n if (ts.isImportDeclaration(statement)) {\n lastImportEnd = statement.end;\n }\n });\n\n const importStatement = `import { ComponentModule } from \"../component/component.module\";\\n`;\n let updatedContent =\n appModuleContent.slice(0, lastImportEnd) +\n \"\\n\" +\n importStatement +\n appModuleContent.slice(lastImportEnd);\n\n const newSourceFile = ts.createSourceFile(\n \"app.module.ts\",\n updatedContent,\n ts.ScriptTarget.Latest,\n true\n );\n\n updatedContent = ensureInImportsArray(updatedContent, newSourceFile);\n\n return updatedContent;\n}\n\nfunction ensureInImportsArray(\n content: string,\n sourceFile: ts.SourceFile\n): string {\n return addToDecoratorArray(content, sourceFile, \"imports\", \"ComponentModule\");\n}\n\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nfunction createModule() {\n return `import { Module } from \"@kithinji/orca\";\n\n@Module({\n imports: [],\n providers: [],\n declarations: [],\n exports: [],\n})\nexport class ComponentModule {}\n`;\n}\n", "export function toCamelCase(str: string): string {\n return str\n .replace(/[-_](.)/g, (_, char) => char.toUpperCase())\n .replace(/^./, (char) => char.toLowerCase());\n}\n\nexport function toPascalCase(str: string): string {\n return str\n .replace(/[-_](.)/g, (_, char) => char.toUpperCase())\n .replace(/^./, (char) => char.toUpperCase());\n}\n\nexport function toSnakeCase(str: string): string {\n return str.replace(/[-\\s]/g, \"_\").toLowerCase();\n}\n", "import * as fs from \"fs\";\nimport * as path from \"path\";\n\ninterface FileEntry {\n name: string;\n content: string;\n}\n\nexport interface DirEntry {\n name?: string;\n files?: FileEntry[];\n dirs?: DirEntry[];\n}\n\nexport function createStructure(basePath: string, entry: DirEntry) {\n fs.mkdirSync(basePath, { recursive: true });\n\n entry.files?.forEach((file) => {\n fs.writeFileSync(path.join(basePath, file.name), file.content);\n });\n\n entry.dirs?.forEach((dir) => {\n const dirPath = path.join(basePath, dir.name || \"\");\n createStructure(dirPath, dir);\n });\n}\n", "import { createStructure, DirEntry } from \"@/utils\";\nimport path from \"path\";\nimport { addModule } from \"../module\";\nimport { addComponent } from \"../component\";\n\nexport function addNew(name: string) {\n const baseDir = path.join(process.cwd(), name);\n\n const structure: DirEntry = {\n files: [\n { name: \"package.json\", content: genPackageJson(name) },\n { name: \"tsconfig.json\", content: gentsconfig() },\n { name: \"pod.config.ts\", content: genPodConfig(name) },\n { name: \"README.md\", content: genReadMe() },\n { name: \".gitignore\", content: genGitIgnore() },\n { name: \".env\", content: genEnv() },\n ],\n dirs: [\n {\n name: \"src\",\n files: [{ name: \"main.ts\", content: genMainTs() }],\n dirs: [\n {\n name: \"client\",\n files: [\n { name: \"index.html\", content: genIndexHtml(name) },\n { name: \"client.tsx\", content: genClientTsx() },\n ],\n },\n ],\n },\n ],\n };\n\n createStructure(baseDir, structure);\n\n const appDir = path.join(process.cwd(), name, \"src\", \"app\");\n\n addModule(\"app\", appDir, true);\n\n process.chdir(baseDir);\n\n addComponent(\"button\");\n\n console.log(`App ${name} created successfully`);\n}\n\nfunction genPackageJson(name: string) {\n const pj = {\n name,\n private: true,\n version: \"0.0.0\",\n type: \"module\",\n scripts: {\n dev: \"pod dev\",\n build: \"pod build\",\n start: \"pod start\",\n },\n dependencies: {\n \"reflect-metadata\": \"latest\",\n zod: \"^4.2.1\",\n \"@kithinji/orca\": \"latest\",\n \"@kithinji/arcane\": \"latest\",\n },\n devDependencies: {\n \"@types/node\": \"^20.19.27\",\n typescript: \"~5.9.3\",\n \"@kithinji/pod\": \"latest\",\n },\n };\n\n return JSON.stringify(pj, null, 2);\n}\n\nfunction gentsconfig() {\n const tsconfig = {\n compilerOptions: {\n target: \"ES2020\",\n module: \"ESNext\",\n moduleResolution: \"bundler\",\n strict: true,\n esModuleInterop: true,\n skipLibCheck: true,\n jsx: \"react-jsx\",\n jsxImportSource: \"@kithinji/orca\",\n experimentalDecorators: true,\n emitDecoratorMetadata: true,\n baseUrl: \".\",\n paths: {\n \"@/*\": [\"src/*\"],\n },\n },\n include: [\"src\"],\n };\n\n return JSON.stringify(tsconfig, null, 2);\n}\n\nfunction genPodConfig(name: string) {\n return `import { PodConfig, stylePlugin } from \"@kithinji/pod\";\n\nexport default function defaultConfig(): PodConfig {\n return {\n name: \"${name}\",\n client_plugins: [stylePlugin],\n };\n} \n`;\n}\n\nfunction genReadMe() {\n return `# Pod Project \n`;\n}\n\nfunction genGitIgnore() {\n return `node_modules\ndist\nbuild\n.orca\n*.log\n.env\n.DS_Store\n`;\n}\n\nfunction genEnv() {\n return `HOST=localhost\n`;\n}\n\nfunction genIndexHtml(name: string) {\n return `<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>${name} app</title>\n <link rel=\"stylesheet\" href=\"index.css\" />\n </head>\n <body>\n <div id=\"root\"></div>\n <script type=\"module\" src=\"/src/client/client.js\"></script>\n </body>\n</html>\n`;\n}\n\nfunction genClientTsx() {\n return `\"use interactive\";\n\nimport {\n Module,\n BrowserFactory,\n Component,\n RouterModule,\n RouterOutlet,\n HttpClientModule,\n} from \"@kithinji/orca\";\n\n@Component({\n deps: [RouterOutlet],\n})\nclass AppComponent {\n build() {\n return <RouterOutlet />;\n }\n}\n\n@Module({\n imports: [RouterModule.forRoot(), HttpClientModule],\n declarations: [AppComponent],\n bootstrap: AppComponent,\n})\nclass AppModule {}\n\nexport function bootstrap() {\n BrowserFactory.create(AppModule, document.getElementById(\"root\")!);\n}\n\nbootstrap();\n\n/* Don't modify */\nexport { Navigate, getCurrentInjector } from \"@kithinji/orca\";\n`;\n}\n\nfunction genMainTs() {\n return `import { NodeFactory } from \"@kithinji/orca\";\nimport { AppModule } from \"./app/app.module\";\n\nasync function bootstrap() {\n const app = await NodeFactory.create(AppModule);\n app.listen(8080, () => {\n console.log(\"Server started\");\n });\n}\n\nbootstrap();\n`;\n}\n", "import { createStructure, DirEntry, toCamelCase, toPascalCase } from \"@/utils\";\nimport * as path from \"path\";\nimport * as fs from \"fs\";\nimport * as ts from \"typescript\";\n\nexport function addFeature(name: string) {\n const featureDir = path.join(process.cwd(), \"src\", \"features\", name);\n\n addModule(name, featureDir);\n\n updateFeaturesIndex(name);\n\n updateAppModule(name);\n}\n\nexport function addModule(name: string, baseDir: string, root?: boolean) {\n const structure: DirEntry = {\n files: [\n { name: `${name}.module.ts`, content: createModule(name, root) },\n { name: `${name}.service.ts`, content: createService(name) },\n { name: `${name}.page.tsx`, content: createPage(name) },\n ],\n dirs: [\n {\n name: \"schemas\",\n files: [\n {\n name: \"get.ts\",\n content: createGetSchema(name),\n },\n {\n name: \"create.ts\",\n content: createCreateSchema(name),\n },\n {\n name: \"update.ts\",\n content: createUpdateSchema(name),\n },\n {\n name: \"list.ts\",\n content: createListSchema(name),\n },\n {\n name: \"delete.ts\",\n content: createDeleteSchema(name),\n },\n ],\n },\n {\n name: \"components\",\n files: [\n {\n name: `${name}-list.component.tsx`,\n content: createListComponent(name),\n },\n ],\n },\n ],\n };\n\n createStructure(baseDir, structure);\n}\n\nfunction updateFeaturesIndex(featureName: string) {\n const featuresIndexPath = path.join(\n process.cwd(),\n \"src\",\n \"features\",\n \"index.ts\"\n );\n\n const moduleName = toPascalCase(featureName + \"_\" + \"Module\");\n const importPath = `./${featureName}/${featureName}.module`;\n\n if (fs.existsSync(featuresIndexPath)) {\n let content = fs.readFileSync(featuresIndexPath, \"utf-8\");\n const sourceFile = ts.createSourceFile(\n \"index.ts\",\n content,\n ts.ScriptTarget.Latest,\n true\n );\n\n const hasExport = sourceFile.statements.some((statement) => {\n if (ts.isExportDeclaration(statement)) {\n const moduleSpecifier = statement.moduleSpecifier;\n if (moduleSpecifier && ts.isStringLiteral(moduleSpecifier)) {\n return moduleSpecifier.text === importPath;\n }\n if (\n statement.exportClause &&\n ts.isNamedExports(statement.exportClause)\n ) {\n return statement.exportClause.elements.some(\n (element) => element.name.text === moduleName\n );\n }\n }\n return false;\n });\n\n if (hasExport) {\n return;\n }\n\n const exportStatement = `export { ${moduleName} } from \"${importPath}\";\\n`;\n fs.appendFileSync(featuresIndexPath, exportStatement);\n } else {\n const featuresDir = path.dirname(featuresIndexPath);\n if (!fs.existsSync(featuresDir)) {\n fs.mkdirSync(featuresDir, { recursive: true });\n }\n\n const exportStatement = `export { ${moduleName} } from \"${importPath}\";\\n`;\n fs.writeFileSync(featuresIndexPath, exportStatement, \"utf-8\");\n }\n}\n\nfunction updateAppModule(featureName: string) {\n const appModulePath = path.join(process.cwd(), \"src\", \"app\", \"app.module.ts\");\n\n if (!fs.existsSync(appModulePath)) {\n return;\n }\n\n const moduleName = toPascalCase(featureName + \"_\" + \"Module\");\n let content = fs.readFileSync(appModulePath, \"utf-8\");\n\n const sourceFile = ts.createSourceFile(\n \"app.module.ts\",\n content,\n ts.ScriptTarget.Latest,\n true\n );\n\n const hasImport = sourceFile.statements.some((statement) => {\n if (ts.isImportDeclaration(statement)) {\n const moduleSpecifier = statement.moduleSpecifier;\n if (ts.isStringLiteral(moduleSpecifier)) {\n const importPath = moduleSpecifier.text;\n return importPath.includes(`/${featureName}/${featureName}.module`);\n }\n\n if (\n statement.importClause?.namedBindings &&\n ts.isNamedImports(statement.importClause.namedBindings)\n ) {\n return statement.importClause.namedBindings.elements.some(\n (element) => element.name.text === moduleName\n );\n }\n }\n return false;\n });\n\n if (hasImport) {\n content = addToModuleImportsArray(content, sourceFile, moduleName);\n fs.writeFileSync(appModulePath, content, \"utf-8\");\n return;\n }\n\n let lastImportEnd = 0;\n sourceFile.statements.forEach((statement) => {\n if (ts.isImportDeclaration(statement)) {\n lastImportEnd = statement.end;\n }\n });\n\n const importStatement = `import { ${moduleName} } from \"../features/${featureName}/${featureName}.module\";\\n`;\n content =\n content.slice(0, lastImportEnd) +\n \"\\n\" +\n importStatement +\n content.slice(lastImportEnd);\n\n const newSourceFile = ts.createSourceFile(\n \"app.module.ts\",\n content,\n ts.ScriptTarget.Latest,\n true\n );\n\n content = addToModuleImportsArray(content, newSourceFile, moduleName);\n\n fs.writeFileSync(appModulePath, content, \"utf-8\");\n}\n\nfunction addToModuleImportsArray(\n content: string,\n sourceFile: ts.SourceFile,\n moduleName: string\n): string {\n let decoratorNode: ts.Decorator | undefined;\n\n sourceFile.statements.forEach((statement) => {\n if (ts.isClassDeclaration(statement) && statement.modifiers) {\n statement.modifiers.forEach((modifier) => {\n if (ts.isDecorator(modifier)) {\n const expression = modifier.expression;\n if (ts.isCallExpression(expression)) {\n const expressionText = expression.expression.getText(sourceFile);\n if (expressionText === \"Module\") {\n decoratorNode = modifier;\n }\n }\n }\n });\n }\n });\n\n if (!decoratorNode) {\n return content;\n }\n\n const callExpression = decoratorNode.expression as ts.CallExpression;\n const objectLiteral = callExpression\n .arguments[0] as ts.ObjectLiteralExpression;\n\n if (!objectLiteral || !ts.isObjectLiteralExpression(objectLiteral)) {\n return content;\n }\n\n let importsProperty: ts.PropertyAssignment | undefined;\n objectLiteral.properties.forEach((prop) => {\n if (ts.isPropertyAssignment(prop)) {\n const propName = prop.name.getText(sourceFile);\n if (propName === \"imports\") {\n importsProperty = prop;\n }\n }\n });\n\n if (!importsProperty) {\n return content;\n }\n\n const arrayLiteral = importsProperty.initializer;\n if (!ts.isArrayLiteralExpression(arrayLiteral)) {\n return content;\n }\n\n const hasModule = arrayLiteral.elements.some((element) => {\n return element.getText(sourceFile).trim() === moduleName;\n });\n\n if (hasModule) {\n return content;\n }\n\n const arrayStart = arrayLiteral.getStart(sourceFile);\n const arrayEnd = arrayLiteral.getEnd();\n\n if (arrayLiteral.elements.length === 0) {\n const newArray = `[${moduleName}]`;\n return (\n content.substring(0, arrayStart) + newArray + content.substring(arrayEnd)\n );\n }\n\n const lastElement = arrayLiteral.elements[arrayLiteral.elements.length - 1];\n const insertPos = lastElement.getEnd();\n const newElement = `, ${moduleName}`;\n\n return (\n content.substring(0, insertPos) + newElement + content.substring(insertPos)\n );\n}\n\nfunction createModule(name: string, root?: boolean) {\n const serviceName = toPascalCase(name + \"_\" + \"Service\");\n const pageName = toPascalCase(name + \"_\" + \"Page\");\n const moduleName = toPascalCase(name + \"_\" + \"Module\");\n const componentName = toPascalCase(name + \"_\" + \"List\");\n\n if (root) {\n return `import { Module, RouterModule, ServeStaticModule } from \"@kithinji/orca\";\nimport { ComponentModule } from \"@/component/component.module\";\nimport { ${serviceName} } from \"./${name}.service\";\nimport { ${pageName} } from \"./${name}.page\";\nimport { ${componentName} } from \"./components/${name}-list.component\";\n\n@Module({\n imports: [\n ServeStaticModule.forRoot({\n rootPath: \"./public\",\n }),\n RouterModule.forRoot(),\n ComponentModule\n ],\n providers: [${serviceName}],\n declarations: [${pageName}, ${componentName}],\n exports: [${serviceName}, ${pageName}],\n bootstrap: ${pageName}\n})\nexport class ${moduleName} {}\n`;\n }\n\n return `import { Module } from \"@kithinji/orca\";\nimport { ComponentModule } from \"@/component/component.module\";\nimport { ${serviceName} } from \"./${name}.service\";\nimport { ${pageName} } from \"./${name}.page\";\nimport { ${componentName} } from \"./components/${name}-list.component\";\n\n@Module({\n imports: [ComponentModule],\n providers: [${serviceName}],\n declarations: [${pageName}, ${componentName}],\n exports: [${serviceName}, ${pageName}],\n})\nexport class ${moduleName} {}\n`;\n}\n\nfunction createGetSchema(name: string) {\n return `import { z } from \"zod\";\n\nexport const ${toCamelCase(name + \"_\" + \"GetInput\")} = z.object({\n id: z.string().uuid(),\n});\n\nexport const ${toCamelCase(name + \"_\" + \"GetOutput\")} = z.object({\n id: z.string().uuid(),\n name: z.string(),\n description: z.string().optional(),\n createdAt: z.date(),\n updatedAt: z.date().optional(),\n});\n`;\n}\n\nfunction createCreateSchema(name: string) {\n return `import { z } from \"zod\";\n\nexport const ${toCamelCase(name + \"_\" + \"CreateInput\")} = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n});\n\nexport const ${toCamelCase(name + \"_\" + \"CreateOutput\")} = z.object({\n id: z.string().uuid(),\n name: z.string(),\n description: z.string().optional(),\n createdAt: z.date(),\n});\n`;\n}\n\nfunction createUpdateSchema(name: string) {\n return `import { z } from \"zod\";\n\nexport const ${toCamelCase(name + \"_\" + \"UpdateInput\")} = z.object({\n id: z.string().uuid(),\n name: z.string().min(1).optional(),\n description: z.string().optional(),\n});\n\nexport const ${toCamelCase(name + \"_\" + \"UpdateOutput\")} = z.object({\n id: z.string().uuid(),\n name: z.string(),\n description: z.string().optional(),\n createdAt: z.date(),\n updatedAt: z.date(),\n});\n`;\n}\n\nfunction createListSchema(name: string) {\n return `import { z } from \"zod\";\n\nexport const ${toCamelCase(name + \"_\" + \"ListOutput\")} = z.array(\n z.object({\n id: z.string().uuid(),\n name: z.string(),\n description: z.string().optional(),\n createdAt: z.date(),\n updatedAt: z.date().optional(),\n })\n);\n`;\n}\n\nfunction createDeleteSchema(name: string) {\n return `import { z } from \"zod\";\n\nexport const ${toCamelCase(name + \"_\" + \"DeleteInput\")} = z.object({\n id: z.string().uuid(),\n});\n\nexport const ${toCamelCase(name + \"_\" + \"DeleteOutput\")} = z.object({\n id: z.string().uuid(),\n name: z.string(),\n description: z.string().optional(),\n createdAt: z.date(),\n updatedAt: z.date().optional(),\n});\n`;\n}\n\nfunction createService(name: string) {\n const serviceName = toPascalCase(name + \"_\" + \"Service\");\n\n return `\"use public\";\n\nimport { Injectable, Signature } from \"@kithinji/orca\";\nimport { \n ${toCamelCase(name + \"_\" + \"CreateInput\")}, \n ${toCamelCase(name + \"_\" + \"CreateOutput\")} \n} from \"./schemas/create\";\nimport { \n ${toCamelCase(name + \"_\" + \"GetInput\")}, \n ${toCamelCase(name + \"_\" + \"GetOutput\")} \n} from \"./schemas/get\";\nimport { \n ${toCamelCase(name + \"_\" + \"UpdateInput\")}, \n ${toCamelCase(name + \"_\" + \"UpdateOutput\")} \n} from \"./schemas/update\";\nimport { ${toCamelCase(name + \"_\" + \"ListOutput\")} } from \"./schemas/list\";\nimport { \n ${toCamelCase(name + \"_\" + \"DeleteInput\")}, \n ${toCamelCase(name + \"_\" + \"DeleteOutput\")} \n} from \"./schemas/delete\";\n\n@Injectable()\nexport class ${serviceName} {\n private items: any[] = [];\n\n @Signature(${toCamelCase(name + \"_\" + \"CreateInput\")}, ${toCamelCase(\n name + \"_\" + \"CreateOutput\"\n )})\n public async create(input: any) {\n const item = {\n id: crypto.randomUUID(),\n ...input,\n createdAt: new Date(),\n };\n this.items.push(item);\n return item;\n }\n\n @Signature(${toCamelCase(name + \"_\" + \"GetInput\")}, ${toCamelCase(\n name + \"_\" + \"GetOutput\"\n )})\n public async get(input: any) {\n const item = this.items.find((i) => i.id === input.id);\n if (!item) {\n throw new Error(\"Item not found\");\n }\n return item;\n }\n\n @Signature(${toCamelCase(name + \"_\" + \"ListOutput\")})\n public async list() {\n return this.items;\n }\n\n @Signature(${toCamelCase(name + \"_\" + \"UpdateInput\")}, ${toCamelCase(\n name + \"_\" + \"UpdateOutput\"\n )})\n public async update(input: any) {\n const index = this.items.findIndex((i) => i.id === input.id);\n if (index === -1) {\n throw new Error(\"Item not found\");\n }\n \n this.items[index] = {\n ...this.items[index],\n ...input,\n updatedAt: new Date(),\n };\n \n return this.items[index];\n }\n\n @Signature(${toCamelCase(name + \"_\" + \"DeleteInput\")}, ${toCamelCase(\n name + \"_\" + \"DeleteOutput\"\n )})\n public async delete(input: any) {\n const index = this.items.findIndex((i) => i.id === input.id);\n if (index === -1) {\n throw new Error(\"Item not found\");\n }\n \n const deleted = this.items.splice(index, 1)[0];\n return deleted;\n }\n}\n`;\n}\n\nfunction createPage(name: string) {\n const pageName = toPascalCase(name + \"_\" + \"Page\");\n const listComponent = toPascalCase(name + \"_\" + \"List\");\n\n return `import { Component } from \"@kithinji/orca\";\nimport { ${listComponent} } from \"./components/${name}-list.component\";\n\n@Component({\n deps: [${listComponent}]\n})\nexport class ${pageName} {\n build() {\n return (\n <div>\n <h1>${toPascalCase(name)} Management</h1>\n <${listComponent} name=\"hello\" />\n </div>\n );\n }\n}\n`;\n}\n\nfunction createListComponent(name: string) {\n const componentName = toPascalCase(name + \"_\" + \"List\");\n const serviceName = toPascalCase(name + \"_\" + \"Service\");\n const serviceVar = toCamelCase(name + \"_\" + \"Service\");\n\n return `\"use interactive\";\n\nimport { Component } from \"@kithinji/orca\";\nimport { ${serviceName} } from \"../${name}.service\";\n\n@Component()\nexport class ${componentName} {\n props!: {\n name: string;\n };\n\n constructor(\n public readonly ${serviceVar}: ${serviceName}\n ) {}\n\n build() {\n return (\n <div>\n <h2>${toPascalCase(name)} List</h2>\n <p>List component for ${name}</p>\n {/* Add your list implementation here */}\n </div>\n );\n }\n}\n`;\n}\n", "import { createStructure, DirEntry } from \"@/utils\";\nimport path from \"path\";\nimport prompts from \"prompts\";\n\nexport interface ProjectOptions {\n name: string;\n target: \"browser\" | \"node\" | \"both\";\n}\n\nexport async function addTs(name: string) {\n const baseDir = path.join(process.cwd(), name);\n\n const response = await prompts({\n type: \"select\",\n name: \"target\",\n message: \"Where will this project run?\",\n choices: [\n { title: \"Browser\", value: \"browser\" },\n { title: \"Node.js\", value: \"node\" },\n { title: \"Both (Browser & Node.js)\", value: \"both\" },\n ],\n initial: 2,\n });\n\n if (!response.target) {\n console.log(\"Project creation cancelled\");\n process.exit(0);\n }\n\n const target = response.target as \"browser\" | \"node\" | \"both\";\n\n const structure: DirEntry = {\n files: [\n { name: \"package.json\", content: genPackageJson(name, target) },\n { name: \"tsconfig.json\", content: genTsConfig(target) },\n { name: \"build.js\", content: genBuildConfig(name, target) },\n { name: \"README.md\", content: genReadMe(name, target) },\n { name: \".gitignore\", content: genGitIgnore() },\n { name: \".env\", content: genEnv() },\n ],\n dirs: [\n {\n name: \"src\",\n files: getSrcFiles(target),\n },\n ],\n };\n\n createStructure(baseDir, structure);\n console.log(`TypeScript project created for ${target} environment`);\n}\n\nfunction getSrcFiles(target: \"browser\" | \"node\" | \"both\") {\n switch (target) {\n case \"both\":\n return [\n { name: \"index.ts\", content: genIndexTs() },\n { name: \"index.browser.ts\", content: genBrowserIndexTs() },\n { name: \"index.node.ts\", content: genNodeIndexTs() },\n ];\n case \"browser\":\n return [{ name: \"index.ts\", content: genBrowserIndexTs() }];\n case \"node\":\n return [{ name: \"index.ts\", content: genNodeIndexTs() }];\n }\n}\n\nfunction genPackageJson(name: string, target: \"browser\" | \"node\" | \"both\") {\n const pkg: any = {\n name,\n version: \"1.0.0\",\n type: \"module\",\n scripts: {\n build: \"node build.js\",\n dev: \"node build.js --watch\",\n clean: \"rm -rf dist\",\n },\n devDependencies: {\n typescript: \"^5.9.3\",\n esbuild: \"^0.27.2\",\n },\n };\n\n if (target === \"node\") {\n pkg.main = \"dist/index.mjs\";\n pkg.types = \"./dist/types/index.d.ts\";\n } else if (target === \"browser\") {\n pkg.main = \"dist/index.mjs\";\n pkg.types = \"./dist/types/index.d.ts\";\n } else if (target === \"both\") {\n pkg.exports = {\n \".\": {\n browser: {\n import: \"./dist/browser/index.mjs\",\n },\n node: {\n import: \"./dist/node/index.mjs\",\n },\n types: \"./dist/types/index.d.ts\",\n },\n };\n }\n\n return JSON.stringify(pkg, null, 2);\n}\n\nfunction genTsConfig(target: \"browser\" | \"node\" | \"both\") {\n const config: any = {\n compilerOptions: {\n target: \"ES2020\",\n module: \"ESNext\",\n moduleResolution: \"bundler\",\n declaration: true,\n declarationMap: true,\n emitDeclarationOnly: true,\n outDir: \"./dist/types\",\n rootDir: \"./src\",\n strict: true,\n esModuleInterop: true,\n skipLibCheck: true,\n forceConsistentCasingInFileNames: true,\n baseUrl: \".\",\n paths: {\n \"@/*\": [\"./src/*\"],\n },\n },\n include: [\"src/**/*\"],\n exclude: [\"node_modules\", \"dist\"],\n };\n\n if (target === \"browser\" || target === \"both\") {\n config.compilerOptions.lib = [\"ES2020\", \"DOM\"];\n } else {\n config.compilerOptions.lib = [\"ES2020\"];\n }\n\n return JSON.stringify(config, null, 2);\n}\n\nfunction genBuildConfig(name: string, target: \"browser\" | \"node\" | \"both\") {\n return `const esbuild = require('esbuild');\nconst { execSync } = require('child_process');\nconst path = require('path');\n\nconst isWatch = process.argv.includes('--watch');\n\n\nconst aliasPlugin = {\n name: 'alias',\n setup(build) {\n build.onResolve({ filter: /^@\\\\\n return {\n path: path.resolve(__dirname, 'src', args.path.slice(2))\n };\n });\n }\n};\n\n\nconst buildConfigs = ${JSON.stringify(getBuildConfigs(target), null, 2).replace(\n /\"plugins\": null/g,\n '\"plugins\": [aliasPlugin]'\n )};\n\nasync function build() {\n try {\n execSync('rm -rf dist', { stdio: 'inherit' });\n \n \n for (const config of buildConfigs) {\n console.log(\\`Building \\${config.outfile}...\\`);\n \n if (isWatch) {\n const ctx = await esbuild.context(config);\n await ctx.watch();\n console.log(\\`Watching \\${config.outfile}...\\`);\n } else {\n await esbuild.build(config);\n }\n }\n\n console.log('Generating TypeScript declarations...');\n execSync(\"npx tsc\", {\n stdio: \"inherit\",\n });\n\n if (!isWatch) {\n console.log('Build successful!');\n } else {\n console.log('Initial build complete. Watching for changes...');\n }\n } catch (error) {\n console.error('Build failed:', error.message);\n process.exit(1);\n }\n}\n\nbuild();\n`;\n}\n\nfunction getBuildConfigs(target: \"browser\" | \"node\" | \"both\") {\n const baseConfig = {\n bundle: true,\n sourcemap: true,\n minify: false,\n plugins: null,\n };\n\n switch (target) {\n case \"browser\":\n return [\n {\n ...baseConfig,\n entryPoints: [\"src/index.ts\"],\n outfile: \"dist/index.mjs\",\n platform: \"browser\",\n format: \"esm\",\n target: [\"es2020\"],\n external: [],\n },\n ];\n\n case \"node\":\n return [\n {\n ...baseConfig,\n entryPoints: [\"src/index.ts\"],\n outfile: \"dist/index.mjs\",\n platform: \"node\",\n format: \"esm\",\n target: [\"node18\"],\n packages: \"external\",\n },\n ];\n\n case \"both\":\n return [\n {\n ...baseConfig,\n entryPoints: [\"src/index.browser.ts\"],\n outfile: \"dist/browser/index.mjs\",\n platform: \"browser\",\n format: \"esm\",\n target: [\"es2020\"],\n external: [],\n },\n {\n ...baseConfig,\n entryPoints: [\"src/index.node.ts\"],\n outfile: \"dist/node/index.mjs\",\n platform: \"node\",\n format: \"esm\",\n target: [\"node18\"],\n packages: \"external\",\n },\n ];\n }\n}\n\nfunction genReadMe(name: string, target: \"browser\" | \"node\" | \"both\") {\n return `# ${name}\n\nTypeScript project configured for **${target}** environment(s).\n\n## Features\n\n- Fast builds with esbuild\n- Proper bundling for ${target}\n- Source maps for debugging\n- TypeScript declarations\n- Watch mode for development\n\n## Installation\n\n\\`\\`\\`bash\nnpm install\n\\`\\`\\`\n\n## Development\n\n\\`\\`\\`bash\nnpm run dev\n\\`\\`\\`\n\nWatch mode will automatically rebuild when you change files.\n\n## Build\n\n\\`\\`\\`bash\nnpm run build\n\\`\\`\\`\n\nThis will:\n1. Bundle your code with esbuild\n2. Generate TypeScript declarations\n3. Create source maps\n\n## Clean\n\n\\`\\`\\`bash\nnpm run clean\n\\`\\`\\`\n\n${\n target === \"both\"\n ? `\n## Usage\n\nThis package builds separate bundles for browser and Node.js:\n\n### In Browser\n\\`\\`\\`javascript\nimport { platform } from '${name}';\n\nconsole.log(platform); \n\\`\\`\\`\n\n### In Node.js\n\\`\\`\\`javascript\nimport { platform } from '${name}';\n\nconsole.log(platform); \n\\`\\`\\`\n`\n : target === \"browser\"\n ? `\n## Usage\n\n\\`\\`\\`javascript\nimport { platform } from '${name}';\nconsole.log(platform); \n\\`\\`\\`\n\nInclude \\`dist/index.mjs\\` in your HTML or bundle with your favorite bundler.\n`\n : `\n## Usage\n\n\\`\\`\\`javascript\nimport { platform } from '${name}';\nconsole.log(platform); \n\\`\\`\\`\n`\n}\n\n## Build Output\n\n- \\`dist/*.mjs\\` - Bundled JavaScript (ESM)\n- \\`dist/types/*.d.ts\\` - TypeScript declarations\n- \\`dist/*.map\\` - Source maps\n`;\n}\n\nfunction genGitIgnore() {\n return `node_modules/\ndist/\n.env\n*.log\n.DS_Store\ncoverage/\n.vscode/\n.idea/\n*.tsbuildinfo\n`;\n}\n\nfunction genEnv() {\n return `# Environment variables\n`;\n}\n\nfunction genIndexTs() {\n return `\nexport * from './index.browser.js';\nexport * from './index.node.js';\n`;\n}\n\nfunction genBrowserIndexTs() {\n return `\nexport const platform = 'browser' as const;\n\nexport function getBrowserInfo() {\n if (typeof window !== 'undefined') {\n return {\n userAgent: navigator.userAgent,\n language: navigator.language,\n };\n }\n return null;\n}\n\nconsole.log('Running in browser environment');\n`;\n}\n\nfunction genNodeIndexTs() {\n return `\nimport { platform as osPlatform, arch } from 'os';\n\nexport const platform = 'node' as const;\n\nexport function getNodeInfo() {\n return {\n platform: osPlatform(),\n arch: arch(),\n nodeVersion: process.version,\n };\n}\n\nconsole.log('Running in Node.js environment');\n`;\n}\n", "import fs from \"fs-extra\";\nimport path from \"path\";\nimport prompts from \"prompts\";\nimport yaml from \"js-yaml\";\n\ninterface PackageJson {\n name: string;\n dependencies?: Record<string, string>;\n}\n\ninterface DockerService {\n name: string;\n needsTunnel?: boolean;\n}\n\nexport async function dockerize(env: \"dev\" | \"prod\" = \"prod\") {\n const cwd = process.cwd();\n const packageJsonPath = path.join(cwd, \"package.json\");\n\n if (!fs.existsSync(packageJsonPath)) {\n throw new Error(\"package.json not found. Are you in a Pod project?\");\n }\n\n const packageJson: PackageJson = await fs.readJSON(packageJsonPath);\n const projectName = packageJson.name;\n\n const detectedServices = detectServices(packageJson);\n const selectedServices = await selectServices(detectedServices);\n\n await restructureProject(cwd, projectName);\n await createDockerfile(cwd, projectName);\n\n if (env === \"prod\") {\n await setupProduction(cwd, projectName, selectedServices);\n } else {\n await setupDevelopment(cwd, projectName, selectedServices);\n }\n\n await createDeployfile(cwd, projectName);\n\n await writeEnvVars(cwd, selectedServices, env);\n\n printNextSteps(projectName, env, selectedServices);\n}\n\nfunction detectServices(packageJson: PackageJson): DockerService[] {\n const deps = packageJson.dependencies || {};\n const services: DockerService[] = [];\n\n if (deps.pg || deps.postgres) services.push({ name: \"postgres\" });\n if (deps.mysql || deps.mysql2) services.push({ name: \"mysql\" });\n if (deps.redis || deps.ioredis) services.push({ name: \"redis\" });\n if (deps.mongodb || deps.mongoose) services.push({ name: \"mongodb\" });\n\n return services;\n}\n\nasync function selectServices(\n detected: DockerService[]\n): Promise<DockerService[]> {\n if (detected.length === 0) return [];\n\n const response = await prompts({\n type: \"multiselect\",\n name: \"services\",\n message: \"Select services to include:\",\n choices: detected.map((s) => ({\n title: s.name,\n value: s.name,\n selected: true,\n })),\n });\n\n if (!response.services || response.services.length === 0) return [];\n return detected.filter((s) => response.services.includes(s.name));\n}\n\nasync function restructureProject(cwd: string, projectName: string) {\n const nestedDir = path.join(cwd, projectName);\n\n if (fs.existsSync(nestedDir)) {\n console.log(\"\u26A0\uFE0F Project already restructured, skipping...\");\n return;\n }\n\n await fs.ensureDir(nestedDir);\n\n const items = await fs.readdir(cwd);\n const toMove = items.filter((item) => item !== projectName);\n\n for (const item of toMove) {\n const src = path.join(cwd, item);\n const dest = path.join(nestedDir, item);\n await fs.move(src, dest, { overwrite: true });\n }\n\n const envSrc = path.join(nestedDir, \".env\");\n const envDest = path.join(cwd, \".env\");\n\n if (fs.existsSync(envSrc)) {\n await fs.move(envSrc, envDest, { overwrite: true });\n }\n}\n\nasync function writeEnvVars(\n cwd: string,\n services: DockerService[],\n env: string\n) {\n const envPath = path.join(cwd, \".env\");\n let existingEnv: Record<string, string> = {};\n let existingContent = \"\";\n\n if (fs.existsSync(envPath)) {\n existingContent = await fs.readFile(envPath, \"utf8\");\n existingEnv = parseEnvFile(existingContent);\n }\n\n const newVars: string[] = [];\n\n if (env === \"prod\" && !existingEnv.HOST) {\n newVars.push(\"HOST=example.com\");\n }\n\n for (const service of services) {\n const serviceVars = getEnvVars(service.name);\n for (const varLine of serviceVars) {\n const [key] = varLine.split(\"=\");\n if (!existingEnv[key]) {\n newVars.push(varLine);\n }\n }\n\n if (env === \"dev\" && service.needsTunnel) {\n const remoteHostKey = `${service.name.toUpperCase()}_REMOTE_HOST`;\n const remotePortKey = `${service.name.toUpperCase()}_REMOTE_PORT`;\n\n if (!existingEnv[remoteHostKey]) {\n newVars.push(`${remoteHostKey}=user@remote-server.com`);\n }\n if (!existingEnv[remotePortKey]) {\n newVars.push(`${remotePortKey}=${getDefaultPort(service.name)}`);\n }\n }\n }\n\n if (newVars.length > 0) {\n const separator =\n existingContent && !existingContent.endsWith(\"\\n\") ? \"\\n\" : \"\";\n const newContent =\n existingContent +\n separator +\n (existingContent ? \"\\n\" : \"\") +\n newVars.join(\"\\n\") +\n \"\\n\";\n await fs.writeFile(envPath, newContent);\n console.log(\n `\u2705 Added ${newVars.length} new environment variable(s) to .env`\n );\n } else {\n console.log(\"\u2705 All required environment variables already exist in .env\");\n }\n}\n\nfunction parseEnvFile(content: string): Record<string, string> {\n const env: Record<string, string> = {};\n const lines = content.split(\"\\n\");\n\n for (const line of lines) {\n const trimmed = line.trim();\n\n if (!trimmed || trimmed.startsWith(\"#\")) continue;\n\n const equalIndex = trimmed.indexOf(\"=\");\n if (equalIndex > 0) {\n const key = trimmed.substring(0, equalIndex).trim();\n const value = trimmed.substring(equalIndex + 1).trim();\n env[key] = value;\n }\n }\n\n return env;\n}\n\nasync function createDockerfile(cwd: string, projectName: string) {\n const dockerfilePath = path.join(cwd, projectName, \"Dockerfile\");\n const dockerignorePath = path.join(cwd, projectName, \".dockerignore\");\n\n const dockerfile = `FROM node:18-alpine\n\nWORKDIR /app\n\nCOPY package*.json ./\n\nRUN npm install\n\nCOPY . .\n\nEXPOSE 8080\n\nCMD [\"npm\", \"run\", \"dev\"]\n`;\n\n const dockerignore = `# Dependencies\nnode_modules\nnpm-debug.log\nyarn-error.log\npackage-lock.json\nyarn.lock\n\n# Environment files\n.env\n.env.*\n\n# Git\n.git\n.gitignore\n\n# IDE\n.vscode\n.idea\n*.swp\n*.swo\n*~\n\n# OS\n.DS_Store\nThumbs.db\n\n# Testing\ncoverage\n.nyc_output\n*.test.js\n*.spec.js\n__tests__\n\n# Build files\ndist\npublic\n\n# Logs\nlogs\n*.log\n\n# Documentation\nREADME.md\ndocs\n*.md\n\n# Docker\nDockerfile\n.dockerignore\ndocker-compose*.yml\n\n# Misc\n.cache\ntmp\ntemp\n`;\n\n await fs.writeFile(dockerfilePath, dockerfile);\n await fs.writeFile(dockerignorePath, dockerignore);\n}\n\nasync function createDeployfile(cwd: string, projectName: string) {\n const deployFile = `name: ${projectName}\nversion: 1.0.0\n\ndeploy_path: &deploy_path \"/home/ubuntu/${projectName}\"\nbackup_path: &backup_path \"/home/ubuntu/backups\"\nuser: &user \"ubuntu\"\n\nshared_operations:\n install_docker: &install_docker\n type: ensure\n ensure:\n docker:\n version: \"28.5.2\"\n addUserToGroup: true\n\n stop_containers: &stop_containers\n type: action\n action:\n command: docker compose down --remove-orphans 2>/dev/null || true\n\n pull_images: &pull_images\n type: action\n action:\n command: docker compose pull --quiet\n\n build_and_start: &build_and_start\n type: action\n action:\n command: docker compose up -d --build --remove-orphans --wait\n\n cleanup_docker: &cleanup_docker\n type: action\n action:\n command: docker system prune -f --volumes --filter \"until=168h\"\n\ntargets:\n localhost:\n type: local\n operations:\n #- name: \"Environment Setup\"\n # <<: *install_docker\n - name: \"Refresh Stack\"\n <<: *build_and_start\n\n ec2:\n type: ssh\n host: ec2-xx-xx-xxx-xxx.xx-xxxx-x.compute.amazonaws.com\n user: *user\n keyPath: ~/xxxx.pem\n port: 22\n deployPath: *deploy_path\n\n operations:\n - name: \"Provision Directories and Swap\"\n type: ensure\n ensure:\n swap:\n size: 4G\n\n - name: \"Install Docker\"\n <<: *install_docker\n\n - name: \"Create application directories\"\n type: ensure\n ensure:\n directory:\n path: *deploy_path\n owner: *user\n\n - name: \"Create backup directory\"\n type: ensure\n ensure:\n directory:\n path: *backup_path\n owner: *user\n\n - name: \"Sync Source Files\"\n type: action\n action:\n rsync:\n source: ./\n destination: *deploy_path\n delete: true\n exclude:\n - .git/\n - node_modules/\n - .env.local\n - \"*.log\"\n\n - name: \"Navigate to Deploy Path\"\n type: action\n action:\n command: cd \\${deploy_path}\n\n - name: \"Create Pre-deployment Backup\"\n type: action\n action:\n command: tar -czf \\${backup_path}/backup-$(date +%Y%m%d-%H%M%S).tar.gz .\n\n - name: \"Pull Latest Images\"\n <<: *pull_images\n\n - name: \"Stop Existing Stack\"\n <<: *stop_containers\n\n - name: \"Build and Launch\"\n <<: *build_and_start\n\n - name: \"Maintenance: Cleanup\"\n type: action\n action:\n command: |\n find *backup_path -name \"backup-*.tar.gz\" -mtime +7 -delete\n docker image prune -af --filter \"until=24h\"\n`;\n\n const deployFilePath = path.join(cwd, \"pod.deploy.yml\");\n\n await fs.writeFile(deployFilePath, deployFile);\n}\n\nasync function setupProduction(\n cwd: string,\n projectName: string,\n services: DockerService[]\n) {\n const compose: any = {\n services: {\n traefik: {\n image: \"traefik:v2.10\",\n command: [\n \"--api.insecure=true\",\n \"--providers.docker=true\",\n \"--providers.docker.exposedbydefault=false\",\n \"--entrypoints.web.address=:80\",\n \"--entrypoints.websecure.address=:443\",\n \"--certificatesresolvers.myresolver.acme.tlschallenge=true\",\n \"--certificatesresolvers.myresolver.acme.email=admin@example.com\",\n \"--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json\",\n ],\n labels: [\n \"traefik.enable=true\",\n \"traefik.http.routers.http-catchall.rule=HostRegexp(`{host:.+}`)\",\n \"traefik.http.routers.http-catchall.entrypoints=web\",\n \"traefik.http.routers.http-catchall.middlewares=redirect-to-https\",\n \"traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https\",\n \"traefik.http.routers.dashboard.rule=Host(`traefik.${HOST}`)\",\n \"traefik.http.routers.dashboard.entrypoints=websecure\",\n \"traefik.http.routers.dashboard.tls.certresolver=myresolver\",\n \"traefik.http.routers.dashboard.service=api@internal\",\n ],\n ports: [\"80:80\", \"443:443\"],\n volumes: [\n \"/var/run/docker.sock:/var/run/docker.sock:ro\",\n \"./letsencrypt:/letsencrypt\",\n ],\n networks: [\"web\"],\n env_file: [\".env\"],\n },\n [projectName]: {\n build: {\n context: `./${projectName}`,\n dockerfile: \"Dockerfile\",\n },\n labels: [\n \"traefik.enable=true\",\n \"traefik.http.routers.app.rule=Host(`app.${HOST}`)\",\n \"traefik.http.routers.app.entrypoints=websecure\",\n \"traefik.http.routers.app.tls.certresolver=myresolver\",\n \"traefik.http.services.app.loadbalancer.server.port=8080\",\n ],\n env_file: [\".env\"],\n networks: [\"web\"],\n volumes: [`./${projectName}:/app`, `/app/node_modules`],\n command: \"npm run dev\",\n depends_on: [],\n },\n },\n networks: {\n web: {\n driver: \"bridge\",\n },\n },\n volumes: {},\n };\n\n for (const service of services) {\n const config = getServiceConfig(service.name);\n compose.services[service.name] = config.service;\n if (config.volume) {\n compose.volumes[config.volume.name] = {};\n }\n compose.services[projectName].depends_on.push(service.name);\n }\n\n const composePath = path.join(cwd, \"docker-compose.yml\");\n await fs.writeFile(\n composePath,\n yaml.dump(compose, { indent: 2, lineWidth: -1 })\n );\n}\n\nasync function setupDevelopment(\n cwd: string,\n projectName: string,\n services: DockerService[]\n) {\n const existingCompose = path.join(cwd, \"docker-compose.yml\");\n\n let existingServices: DockerService[] = [];\n\n if (fs.existsSync(existingCompose)) {\n const content = await fs.readFile(existingCompose, \"utf8\");\n const existing: any = yaml.load(content);\n if (existing.services) {\n existingServices = Object.keys(existing.services)\n .filter((s) => [\"postgres\", \"mysql\", \"redis\", \"mongodb\"].includes(s))\n .map((name) => ({ name }));\n }\n }\n\n const servicesToTunnel: DockerService[] = [];\n\n if (existingServices.length > 0) {\n const { tunnel } = await prompts({\n type: \"confirm\",\n name: \"tunnel\",\n message: \"Tunnel to remote database services?\",\n initial: false,\n });\n\n if (tunnel) {\n const { selected } = await prompts({\n type: \"multiselect\",\n name: \"selected\",\n message: \"Select services to tunnel:\",\n choices: existingServices.map((s) => ({\n title: s.name,\n value: s.name,\n })),\n });\n\n if (selected && selected.length > 0) {\n servicesToTunnel.push(\n ...existingServices\n .filter((s) => selected.includes(s.name))\n .map((s) => ({ ...s, needsTunnel: true }))\n );\n }\n }\n }\n\n for (const service of servicesToTunnel) {\n await createTunnelService(cwd, service.name);\n }\n\n const compose: any = {\n services: {\n [projectName]: {\n build: {\n context: `./${projectName}`,\n dockerfile: \"Dockerfile\",\n },\n ports: [\"8080:8080\"],\n env_file: [\".env\"],\n volumes: [`./${projectName}:/app`, `/app/node_modules`],\n command: \"npm run dev\",\n depends_on: [],\n },\n },\n networks: {\n default: {\n driver: \"bridge\",\n },\n },\n };\n\n for (const service of servicesToTunnel) {\n const tunnelName = `${service.name}-tunnel`;\n compose.services[tunnelName] = {\n build: `./${tunnelName}`,\n environment: [\n `REMOTE_HOST=\\${${service.name.toUpperCase()}_REMOTE_HOST}`,\n `REMOTE_PORT=\\${${service.name.toUpperCase()}_REMOTE_PORT:-${getDefaultPort(\n service.name\n )}}`,\n `LOCAL_PORT=${getDefaultPort(service.name)}`,\n ],\n volumes: [`./${service.name}.pem:/ssh/${service.name}.pem:ro`],\n };\n compose.services[projectName].depends_on.push(tunnelName);\n }\n\n const devComposePath = path.join(cwd, \"docker-compose.dev.yml\");\n await fs.writeFile(\n devComposePath,\n yaml.dump(compose, { indent: 2, lineWidth: -1 })\n );\n}\n\nasync function createTunnelService(projectDir: string, serviceName: string) {\n const tunnelDir = path.join(projectDir, `${serviceName}-tunnel`);\n await fs.ensureDir(tunnelDir);\n\n const dockerfile = `FROM alpine:latest\n\nRUN apk add --no-cache openssh-client\n\nCOPY tunnel.sh /tunnel.sh\nRUN chmod +x /tunnel.sh\n\nCMD [\"/tunnel.sh\"]\n`;\n\n const tunnelScript = `#!/bin/sh\n\nSSH_KEY=\"/ssh/${serviceName}.pem\"\nREMOTE_HOST=\\${REMOTE_HOST}\nREMOTE_PORT=\\${REMOTE_PORT:-${getDefaultPort(serviceName)}}\nLOCAL_PORT=\\${LOCAL_PORT:-${getDefaultPort(serviceName)}}\n\nchmod 600 $SSH_KEY\n\necho \"Starting SSH tunnel for ${serviceName}...\"\necho \"Remote: $REMOTE_HOST:$REMOTE_PORT -> Local: $LOCAL_PORT\"\n\nssh -i $SSH_KEY \\\\\n -N -L 0.0.0.0:$LOCAL_PORT:localhost:$REMOTE_PORT \\\\\n -o StrictHostKeyChecking=no \\\\\n -o ServerAliveInterval=60 \\\\\n $REMOTE_HOST\n`;\n\n await fs.writeFile(path.join(tunnelDir, \"Dockerfile\"), dockerfile);\n await fs.writeFile(path.join(tunnelDir, \"tunnel.sh\"), tunnelScript);\n}\n\nfunction getServiceConfig(serviceName: string) {\n const configs: Record<string, any> = {\n postgres: {\n service: {\n image: \"postgres:15-alpine\",\n environment: [\n \"POSTGRES_USER=${DB_USER}\",\n \"POSTGRES_PASSWORD=${DB_PASSWORD}\",\n \"POSTGRES_DB=${DB_NAME}\",\n ],\n volumes: [\"postgres_data:/var/lib/postgresql/data\"],\n networks: [\"web\"],\n },\n volume: { name: \"postgres_data\" },\n },\n mysql: {\n service: {\n image: \"mysql:8\",\n environment: [\n \"MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}\",\n \"MYSQL_DATABASE=${DB_NAME}\",\n \"MYSQL_USER=${DB_USER}\",\n \"MYSQL_PASSWORD=${DB_PASSWORD}\",\n ],\n volumes: [\"mysql_data:/var/lib/mysql\"],\n networks: [\"web\"],\n },\n volume: { name: \"mysql_data\" },\n },\n redis: {\n service: {\n image: \"redis:7-alpine\",\n volumes: [\"redis_data:/data\"],\n networks: [\"web\"],\n },\n volume: { name: \"redis_data\" },\n },\n mongodb: {\n service: {\n image: \"mongo:6\",\n environment: [\n \"MONGO_INITDB_ROOT_USERNAME=${DB_USER}\",\n \"MONGO_INITDB_ROOT_PASSWORD=${DB_PASSWORD}\",\n ],\n volumes: [\"mongo_data:/data/db\"],\n networks: [\"web\"],\n },\n volume: { name: \"mongo_data\" },\n },\n };\n\n return configs[serviceName];\n}\n\nfunction getEnvVars(serviceName: string): string[] {\n const vars: Record<string, string[]> = {\n postgres: [\n \"DB_HOST=postgres\",\n \"DB_PORT=5432\",\n \"DB_USER=myuser\",\n \"DB_PASSWORD=mypassword\",\n \"DB_NAME=mydb\",\n ],\n mysql: [\n \"DB_HOST=mysql\",\n \"DB_PORT=3306\",\n \"DB_USER=myuser\",\n \"DB_PASSWORD=mypassword\",\n \"DB_NAME=mydb\",\n \"DB_ROOT_PASSWORD=rootpassword\",\n ],\n redis: [\"REDIS_HOST=redis\", \"REDIS_PORT=6379\"],\n mongodb: [\n \"MONGO_HOST=mongodb\",\n \"MONGO_PORT=27017\",\n \"MONGO_USER=myuser\",\n \"MONGO_PASSWORD=mypassword\",\n ],\n };\n\n return vars[serviceName] || [];\n}\n\nfunction getDefaultPort(service: string): number {\n const ports: Record<string, number> = {\n postgres: 5432,\n mysql: 3306,\n redis: 6379,\n mongodb: 27017,\n };\n return ports[service] || 3000;\n}\n\nfunction printNextSteps(\n projectName: string,\n env: string,\n services: DockerService[]\n) {\n console.log(`\\n\u2705 Done! Next steps:\\n`);\n\n if (env === \"prod\") {\n console.log(` # Review and edit .env with your settings`);\n console.log(` docker-compose up -d`);\n console.log(` # Access at https://app.\\${HOST}\\n`);\n } else {\n console.log(` # Review and edit .env with your settings`);\n if (services.some((s) => s.needsTunnel)) {\n console.log(` # Add SSH keys: {service}.pem`);\n }\n console.log(` docker-compose -f docker-compose.dev.yml up -d\\n`);\n }\n}\n", "import fs from \"fs-extra\";\nimport yaml from \"js-yaml\";\nimport path from \"path\";\nimport os from \"os\";\nimport { NodeSSH } from \"node-ssh\";\nimport chalk from \"chalk\";\nimport { exec } from \"child_process\";\nimport { promisify } from \"util\";\n\nconst execAsync = promisify(exec);\n\ninterface PodConfig {\n name: string;\n version: string;\n targets: Record<string, TargetConfig>;\n}\n\ninterface TargetConfig {\n type?: \"ssh\" | \"local\";\n host?: string;\n user?: string;\n keyPath?: string;\n port?: number;\n deployPath?: string;\n operations: Operation[];\n}\n\ntype Operation = EnsureOperation | ActionOperation | VerifyOperation;\n\ninterface EnsureOperation {\n name: string;\n type: \"ensure\";\n ensure: {\n swap?: { size: string };\n docker?: { version: string; addUserToGroup?: boolean };\n directory?: { path: string; owner?: string };\n };\n}\n\ninterface ActionOperation {\n name: string;\n type: \"action\";\n when?: \"always\" | \"once\" | \"never\";\n action: {\n rsync?: {\n source: string;\n destination: string;\n exclude?: string[];\n };\n command?: string;\n };\n}\n\ninterface VerifyOperation {\n name: string;\n type: \"verify\";\n verify: {\n http?: { url: string; timeout?: string };\n command?: string;\n };\n}\n\ninterface LockFile {\n deployment_version?: string;\n ensures: Record<string, { version: string; config: any }>;\n once_actions: string[];\n}\n\nfunction interpolate(\n str: string | undefined,\n context: Record<string, any>\n): string {\n if (!str) return \"\";\n return str.replace(/\\${([^}]+)}/g, (match, key) => {\n return context[key] !== undefined ? String(context[key]) : match;\n });\n}\n\nfunction deepInterpolate(obj: any, context: Record<string, any>): any {\n if (typeof obj === \"string\") {\n return interpolate(obj, context);\n }\n if (Array.isArray(obj)) {\n return obj.map((item) => deepInterpolate(item, context));\n }\n if (obj && typeof obj === \"object\") {\n const result: any = {};\n for (const [key, value] of Object.entries(obj)) {\n result[key] = deepInterpolate(value, context);\n }\n return result;\n }\n return obj;\n}\n\nfunction expandTilde(fp: string): string {\n if (!fp || typeof fp !== \"string\") return fp;\n return fp.startsWith(\"~/\") ? path.join(os.homedir(), fp.slice(2)) : fp;\n}\n\nfunction resolveLocalPaths(obj: any, cwd: string): any {\n if (Array.isArray(obj)) {\n return obj.map((item) => resolveLocalPaths(item, cwd));\n }\n if (obj && typeof obj === \"object\") {\n const result: any = {};\n for (const [key, value] of Object.entries(obj)) {\n const isLocalPathKey = key === \"keyPath\" || key === \"source\";\n if (isLocalPathKey && typeof value === \"string\") {\n const expanded = expandTilde(value);\n result[key] = path.isAbsolute(expanded)\n ? expanded\n : path.resolve(cwd, expanded);\n } else {\n result[key] = resolveLocalPaths(value, cwd);\n }\n }\n return result;\n }\n return obj;\n}\n\nconst SCRIPTS = {\n SWAP: (size: string) => `#!/bin/bash\nset -euo pipefail\n\n# Check if swap file exists\nif [ -f /swapfile ]; then\n CURRENT_SIZE=$(stat -c%s /swapfile 2>/dev/null || echo \"0\")\n CURRENT_SIZE_GB=$((CURRENT_SIZE / 1024 / 1024 / 1024))\n REQ_SIZE=$(echo \"${size}\" | tr -d 'G' | tr -d 'g')\n \n if [ \"$CURRENT_SIZE_GB\" -ge \"$REQ_SIZE\" ]; then\n echo \"LOG: Swap of sufficient size exists. Skipping.\"\n exit 0\n fi\n \n # Remove old swap if size doesn't match\n sudo swapoff /swapfile || true\n sudo rm /swapfile\nfi\n\necho \"LOG: Creating ${size} swap file...\"\nsudo fallocate -l ${size} /swapfile || \\\\\n sudo dd if=/dev/zero of=/swapfile bs=1M count=$(($(echo ${size} | tr -d 'G' | tr -d 'g') * 1024))\n\nsudo chmod 600 /swapfile\nsudo mkswap /swapfile\nsudo swapon /swapfile\n\n# Add to fstab if not already there\ngrep -q \"/swapfile\" /etc/fstab || echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab\n\necho \"LOG: Swap file configured successfully\"\n`,\n\n DOCKER: (version: string, user: string, addToGroup: boolean) => `#!/bin/bash\nset -euo pipefail\n\necho \"LOG: Target Docker version: ${version}\"\n\n# Check current Docker installation\nINSTALLED_VER=$(docker --version 2>/dev/null | awk '{print $3}' | tr -d ',' || echo \"none\")\necho \"LOG: Currently installed: $INSTALLED_VER\"\n\n# Determine if we need to install/reinstall\nNEEDS_INSTALL=false\n\nif [ \"$INSTALLED_VER\" = \"none\" ]; then\n echo \"LOG: Docker not installed\"\n NEEDS_INSTALL=true\nelif [ \"${version}\" = \"latest\" ]; then\n echo \"LOG: Latest version requested\"\n NEEDS_INSTALL=true\nelif [[ \"$INSTALLED_VER\" != *\"${version}\"* ]]; then\n echo \"LOG: Version mismatch detected (need ${version}, have $INSTALLED_VER)\"\n echo \"LOG: Uninstalling current Docker...\"\n \n # Stop Docker services\n sudo systemctl stop docker.socket 2>/dev/null || true\n sudo systemctl stop docker 2>/dev/null || true\n sudo systemctl stop containerd 2>/dev/null || true\n \n # Remove Docker packages (data is preserved)\n sudo apt-get purge -y \\\\\n docker-ce \\\\\n docker-ce-cli \\\\\n containerd.io \\\\\n docker-buildx-plugin \\\\\n docker-compose-plugin \\\\\n docker-ce-rootless-extras \\\\\n 2>/dev/null || true\n \n sudo apt-get purge -y docker docker-engine docker.io runc 2>/dev/null || true\n sudo apt-get autoremove -y\n \n echo \"LOG: Uninstall complete\"\n NEEDS_INSTALL=true\nelse\n echo \"LOG: Correct version already installed\"\nfi\n\nif [ \"$NEEDS_INSTALL\" = true ]; then\n echo \"LOG: Installing Docker ${version}...\"\n \n # Update and install prerequisites\n sudo apt-get update -y\n sudo apt-get install -y ca-certificates curl gnupg lsb-release\n \n # Add Docker GPG key\n sudo install -m 0755 -d /etc/apt/keyrings\n curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \\\\\n sudo gpg --dearmor --batch --yes -o /etc/apt/keyrings/docker.gpg\n sudo chmod a+r /etc/apt/keyrings/docker.gpg\n \n # Add Docker repository\n ARCH=\"$(dpkg --print-architecture)\"\n RELEASE=\"$(lsb_release -cs)\"\n echo \"deb [arch=\\${ARCH} signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \\${RELEASE} stable\" | \\\\\n sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n \n sudo apt-get update -y\n \n # Install Docker\n if [ \"${version}\" = \"latest\" ]; then\n echo \"LOG: Installing latest Docker version\"\n sudo apt-get install -y \\\\\n docker-ce \\\\\n docker-ce-cli \\\\\n containerd.io \\\\\n docker-buildx-plugin \\\\\n docker-compose-plugin\n else\n echo \"LOG: Finding version ${version}...\"\n VERSION_STRING=$(apt-cache madison docker-ce | grep \"${version}\" | head -1 | awk '{print $3}')\n \n if [ -z \"$VERSION_STRING\" ]; then\n echo \"LOG: ERROR - Version ${version} not found!\"\n echo \"LOG: Available versions:\"\n apt-cache madison docker-ce | head -10\n exit 1\n fi\n \n echo \"LOG: Installing Docker CE version: $VERSION_STRING\"\n sudo apt-get install -y \\\\\n docker-ce=$VERSION_STRING \\\\\n docker-ce-cli=$VERSION_STRING \\\\\n containerd.io \\\\\n docker-buildx-plugin \\\\\n docker-compose-plugin\n fi\n \n # Enable and start Docker\n sudo systemctl enable docker\n sudo systemctl start docker\n \n FINAL_VER=$(docker --version | awk '{print $3}' | tr -d ',')\n echo \"LOG: Docker installed successfully - $FINAL_VER\"\nfi\n\n# Configure docker group\nif [ \"${addToGroup}\" = \"true\" ]; then\n if ! getent group docker >/dev/null 2>&1; then\n sudo groupadd docker\n echo \"LOG: Created docker group\"\n fi\n \n if groups ${user} | grep -q '\\\\bdocker\\\\b'; then\n echo \"LOG: User ${user} already in docker group\"\n else\n sudo usermod -aG docker ${user}\n echo \"LOG: Added ${user} to docker group (logout required)\"\n fi\nfi\n`,\n};\n\ninterface ExecutionStrategy {\n connect(): Promise<void>;\n disconnect(): Promise<void>;\n\n runCommand(\n cmd: string,\n silent?: boolean\n ): Promise<{ stdout: string; stderr: string; code: number | null }>;\n runScript(\n name: string,\n content: string,\n context: Record<string, any>\n ): Promise<void>;\n\n uploadContent(remotePath: string, content: string): Promise<void>;\n readJson<T>(remotePath: string): Promise<T | null>;\n\n syncDirectory(\n source: string,\n destination: string,\n exclude?: string[]\n ): Promise<void>;\n}\n\nclass SSHStrategy implements ExecutionStrategy {\n private ssh: NodeSSH;\n private target: TargetConfig;\n private currentDir: string;\n\n constructor(target: TargetConfig) {\n this.ssh = new NodeSSH();\n this.target = target;\n this.currentDir = target.deployPath || \".\";\n }\n\n async connect(): Promise<void> {\n await this.ssh.connect({\n host: this.target.host!,\n username: this.target.user!,\n privateKeyPath: this.target.keyPath!,\n port: this.target.port || 22,\n });\n }\n\n async disconnect(): Promise<void> {\n this.ssh.dispose();\n }\n\n async runCommand(\n cmd: string,\n silent = false\n ): Promise<{ stdout: string; stderr: string; code: number | null }> {\n const trimmed = cmd.trim();\n\n if (trimmed.startsWith(\"cd \")) {\n const newPath = trimmed.replace(\"cd \", \"\").trim();\n this.currentDir = path.posix.resolve(this.currentDir, newPath);\n if (!silent) console.log(chalk.gray(` [SSH Path: ${this.currentDir}]`));\n return { stdout: \"\", stderr: \"\", code: 0 };\n }\n\n const result = await this.ssh.execCommand(trimmed, {\n cwd: this.currentDir,\n });\n\n if (result.code !== 0 && result.code !== null) {\n throw new Error(`Execution failed: ${trimmed}\\nSTDERR: ${result.stderr}`);\n }\n\n if (!silent && result.stdout) {\n result.stdout\n .split(\"\\n\")\n .filter((l) => l.startsWith(\"LOG:\"))\n .forEach((l) => console.log(chalk.gray(` ${l.replace(\"LOG: \", \"\")}`)));\n }\n\n return result;\n }\n\n async runScript(\n name: string,\n content: string,\n context: Record<string, any>\n ): Promise<void> {\n const interpolated = interpolate(content, context);\n const remotePath = `/tmp/pod_script_${name}_${Date.now()}.sh`;\n\n await this.uploadContent(remotePath, interpolated);\n\n try {\n await this.ssh.execCommand(`chmod +x ${remotePath}`);\n await this.runCommand(remotePath);\n } finally {\n await this.ssh.execCommand(`rm -f ${remotePath}`);\n }\n }\n\n async uploadContent(remotePath: string, content: string): Promise<void> {\n const localTmp = path.join(os.tmpdir(), `pod_tmp_${Date.now()}`);\n fs.writeFileSync(localTmp, content);\n\n try {\n await this.ssh.execCommand(`mkdir -p $(dirname ${remotePath})`);\n await this.ssh.putFile(localTmp, remotePath);\n } finally {\n if (fs.existsSync(localTmp)) fs.unlinkSync(localTmp);\n }\n }\n\n async readJson<T>(remotePath: string): Promise<T | null> {\n const res = await this.ssh.execCommand(`cat ${remotePath}`);\n try {\n return res.code === 0 ? JSON.parse(res.stdout) : null;\n } catch {\n return null;\n }\n }\n\n async syncDirectory(\n source: string,\n destination: string,\n exclude?: string[]\n ): Promise<void> {\n const putOptions: any = { recursive: true, concurrency: 10 };\n\n if (exclude?.length) {\n putOptions.validate = (filePath: string) => {\n const relative = path.relative(source, filePath);\n if (relative === \"\") return true;\n\n return !exclude.some((pattern) => {\n if (pattern.endsWith(\"/\")) {\n const dir = pattern.slice(0, -1);\n const segment = \"/\" + dir + \"/\";\n return (\n relative === dir ||\n relative.startsWith(dir + \"/\") ||\n relative.includes(segment)\n );\n }\n\n if (pattern.startsWith(\"*.\")) {\n return relative.endsWith(pattern.slice(1));\n }\n\n return relative === pattern;\n });\n };\n }\n\n console.log(chalk.gray(` Syncing ${source} \u2192 ${destination}`));\n await this.ssh.putDirectory(source, destination, putOptions);\n }\n}\n\nclass LocalStrategy implements ExecutionStrategy {\n private target: TargetConfig;\n private currentDir: string;\n\n constructor(target: TargetConfig, cwd: string) {\n this.target = target;\n this.currentDir = cwd;\n }\n\n async connect(): Promise<void> {}\n async disconnect(): Promise<void> {}\n\n async runCommand(\n cmd: string,\n silent = false\n ): Promise<{ stdout: string; stderr: string; code: number | null }> {\n const trimmed = cmd.trim();\n\n if (trimmed.startsWith(\"cd \")) {\n const newPath = trimmed.replace(\"cd \", \"\").trim();\n this.currentDir = path.resolve(this.currentDir, newPath);\n if (!silent) console.log(chalk.gray(` [Local Path: ${this.currentDir}]`));\n return { stdout: \"\", stderr: \"\", code: 0 };\n }\n\n try {\n const { stdout, stderr } = await execAsync(trimmed, {\n cwd: this.currentDir,\n });\n\n if (!silent && stdout) {\n stdout\n .split(\"\\n\")\n .filter((l) => l.startsWith(\"LOG:\"))\n .forEach((l) =>\n console.log(chalk.gray(` ${l.replace(\"LOG: \", \"\")}`))\n );\n }\n\n return { stdout, stderr, code: 0 };\n } catch (err: any) {\n throw new Error(\n `Execution failed: ${trimmed}\\nSTDERR: ${err.stderr || err.message}`\n );\n }\n }\n\n async runScript(\n name: string,\n content: string,\n context: Record<string, any>\n ): Promise<void> {\n const interpolated = interpolate(content, context);\n const scriptPath = path.join(\n os.tmpdir(),\n `pod_script_${name}_${Date.now()}.sh`\n );\n\n fs.writeFileSync(scriptPath, interpolated);\n fs.chmodSync(scriptPath, \"755\");\n\n try {\n await this.runCommand(scriptPath);\n } finally {\n if (fs.existsSync(scriptPath)) fs.unlinkSync(scriptPath);\n }\n }\n\n async uploadContent(localPath: string, content: string): Promise<void> {\n const dir = path.dirname(localPath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n fs.writeFileSync(localPath, content);\n }\n\n async readJson<T>(localPath: string): Promise<T | null> {\n try {\n if (!fs.existsSync(localPath)) return null;\n const content = fs.readFileSync(localPath, \"utf8\");\n return JSON.parse(content);\n } catch {\n return null;\n }\n }\n\n async syncDirectory(\n source: string,\n destination: string,\n exclude?: string[]\n ): Promise<void> {\n console.log(chalk.gray(` Copying ${source} \u2192 ${destination}`));\n\n if (!fs.existsSync(destination)) {\n fs.mkdirSync(destination, { recursive: true });\n }\n\n const shouldExclude = (relativePath: string): boolean => {\n if (!exclude?.length) return false;\n\n return exclude.some((pattern) => {\n if (pattern.endsWith(\"/\")) {\n const dir = pattern.slice(0, -1);\n const segment = \"/\" + dir + \"/\";\n return (\n relativePath === dir ||\n relativePath.startsWith(dir + \"/\") ||\n relativePath.includes(segment)\n );\n }\n\n if (pattern.startsWith(\"*.\")) {\n return relativePath.endsWith(pattern.slice(1));\n }\n\n return relativePath === pattern;\n });\n };\n\n const copyRecursive = (src: string, dest: string) => {\n const entries = fs.readdirSync(src, { withFileTypes: true });\n\n for (const entry of entries) {\n const srcPath = path.join(src, entry.name);\n const destPath = path.join(dest, entry.name);\n const relativePath = path.relative(source, srcPath);\n\n if (shouldExclude(relativePath)) continue;\n\n if (entry.isDirectory()) {\n if (!fs.existsSync(destPath)) {\n fs.mkdirSync(destPath, { recursive: true });\n }\n copyRecursive(srcPath, destPath);\n } else {\n fs.copyFileSync(srcPath, destPath);\n }\n }\n };\n\n copyRecursive(source, destination);\n }\n}\n\nclass StrategyFactory {\n static create(target: TargetConfig, cwd: string): ExecutionStrategy {\n const targetType = target.type || (target.host ? \"ssh\" : \"local\");\n\n switch (targetType) {\n case \"ssh\":\n return new SSHStrategy(target);\n case \"local\":\n return new LocalStrategy(target, cwd);\n default:\n throw new Error(`Unknown target type: ${targetType}`);\n }\n }\n}\n\nclass OperationHandler {\n constructor(\n private strategy: ExecutionStrategy,\n private target: TargetConfig,\n private lock: LockFile,\n private lockPath: string\n ) {}\n\n async handleEnsure(\n op: EnsureOperation,\n options?: { forceEnsure?: boolean }\n ): Promise<void> {\n if (!op.ensure) {\n throw new Error(`Ensure operation \"${op.name}\" missing ensure config`);\n }\n\n if (op.ensure.swap) {\n await this.ensureSwap(op, options);\n }\n\n if (op.ensure.docker) {\n await this.ensureDocker(op, options);\n }\n\n if (op.ensure.directory) {\n await this.ensureDirectory(op, options);\n }\n }\n\n private async ensureSwap(\n op: EnsureOperation,\n options?: { forceEnsure?: boolean }\n ): Promise<void> {\n const key = \"swap\";\n const locked = this.lock.ensures[key];\n const currentConfig = op.ensure.swap!;\n const configChanged =\n JSON.stringify(locked?.config) !== JSON.stringify(currentConfig);\n\n if (\n options?.forceEnsure ||\n !locked ||\n locked.version !== currentConfig.size ||\n configChanged\n ) {\n console.log(chalk.yellow(`\u2192 Ensuring: ${op.name}`));\n const script = SCRIPTS.SWAP(currentConfig.size);\n await this.strategy.runScript(key, script, this.target);\n this.lock.ensures[key] = {\n version: currentConfig.size,\n config: currentConfig,\n };\n await this.saveLock();\n } else {\n console.log(chalk.gray(`\u2713 ${op.name} (already satisfied)`));\n }\n }\n\n private async ensureDocker(\n op: EnsureOperation,\n options?: { forceEnsure?: boolean }\n ): Promise<void> {\n const key = \"docker\";\n const locked = this.lock.ensures[key];\n const currentConfig = op.ensure.docker!;\n const configChanged =\n JSON.stringify(locked?.config) !== JSON.stringify(currentConfig);\n\n if (\n options?.forceEnsure ||\n !locked ||\n locked.version !== currentConfig.version ||\n configChanged\n ) {\n console.log(chalk.yellow(`\u2192 Ensuring: ${op.name}`));\n const script = SCRIPTS.DOCKER(\n currentConfig.version,\n this.target.user || os.userInfo().username,\n !!currentConfig.addUserToGroup\n );\n await this.strategy.runScript(key, script, this.target);\n this.lock.ensures[key] = {\n version: currentConfig.version,\n config: currentConfig,\n };\n await this.saveLock();\n } else {\n console.log(chalk.gray(`\u2713 ${op.name} (already satisfied)`));\n }\n }\n\n private async ensureDirectory(\n op: EnsureOperation,\n options?: { forceEnsure?: boolean }\n ): Promise<void> {\n const key = `directory_${op.ensure.directory!.path}`;\n const locked = this.lock.ensures[key];\n const currentConfig = op.ensure.directory!;\n const configChanged =\n JSON.stringify(locked?.config) !== JSON.stringify(currentConfig);\n\n if (options?.forceEnsure || !locked || configChanged) {\n console.log(chalk.yellow(`\u2192 Ensuring: ${op.name}`));\n const dirPath = interpolate(currentConfig.path, this.target);\n const owner = currentConfig.owner\n ? interpolate(currentConfig.owner, this.target)\n : this.target.user || os.userInfo().username;\n\n await this.strategy.runCommand(`mkdir -p ${dirPath}`, true);\n\n if (this.target.user) {\n await this.strategy.runCommand(\n `sudo chown -R ${owner}:${owner} ${dirPath}`,\n true\n );\n }\n\n this.lock.ensures[key] = {\n version: dirPath,\n config: currentConfig,\n };\n await this.saveLock();\n } else {\n console.log(chalk.gray(`\u2713 ${op.name} (already satisfied)`));\n }\n }\n\n async handleAction(op: ActionOperation): Promise<void> {\n if (!op.action) {\n throw new Error(`Action operation \"${op.name}\" missing action config`);\n }\n\n const when = op.when || \"always\";\n\n if (when === \"never\") {\n console.log(chalk.gray(`\u2298 ${op.name} (disabled)`));\n return;\n }\n\n const actionId = `action_${op.name}`;\n\n if (when === \"once\" && this.lock.once_actions.includes(actionId)) {\n console.log(chalk.gray(`\u2713 ${op.name} (already completed)`));\n return;\n }\n\n console.log(chalk.cyan(`\u2192 Running: ${op.name}`));\n\n if (op.action.rsync) {\n const src = op.action.rsync.source;\n const dest = interpolate(op.action.rsync.destination || \".\", this.target);\n await this.strategy.syncDirectory(src, dest, op.action.rsync.exclude);\n }\n\n if (op.action.command) {\n const cmd = interpolate(op.action.command, this.target);\n await this.strategy.runCommand(cmd);\n }\n\n if (when === \"once\") {\n this.lock.once_actions.push(actionId);\n await this.saveLock();\n }\n }\n\n async handleVerify(op: VerifyOperation): Promise<void> {\n if (!op.verify) {\n throw new Error(`Verify operation \"${op.name}\" missing verify config`);\n }\n\n console.log(chalk.cyan(`\u2192 Verifying: ${op.name}`));\n\n if (op.verify.http) {\n const url = interpolate(op.verify.http.url, this.target);\n const timeout = op.verify.http.timeout || \"30s\";\n await this.strategy.runCommand(\n `curl -f --max-time ${timeout} ${url}`,\n true\n );\n }\n\n if (op.verify.command) {\n const cmd = interpolate(op.verify.command, this.target);\n await this.strategy.runCommand(cmd, true);\n }\n }\n\n private async saveLock(): Promise<void> {\n await this.strategy.uploadContent(\n this.lockPath,\n JSON.stringify(this.lock, null, 2)\n );\n }\n}\n\nexport async function deploy(\n targetName: string,\n options?: { forceEnsure?: boolean }\n) {\n const cwd = process.cwd();\n const rawConfig = yaml.load(\n fs.readFileSync(path.join(cwd, \"pod.deploy.yml\"), \"utf8\"),\n { schema: yaml.DEFAULT_SCHEMA }\n ) as any;\n\n const rawTarget = rawConfig.targets?.[targetName];\n if (!rawTarget) throw new Error(`Target ${targetName} not found.`);\n\n console.log(\n chalk.blue.bold(\n `\\nPod Deploy: ${rawConfig.name} v${rawConfig.version} \u2192 ${targetName}\\n`\n )\n );\n\n let target = deepInterpolate(rawTarget, {\n ...rawConfig,\n ...rawTarget,\n }) as TargetConfig;\n\n target = resolveLocalPaths(target, cwd);\n\n const strategy = StrategyFactory.create(target, cwd);\n\n try {\n await strategy.connect();\n\n const lockPath = target.deployPath\n ? path.posix.join(target.deployPath, \"pod-lock.json\")\n : path.join(cwd, \"pod-lock.json\");\n\n let lock = (await strategy.readJson<LockFile>(lockPath)) || {\n ensures: {},\n once_actions: [],\n };\n\n if (lock.deployment_version !== rawConfig.version) {\n console.log(chalk.magenta(`\u2192 Version change: ${rawConfig.version}`));\n lock.deployment_version = rawConfig.version;\n lock.once_actions = [];\n await strategy.uploadContent(lockPath, JSON.stringify(lock, null, 2));\n }\n\n const handler = new OperationHandler(strategy, target, lock, lockPath);\n\n for (const op of target.operations) {\n try {\n if (op.type === \"ensure\") {\n await handler.handleEnsure(op, options);\n } else if (op.type === \"action\") {\n await handler.handleAction(op);\n } else if (op.type === \"verify\") {\n await handler.handleVerify(op);\n } else {\n throw new Error(`Unknown operation type: ${(op as any).type}`);\n }\n } catch (err: any) {\n throw new Error(`Failed at operation \"${op.name}\": ${err.message}`);\n }\n }\n\n console.log(chalk.green.bold(`\\nDeployment successful!\\n`));\n } catch (err: any) {\n console.error(chalk.red.bold(`\\nDeployment Failed: ${err.message}`));\n throw err;\n } finally {\n await strategy.disconnect();\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["#!/usr/bin/env node\nimport { Command } from \"commander\";\nimport { startDevServer } from \"./dev\";\n\nimport * as store from \"./store\";\nexport { store };\n\nimport * as config from \"./config\";\nexport { config };\n\nexport * from \"./config/config\";\n\nimport * as macros from \"./macros\";\nexport { macros };\n\nexport * from \"./macros/expand_macros\";\n\nimport * as plugins from \"./plugins\";\nexport { plugins };\nexport * from \"./plugins/css\";\n\nimport { addComponent, addNew, addTs } from \"./add\";\nimport { addFeature } from \"./add/module\";\n\nimport path from \"path\";\nimport { exec, execSync } from \"child_process\";\nimport { dockerize } from \"./docker\";\nimport { deploy } from \"./deploy\";\nimport chalk from \"chalk\";\n\nconst program = new Command();\n\nprogram.name(\"pod\").description(\"Pod cli tool\").version(\"1.0.30\");\n\nprogram\n .command(\"new <name> [type]\")\n .description(\"Start a new Orca Project\")\n .action(async (name: string, type?: string) => {\n const orca = async () => {\n await addNew(name);\n\n const appDir = path.resolve(process.cwd());\n\n const shell =\n process.platform === \"win32\"\n ? process.env.ComSpec || \"cmd.exe\"\n : \"/bin/sh\";\n\n console.log(\"Installing dependencies...\");\n execSync(\"npm install\", { stdio: \"inherit\", cwd: appDir, shell });\n\n console.log(\"Starting development server...\");\n execSync(\"npm run dev\", { stdio: \"inherit\", cwd: appDir, shell });\n\n console.log(\n `All done! Your app \"${name}\" is running in development mode.`\n );\n };\n\n const ts = async () => {\n await addTs(name);\n\n const appDir = path.resolve(process.cwd());\n\n const shell =\n process.platform === \"win32\"\n ? process.env.ComSpec || \"cmd.exe\"\n : \"/bin/sh\";\n\n console.log(\"Installing dependencies...\");\n execSync(\"npm install\", { stdio: \"inherit\", cwd: appDir, shell });\n };\n\n switch (type) {\n case \"orca\":\n return await orca();\n case \"ts\":\n return await ts();\n default:\n return await orca();\n }\n });\n\nprogram\n .command(\"dev\")\n .description(\"Start Pod development server\")\n .action(async (opts) => {\n await startDevServer();\n });\n\nprogram\n .command(\"add <type> <name>\")\n .description(\"Add a component (c) or a feature (f)\")\n .action(async (type, name) => {\n try {\n if (type === \"c\") {\n await addComponent(name);\n } else if (type === \"f\") {\n // create a module (service, component, module)\n await addFeature(name);\n } else {\n console.error(\"\u274C Unknown type. Use 'c' or 'f'.\");\n }\n } catch (err: any) {\n console.error(\"\u274C Error:\", err.message);\n }\n });\n\nprogram\n .command(\"dockerize <env>\")\n .description(\"Dockerize a pod project.\")\n .action(async (env) => {\n try {\n await dockerize(env);\n } catch (err: any) {\n console.error(\"\u274C Error:\", err.message);\n }\n });\n\nprogram\n .command(\"deploy\")\n .description(\"Deploy to a target environment\")\n .argument(\"<target>\", \"Target environment (e.g., ec2)\")\n .option(\"--force-install\", \"Force reinstallation even if already installed\")\n .action(async (target: string, options: { forceEnsure?: boolean }) => {\n try {\n await deploy(target, options);\n } catch (error: any) {\n console.error(chalk.red(error.message));\n process.exit(1);\n }\n });\n\nprogram.parse(process.argv);\n", "import * as esbuild from \"esbuild\";\nimport { spawn, ChildProcess } from \"child_process\";\nimport * as fs from \"fs/promises\";\nimport { WebSocketServer, WebSocket } from \"ws\";\nimport { loadConfig, mergeConfig, getDefaultConfig } from \"../config/config\";\nimport { buildGraph, useMyPlugin } from \"@/plugins\";\nimport { Store } from \"@/store\";\nimport {\n HtmlPreprocessor,\n HtmlPreprocessorOptions,\n createHotReloadTransformer,\n} from \"../html\";\n\ninterface VirtualFile {\n output: string;\n code: string;\n}\n\nconst virtualClientFiles: Record<string, VirtualFile> = {\n \"virtual:navigate\": {\n output: \"navigate\",\n code: `\nexport async function navigate(event, url) {\n event.preventDefault(); \n \n try {\n const { Navigate, getCurrentInjector } = await import(\"./src/client/client.js\");\n const injector = getCurrentInjector();\n \n if (injector) {\n const navigate = injector.resolve(Navigate);\n navigate.go(url);\n } else {\n window.location.href = url;\n }\n } catch (error) {\n console.error(\"Navigation error:\", error);\n window.location.href = url;\n }\n}\n `.trim(),\n },\n};\n\nfunction createVirtualModulePlugin(\n virtualFiles: Record<string, VirtualFile>\n): esbuild.Plugin {\n return {\n name: \"virtual-module\",\n setup(build) {\n build.onResolve({ filter: /^virtual:/ }, (args) => {\n if (virtualFiles[args.path]) {\n return {\n path: args.path,\n namespace: \"virtual\",\n };\n }\n });\n\n build.onLoad({ filter: /.*/, namespace: \"virtual\" }, (args) => {\n const virtualFile = virtualFiles[args.path];\n\n if (virtualFile) {\n return {\n contents: virtualFile.code,\n loader: \"js\",\n };\n }\n });\n },\n };\n}\n\nclass HotReloadManager {\n private wss: WebSocketServer | null = null;\n private clients: Set<WebSocket> = new Set();\n private port: number;\n\n constructor(port: number = 3001) {\n this.port = port;\n }\n\n start(): void {\n this.wss = new WebSocketServer({ port: this.port });\n\n this.wss.on(\"connection\", (ws: WebSocket) => {\n this.clients.add(ws);\n\n ws.on(\"close\", () => {\n this.clients.delete(ws);\n });\n\n ws.on(\"error\", (error) => {\n console.error(\"WebSocket error:\", error);\n this.clients.delete(ws);\n });\n });\n\n console.log(`Hot reload server listening on ws://localhost:${this.port}`);\n }\n\n reload(): void {\n const activeClients = Array.from(this.clients).filter(\n (client) => client.readyState === WebSocket.OPEN\n );\n\n if (activeClients.length === 0) {\n return;\n }\n\n activeClients.forEach((client) => {\n try {\n client.send(\"reload\");\n } catch (error) {\n console.error(\"Failed to send reload signal:\", error);\n this.clients.delete(client);\n }\n });\n }\n\n close(): void {\n if (this.wss) {\n this.clients.forEach((client) => client.close());\n this.wss.close();\n }\n }\n}\n\nasync function copyAndProcessHtml(\n hotReloadPort: number,\n preprocessorOptions?: HtmlPreprocessorOptions\n): Promise<void> {\n try {\n await fs.mkdir(\"public\", { recursive: true });\n\n const preprocessor = new HtmlPreprocessor({\n transformers: [createHotReloadTransformer(hotReloadPort)],\n injectScripts: [\"./navigate.js\"],\n ...preprocessorOptions,\n });\n\n await preprocessor.processFile(\n \"./src/client/index.html\",\n \"./public/index.html\"\n );\n } catch (error) {\n console.error(\"Failed to copy and process index.html:\", error);\n throw error;\n }\n}\n\nasync function cleanDirectories(): Promise<void> {\n await Promise.all([\n fs.rm(\"dist\", { recursive: true, force: true }),\n fs.rm(\"public\", { recursive: true, force: true }),\n ]);\n}\n\nfunction createRestartServerPlugin(\n serverProcess: { current: ChildProcess | null },\n onServerBuildComplete: () => void,\n hotReloadManager: HotReloadManager\n): esbuild.Plugin {\n return {\n name: \"restart-server\",\n setup(build) {\n build.onEnd((result) => {\n if (result.errors.length > 0) {\n console.error(\n `Server build failed with ${result.errors.length} error(s)`\n );\n return;\n }\n\n if (serverProcess.current) {\n serverProcess.current.kill(\"SIGTERM\");\n }\n\n serverProcess.current = spawn(\"node\", [\"dist/main.js\"], {\n stdio: \"inherit\",\n });\n\n serverProcess.current.on(\"error\", (err) => {\n console.error(\"Server process error:\", err);\n });\n\n setTimeout(() => {\n hotReloadManager.reload();\n }, 500);\n\n onServerBuildComplete();\n });\n },\n };\n}\n\nexport async function startDevServer(): Promise<void> {\n const store = Store.getInstance();\n const userConfig = await loadConfig();\n const config = mergeConfig(getDefaultConfig(), userConfig);\n\n const HOT_RELOAD_PORT = 3001;\n const hotReloadManager = new HotReloadManager(HOT_RELOAD_PORT);\n\n await cleanDirectories();\n await copyAndProcessHtml(HOT_RELOAD_PORT, config.htmlPreprocessor);\n\n hotReloadManager.start();\n\n const entryPoints = [\"src/main.ts\"];\n const clientFiles = new Set<string>([\"src/client/client.tsx\"]);\n const serverProcessRef = { current: null as ChildProcess | null };\n let clientCtx: esbuild.BuildContext | null = null;\n let virtualCtx: esbuild.BuildContext | null = null;\n let isShuttingDown = false;\n\n let pendingClientFiles = new Set<string>();\n let needsClientRebuild = false;\n\n async function buildVirtualFiles(): Promise<void> {\n if (isShuttingDown) return;\n\n try {\n if (virtualCtx) {\n await virtualCtx.dispose();\n virtualCtx = null;\n }\n\n const virtualEntryPoints: Record<string, string> = {};\n Object.entries(virtualClientFiles).forEach(([key, value]) => {\n virtualEntryPoints[value.output] = key;\n });\n\n virtualCtx = await esbuild.context({\n entryPoints: virtualEntryPoints,\n bundle: true,\n outdir: \"public\",\n platform: \"browser\",\n format: \"iife\",\n globalName: \"Orca\",\n sourcemap: config.build?.sourcemap ?? true,\n minify: config.build?.minify ?? false,\n plugins: [createVirtualModulePlugin(virtualClientFiles)],\n write: true,\n });\n\n await virtualCtx.rebuild();\n } catch (error) {\n console.error(\"Failed to build virtual files:\", error);\n throw error;\n }\n }\n\n async function rebuildClient(): Promise<void> {\n if (isShuttingDown) return;\n\n try {\n if (clientCtx) {\n await clientCtx.dispose();\n clientCtx = null;\n }\n\n if (clientFiles.size === 0) return;\n\n const entryPoints = Array.from(clientFiles);\n const graph = buildGraph(entryPoints);\n\n clientCtx = await esbuild.context({\n entryPoints,\n bundle: true,\n outdir: \"public\",\n outbase: \".\",\n platform: \"browser\",\n format: \"esm\",\n sourcemap: config.build?.sourcemap ?? true,\n splitting: true,\n minify: config.build?.minify ?? false,\n plugins: [\n ...(config.plugins?.map((cb) => cb(store)) || []),\n ...(config.client_plugins?.map((cb) => cb(store)) || []),\n useMyPlugin({\n graph,\n isServerBuild: false,\n onClientFound: () => {},\n }),\n {\n name: \"client-build-logger\",\n setup(build: any) {\n build.onEnd((result: any) => {\n if (result.errors.length > 0) {\n console.error(\n `Client build failed with ${result.errors.length} error(s)`\n );\n } else {\n console.log(\"Client build completed\");\n hotReloadManager.reload();\n }\n });\n },\n },\n ],\n write: true,\n });\n\n await clientCtx.watch();\n pendingClientFiles.clear();\n needsClientRebuild = false;\n } catch (error) {\n console.error(\"Failed to rebuild client:\", error);\n throw error;\n }\n }\n\n async function onServerBuildComplete(): Promise<void> {\n if (needsClientRebuild && pendingClientFiles.size > 0) {\n await rebuildClient();\n }\n }\n\n const serverCtx = await esbuild.context({\n entryPoints,\n bundle: true,\n outdir: config.build?.outDir || \"dist\",\n platform: \"node\",\n format: \"esm\",\n packages: \"external\",\n sourcemap: config.build?.sourcemap ?? true,\n minify: config.build?.minify ?? false,\n plugins: [\n ...(config.plugins?.map((cb) => cb(store)) || []),\n useMyPlugin({\n isServerBuild: true,\n onClientFound: async (filePath) => {\n const isNewFile = !clientFiles.has(filePath);\n\n if (isNewFile) {\n clientFiles.add(filePath);\n pendingClientFiles.add(filePath);\n needsClientRebuild = true;\n }\n },\n }),\n createRestartServerPlugin(\n serverProcessRef,\n onServerBuildComplete,\n hotReloadManager\n ),\n ],\n write: true,\n });\n\n async function shutdown(): Promise<void> {\n if (isShuttingDown) return;\n isShuttingDown = true;\n\n console.log(\"\\nShutting down dev server...\");\n\n try {\n if (serverProcessRef.current) {\n serverProcessRef.current.kill(\"SIGTERM\");\n await new Promise((resolve) => setTimeout(resolve, 1000));\n }\n\n await serverCtx.dispose();\n if (clientCtx) await clientCtx.dispose();\n if (virtualCtx) await virtualCtx.dispose();\n hotReloadManager.close();\n\n console.log(\"Dev server shut down successfully\");\n process.exit(0);\n } catch (error) {\n console.error(\"Error during shutdown:\", error);\n process.exit(1);\n }\n }\n\n process.on(\"SIGINT\", shutdown);\n process.on(\"SIGTERM\", shutdown);\n\n console.log(\"Starting dev server...\");\n\n await buildVirtualFiles();\n\n await serverCtx.watch();\n}\n", "import * as path from \"path\";\nimport { pathToFileURL } from \"url\";\nimport * as fs from \"fs/promises\";\nimport { Store } from \"@/store\";\nimport type { Plugin } from \"esbuild\";\nimport { HtmlPreprocessorOptions } from \"@/html\";\n\nexport type PodPlugin = (store: Store) => Plugin;\n\nexport interface PodConfig {\n name: string;\n build?: {\n outDir?: string;\n sourcemap?: boolean;\n minify?: boolean;\n };\n plugins?: Array<PodPlugin>;\n client_plugins?: Array<PodPlugin>;\n server_plugins?: Array<PodPlugin>;\n htmlPreprocessor?: HtmlPreprocessorOptions;\n}\n\nconst CONFIG_FILES = [\n \"pod.config.js\",\n \"pod.config.mjs\",\n \"pod.config.ts\",\n \"pod.config.mts\",\n];\n\nexport async function loadConfig(\n root: string = process.cwd()\n): Promise<PodConfig> {\n for (const configFile of CONFIG_FILES) {\n const configPath = path.resolve(root, configFile);\n\n try {\n await fs.access(configPath);\n\n if (configFile.endsWith(\".ts\") || configFile.endsWith(\".mts\")) {\n return await loadTsConfig(configPath);\n }\n\n return await loadJsConfig(configPath);\n } catch (error) {\n continue;\n }\n }\n\n return getDefaultConfig();\n}\n\nasync function loadJsConfig(configPath: string): Promise<PodConfig> {\n try {\n const fileUrl = pathToFileURL(configPath).href;\n\n const configModule = await import(`${fileUrl}?t=${Date.now()}`);\n\n const config = configModule.default || configModule;\n\n if (typeof config === \"function\") {\n return await config();\n }\n\n return config;\n } catch (error) {\n console.error(`\u274C Failed to load config from ${configPath}:`, error);\n throw error;\n }\n}\n\nasync function loadTsConfig(configPath: string): Promise<PodConfig> {\n try {\n const esbuild = await import(\"esbuild\");\n\n const result = await esbuild.build({\n entryPoints: [configPath],\n bundle: true,\n platform: \"node\",\n format: \"esm\",\n write: false,\n sourcemap: \"inline\",\n packages: \"external\",\n });\n\n const tempFile = `${configPath}.${Date.now()}.mjs`;\n await fs.writeFile(tempFile, result.outputFiles[0].text);\n\n try {\n const fileUrl = pathToFileURL(tempFile).href;\n\n const configModule = await import(fileUrl);\n\n const config = configModule.default || configModule;\n\n if (typeof config === \"function\") {\n return await config();\n }\n\n return config;\n } finally {\n await fs.unlink(tempFile).catch(() => {});\n }\n } catch (error) {\n console.error(\n `\u274C Failed to load TypeScript config from ${configPath}:`,\n error\n );\n throw error;\n }\n}\n\nexport function getDefaultConfig(): PodConfig {\n return {\n name: \"app\",\n build: {\n outDir: \"dist\",\n sourcemap: true,\n minify: false,\n },\n plugins: [],\n client_plugins: [],\n server_plugins: [],\n };\n}\n\nexport function mergeConfig(\n defaults: PodConfig,\n userConfig: PodConfig\n): PodConfig {\n return {\n name: userConfig.name,\n build: { ...defaults.build, ...userConfig.build },\n plugins: [...(defaults.plugins || []), ...(userConfig.plugins || [])],\n client_plugins: [\n ...(defaults.client_plugins || []),\n ...(userConfig.client_plugins || []),\n ],\n server_plugins: [\n ...(defaults.server_plugins || []),\n ...(userConfig.server_plugins || []),\n ],\n };\n}\n", "export * from \"./my\";\nexport * from \"./analyzers/graph\";\nexport * from \"./css\";\n", "import type { Plugin, OnLoadArgs, OnLoadResult } from \"esbuild\";\nimport * as fs from \"fs/promises\";\nimport { ReactConfig, transform } from \"@swc/core\";\nimport * as babel from \"@babel/core\";\nimport * as path from \"path\";\nimport { expandMacros } from \"@/macros\";\nimport { DependencyGraph, FileNode } from \"./analyzers/graph\";\nimport { generateController } from \"./generators/generate_controller\";\nimport { generateServerStub } from \"./generators/tsx_server_stub\";\nimport { j2d } from \"./transformers/j2d\";\nimport { generateServerComponent } from \"./generators/generate_server_component\";\nimport { generateRpcStub } from \"./generators/generate_rpc\";\nimport { Store } from \"@/store\";\n\ninterface MyPluginParams {\n isServerBuild: boolean;\n graph?: DependencyGraph;\n onClientFound: (path: string) => void;\n}\n\ntype FileDirective = \"interactive\" | \"public\" | null;\n\ninterface FileMetadata {\n source: string;\n path: string;\n isTsx: boolean;\n directive: FileDirective;\n isPublicFile: boolean;\n isInteractiveFile: boolean;\n}\n\nasync function swcTransform(\n source: string,\n pathStr: string,\n tsx: boolean = false,\n react?: ReactConfig\n): Promise<OnLoadResult> {\n const resolveDir = path.dirname(pathStr);\n\n const swcResult = await transform(source, {\n filename: pathStr,\n jsc: {\n parser: {\n syntax: \"typescript\",\n tsx,\n decorators: true,\n },\n transform: {\n legacyDecorator: true,\n decoratorMetadata: true,\n react,\n },\n target: \"esnext\",\n },\n isModule: true,\n });\n\n return {\n contents: swcResult.code,\n loader: \"js\",\n resolveDir,\n };\n}\n\nfunction parseFileMetadata(source: string, path: string): FileMetadata {\n const isTsx = path.endsWith(\".tsx\");\n const isInteractiveFile =\n source.startsWith('\"use interactive\"') ||\n source.startsWith(\"'use interactive'\");\n const isPublicFile =\n source.startsWith('\"use public\"') || source.startsWith(\"'use public'\");\n\n let directive: FileDirective = null;\n if (isInteractiveFile) directive = \"interactive\";\n else if (isPublicFile) directive = \"public\";\n\n return {\n source,\n path,\n isTsx,\n directive,\n isPublicFile,\n isInteractiveFile,\n };\n}\n\nclass ServerBuildTransformer {\n async transformPublicFile(\n source: string,\n path: string\n ): Promise<OnLoadResult> {\n const controllerCode = generateController(path, source);\n\n if (controllerCode) {\n source = `${source}\\n\\n${controllerCode}\\n`;\n }\n\n return swcTransform(source, path);\n }\n\n async transformRegularTypeScript(\n source: string,\n path: string,\n isPublic: boolean\n ): Promise<OnLoadResult> {\n if (isPublic) {\n return this.transformPublicFile(source, path);\n }\n return swcTransform(source, path);\n }\n\n async transformServerTsx(\n source: string,\n path: string\n ): Promise<OnLoadResult> {\n return swcTransform(source, path, true, {\n runtime: \"automatic\",\n importSource: \"@kithinji/orca\",\n });\n }\n\n async transformInteractiveTsxStub(\n source: string,\n path: string\n ): Promise<OnLoadResult> {\n const stubSource = generateServerStub(path, source);\n\n return swcTransform(stubSource, path);\n }\n\n async process(\n metadata: FileMetadata,\n onClientFound: (path: string) => void\n ): Promise<OnLoadResult> {\n const expandedSource = await expandMacros(metadata.source, metadata.path);\n\n const expandedMetadata = { ...metadata, source: expandedSource };\n const { source, path, isTsx, isInteractiveFile, isPublicFile } =\n expandedMetadata;\n\n if (isTsx) {\n if (isInteractiveFile) {\n onClientFound(path);\n const clientCode = await this.transformInteractiveTsxStub(source, path);\n\n const store = Store.getInstance();\n\n store.set(path, clientCode.contents);\n\n return clientCode;\n }\n return this.transformServerTsx(source, path);\n }\n\n return this.transformRegularTypeScript(source, path, isPublicFile);\n }\n}\n\nclass ClientBuildTransformer {\n async transformInteractiveTsx(\n source: string,\n path: string\n ): Promise<OnLoadResult> {\n const swcResult = await swcTransform(source, path, true, {\n runtime: \"preserve\",\n });\n\n const babelResult = await babel.transformAsync(\n swcResult.contents as string,\n {\n filename: path,\n sourceType: \"module\",\n plugins: [j2d],\n parserOpts: {\n plugins: [\"jsx\"],\n },\n configFile: false,\n babelrc: false,\n }\n );\n\n return {\n contents: babelResult?.code || \"\",\n loader: \"js\",\n resolveDir: swcResult.resolveDir,\n };\n }\n\n async transformServerComponent(\n node: FileNode,\n source: string,\n path: string\n ): Promise<OnLoadResult> {\n const scSource = generateServerComponent(path, source);\n return swcTransform(scSource, path);\n }\n\n async transformPublicFileRpc(\n node: FileNode,\n source: string,\n path: string\n ): Promise<OnLoadResult> {\n const stubSource = generateRpcStub(path, source);\n return swcTransform(stubSource, path);\n }\n\n async transformSharedCode(\n source: string,\n path: string\n ): Promise<OnLoadResult> {\n return swcTransform(source, path);\n }\n\n async process(node: FileNode, metadata: FileMetadata): Promise<OnLoadResult> {\n const expandedSource = await expandMacros(metadata.source, metadata.path);\n\n const expandedMetadata = { ...metadata, source: expandedSource };\n const { source, path, isTsx, directive } = expandedMetadata;\n\n if (isTsx) {\n if (directive === \"interactive\") {\n return this.transformInteractiveTsx(source, path);\n } else if (directive === null) {\n return this.transformServerComponent(node, source, path);\n } else {\n throw new Error(\n `Unexpected directive \"${directive}\" for TSX file: ${path}`\n );\n }\n }\n\n if (directive === \"public\") {\n return this.transformPublicFileRpc(node, source, path);\n }\n\n if (directive === null) {\n return this.transformSharedCode(source, path);\n }\n\n return {\n contents: source,\n loader: isTsx ? \"tsx\" : \"ts\",\n };\n }\n}\n\nexport function useMyPlugin(options: MyPluginParams): Plugin {\n const serverTransformer = new ServerBuildTransformer();\n const clientTransformer = new ClientBuildTransformer();\n\n return {\n name: \"Orca\",\n setup(build) {\n build.onLoad(\n { filter: /\\.tsx?$/ },\n async (args: OnLoadArgs): Promise<OnLoadResult> => {\n const source = await fs.readFile(args.path, \"utf8\");\n const metadata = parseFileMetadata(source, args.path);\n\n if (options.isServerBuild) {\n return serverTransformer.process(metadata, options.onClientFound);\n }\n\n if (!options.graph) {\n throw new Error(\n \"Dependency graph is required for client build but was not provided\"\n );\n }\n\n const node = options.graph[args.path];\n\n if (!node) {\n console.log(`File node not found in depend graph: ${args.path}`);\n throw new Error(\"900\");\n }\n\n return clientTransformer.process(node, metadata);\n }\n );\n },\n };\n}\n", "export * from \"./expand_macros\";\nexport * from \"./macro_executer\";\n", "import ts from \"typescript\";\nimport path from \"path\";\nimport Module from \"node:module\";\nimport { macroExecuter } from \"./macro_executer\";\nimport { Store } from \"@/store\";\n\nexport interface MacroContext {\n node: ts.CallExpression;\n sourceFile: ts.SourceFile;\n ts: typeof ts;\n factory: ts.NodeFactory;\n store: Store;\n graph: MacroDependencyGraph;\n get program(): ts.Program;\n get checker(): ts.TypeChecker;\n error(msg: string): never;\n resolveNodeValue(node: ts.Node): any;\n resolveIdentifier(identifier: ts.Identifier): ts.Node;\n}\n\ninterface MacroNode {\n key: string;\n variableName: string;\n node: ts.CallExpression;\n sourceFile: ts.SourceFile;\n filePath: string;\n dependencies: Set<string>;\n astResult?: ts.Node;\n computed: boolean;\n}\n\nclass MacroDependencyGraph {\n private nodes = new Map<string, MacroNode>();\n private projectRoot: string;\n private typeChecker?: ts.TypeChecker;\n\n constructor(projectRoot: string) {\n this.projectRoot = projectRoot;\n }\n\n setTypeChecker(checker: ts.TypeChecker) {\n this.typeChecker = checker;\n }\n\n createKey(sourceFile: ts.SourceFile, variableName: string): string {\n const relativePath = path.relative(this.projectRoot, sourceFile.fileName);\n const normalized = relativePath.replace(/\\\\/g, \"/\");\n return `${normalized}:${variableName}`;\n }\n\n addNode(\n key: string,\n variableName: string,\n node: ts.CallExpression,\n sourceFile: ts.SourceFile\n ) {\n if (!this.nodes.has(key)) {\n this.nodes.set(key, {\n key,\n variableName,\n node,\n sourceFile,\n filePath: sourceFile.fileName,\n dependencies: new Set(),\n astResult: undefined,\n computed: false,\n });\n }\n }\n\n getNode(key: string): MacroNode | undefined {\n return this.nodes.get(key);\n }\n\n addDependency(fromKey: string, toKey: string) {\n const node = this.nodes.get(fromKey);\n if (node) {\n node.dependencies.add(toKey);\n }\n }\n\n setResult(key: string, astResult: ts.Node) {\n const node = this.nodes.get(key);\n if (node) {\n node.computed = true;\n node.astResult = astResult;\n }\n }\n\n getResult(key: string): ts.Node | undefined {\n return this.nodes.get(key)?.astResult;\n }\n\n isComputed(key: string): boolean {\n return this.nodes.get(key)?.computed ?? false;\n }\n\n topologicalSort(): string[] {\n const visited = new Set<string>();\n const inProgress = new Set<string>();\n const sorted: string[] = [];\n\n const visit = (key: string, path: string[] = []) => {\n if (visited.has(key)) return;\n\n if (inProgress.has(key)) {\n const cycle = [...path, key].join(\" -> \");\n throw new Error(`Circular macro dependency detected: ${cycle}`);\n }\n\n const node = this.nodes.get(key);\n if (!node) return;\n\n inProgress.add(key);\n\n for (const depKey of node.dependencies) {\n visit(depKey, [...path, key]);\n }\n\n inProgress.delete(key);\n visited.add(key);\n sorted.push(key);\n };\n\n for (const key of this.nodes.keys()) {\n visit(key);\n }\n\n return sorted;\n }\n\n clear() {\n this.nodes.clear();\n }\n\n getNodesForFile(filePath: string): MacroNode[] {\n return Array.from(this.nodes.values()).filter(\n (node) => node.filePath === filePath\n );\n }\n}\n\nlet globalGraph: MacroDependencyGraph | null = null;\n\nexport function getGlobalMacroGraph(projectRoot: string): MacroDependencyGraph {\n if (!globalGraph) {\n globalGraph = new MacroDependencyGraph(projectRoot);\n }\n return globalGraph;\n}\n\nexport function resetGlobalMacroGraph() {\n globalGraph = null;\n}\n\nfunction resolveImportSpecifier(\n importPath: string,\n fromFile: string,\n compilerOptions: ts.CompilerOptions\n): string | undefined {\n const resolved = ts.resolveModuleName(\n importPath,\n fromFile,\n compilerOptions,\n ts.sys\n );\n\n if (resolved.resolvedModule?.resolvedFileName) {\n return resolved.resolvedModule.resolvedFileName;\n }\n\n try {\n const requireFromFile = Module.createRequire(fromFile);\n return requireFromFile.resolve(importPath);\n } catch (e) {\n return undefined;\n }\n}\n\nfunction resolveImportFullPath(\n symbolName: string,\n sourceFile: ts.SourceFile,\n compilerOptions: ts.CompilerOptions\n): { importPath: string; resolvedPath: string | undefined } | undefined {\n let importPath: string | undefined;\n\n sourceFile.forEachChild((node) => {\n if (!ts.isImportDeclaration(node) || !node.importClause) return;\n\n const { namedBindings, name } = node.importClause;\n\n if (name && name.text === symbolName) {\n importPath = (node.moduleSpecifier as ts.StringLiteral).text;\n }\n\n if (namedBindings && ts.isNamedImports(namedBindings)) {\n for (const specifier of namedBindings.elements) {\n const importedName = specifier.name.text;\n if (importedName === symbolName) {\n importPath = (node.moduleSpecifier as ts.StringLiteral).text;\n }\n }\n }\n\n if (namedBindings && ts.isNamespaceImport(namedBindings)) {\n if (symbolName.startsWith(namedBindings.name.text + \".\")) {\n importPath = (node.moduleSpecifier as ts.StringLiteral).text;\n }\n }\n });\n\n if (!importPath) return undefined;\n\n const resolvedPath = resolveImportSpecifier(\n importPath,\n sourceFile.fileName,\n compilerOptions\n );\n\n return {\n importPath: importPath.startsWith(\".\") ? resolvedPath! : importPath,\n resolvedPath,\n };\n}\n\nfunction isNpmPackage(importPath: string): boolean {\n return (\n !importPath.startsWith(\".\") &&\n !importPath.startsWith(\"/\") &&\n !path.isAbsolute(importPath)\n );\n}\n\nfunction findVariableDeclarationInFile(\n variableName: string,\n sourceFile: ts.SourceFile\n): ts.VariableDeclaration | undefined {\n let found: ts.VariableDeclaration | undefined;\n\n function visit(node: ts.Node) {\n if (found) return;\n\n if (ts.isVariableDeclaration(node)) {\n if (ts.isIdentifier(node.name) && node.name.text === variableName) {\n found = node;\n return;\n }\n }\n\n ts.forEachChild(node, visit);\n }\n\n visit(sourceFile);\n return found;\n}\n\nexport function extractValueFromNode(node: ts.Node): any | undefined {\n if (ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node)) {\n return node.text;\n }\n if (ts.isNumericLiteral(node)) return Number(node.text);\n if (node.kind === ts.SyntaxKind.TrueKeyword) return true;\n if (node.kind === ts.SyntaxKind.FalseKeyword) return false;\n if (node.kind === ts.SyntaxKind.NullKeyword) return null;\n if (node.kind === ts.SyntaxKind.UndefinedKeyword) return undefined;\n\n if (ts.isTemplateExpression(node)) {\n let result = node.head.text;\n for (const span of node.templateSpans) {\n const exprValue = extractValueFromNode(span.expression);\n result += String(exprValue) + span.literal.text;\n }\n return result;\n }\n\n if (ts.isObjectLiteralExpression(node)) {\n const obj: any = {};\n for (const prop of node.properties) {\n if (ts.isPropertyAssignment(prop)) {\n const key = ts.isIdentifier(prop.name)\n ? prop.name.text\n : ts.isStringLiteral(prop.name)\n ? prop.name.text\n : ts.isNumericLiteral(prop.name)\n ? prop.name.text\n : ts.isComputedPropertyName(prop.name)\n ? extractValueFromNode(prop.name.expression)\n : undefined;\n\n if (key !== undefined) {\n obj[key] = extractValueFromNode(prop.initializer);\n }\n } else if (ts.isShorthandPropertyAssignment(prop)) {\n obj[prop.name.text] = prop.name.text;\n } else if (ts.isSpreadAssignment(prop)) {\n const spread = extractValueFromNode(prop.expression);\n if (typeof spread === \"object\" && spread !== null) {\n Object.assign(obj, spread);\n }\n }\n }\n return obj;\n }\n\n if (ts.isArrayLiteralExpression(node)) {\n return node.elements\n .map((el) => {\n if (ts.isSpreadElement(el)) {\n const spread = extractValueFromNode(el.expression);\n return Array.isArray(spread) ? spread : [spread];\n }\n return extractValueFromNode(el);\n })\n .flat();\n }\n\n if (ts.isPrefixUnaryExpression(node)) {\n const operand = extractValueFromNode(node.operand);\n switch (node.operator) {\n case ts.SyntaxKind.MinusToken:\n return -operand;\n case ts.SyntaxKind.PlusToken:\n return +operand;\n case ts.SyntaxKind.ExclamationToken:\n return !operand;\n case ts.SyntaxKind.TildeToken:\n return ~operand;\n }\n }\n\n if (ts.isBinaryExpression(node)) {\n const left = extractValueFromNode(node.left);\n const right = extractValueFromNode(node.right);\n\n switch (node.operatorToken.kind) {\n case ts.SyntaxKind.PlusToken:\n return left + right;\n case ts.SyntaxKind.MinusToken:\n return left - right;\n case ts.SyntaxKind.AsteriskToken:\n return left * right;\n case ts.SyntaxKind.SlashToken:\n return left / right;\n case ts.SyntaxKind.PercentToken:\n return left % right;\n case ts.SyntaxKind.AsteriskAsteriskToken:\n return left ** right;\n case ts.SyntaxKind.EqualsEqualsToken:\n return left == right;\n case ts.SyntaxKind.EqualsEqualsEqualsToken:\n return left === right;\n case ts.SyntaxKind.ExclamationEqualsToken:\n return left != right;\n case ts.SyntaxKind.ExclamationEqualsEqualsToken:\n return left !== right;\n case ts.SyntaxKind.LessThanToken:\n return left < right;\n case ts.SyntaxKind.LessThanEqualsToken:\n return left <= right;\n case ts.SyntaxKind.GreaterThanToken:\n return left > right;\n case ts.SyntaxKind.GreaterThanEqualsToken:\n return left >= right;\n case ts.SyntaxKind.AmpersandAmpersandToken:\n return left && right;\n case ts.SyntaxKind.BarBarToken:\n return left || right;\n case ts.SyntaxKind.QuestionQuestionToken:\n return left ?? right;\n }\n }\n\n if (ts.isParenthesizedExpression(node)) {\n return extractValueFromNode(node.expression);\n }\n\n if (ts.isConditionalExpression(node)) {\n const condition = extractValueFromNode(node.condition);\n return condition\n ? extractValueFromNode(node.whenTrue)\n : extractValueFromNode(node.whenFalse);\n }\n\n if (ts.isPropertyAccessExpression(node)) {\n const obj = extractValueFromNode(node.expression);\n const propName = node.name.text;\n return obj?.[propName];\n }\n\n if (ts.isElementAccessExpression(node)) {\n const obj = extractValueFromNode(node.expression);\n const index = extractValueFromNode(node.argumentExpression);\n return obj?.[index];\n }\n\n return undefined;\n}\n\nfunction createNodeResolver(\n graph: MacroDependencyGraph,\n currentFileKey: string,\n sourceFile: ts.SourceFile,\n compilerOptions: ts.CompilerOptions\n) {\n const trackedDependencies: string[] = [];\n\n function resolveIdentifierToNode(identifier: ts.Identifier): ts.Node {\n const name = identifier.text;\n\n // Look for local variable declaration\n const declaration = findVariableDeclarationInFile(name, sourceFile);\n\n if (declaration && declaration.initializer) {\n const varStatement = declaration.parent.parent as ts.VariableStatement;\n const isConst = varStatement.declarationList.flags & ts.NodeFlags.Const;\n\n if (!isConst) {\n throw new Error(\n `Macro argument '${name}' must be a const variable. let/var are not allowed.`\n );\n }\n\n // Check if it's a macro call\n if (ts.isCallExpression(declaration.initializer)) {\n const expr = declaration.initializer.expression;\n\n if (ts.isIdentifier(expr) && expr.text.endsWith(\"$\")) {\n const depKey = graph.createKey(sourceFile, name);\n trackedDependencies.push(depKey);\n\n const result = graph.getResult(depKey);\n if (result !== undefined) {\n return result;\n }\n\n throw new Error(\n `Macro dependency '${name}' has not been computed yet. This should not happen.`\n );\n }\n }\n\n return declaration.initializer;\n }\n\n // Try to resolve from imports\n const resolved = resolveImportFullPath(name, sourceFile, compilerOptions);\n\n if (resolved) {\n if (isNpmPackage(resolved.importPath)) {\n throw new Error(\n `Cannot resolve identifier '${name}' from npm package '${resolved.importPath}'. ` +\n `Macro arguments from npm packages must be constants that can be evaluated at compile time.`\n );\n }\n\n if (!resolved.resolvedPath) {\n throw new Error(\n `Could not resolve import path: ${resolved.importPath}`\n );\n }\n\n const importedSource = ts.sys.readFile(resolved.resolvedPath);\n if (!importedSource) {\n throw new Error(\n `Could not read imported file: ${resolved.resolvedPath}`\n );\n }\n\n const importedSourceFile = ts.createSourceFile(\n resolved.resolvedPath,\n importedSource,\n ts.ScriptTarget.Latest,\n true\n );\n\n const importedDecl = findVariableDeclarationInFile(\n name,\n importedSourceFile\n );\n\n if (importedDecl && importedDecl.initializer) {\n // Check if it's a macro call\n if (ts.isCallExpression(importedDecl.initializer)) {\n const expr = importedDecl.initializer.expression;\n if (ts.isIdentifier(expr) && expr.text.endsWith(\"$\")) {\n const depKey = graph.createKey(importedSourceFile, name);\n trackedDependencies.push(depKey);\n\n const result = graph.getResult(depKey);\n if (result !== undefined) {\n return result;\n }\n\n throw new Error(\n `Cross-file macro dependency '${name}' from '${resolved.resolvedPath}' needs to be computed first.`\n );\n }\n }\n\n return importedDecl.initializer;\n }\n }\n\n throw new Error(\n `Could not resolve identifier '${name}'. Make sure it's a const variable or imported constant.`\n );\n }\n\n function resolveNodeValue(node: ts.Node): any {\n if (ts.isIdentifier(node)) {\n const resolvedNode = resolveIdentifierToNode(node);\n return extractValueFromNode(resolvedNode);\n }\n return extractValueFromNode(node);\n }\n\n return {\n resolveIdentifierToNode,\n resolveNodeValue,\n getTrackedDependencies: () => trackedDependencies,\n };\n}\n\nexport async function expandMacros(\n source: string,\n filePath: string,\n projectRoot: string = process.cwd()\n): Promise<string> {\n if (!source.includes(\"$(\") && !source.includes(\"$`\")) {\n return source;\n }\n\n const compilerOptions: ts.CompilerOptions = {\n module: ts.ModuleKind.ESNext,\n target: ts.ScriptTarget.Latest,\n moduleResolution: ts.ModuleResolutionKind.NodeNext,\n };\n\n const sourceFile = ts.createSourceFile(\n filePath,\n source,\n ts.ScriptTarget.Latest,\n true,\n filePath.endsWith(\".tsx\") ? ts.ScriptKind.TSX : ts.ScriptKind.TS\n );\n\n const graph = getGlobalMacroGraph(projectRoot);\n\n const getProgram = () =>\n ts.createProgram([filePath], {\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n });\n\n const getTypeChecker = () => getProgram()?.getTypeChecker();\n\n // Discover all macro calls\n function discoverMacros(node: ts.Node) {\n if (ts.isVariableDeclaration(node) && node.initializer) {\n if (\n ts.isCallExpression(node.initializer) &&\n ts.isIdentifier(node.initializer.expression) &&\n node.initializer.expression.text.endsWith(\"$\")\n ) {\n if (ts.isIdentifier(node.name)) {\n const variableName = node.name.text;\n const key = graph.createKey(sourceFile, variableName);\n graph.addNode(key, variableName, node.initializer, sourceFile);\n }\n }\n }\n ts.forEachChild(node, discoverMacros);\n }\n\n discoverMacros(sourceFile);\n\n // Build dependency graph\n const fileNodes = graph.getNodesForFile(filePath);\n\n for (const macroNode of fileNodes) {\n if (graph.isComputed(macroNode.key)) continue;\n\n const resolver = createNodeResolver(\n graph,\n macroNode.key,\n macroNode.sourceFile,\n compilerOptions\n );\n\n try {\n // Walk through arguments to discover dependencies\n for (const arg of macroNode.node.arguments) {\n function visitForDeps(n: ts.Node) {\n if (ts.isIdentifier(n)) {\n try {\n resolver.resolveIdentifierToNode(n);\n } catch (e) {\n // Ignore resolution errors during dependency discovery\n }\n }\n ts.forEachChild(n, visitForDeps);\n }\n visitForDeps(arg);\n }\n\n const deps = resolver.getTrackedDependencies();\n for (const dep of deps) {\n graph.addDependency(macroNode.key, dep);\n }\n } catch (e) {\n // Ignore errors during dependency discovery\n }\n }\n\n // Execute macros in topological order\n const sortedKeys = graph.topologicalSort();\n\n for (const key of sortedKeys) {\n const macroNode = graph.getNode(key);\n if (!macroNode || graph.isComputed(key)) continue;\n\n const node = macroNode.node;\n const name = (node.expression as ts.Identifier).text;\n\n const resolved = resolveImportFullPath(\n name,\n macroNode.sourceFile,\n compilerOptions\n );\n\n if (!resolved) {\n throw new Error(`Could not resolve macro import for '${name}'`);\n }\n\n const macro = macroExecuter().getMacro(resolved.importPath, name);\n\n if (!macro) {\n throw new Error(`Could not get macro '${name}' for key '${key}'`);\n }\n\n const resolver = createNodeResolver(\n graph,\n key,\n macroNode.sourceFile,\n compilerOptions\n );\n\n const macroContext: MacroContext = {\n node,\n sourceFile: macroNode.sourceFile,\n ts,\n store: Store.getInstance(),\n factory: ts.factory,\n graph,\n get program() {\n return getProgram();\n },\n get checker() {\n return getTypeChecker();\n },\n error: (msg: string) => {\n throw new Error(msg);\n },\n resolveNodeValue: resolver.resolveNodeValue,\n resolveIdentifier: resolver.resolveIdentifierToNode,\n };\n\n try {\n // Pass AST nodes directly to macro\n const result = macro(...node.arguments, macroContext);\n\n if (!result || typeof result !== \"object\" || !(\"kind\" in result)) {\n throw new Error(`Macro '${name}' must return a TypeScript AST node`);\n }\n\n graph.setResult(key, result);\n } catch (e: any) {\n console.error(`Macro '${name}' execution failed: ${e?.message ?? e}`);\n throw e;\n }\n }\n\n // Transform the AST\n const transformer: ts.TransformerFactory<ts.SourceFile> = (context) => {\n const visit = (node: ts.Node): ts.Node => {\n if (ts.isVariableDeclaration(node) && node.initializer) {\n if (\n ts.isCallExpression(node.initializer) &&\n ts.isIdentifier(node.initializer.expression) &&\n node.initializer.expression.text.endsWith(\"$\") &&\n ts.isIdentifier(node.name)\n ) {\n const key = graph.createKey(sourceFile, node.name.text);\n const macroNode = graph.getNode(key);\n\n if (macroNode && graph.isComputed(key)) {\n const result = graph.getResult(key)!;\n\n return context.factory.updateVariableDeclaration(\n node,\n node.name,\n node.exclamationToken,\n node.type,\n result as any\n );\n }\n }\n }\n\n if (ts.isCallExpression(node) && ts.isIdentifier(node.expression)) {\n const name = node.expression.text;\n\n if (name.endsWith(\"$\")) {\n const resolved = resolveImportFullPath(\n name,\n sourceFile,\n compilerOptions\n );\n\n if (resolved) {\n const macro = macroExecuter().getMacro(resolved.importPath, name);\n\n if (macro) {\n const tempKey = `${graph.createKey(sourceFile, \"__temp__\")}:${\n node.pos\n }`;\n const resolver = createNodeResolver(\n graph,\n tempKey,\n sourceFile,\n compilerOptions\n );\n\n const macroContext: MacroContext = {\n node,\n sourceFile,\n ts,\n graph,\n store: Store.getInstance(),\n factory: context.factory,\n get program() {\n return getProgram();\n },\n get checker() {\n return getTypeChecker();\n },\n error: (msg: string) => {\n throw new Error(msg);\n },\n resolveNodeValue: resolver.resolveNodeValue,\n resolveIdentifier: resolver.resolveIdentifierToNode,\n };\n\n try {\n // Pass AST nodes directly to macro\n const result = macro(...node.arguments, macroContext);\n\n if (\n !result ||\n typeof result !== \"object\" ||\n !(\"kind\" in result)\n ) {\n throw new Error(\n `Macro '${name}' must return a TypeScript AST node`\n );\n }\n\n return result;\n } catch (e: any) {\n console.log(\n `Macro '${name}' execution failed: ${e?.message ?? e}`\n );\n return node;\n }\n }\n }\n }\n }\n\n return ts.visitEachChild(node, visit, context);\n };\n\n return (sf) => ts.visitNode(sf, visit) as ts.SourceFile;\n };\n\n const result = ts.transform(sourceFile, [transformer]);\n const output = ts.createPrinter().printFile(result.transformed[0]);\n result.dispose();\n\n return output;\n}\n", "import * as vm from \"node:vm\";\nimport * as esbuild from \"esbuild\";\nimport * as path from \"node:path\";\nimport Module from \"node:module\";\nimport * as fs from \"node:fs\";\n\ntype MacroFunction = Function & { name: string };\ntype LoadedMacros = Record<string, MacroFunction>;\n\nexport class MacroExecutor {\n private cache = new Map<string, LoadedMacros>();\n\n getMacro(specifier: string, macroName?: string): MacroFunction {\n if (!this.cache.has(specifier)) {\n this.load(specifier);\n }\n const macros = this.cache.get(specifier)!;\n if (macroName) {\n const fn = macros[macroName];\n if (!fn) {\n throw new Error(`Macro \"${macroName}\" not found in ${specifier}`);\n }\n return fn;\n }\n const names = Object.keys(macros);\n if (names.length === 1) {\n return macros[names[0]];\n }\n if (macros.default) {\n return macros.default;\n }\n throw new Error(`Multiple macros in ${specifier}: ${names.join(\", \")}`);\n }\n\n private load(specifier: string) {\n const requireFromHere = Module.createRequire(\n process.cwd() + \"/package.json\"\n );\n const entry = requireFromHere.resolve(specifier);\n\n const { outputFiles } = esbuild.buildSync({\n entryPoints: [entry],\n bundle: true,\n write: false,\n platform: \"node\",\n format: \"cjs\",\n external: [\n ...Module.builtinModules,\n ...Module.builtinModules.map((m) => `node:${m}`),\n ],\n target: \"node18\",\n mainFields: [\"module\", \"main\"],\n conditions: [\"node\", \"import\", \"require\"],\n packages: \"bundle\",\n logLevel: \"warning\",\n });\n\n const code = outputFiles[0].text;\n const sandboxRequire = Module.createRequire(entry);\n\n const sandbox: any = {\n // Module system\n module: { exports: {} },\n exports: {},\n require: sandboxRequire,\n\n console,\n Buffer,\n URL,\n URLSearchParams,\n TextEncoder,\n TextDecoder,\n atob,\n btoa,\n\n __filename: entry,\n __dirname: path.dirname(entry),\n\n process: {\n env: process.env,\n cwd: process.cwd,\n version: process.version,\n versions: process.versions,\n platform: process.platform,\n arch: process.arch,\n argv: process.argv,\n execPath: process.execPath,\n pid: process.pid,\n },\n\n setTimeout,\n setInterval,\n setImmediate,\n clearTimeout,\n clearInterval,\n clearImmediate,\n\n Promise,\n\n Object,\n Array,\n String,\n Number,\n Boolean,\n Date,\n Math,\n JSON,\n RegExp,\n Error,\n TypeError,\n RangeError,\n SyntaxError,\n Map,\n Set,\n WeakMap,\n WeakSet,\n Symbol,\n BigInt,\n Proxy,\n Reflect,\n };\n\n sandbox.global = sandbox;\n sandbox.globalThis = sandbox;\n\n const context = vm.createContext(sandbox, {\n name: `macro-${path.basename(entry)}`,\n codeGeneration: {\n strings: true,\n wasm: false,\n },\n });\n\n try {\n const script = new vm.Script(code, {\n filename: entry,\n lineOffset: 0,\n columnOffset: 0,\n });\n\n script.runInContext(context, {\n breakOnSigint: true,\n });\n } catch (error) {\n throw new Error(\n `Failed to execute macro from ${specifier}: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n\n const macros: LoadedMacros = {};\n const exports = sandbox.module.exports;\n\n if (typeof exports === \"function\") {\n macros.default = exports;\n } else if (typeof exports === \"object\" && exports !== null) {\n for (const [name, value] of Object.entries(exports)) {\n if (typeof value === \"function\" && name.endsWith(\"$\")) {\n macros[name] = value as MacroFunction;\n }\n }\n\n if (typeof exports.default === \"function\") {\n macros.default = exports.default;\n }\n }\n\n if (!Object.keys(macros).length) {\n throw new Error(`No macros found in ${specifier}`);\n }\n\n this.cache.set(specifier, macros);\n }\n\n clearCache(specifier?: string) {\n if (specifier) {\n this.cache.delete(specifier);\n } else {\n this.cache.clear();\n }\n }\n}\n\nconst macroExecutor = new MacroExecutor();\n\nexport function macroExecuter(): MacroExecutor {\n return macroExecutor;\n}\n", "export * from \"./store\";\n", "export class Store {\n private static instance: Store;\n private containers: Map<string, unknown[]> = new Map();\n\n private constructor() {}\n\n public static getInstance(): Store {\n if (!Store.instance) {\n Store.instance = new Store();\n }\n return Store.instance;\n }\n\n public set<T>(key: string, value: T): void {\n const existing = this.containers.get(key) || [];\n existing.push(value);\n this.containers.set(key, existing);\n }\n\n public get<T>(key: string): T[] | undefined {\n const values = this.containers.get(key);\n return values as T[] | undefined;\n }\n\n public has(key: string): boolean {\n return this.containers.has(key);\n }\n\n public delete(key: string): boolean {\n return this.containers.delete(key);\n }\n\n public clear(): void {\n this.containers.clear();\n }\n\n public keys(): IterableIterator<string> {\n return this.containers.keys();\n }\n\n public get size(): number {\n return this.containers.size;\n }\n}\n", "import * as path from \"path\";\nimport {\n capitalize,\n extractServiceInfo,\n GenerationError,\n parseTypeScript,\n ServiceInfo,\n ServiceMethod,\n serviceNameToPath,\n StreamType,\n toInstanceName,\n validateServiceInfo,\n} from \"./utils\";\n\nexport function generateController(\n filePath: string,\n code: string\n): string | null {\n try {\n const ast = parseTypeScript(filePath, code);\n const serviceInfo = extractServiceInfo(ast, filePath, true);\n\n if (!serviceInfo || !serviceInfo.hasInjectable) {\n return null;\n }\n\n validateServiceInfo(serviceInfo, filePath);\n return generateControllerCode(serviceInfo, filePath);\n } catch (error) {\n if ((error as any).type) {\n throw error;\n }\n throw {\n type: \"parse\",\n message: `Failed to parse TypeScript file: ${(error as Error).message}`,\n filePath,\n details: error,\n } as GenerationError;\n }\n}\n\nfunction generateControllerCode(\n serviceInfo: ServiceInfo,\n filePath: string\n): string {\n const serviceName = serviceInfo.className;\n const controllerName = serviceName.replace(/Service$/, \"GenController\");\n const serviceImportPath = getImportPath(filePath);\n const controllerPath = serviceNameToPath(serviceName);\n\n const imports = generateImports(serviceInfo, serviceName, serviceImportPath);\n const methods = generateMethods(serviceInfo);\n const serviceInstance = toInstanceName(serviceName);\n\n return `${imports}\n\n@Controller(\"/${controllerPath}\", {\n providedIn: \"root\",\n})\nexport class ${controllerName} {\n constructor(\n private readonly ${serviceInstance}: ${serviceName}\n ) {}\n\n${methods}\n}`;\n}\n\n\nfunction getImportPath(filePath: string): string {\n const basename = path.basename(filePath);\n return `./${basename.replace(/\\.tsx?$/, \"\")}`;\n}\n\nfunction generateImports(\n serviceInfo: ServiceInfo,\n serviceName: string,\n serviceImportPath: string\n): string {\n const importGroups = new Map<string, Set<string>>();\n\n const registerIdentifier = (id: string) => {\n const source = serviceInfo.importMap[id] || serviceImportPath;\n if (!importGroups.has(source)) {\n importGroups.set(source, new Set());\n }\n importGroups.get(source)!.add(id);\n };\n\n serviceInfo.methods.forEach((m) => {\n [...m.paramSchemas, m.returnSchema].filter(Boolean).forEach((s) => {\n const matches = s!.match(/[A-Z][a-zA-Z0-9]*/g);\n matches?.forEach(registerIdentifier);\n if (s!.includes(\"z.\")) {\n registerIdentifier(\"z\");\n }\n });\n });\n\n const hasPost = serviceInfo.methods.some(\n (m) => !m.isStreamable && m.params.length > 0\n );\n const hasGet = serviceInfo.methods.some(\n (m) => !m.isStreamable && m.params.length === 0\n );\n const hasSse = serviceInfo.methods.some(\n (m) => m.isStreamable && m.streamType == StreamType.Observable\n );\n const hasStreamableWithParams = serviceInfo.methods.some(\n (m) => m.isStreamable && m.params.length > 0\n );\n\n const decorators = [\"Controller\"];\n if (hasPost) decorators.push(\"Post\");\n if (hasGet) decorators.push(\"Get\");\n if (hasPost) decorators.push(\"Body\");\n if (hasSse) decorators.push(\"Sse\");\n if (hasStreamableWithParams) decorators.push(\"Query\");\n\n let importStrings = `import { ${decorators.join(\n \", \"\n )} } from \"@kithinji/orca\";\\n`;\n\n importGroups.forEach((ids, source) => {\n const filteredIds = Array.from(ids).filter((id) => id !== serviceName);\n if (filteredIds.length > 0) {\n importStrings += `import { ${filteredIds.join(\n \", \"\n )} } from \"${source}\";\\n`;\n }\n });\n\n return importStrings;\n}\n\nfunction generateMethods(serviceInfo: ServiceInfo): string {\n return serviceInfo.methods\n .map((m) => generateMethod(m, serviceInfo.className))\n .join(\"\\n\\n\");\n}\n\nfunction generateMethod(method: ServiceMethod, serviceName: string): string {\n const hasParams = method.params.length > 0;\n const serviceInstance = toInstanceName(serviceName);\n\n if (method.isStreamable) {\n const queryParams = hasParams\n ? method.params\n .map((p) => `@Query('${p.name}') ${p.name}: ${p.type}`)\n .join(\", \")\n : \"\";\n const body = generateMethodBody(method, serviceInstance, false);\n const returnTypeName = method.streamType || \"Observable\";\n\n return ` @Sse(\"${method.name}\")\n ${method.name}(${queryParams}): ${returnTypeName}<${method.returnType}> {\n${body}\n }`;\n }\n\n const decorator = hasParams ? \"Post\" : \"Get\";\n const bodyParam = hasParams ? `@Body() body: any` : \"\";\n const body = generateMethodBody(method, serviceInstance, true);\n\n return ` @${decorator}(\"${method.name}\")\n async ${method.name}(${bodyParam}): Promise<${method.returnType}> {\n${body}\n }`;\n}\n\nfunction generateMethodBody(\n method: ServiceMethod,\n serviceInstance: string,\n isAsync: boolean\n): string {\n const lines: string[] = [];\n const hasParams = method.params.length > 0;\n\n if (hasParams && method.isStreamable && method.paramSchemas.length > 0) {\n method.params.forEach((p, i) => {\n lines.push(\n ` const validated${capitalize(p.name)} = ${\n method.paramSchemas[i]\n }.parse(${p.name});`\n );\n });\n }\n\n if (hasParams && !method.isStreamable) {\n if (method.paramSchemas.length > 0) {\n lines.push(\n ` const b = typeof body === 'object' && body !== null ? body : {};`\n );\n method.params.forEach((p, i) => {\n lines.push(\n ` const ${p.name} = ${method.paramSchemas[i]}.parse(b.${p.name});`\n );\n });\n } else {\n const paramNames = method.params.map((p) => p.name).join(\", \");\n lines.push(` const { ${paramNames} } = body || {};`);\n }\n }\n\n let callArgs: string;\n if (hasParams && method.isStreamable && method.paramSchemas.length > 0) {\n callArgs = method.params\n .map((p) => `validated${capitalize(p.name)}`)\n .join(\", \");\n } else {\n callArgs = method.params.map((p) => p.name).join(\", \");\n }\n const serviceCall = `${serviceInstance}.${method.name}(${callArgs})`;\n\n if (method.returnSchema && isAsync) {\n lines.push(` const res = await this.${serviceCall};`);\n lines.push(` return ${method.returnSchema}.parse(res);`);\n } else if (isAsync) {\n lines.push(` return this.${serviceCall};`);\n } else {\n lines.push(` return this.${serviceCall};`);\n }\n\n return lines.join(\"\\n\");\n}\n", "import {\n type ClassDeclaration,\n type Decorator,\n type Param,\n type ClassMethod,\n type TsType,\n parseSync,\n ClassMember,\n ImportDeclaration,\n} from \"@swc/core\";\n\nexport interface ServiceMethod {\n name: string;\n params: MethodParam[];\n returnType: string;\n isAsync: boolean;\n isStreamable: boolean;\n streamType?: StreamType;\n paramSchemas: string[];\n returnSchema?: string;\n}\n\nexport interface MethodParam {\n name: string;\n type: string;\n decorators?: string[];\n}\n\nexport interface ServiceInfo {\n className: string;\n methods: ServiceMethod[];\n hasInjectable: boolean;\n importMap: Record<string, string>;\n}\n\nexport interface GenerationError {\n type: \"parse\" | \"validation\" | \"generation\";\n message: string;\n filePath: string;\n details?: any;\n}\n\nexport enum StreamType {\n Observable = \"Observable\",\n}\n\nexport interface ReturnTypeConfig {\n typeName: string;\n isStreamable: boolean;\n streamType?: StreamType;\n decoratorName: string;\n isSubjectLike: boolean;\n}\n\nexport interface ReturnTypeInfo {\n type: string;\n isStreamable: boolean;\n streamType?: StreamType;\n isSubjectLike: boolean;\n}\n\nexport const RETURN_TYPE_CONFIGS: ReturnTypeConfig[] = [\n {\n typeName: \"Observable\",\n isStreamable: true,\n streamType: StreamType.Observable,\n decoratorName: \"Sse\",\n isSubjectLike: false,\n },\n {\n typeName: \"Promise\",\n isStreamable: false,\n decoratorName: \"Post\",\n isSubjectLike: false,\n },\n];\n\nexport function parseTypeScript(filePath: string, code: string) {\n return parseSync(code, {\n syntax: \"typescript\",\n tsx: filePath.endsWith(\"x\") || filePath.endsWith(\".tsx\"),\n decorators: true,\n });\n}\n\nexport function hasInjectableDecorator(decorators?: Decorator[]): boolean {\n if (!decorators) return false;\n\n return decorators.some((d) => {\n const expr = d.expression;\n return (\n (expr.type === \"Identifier\" && expr.value === \"Injectable\") ||\n (expr.type === \"CallExpression\" &&\n expr.callee.type === \"Identifier\" &&\n expr.callee.value === \"Injectable\")\n );\n });\n}\n\nexport function isPublicMethod(member: ClassMember): member is ClassMethod {\n return (\n member.type === \"ClassMethod\" &&\n (member.accessibility === \"public\" || !member.accessibility)\n );\n}\n\nexport function getMethodName(method: ClassMethod): string | null {\n if (method.key.type === \"Identifier\") {\n return method.key.value;\n }\n return null;\n}\n\nexport function extractImportMap(ast: any): Record<string, string> {\n const importMap: Record<string, string> = {};\n\n for (const item of ast.body) {\n if (item.type === \"ImportDeclaration\") {\n const decl = item as ImportDeclaration;\n const source = decl.source.value;\n decl.specifiers.forEach((spec) => {\n if (\n spec.type === \"ImportSpecifier\" ||\n spec.type === \"ImportDefaultSpecifier\" ||\n spec.type === \"ImportNamespaceSpecifier\"\n ) {\n importMap[spec.local.value] = source;\n }\n });\n }\n }\n\n return importMap;\n}\n\nexport function findInjectableClass(ast: any): ClassDeclaration | null {\n for (const item of ast.body) {\n if (\n item.type === \"ExportDeclaration\" &&\n item.declaration?.type === \"ClassDeclaration\"\n ) {\n const classDecl = item.declaration as ClassDeclaration;\n if (hasInjectableDecorator(classDecl.decorators)) {\n return classDecl;\n }\n }\n }\n return null;\n}\n\nexport function analyzeReturnType(method: ClassMethod): ReturnTypeInfo {\n const returnType = method.function.returnType?.typeAnnotation;\n\n if (!returnType) {\n return {\n type: \"any\",\n isStreamable: false,\n isSubjectLike: false,\n };\n }\n\n if (\n returnType.type === \"TsTypeReference\" &&\n returnType.typeName.type === \"Identifier\"\n ) {\n const typeName = returnType.typeName.value;\n const config = RETURN_TYPE_CONFIGS.find((c) => c.typeName === typeName);\n\n if (config) {\n const innerType = returnType.typeParams?.params[0];\n return {\n type: innerType ? stringifyType(innerType) : \"any\",\n isStreamable: config.isStreamable,\n streamType: config.streamType,\n isSubjectLike: config.isSubjectLike,\n };\n }\n }\n\n return {\n type: stringifyType(returnType),\n isStreamable: false,\n isSubjectLike: false,\n };\n}\n\nexport function stringifyType(node: TsType | undefined): string {\n if (!node) return \"any\";\n\n switch (node.type) {\n case \"TsKeywordType\":\n return node.kind;\n\n case \"TsTypeReference\":\n if (node.typeName.type !== \"Identifier\") return \"any\";\n const base = node.typeName.value;\n const args = node.typeParams?.params\n ? `<${node.typeParams.params.map(stringifyType).join(\", \")}>`\n : \"\";\n return base + args;\n\n case \"TsArrayType\":\n return `${stringifyType(node.elemType)}[]`;\n\n case \"TsUnionType\":\n return node.types.map(stringifyType).join(\" | \");\n\n case \"TsIntersectionType\":\n return node.types.map(stringifyType).join(\" & \");\n\n case \"TsTypeLiteral\":\n const props = node.members\n .map((member: any) => {\n if (member.type === \"TsPropertySignature\") {\n const key =\n member.key.type === \"Identifier\" ? member.key.value : \"\";\n const type = member.typeAnnotation\n ? stringifyType(member.typeAnnotation.typeAnnotation)\n : \"any\";\n return `${key}: ${type}`;\n }\n return \"\";\n })\n .filter(Boolean);\n return `{ ${props.join(\"; \")} }`;\n\n default:\n return \"any\";\n }\n}\n\nexport function extractMethodParams(params: Param[]): MethodParam[] {\n return params.map((p) => {\n const pat = (p as any).pat;\n\n if (pat.type !== \"Identifier\") {\n return {\n name: \"param\",\n type: \"any\",\n decorators: [],\n };\n }\n\n return {\n name: pat.value,\n type: pat.typeAnnotation\n ? stringifyType(pat.typeAnnotation.typeAnnotation)\n : \"any\",\n decorators: [],\n };\n });\n}\n\nexport function extractSignature(\n decorators: Decorator[] | undefined,\n paramCount: number\n) {\n if (!decorators) return { paramSchemas: [] };\n\n for (const decorator of decorators) {\n const expr = decorator.expression;\n if (\n expr.type === \"CallExpression\" &&\n expr.callee.type === \"Identifier\" &&\n expr.callee.value === \"Signature\"\n ) {\n const args = expr.arguments;\n if (args.length === 0) return { paramSchemas: [] };\n\n const schemaStrings = args.map((arg) =>\n stringifyExpression(arg.expression)\n );\n\n if (args.length === 1) {\n return { paramSchemas: [], returnSchema: schemaStrings[0] };\n }\n\n return {\n paramSchemas: schemaStrings.slice(0, -1),\n returnSchema: schemaStrings[schemaStrings.length - 1],\n };\n }\n }\n return { paramSchemas: [] };\n}\n\nfunction stringifyExpression(expr: any): string {\n if (!expr) return \"any\";\n\n if (expr.type === \"Identifier\") {\n return expr.value;\n }\n\n if (expr.type === \"MemberExpression\") {\n const object = stringifyExpression(expr.object);\n const property = expr.property.value || stringifyExpression(expr.property);\n return `${object}.${property}`;\n }\n\n if (expr.type === \"CallExpression\") {\n const args = expr.arguments\n .map((a: any) => stringifyExpression(a.expression))\n .join(\", \");\n return `${stringifyExpression(expr.callee)}(${args})`;\n }\n\n return \"any\";\n}\n\nexport function extractMethods(\n classDecl: ClassDeclaration,\n filePath: string,\n includeSignatures: boolean = true\n): ServiceMethod[] {\n const methods: ServiceMethod[] = [];\n const className = classDecl.identifier?.value || \"UnknownClass\";\n\n for (const member of classDecl.body) {\n if (!isPublicMethod(member)) continue;\n\n const method = member as ClassMethod;\n const methodName = getMethodName(method);\n if (!methodName) continue;\n\n const returnTypeInfo = analyzeReturnType(method);\n\n if (!returnTypeInfo.isStreamable && !method.function.async) {\n throw {\n type: \"validation\",\n message: `Method ${className}.${methodName} must be async or return a streamable type (${RETURN_TYPE_CONFIGS.filter(\n (c) => c.isStreamable\n )\n .map((c) => c.typeName)\n .join(\", \")})`,\n filePath,\n details: { className, methodName },\n } as GenerationError;\n }\n\n const signatures = includeSignatures\n ? extractSignature(\n method.function.decorators,\n method.function.params.length\n )\n : { paramSchemas: [] };\n\n methods.push({\n name: methodName,\n params: extractMethodParams(method.function.params),\n returnType: returnTypeInfo.type,\n isAsync: method.function.async,\n isStreamable: returnTypeInfo.isStreamable,\n streamType: returnTypeInfo.streamType,\n paramSchemas: signatures.paramSchemas,\n returnSchema: signatures.returnSchema,\n });\n }\n\n return methods;\n}\n\nexport function serviceNameToPath(serviceName: string): string {\n return serviceName\n .replace(/Service$/, \"\")\n .replace(/([a-z])([A-Z])/g, \"$1-$2\")\n .toLowerCase();\n}\n\nexport function toInstanceName(className: string): string {\n return className.charAt(0).toLowerCase() + className.slice(1);\n}\n\nexport function capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nexport function validateServiceInfo(\n serviceInfo: ServiceInfo,\n filePath: string\n): void {\n if (!serviceInfo.className) {\n throw {\n type: \"validation\",\n message: \"Service class must have a valid name\",\n filePath,\n } as GenerationError;\n }\n\n if (serviceInfo.methods.length === 0) {\n console.warn(\n `Warning: Service ${serviceInfo.className} has no public methods`\n );\n }\n\n serviceInfo.methods.forEach((method) => {\n if (method.params.length > 0 && method.paramSchemas?.length === 0) {\n console.warn(\n `Warning: Method ${serviceInfo.className}.${method.name} has parameters but no @Signature validation`\n );\n }\n });\n}\n\nexport function extractServiceInfo(\n ast: any,\n filePath: string,\n includeSignatures: boolean = true\n): ServiceInfo | null {\n try {\n const serviceClass = findInjectableClass(ast);\n const importMap = extractImportMap(ast);\n\n if (!serviceClass?.identifier) {\n return null;\n }\n\n return {\n className: serviceClass.identifier.value,\n methods: extractMethods(serviceClass, filePath, includeSignatures),\n hasInjectable: true,\n importMap,\n };\n } catch (error) {\n throw {\n type: \"parse\",\n message: `Failed to extract service info: ${(error as Error).message}`,\n filePath,\n details: error,\n } as GenerationError;\n }\n}\n", "import * as path from \"path\";\nimport { createHash } from \"crypto\";\nimport { parseSync, printSync } from \"@swc/core\";\nimport type {\n ModuleItem,\n ClassDeclaration,\n Decorator,\n ImportDeclaration,\n} from \"@swc/core\";\n\ninterface ClassStub {\n name: string;\n propsType: string;\n decorators: string[];\n constructorParams: string[];\n}\n\ninterface ImportMap {\n [localName: string]: string;\n}\n\nexport function generateServerStub(filePath: string, code: string): string {\n const hash = createHash(\"md5\").update(filePath).digest(\"hex\").slice(0, 8);\n const relativeFromSrc = filePath.split(\"/src/\")[1];\n const parsed = path.parse(relativeFromSrc);\n\n const fileName = path.join(\"src\", parsed.dir, parsed.name);\n\n const ast = parseSync(code, {\n syntax: \"typescript\",\n tsx: filePath.endsWith(\"x\"),\n decorators: true,\n });\n\n const importMap: ImportMap = {};\n for (const item of ast.body) {\n if (item.type === \"ImportDeclaration\") {\n const decl = item as ImportDeclaration;\n for (const specifier of decl.specifiers ?? []) {\n let localName: string;\n if (specifier.type === \"ImportSpecifier\") {\n localName = specifier.local.value;\n } else if (specifier.type === \"ImportDefaultSpecifier\") {\n localName = specifier.local.value;\n } else {\n continue;\n }\n importMap[localName] = decl.source.value;\n }\n }\n }\n\n const preservedNodes: ModuleItem[] = [];\n const stubbedClasses: ClassStub[] = [];\n\n for (const item of ast.body) {\n let shouldStub = false;\n\n if (\n item.type === \"ExportDeclaration\" &&\n item.declaration?.type === \"ClassDeclaration\"\n ) {\n const classDecl = item.declaration as ClassDeclaration;\n\n if (hasComponentDecorator(classDecl.decorators)) {\n shouldStub = true;\n const stub = extractClassStub(classDecl);\n if (stub) {\n stubbedClasses.push(stub);\n }\n }\n }\n\n if (!shouldStub) {\n preservedNodes.push(item);\n }\n }\n\n const preservedCode =\n preservedNodes.length > 0\n ? printSync({\n type: \"Module\",\n span: ast.span,\n body: preservedNodes,\n interpreter: ast.interpreter,\n }).code\n : \"\";\n\n const stubCode = stubbedClasses\n .map((stub) => generateClassCode(stub, hash, fileName))\n .join(\"\\n\\n\");\n\n return `\n${preservedCode}\n${stubCode}\n `.trim();\n}\n\nfunction hasComponentDecorator(decorators?: Decorator[]): boolean {\n if (!decorators) return false;\n return decorators.some((decorator) => {\n const expr = decorator.expression;\n if (expr.type === \"Identifier\" && expr.value === \"Component\") {\n return true;\n }\n if (\n expr.type === \"CallExpression\" &&\n expr.callee.type === \"Identifier\" &&\n expr.callee.value === \"Component\"\n ) {\n return true;\n }\n return false;\n });\n}\n\nfunction extractClassStub(classDecl: ClassDeclaration): ClassStub | null {\n const className = classDecl.identifier?.value;\n if (!className) return null;\n\n let propsType = \"{}\";\n const decorators: string[] = [];\n const constructorParams: string[] = [];\n\n if (classDecl.decorators) {\n for (const dec of classDecl.decorators) {\n const str = stringifyDecorator(dec);\n if (str) decorators.push(str);\n }\n }\n\n for (const member of classDecl.body) {\n if (member.type === \"ClassProperty\") {\n if (member.key.type === \"Identifier\" && member.key.value === \"props\") {\n propsType = extractPropsType(member);\n }\n } else if (member.type === \"Constructor\") {\n for (const param of member.params) {\n const paramStr = stringifyParam(param);\n if (paramStr) constructorParams.push(paramStr);\n }\n }\n }\n\n return {\n name: className,\n propsType,\n decorators,\n constructorParams,\n };\n}\n\nexport function stringifyDecorator(decorator: Decorator): string {\n const exprCode = printSync({\n type: \"Module\",\n span: { start: 0, end: 0, ctxt: 0 },\n body: [\n {\n type: \"ExpressionStatement\",\n expression: decorator.expression,\n span: { start: 0, end: 0, ctxt: 0 },\n },\n ],\n interpreter: \"\",\n }).code;\n\n const cleanCode = exprCode.replace(/^#!.*\\n/, \"\").trim();\n\n return `@${cleanCode.replace(/;$/, \"\")}`;\n}\n\nfunction extractPropsType(member: any): string {\n const typeAnn = member.typeAnnotation?.typeAnnotation;\n if (!typeAnn) return \"{}\";\n\n if (typeAnn.type === \"TsTypeLiteral\") {\n const props: string[] = [];\n for (const m of typeAnn.members) {\n if (m.type === \"TsPropertySignature\") {\n const key = m.key.type === \"Identifier\" ? m.key.value : \"?\";\n const t = m.typeAnnotation\n ? stringifyType(m.typeAnnotation.typeAnnotation)\n : \"any\";\n props.push(`${key}: ${t}`);\n }\n }\n return `{ ${props.join(\"; \")} }`;\n }\n\n return stringifyType(typeAnn);\n}\n\nfunction stringifyParam(param: any): string {\n let decorators: string[] = [];\n if (param.decorators) {\n for (const d of param.decorators) {\n const str = stringifyDecorator(d);\n if (str) decorators.push(str);\n }\n }\n const decoratorPrefix = decorators.length ? decorators.join(\" \") + \" \" : \"\";\n\n let typeName = \"any\";\n let paramName = \"\";\n let accessibility = \"\";\n\n if (param.type === \"TsParameterProperty\") {\n accessibility = param.accessibility || \"\";\n const inner = param.param;\n if (inner.type !== \"Identifier\") return \"\";\n\n paramName = inner.value;\n if (inner.typeAnnotation?.typeAnnotation) {\n typeName = extractTypeName(inner.typeAnnotation.typeAnnotation);\n }\n } else if (param.type === \"Parameter\") {\n const pat = param.pat;\n if (pat.type !== \"Identifier\") return \"\";\n\n paramName = pat.value;\n if (pat.typeAnnotation?.typeAnnotation) {\n typeName = extractTypeName(pat.typeAnnotation.typeAnnotation);\n }\n } else {\n return \"\";\n }\n\n const accessPrefix = accessibility ? `${accessibility} ` : \"\";\n const result = `${decoratorPrefix}${accessPrefix}${paramName}: ${typeName}`;\n\n return result;\n}\n\nfunction extractTypeName(typeNode: any): string {\n if (\n typeNode.type === \"TsTypeReference\" &&\n typeNode.typeName.type === \"Identifier\"\n ) {\n return typeNode.typeName.value;\n }\n return stringifyType(typeNode);\n}\n\nfunction stringifyType(typeNode: any): string {\n if (!typeNode) return \"any\";\n\n switch (typeNode.type) {\n case \"TsKeywordType\":\n return typeNode.kind;\n case \"TsTypeReference\":\n if (typeNode.typeName.type === \"Identifier\")\n return typeNode.typeName.value;\n if (typeNode.typeName.type === \"TsQualifiedName\") {\n return `${stringifyQualifiedName(typeNode.typeName.left)}.${\n typeNode.typeName.right.value\n }`;\n }\n return \"any\";\n case \"TsArrayType\":\n return `${stringifyType(typeNode.elemType)}[]`;\n case \"TsUnionType\":\n return typeNode.types.map(stringifyType).join(\" | \");\n case \"TsIntersectionType\":\n return typeNode.types.map(stringifyType).join(\" & \");\n default:\n return \"any\";\n }\n}\n\nfunction stringifyQualifiedName(node: any): string {\n if (node.type === \"Identifier\") return node.value;\n if (node.type === \"TsQualifiedName\") {\n return `${stringifyQualifiedName(node.left)}.${node.right.value}`;\n }\n return \"any\";\n}\n\nfunction generateClassCode(\n stub: ClassStub,\n hash: string,\n fileName: string\n): string {\n const clientId = `${stub.name}_${hash}`;\n const clientPath = `/${fileName}.js`;\n const decoratorsStr =\n stub.decorators.length > 0 ? stub.decorators.join(\"\\n\") + \"\\n\" : \"\";\n\n const constructorStr = stub.constructorParams.length\n ? `constructor(${stub.constructorParams.join(\", \")}) {}`\n : \"constructor() {}\";\n\n return `\n${decoratorsStr}export class ${stub.name} {\n props!: ${stub.propsType};\n ${constructorStr}\n build() {\n const inputProps = { ...this.props };\n return {\n $$typeof: Symbol.for(\"orca.client.component\"),\n id: \"${clientId}_\" + Math.random().toString(36).slice(2, 9),\n type: \"${stub.name}\",\n props: {\n ...inputProps,\n __clientComponent: {\n id: \"${clientId}\",\n path: \"${clientPath}\",\n name: \"${stub.name}\",\n }\n },\n key: null\n };\n }\n}\n`.trim();\n}\n", "import type { PluginObj, NodePath } from \"@babel/core\";\nimport * as BabelTypes from \"@babel/types\";\n\ninterface PluginContext {\n types: typeof BabelTypes;\n}\n\ninterface PluginState {\n helpersImported?: boolean;\n}\n\ninterface TransformContext {\n observables: Map<string, BabelTypes.Expression>;\n observableSignals: Map<string, BabelTypes.Identifier>;\n}\n\ninterface TransformResult {\n id: BabelTypes.Identifier;\n statements: BabelTypes.Statement[];\n}\n\nclass NodeTypeGuards {\n constructor(private t: typeof BabelTypes) {}\n\n isSignalMember(expr: BabelTypes.Node): expr is BabelTypes.MemberExpression {\n return (\n this.t.isMemberExpression(expr) &&\n this.t.isIdentifier(expr.property, { name: \"value\" })\n );\n }\n\n isBehaviorSubjectMember(\n expr: BabelTypes.Node\n ): expr is BabelTypes.MemberExpression {\n return (\n this.t.isMemberExpression(expr) &&\n this.t.isIdentifier(expr.property, { name: \"$value\" })\n );\n }\n}\n\nclass ASTUtilities {\n constructor(private t: typeof BabelTypes, private guards: NodeTypeGuards) {}\n\n getObject(expr: BabelTypes.Expression): BabelTypes.Expression {\n if (\n this.guards.isSignalMember(expr) ||\n this.guards.isBehaviorSubjectMember(expr)\n ) {\n return expr.object as BabelTypes.Expression;\n }\n return expr;\n }\n\n replaceThisWithSelf<T extends BabelTypes.Node>(node: T): T {\n const cloned = this.t.cloneNode(node, true) as T;\n this.walkAndTransform(cloned, (n: any) => {\n if (this.t.isThisExpression(n)) {\n Object.assign(n, this.t.identifier(\"self\"));\n }\n });\n return cloned;\n }\n\n private walkAndTransform(node: any, transform: (node: any) => void): void {\n if (!node || typeof node !== \"object\") return;\n\n transform(node);\n\n for (const key in node) {\n if (this.shouldSkipKey(key)) continue;\n\n const value = node[key];\n if (Array.isArray(value)) {\n value.forEach((item) => this.walkAndTransform(item, transform));\n } else if (value && typeof value === \"object\") {\n this.walkAndTransform(value, transform);\n }\n }\n }\n\n private shouldSkipKey(key: string): boolean {\n return [\"loc\", \"start\", \"end\", \"extra\"].includes(key);\n }\n\n buildMemberExpression(name: string): BabelTypes.Expression {\n const parts = name.split(\".\");\n let expr: BabelTypes.Expression = this.t.identifier(parts[0]);\n for (let i = 1; i < parts.length; i++) {\n expr = this.t.memberExpression(expr, this.t.identifier(parts[i]));\n }\n return expr;\n }\n\n insertBeforeReturn(\n body: BabelTypes.Statement[],\n statements: BabelTypes.Statement[]\n ): void {\n const returnIndex = body.findIndex((stmt) =>\n this.t.isReturnStatement(stmt)\n );\n if (returnIndex !== -1) {\n body.splice(returnIndex, 0, ...statements);\n } else {\n body.push(...statements);\n }\n }\n\n addEffectCleanup(\n scope: any,\n effectCall: BabelTypes.CallExpression\n ): BabelTypes.Statement[] {\n const cleanupId = scope.generateUidIdentifier(\"cleanup\");\n\n return [\n // const _cleanup1 = $effect(...)\n this.t.variableDeclaration(\"const\", [\n this.t.variableDeclarator(cleanupId, effectCall),\n ]),\n // self.__cleanup = [...(self.__cleanup || []), _cleanup1]\n this.t.expressionStatement(\n this.t.assignmentExpression(\n \"=\",\n this.t.memberExpression(\n this.t.identifier(\"self\"),\n this.t.identifier(\"__cleanup\")\n ),\n this.t.arrayExpression([\n this.t.spreadElement(\n this.t.logicalExpression(\n \"||\",\n this.t.memberExpression(\n this.t.identifier(\"self\"),\n this.t.identifier(\"__cleanup\")\n ),\n this.t.arrayExpression([])\n )\n ),\n cleanupId,\n ])\n )\n ),\n ];\n }\n}\n\nclass JSXUtilities {\n constructor(private t: typeof BabelTypes) {}\n\n getComponentName(\n nameNode:\n | BabelTypes.JSXIdentifier\n | BabelTypes.JSXMemberExpression\n | BabelTypes.JSXNamespacedName\n ): string | null {\n if (this.t.isJSXIdentifier(nameNode)) {\n return nameNode.name;\n }\n\n if (this.t.isJSXMemberExpression(nameNode)) {\n const parts: string[] = [];\n let current: BabelTypes.JSXMemberExpression | BabelTypes.JSXIdentifier =\n nameNode;\n\n while (this.t.isJSXMemberExpression(current)) {\n parts.unshift(current.property.name);\n current = current.object;\n }\n\n if (this.t.isJSXIdentifier(current)) {\n parts.unshift(current.name);\n }\n\n return parts.join(\".\");\n }\n\n return null;\n }\n\n isComponentTag(tag: string | null): boolean {\n return tag ? /^[A-Z]/.test(tag) : false;\n }\n}\n\nclass ObservableManager {\n constructor(private t: typeof BabelTypes, private guards: NodeTypeGuards) {}\n\n getObservableKey(expr: BabelTypes.Node): string {\n return this.stringifyNode(expr);\n }\n\n private stringifyNode(node: any): string {\n if (!node) return \"\";\n if (this.t.isThisExpression(node)) return \"this\";\n if (this.t.isIdentifier(node)) return node.name;\n\n if (this.t.isMemberExpression(node)) {\n const obj = this.stringifyNode(node.object);\n const prop = node.computed\n ? `[${this.stringifyNode(node.property)}]`\n : `.${(node.property as BabelTypes.Identifier).name}`;\n return obj + prop;\n }\n\n if (this.t.isCallExpression(node)) {\n const callee = this.stringifyNode(node.callee);\n const args = node.arguments\n .map((arg) => this.stringifyNode(arg))\n .join(\",\");\n return `${callee}(${args})`;\n }\n\n if (this.t.isStringLiteral(node)) return `\"${node.value}\"`;\n if (this.t.isNumericLiteral(node)) return String(node.value);\n\n return node.type + JSON.stringify(node.name || node.value || \"\");\n }\n\n collectObservables(\n node: BabelTypes.Node,\n observables: Map<string, BabelTypes.Expression>,\n astUtils: ASTUtilities\n ): void {\n this.walkNode(node, (n: any) => {\n if (this.guards.isBehaviorSubjectMember(n)) {\n const observable = astUtils.replaceThisWithSelf(\n n.object as BabelTypes.Expression\n );\n const key = this.getObservableKey(observable);\n if (!observables.has(key)) {\n observables.set(key, observable);\n }\n }\n });\n }\n\n replaceObservablesWithSignals<T extends BabelTypes.Node>(\n node: T,\n observableSignals: Map<string, BabelTypes.Identifier>,\n astUtils: ASTUtilities\n ): T {\n const cloned = this.t.cloneNode(node, true) as T;\n\n this.walkNode(cloned, (n: any) => {\n if (this.guards.isBehaviorSubjectMember(n)) {\n const observable = astUtils.replaceThisWithSelf(n.object);\n const key = this.getObservableKey(observable);\n const signalId = observableSignals.get(key);\n\n if (signalId) {\n n.object = signalId;\n n.property = this.t.identifier(\"value\");\n }\n }\n });\n\n return cloned;\n }\n\n private walkNode(node: any, callback: (node: any) => void): void {\n if (!node || typeof node !== \"object\") return;\n\n callback(node);\n\n for (const key in node) {\n if ([\"loc\", \"start\", \"end\", \"extra\"].includes(key)) continue;\n\n const value = node[key];\n if (Array.isArray(value)) {\n value.forEach((item) => this.walkNode(item, callback));\n } else if (value && typeof value === \"object\") {\n this.walkNode(value, callback);\n }\n }\n }\n}\n\nclass ElementTransformer {\n constructor(\n private t: typeof BabelTypes,\n private guards: NodeTypeGuards,\n private astUtils: ASTUtilities,\n private jsxUtils: JSXUtilities,\n private observableManager: ObservableManager\n ) {}\n\n transformElement(\n path: { node: BabelTypes.JSXElement | BabelTypes.JSXFragment },\n scope: any,\n context: TransformContext\n ): TransformResult {\n if (this.t.isJSXFragment(path.node)) {\n return this.transformFragment(\n path as { node: BabelTypes.JSXFragment },\n scope,\n context\n );\n }\n return this.transformJSXElement(\n path as { node: BabelTypes.JSXElement },\n scope,\n context\n );\n }\n\n private transformJSXElement(\n path: { node: BabelTypes.JSXElement },\n scope: any,\n context: TransformContext\n ): TransformResult {\n const jsxElement = path.node;\n const tag = this.jsxUtils.getComponentName(jsxElement.openingElement.name);\n const isComponent = this.jsxUtils.isComponentTag(tag);\n\n if (isComponent && tag) {\n return this.transformComponentElement(jsxElement, tag, scope, context);\n } else if (tag) {\n return this.transformDOMElement(jsxElement, tag, scope, context);\n }\n\n return {\n id: scope.generateUidIdentifier(\"el\"),\n statements: [],\n };\n }\n\n private transformComponentElement(\n jsxElement: BabelTypes.JSXElement,\n tag: string,\n scope: any,\n context: TransformContext\n ): TransformResult {\n const elId = scope.generateUidIdentifier(\"el\");\n const statements: BabelTypes.Statement[] = [];\n const props: Array<\n | BabelTypes.ObjectProperty\n | BabelTypes.ObjectMethod\n | BabelTypes.SpreadElement\n > = [];\n const children: Array<BabelTypes.Expression> = [];\n\n this.processComponentAttributes(\n jsxElement.openingElement.attributes,\n props,\n context\n );\n\n this.processChildren(\n jsxElement.children,\n children,\n statements,\n scope,\n context\n );\n\n if (children.length > 0) {\n props.push(\n this.t.objectProperty(\n this.t.identifier(\"children\"),\n children.length === 1 ? children[0] : this.t.arrayExpression(children)\n )\n );\n }\n\n statements.push(\n this.t.variableDeclaration(\"var\", [\n this.t.variableDeclarator(\n elId,\n this.t.callExpression(this.t.identifier(\"$createComponent\"), [\n this.astUtils.buildMemberExpression(tag),\n this.t.objectExpression(props),\n this.t.identifier(\"self\"),\n ])\n ),\n ])\n );\n\n return { id: elId, statements };\n }\n\n private transformDOMElement(\n jsxElement: BabelTypes.JSXElement,\n tag: string,\n scope: any,\n context: TransformContext\n ): TransformResult {\n const elId = scope.generateUidIdentifier(\"el\");\n const statements: BabelTypes.Statement[] = [];\n\n statements.push(\n this.t.variableDeclaration(\"var\", [\n this.t.variableDeclarator(\n elId,\n this.t.callExpression(\n this.t.memberExpression(\n this.t.identifier(\"document\"),\n this.t.identifier(\"createElement\")\n ),\n [this.t.stringLiteral(tag)]\n )\n ),\n ])\n );\n\n const { hasRef, refValue, hasDangerousHTML, dangerousHTMLValue } =\n this.processDOMAttributes(\n jsxElement.openingElement.attributes,\n elId,\n statements,\n scope,\n context,\n tag\n );\n\n if (hasRef && refValue) {\n statements.push(\n this.t.expressionStatement(\n this.t.assignmentExpression(\"=\", refValue as BabelTypes.LVal, elId)\n )\n );\n }\n\n /*\n let cleanup = effect(() => {\n el.innerHTML = {\n __html: value\n }.__html\n })\n */\n\n if (hasDangerousHTML && dangerousHTMLValue) {\n const effectCall = this.t.callExpression(this.t.identifier(\"$effect\"), [\n this.t.arrowFunctionExpression(\n [],\n this.t.assignmentExpression(\n \"=\",\n this.t.memberExpression(elId, this.t.identifier(\"innerHTML\")),\n this.t.memberExpression(\n dangerousHTMLValue,\n this.t.identifier(\"__html\")\n )\n )\n ),\n ]);\n\n const cleanupStatements = this.astUtils.addEffectCleanup(\n scope,\n effectCall\n );\n\n statements.push(...cleanupStatements);\n }\n\n if (!hasDangerousHTML) {\n this.processDOMChildren(\n jsxElement.children,\n elId,\n statements,\n scope,\n context\n );\n }\n\n return { id: elId, statements };\n }\n\n private transformFragment(\n path: { node: BabelTypes.JSXFragment },\n scope: any,\n context: TransformContext\n ): TransformResult {\n const fragId = scope.generateUidIdentifier(\"frag\");\n const statements: BabelTypes.Statement[] = [];\n\n statements.push(\n this.t.variableDeclaration(\"var\", [\n this.t.variableDeclarator(\n fragId,\n this.t.callExpression(\n this.t.memberExpression(\n this.t.identifier(\"document\"),\n this.t.identifier(\"createDocumentFragment\")\n ),\n []\n )\n ),\n ])\n );\n\n this.processDOMChildren(\n path.node.children,\n fragId,\n statements,\n scope,\n context\n );\n\n return { id: fragId, statements };\n }\n\n private processComponentAttributes(\n attributes: Array<BabelTypes.JSXAttribute | BabelTypes.JSXSpreadAttribute>,\n props: Array<\n | BabelTypes.ObjectProperty\n | BabelTypes.ObjectMethod\n | BabelTypes.SpreadElement\n >,\n context: TransformContext\n ): void {\n for (const attr of attributes) {\n if (this.t.isJSXSpreadAttribute(attr)) {\n this.observableManager.collectObservables(\n attr.argument,\n context.observables,\n this.astUtils\n );\n const replaced = this.observableManager.replaceObservablesWithSignals(\n attr.argument,\n context.observableSignals,\n this.astUtils\n );\n props.push(\n this.t.spreadElement(this.astUtils.replaceThisWithSelf(replaced))\n );\n continue;\n }\n\n const key = (attr.name as BabelTypes.JSXIdentifier).name;\n\n if (this.t.isStringLiteral(attr.value)) {\n props.push(this.t.objectProperty(this.t.identifier(key), attr.value));\n } else if (this.t.isJSXExpressionContainer(attr.value)) {\n const expr = attr.value.expression as BabelTypes.Expression;\n this.observableManager.collectObservables(\n expr,\n context.observables,\n this.astUtils\n );\n\n if (\n this.guards.isSignalMember(expr) ||\n this.guards.isBehaviorSubjectMember(expr)\n ) {\n const replaced = this.observableManager.replaceObservablesWithSignals(\n expr,\n context.observableSignals,\n this.astUtils\n );\n props.push(\n this.t.objectMethod(\n \"get\",\n this.t.identifier(key),\n [],\n this.t.blockStatement([\n this.t.returnStatement(\n this.astUtils.replaceThisWithSelf(replaced)\n ),\n ])\n )\n );\n } else {\n const replaced = this.observableManager.replaceObservablesWithSignals(\n expr,\n context.observableSignals,\n this.astUtils\n );\n props.push(\n this.t.objectProperty(\n this.t.identifier(key),\n this.astUtils.replaceThisWithSelf(replaced)\n )\n );\n }\n } else {\n props.push(\n this.t.objectProperty(\n this.t.identifier(key),\n this.t.booleanLiteral(true)\n )\n );\n }\n }\n }\n\n private processDOMAttributes(\n attributes: Array<BabelTypes.JSXAttribute | BabelTypes.JSXSpreadAttribute>,\n elId: BabelTypes.Identifier,\n statements: BabelTypes.Statement[],\n scope: any,\n context: TransformContext,\n tag?: string\n ): {\n hasRef: boolean;\n refValue: BabelTypes.Expression | null;\n hasDangerousHTML: boolean;\n dangerousHTMLValue: BabelTypes.Expression | null;\n } {\n let hasRef = false;\n let refValue: BabelTypes.Expression | null = null;\n let hasDangerousHTML = false;\n let dangerousHTMLValue: BabelTypes.Expression | null = null;\n let hasClickHandler = false;\n let hrefValue: string | null = null;\n\n for (const attr of attributes) {\n if (this.t.isJSXSpreadAttribute(attr)) {\n this.observableManager.collectObservables(\n attr.argument,\n context.observables,\n this.astUtils\n );\n const replaced = this.observableManager.replaceObservablesWithSignals(\n attr.argument,\n context.observableSignals,\n this.astUtils\n );\n\n const effectCall = this.t.callExpression(this.t.identifier(\"$effect\"), [\n this.t.arrowFunctionExpression(\n [],\n this.t.callExpression(this.t.identifier(\"$spread\"), [\n elId,\n this.astUtils.replaceThisWithSelf(replaced),\n ])\n ),\n ]);\n\n const cleanupStatements = this.astUtils.addEffectCleanup(\n scope,\n effectCall\n );\n\n statements.push(...cleanupStatements);\n\n continue;\n }\n\n const key = (attr.name as BabelTypes.JSXIdentifier).name;\n\n if (key === \"ref\") {\n hasRef = true;\n if (this.t.isJSXExpressionContainer(attr.value)) {\n this.observableManager.collectObservables(\n attr.value.expression,\n context.observables,\n this.astUtils\n );\n const replaced = this.observableManager.replaceObservablesWithSignals(\n attr.value.expression as BabelTypes.Expression,\n context.observableSignals,\n this.astUtils\n );\n refValue = this.astUtils.replaceThisWithSelf(replaced);\n }\n continue;\n }\n\n if (key === \"dangerouslySetInnerHTML\") {\n hasDangerousHTML = true;\n if (this.t.isJSXExpressionContainer(attr.value)) {\n this.observableManager.collectObservables(\n attr.value.expression,\n context.observables,\n this.astUtils\n );\n const replaced = this.observableManager.replaceObservablesWithSignals(\n attr.value.expression as BabelTypes.Expression,\n context.observableSignals,\n this.astUtils\n );\n dangerousHTMLValue = this.astUtils.replaceThisWithSelf(replaced);\n }\n continue;\n }\n\n if (/^on[A-Z]/.test(key)) {\n if (key === \"onClick\") {\n hasClickHandler = true;\n }\n this.processEventListener(key, attr, elId, statements, context);\n continue;\n }\n\n if (key === \"href\" && this.t.isStringLiteral(attr.value)) {\n hrefValue = attr.value.value;\n }\n\n if (key === \"style\" && this.t.isJSXExpressionContainer(attr.value)) {\n this.processStyleAttribute(attr, elId, statements, scope, context);\n continue;\n }\n\n this.processRegularAttribute(key, attr, elId, statements, context);\n }\n\n if (\n tag === \"a\" &&\n !hasClickHandler &&\n hrefValue &&\n this.isRelativeUrl(hrefValue)\n ) {\n statements.push(\n this.t.expressionStatement(\n this.t.callExpression(\n this.t.memberExpression(\n elId,\n this.t.identifier(\"addEventListener\")\n ),\n [\n this.t.stringLiteral(\"click\"),\n this.t.arrowFunctionExpression(\n [this.t.identifier(\"event\")],\n this.t.callExpression(\n this.t.memberExpression(\n this.t.identifier(\"Orca\"),\n this.t.identifier(\"navigate\")\n ),\n [this.t.identifier(\"event\"), this.t.stringLiteral(hrefValue)]\n )\n ),\n ]\n )\n )\n );\n }\n\n return { hasRef, refValue, hasDangerousHTML, dangerousHTMLValue };\n }\n\n private isRelativeUrl(url: string): boolean {\n try {\n new URL(url);\n return false;\n } catch {\n if (\n url.startsWith(\"#\") ||\n url.startsWith(\"mailto:\") ||\n url.startsWith(\"tel:\")\n ) {\n return false;\n }\n\n return true;\n }\n }\n\n private processEventListener(\n key: string,\n attr: BabelTypes.JSXAttribute,\n elId: BabelTypes.Identifier,\n statements: BabelTypes.Statement[],\n context: TransformContext\n ): void {\n const eventName = key.slice(2).toLowerCase();\n let handler: BabelTypes.Expression = this.t.nullLiteral();\n\n if (this.t.isJSXExpressionContainer(attr.value)) {\n this.observableManager.collectObservables(\n attr.value.expression,\n context.observables,\n this.astUtils\n );\n const replaced = this.observableManager.replaceObservablesWithSignals(\n attr.value.expression as BabelTypes.Expression,\n context.observableSignals,\n this.astUtils\n );\n handler = this.astUtils.replaceThisWithSelf(replaced);\n }\n\n statements.push(\n this.t.expressionStatement(\n this.t.callExpression(\n this.t.memberExpression(elId, this.t.identifier(\"addEventListener\")),\n [this.t.stringLiteral(eventName), handler]\n )\n )\n );\n }\n\n private processStyleAttribute(\n attr: BabelTypes.JSXAttribute,\n elId: BabelTypes.Identifier,\n statements: BabelTypes.Statement[],\n scope: any,\n context: TransformContext\n ): void {\n if (!this.t.isJSXExpressionContainer(attr.value)) return;\n\n this.observableManager.collectObservables(\n attr.value.expression,\n context.observables,\n this.astUtils\n );\n const replaced = this.observableManager.replaceObservablesWithSignals(\n attr.value.expression as BabelTypes.Expression,\n context.observableSignals,\n this.astUtils\n );\n\n const effectCall = this.t.callExpression(this.t.identifier(\"$effect\"), [\n this.t.arrowFunctionExpression(\n [],\n this.t.callExpression(this.t.identifier(\"$style\"), [\n elId,\n this.astUtils.replaceThisWithSelf(replaced),\n ])\n ),\n ]);\n const cleanupStatements = this.astUtils.addEffectCleanup(scope, effectCall);\n\n statements.push(...cleanupStatements);\n }\n\n private processRegularAttribute(\n key: string,\n attr: BabelTypes.JSXAttribute,\n elId: BabelTypes.Identifier,\n statements: BabelTypes.Statement[],\n context: TransformContext\n ): void {\n const attrName = key === \"className\" ? \"class\" : key;\n let value: BabelTypes.Expression;\n\n if (this.t.isStringLiteral(attr.value)) {\n value = attr.value;\n } else if (this.t.isJSXExpressionContainer(attr.value)) {\n this.observableManager.collectObservables(\n attr.value.expression,\n context.observables,\n this.astUtils\n );\n const replaced = this.observableManager.replaceObservablesWithSignals(\n attr.value.expression as BabelTypes.Expression,\n context.observableSignals,\n this.astUtils\n );\n value = this.astUtils.replaceThisWithSelf(replaced);\n } else {\n value = this.t.booleanLiteral(true);\n }\n\n statements.push(\n this.t.expressionStatement(\n this.t.callExpression(\n this.t.memberExpression(elId, this.t.identifier(\"setAttribute\")),\n [this.t.stringLiteral(attrName), value]\n )\n )\n );\n }\n\n private processChildren(\n children: Array<\n | BabelTypes.JSXText\n | BabelTypes.JSXExpressionContainer\n | BabelTypes.JSXElement\n | BabelTypes.JSXFragment\n | BabelTypes.JSXSpreadChild\n >,\n childExpressions: Array<BabelTypes.Expression>,\n statements: BabelTypes.Statement[],\n scope: any,\n context: TransformContext\n ): void {\n for (const child of children) {\n if (this.t.isJSXText(child)) {\n const text = child.value.trim();\n if (text) childExpressions.push(this.t.stringLiteral(text));\n } else if (this.t.isJSXExpressionContainer(child)) {\n const expr = child.expression;\n if (!this.t.isJSXEmptyExpression(expr)) {\n this.observableManager.collectObservables(\n expr,\n context.observables,\n this.astUtils\n );\n const replaced = this.observableManager.replaceObservablesWithSignals(\n expr as BabelTypes.Expression,\n context.observableSignals,\n this.astUtils\n );\n childExpressions.push(this.astUtils.replaceThisWithSelf(replaced));\n }\n } else if (this.t.isJSXElement(child) || this.t.isJSXFragment(child)) {\n const childEl = this.transformElement({ node: child }, scope, context);\n statements.push(...childEl.statements);\n childExpressions.push(childEl.id);\n }\n }\n }\n\n private processDOMChildren(\n children: Array<\n | BabelTypes.JSXText\n | BabelTypes.JSXExpressionContainer\n | BabelTypes.JSXElement\n | BabelTypes.JSXFragment\n | BabelTypes.JSXSpreadChild\n >,\n parentId: BabelTypes.Identifier,\n statements: BabelTypes.Statement[],\n scope: any,\n context: TransformContext\n ): void {\n for (const child of children) {\n if (this.t.isJSXText(child)) {\n const text = child.value.trim();\n if (!text) continue;\n statements.push(\n this.t.expressionStatement(\n this.t.callExpression(this.t.identifier(\"$insert\"), [\n parentId,\n this.t.stringLiteral(text),\n ])\n )\n );\n } else if (this.t.isJSXExpressionContainer(child)) {\n const expr = child.expression;\n if (this.t.isJSXEmptyExpression(expr)) continue;\n\n this.observableManager.collectObservables(\n expr,\n context.observables,\n this.astUtils\n );\n\n let insertedValue: BabelTypes.Expression;\n if (this.guards.isSignalMember(expr)) {\n insertedValue = this.astUtils.getObject(\n expr as BabelTypes.Expression\n );\n } else if (this.guards.isBehaviorSubjectMember(expr)) {\n const replaced = this.observableManager.replaceObservablesWithSignals(\n expr as BabelTypes.Expression,\n context.observableSignals,\n this.astUtils\n );\n insertedValue = this.astUtils.getObject(replaced);\n } else {\n const replaced = this.observableManager.replaceObservablesWithSignals(\n expr as BabelTypes.Expression,\n context.observableSignals,\n this.astUtils\n );\n insertedValue = this.t.arrowFunctionExpression(\n [],\n this.astUtils.replaceThisWithSelf(replaced)\n );\n }\n\n statements.push(\n this.t.expressionStatement(\n this.t.callExpression(this.t.identifier(\"$insert\"), [\n parentId,\n insertedValue,\n ])\n )\n );\n } else if (this.t.isJSXElement(child) || this.t.isJSXFragment(child)) {\n const childEl = this.transformElement({ node: child }, scope, context);\n statements.push(...childEl.statements);\n statements.push(\n this.t.expressionStatement(\n this.t.callExpression(this.t.identifier(\"$insert\"), [\n parentId,\n childEl.id,\n ])\n )\n );\n }\n }\n }\n}\n\nexport function j2d({ types: t }: PluginContext): PluginObj<PluginState> {\n const guards = new NodeTypeGuards(t);\n const astUtils = new ASTUtilities(t, guards);\n const jsxUtils = new JSXUtilities(t);\n const observableManager = new ObservableManager(t, guards);\n const elementTransformer = new ElementTransformer(\n t,\n guards,\n astUtils,\n jsxUtils,\n observableManager\n );\n\n return {\n name: \"jsx-to-dom\",\n visitor: {\n Program: {\n exit(path: NodePath<BabelTypes.Program>, state: PluginState) {\n if (state.helpersImported) return;\n\n const helpers = [\n { local: \"$insert\", imported: \"insert\" },\n { local: \"$createComponent\", imported: \"createComponent\" },\n { local: \"$style\", imported: \"style\" },\n { local: \"$spread\", imported: \"spread\" },\n { local: \"$toSignal\", imported: \"toSignal\" },\n { local: \"$effect\", imported: \"effect\" },\n ];\n\n for (const helper of helpers) {\n path.unshiftContainer(\n \"body\",\n t.importDeclaration(\n [\n t.importSpecifier(\n t.identifier(helper.local),\n t.identifier(helper.imported)\n ),\n ],\n t.stringLiteral(\"@kithinji/orca\")\n )\n );\n }\n\n state.helpersImported = true;\n },\n },\n\n ClassMethod(path: NodePath<BabelTypes.ClassMethod>) {\n if (path.getData(\"processed\")) return;\n\n // Check if method contains JSX\n let hasJSX = false;\n path.traverse({\n JSXElement() {\n hasJSX = true;\n },\n JSXFragment() {\n hasJSX = true;\n },\n });\n\n if (!hasJSX) return;\n path.setData(\"processed\", true);\n\n const body = path.node.body;\n if (!t.isBlockStatement(body)) return;\n\n const observables = new Map<string, BabelTypes.Expression>();\n path.traverse({\n JSXElement(jsxPath: NodePath<BabelTypes.JSXElement>) {\n observableManager.collectObservables(\n jsxPath.node,\n observables,\n astUtils\n );\n },\n JSXFragment(jsxPath: NodePath<BabelTypes.JSXFragment>) {\n observableManager.collectObservables(\n jsxPath.node,\n observables,\n astUtils\n );\n },\n });\n\n body.body.unshift(\n t.variableDeclaration(\"const\", [\n t.variableDeclarator(t.identifier(\"self\"), t.thisExpression()),\n ])\n );\n\n const observableSignals = new Map<string, BabelTypes.Identifier>();\n const signalDeclarations: BabelTypes.Statement[] = [];\n\n for (const [key, observable] of observables) {\n const signalId = path.scope.generateUidIdentifier(\"sig\");\n observableSignals.set(key, signalId);\n signalDeclarations.push(\n t.variableDeclaration(\"const\", [\n t.variableDeclarator(\n signalId,\n t.callExpression(t.identifier(\"$toSignal\"), [\n observable,\n t.identifier(\"self\"),\n ])\n ),\n ])\n );\n }\n\n if (signalDeclarations.length > 0) {\n astUtils.insertBeforeReturn(body.body, signalDeclarations);\n }\n\n const context: TransformContext = { observables, observableSignals };\n\n path.traverse({\n JSXElement(jsxPath: NodePath<BabelTypes.JSXElement>) {\n if (jsxPath.getData(\"processed\")) return;\n jsxPath.setData(\"processed\", true);\n\n const { id, statements } = elementTransformer.transformElement(\n jsxPath as any,\n jsxPath.scope,\n context\n );\n\n jsxPath.replaceWith(\n t.callExpression(\n t.arrowFunctionExpression(\n [],\n t.blockStatement([...statements, t.returnStatement(id)])\n ),\n []\n )\n );\n },\n JSXFragment(jsxPath: NodePath<BabelTypes.JSXFragment>) {\n if (jsxPath.getData(\"processed\")) return;\n jsxPath.setData(\"processed\", true);\n\n const { id, statements } = elementTransformer.transformElement(\n jsxPath as any,\n jsxPath.scope,\n context\n );\n\n jsxPath.replaceWith(\n t.callExpression(\n t.arrowFunctionExpression(\n [],\n t.blockStatement([...statements, t.returnStatement(id)])\n ),\n []\n )\n );\n },\n });\n },\n },\n };\n}\n", "import { parseSync, printSync } from \"@swc/core\";\nimport type {\n ClassDeclaration,\n Decorator,\n ImportDeclaration,\n ModuleItem,\n} from \"@swc/core\";\n\ninterface MethodParam {\n name: string;\n type: string;\n}\n\ninterface ComponentMethod {\n name: string;\n params: MethodParam[];\n returnType: string;\n isAsync: boolean;\n}\n\ninterface ClassStub {\n name: string;\n propsType: string;\n decorators: string[];\n constructorParams: string[];\n methods: ComponentMethod[];\n}\n\ninterface ImportMap {\n [localName: string]: string;\n}\n\nexport function generateServerComponent(\n filePath: string,\n code: string\n): string {\n const ast = parseSync(code, {\n syntax: \"typescript\",\n tsx: filePath.endsWith(\"x\"),\n decorators: true,\n });\n\n const importMap: ImportMap = {};\n for (const item of ast.body) {\n if (item.type === \"ImportDeclaration\") {\n const decl = item as ImportDeclaration;\n for (const specifier of decl.specifiers ?? []) {\n let localName: string;\n if (specifier.type === \"ImportSpecifier\") {\n localName = specifier.local.value;\n } else if (specifier.type === \"ImportDefaultSpecifier\") {\n localName = specifier.local.value;\n } else {\n continue;\n }\n importMap[localName] = decl.source.value;\n }\n }\n }\n\n const preservedNodes: ModuleItem[] = [];\n const stubbedClasses: ClassStub[] = [];\n\n for (const item of ast.body) {\n let shouldStub = false;\n\n if (\n item.type === \"ExportDeclaration\" &&\n item.declaration?.type === \"ClassDeclaration\"\n ) {\n const classDecl = item.declaration as ClassDeclaration;\n\n if (hasComponentDecorator(classDecl.decorators)) {\n shouldStub = true;\n const stub = extractClassStub(classDecl);\n if (stub) {\n stubbedClasses.push(stub);\n }\n }\n }\n\n if (!shouldStub) {\n preservedNodes.push(item);\n }\n }\n\n const preservedCode =\n preservedNodes.length > 0\n ? printSync({\n type: \"Module\",\n span: ast.span,\n body: preservedNodes,\n interpreter: ast.interpreter,\n }).code\n : \"\";\n\n const stubCode = stubbedClasses\n .map((stub) => generateStubCode(stub))\n .join(\"\\n\\n\");\n\n return `\n${preservedCode}\n${stubCode}\n `.trim();\n}\n\nfunction hasComponentDecorator(decorators?: Decorator[]): boolean {\n if (!decorators) return false;\n\n return decorators.some((decorator) => {\n const expr = decorator.expression;\n\n if (expr.type === \"CallExpression\") {\n if (\n expr.callee.type === \"Identifier\" &&\n expr.callee.value === \"Component\"\n ) {\n return true;\n }\n }\n\n if (expr.type === \"Identifier\" && expr.value === \"Component\") {\n return true;\n }\n\n return false;\n });\n}\n\nfunction extractClassStub(classDecl: ClassDeclaration): ClassStub | null {\n const className = classDecl.identifier?.value;\n if (!className) return null;\n\n let propsType = \"{}\";\n const decorators: string[] = [];\n const constructorParams: string[] = [];\n\n if (classDecl.decorators) {\n for (const dec of classDecl.decorators) {\n const str = stringifyDecorator(dec);\n if (str) decorators.push(str);\n }\n }\n\n for (const member of classDecl.body) {\n if (member.type === \"ClassProperty\") {\n if (member.key.type === \"Identifier\" && member.key.value === \"props\") {\n propsType = extractPropsType(member);\n }\n } else if (member.type === \"Constructor\") {\n for (const param of member.params) {\n const paramStr = stringifyParam(param);\n if (paramStr) constructorParams.push(paramStr);\n }\n }\n }\n\n const methods = extractMethods(classDecl);\n\n return {\n name: className,\n propsType,\n decorators,\n constructorParams,\n methods,\n };\n}\n\nexport function stringifyDecorator(decorator: Decorator): string {\n const exprCode = printSync({\n type: \"Module\",\n span: { start: 0, end: 0, ctxt: 0 },\n body: [\n {\n type: \"ExpressionStatement\",\n expression: decorator.expression,\n span: { start: 0, end: 0, ctxt: 0 },\n },\n ],\n interpreter: \"\",\n }).code;\n\n const cleanCode = exprCode.replace(/^#!.*\\n/, \"\").trim();\n\n return `@${cleanCode.replace(/;$/, \"\")}`;\n}\n\nfunction extractPropsType(member: any): string {\n const typeAnn = member.typeAnnotation?.typeAnnotation;\n if (!typeAnn) return \"{}\";\n\n if (typeAnn.type === \"TsTypeLiteral\") {\n const props: string[] = [];\n for (const m of typeAnn.members) {\n if (m.type === \"TsPropertySignature\") {\n const key = m.key.type === \"Identifier\" ? m.key.value : \"?\";\n const t = m.typeAnnotation\n ? stringifyType(m.typeAnnotation.typeAnnotation)\n : \"any\";\n props.push(`${key}: ${t}`);\n }\n }\n return `{ ${props.join(\"; \")} }`;\n }\n\n return stringifyType(typeAnn);\n}\n\nfunction stringifyParam(param: any): string {\n let decorators: string[] = [];\n if (param.decorators) {\n for (const d of param.decorators) {\n const str = stringifyDecorator(d);\n if (str) decorators.push(str);\n }\n }\n const decoratorPrefix = decorators.length ? decorators.join(\" \") + \" \" : \"\";\n\n let typeName = \"any\";\n let paramName = \"\";\n let accessibility = \"\";\n\n if (param.type === \"TsParameterProperty\") {\n accessibility = param.accessibility || \"\";\n const inner = param.param;\n if (inner.type !== \"Identifier\") return \"\";\n\n paramName = inner.value;\n if (inner.typeAnnotation?.typeAnnotation) {\n typeName = extractTypeName(inner.typeAnnotation.typeAnnotation);\n }\n } else if (param.type === \"Parameter\") {\n const pat = param.pat;\n if (pat.type !== \"Identifier\") return \"\";\n\n paramName = pat.value;\n if (pat.typeAnnotation?.typeAnnotation) {\n typeName = extractTypeName(pat.typeAnnotation.typeAnnotation);\n }\n } else {\n return \"\";\n }\n\n const accessPrefix = accessibility ? `${accessibility} ` : \"\";\n const result = `${decoratorPrefix}${accessPrefix}${paramName}: ${typeName}`;\n\n return result;\n}\n\nfunction extractTypeName(typeNode: any): string {\n if (\n typeNode.type === \"TsTypeReference\" &&\n typeNode.typeName.type === \"Identifier\"\n ) {\n return typeNode.typeName.value;\n }\n return stringifyType(typeNode);\n}\n\nfunction extractMethods(classDecl: ClassDeclaration): ComponentMethod[] {\n const methods: ComponentMethod[] = [];\n\n for (const member of classDecl.body) {\n if (member.type === \"ClassMethod\") {\n const method = member as any;\n\n const methodName =\n method.key.type === \"Identifier\" ? method.key.value : \"\";\n\n if (!methodName) {\n continue;\n }\n\n const params = extractMethodParams(method.function.params || []);\n const returnType = extractReturnType(method.function.returnType);\n const isAsync = method.function.async || false;\n\n methods.push({\n name: methodName,\n params,\n returnType,\n isAsync,\n });\n }\n }\n\n return methods;\n}\n\nfunction extractMethodParams(params: any[]): MethodParam[] {\n const result: MethodParam[] = [];\n\n for (const param of params) {\n if (param.type === \"Parameter\") {\n const pat = param.pat as any;\n\n if (pat.type === \"Identifier\") {\n const name = pat.value;\n const type = pat.typeAnnotation?.typeAnnotation\n ? stringifyType(pat.typeAnnotation.typeAnnotation)\n : \"any\";\n\n result.push({\n name,\n type,\n });\n }\n }\n }\n\n return result;\n}\n\nfunction extractReturnType(returnType?: any): string {\n if (!returnType || !returnType.typeAnnotation) {\n return \"any\";\n }\n\n const type = returnType.typeAnnotation;\n\n if (type.type === \"TsTypeReference\") {\n const typeName = type.typeName;\n if (typeName.type === \"Identifier\" && typeName.value === \"Promise\") {\n if (type.typeParams && type.typeParams.params.length > 0) {\n return stringifyType(type.typeParams.params[0]);\n }\n }\n }\n\n return stringifyType(type);\n}\n\nfunction stringifyType(typeNode: any): string {\n if (!typeNode) return \"any\";\n\n switch (typeNode.type) {\n case \"TsKeywordType\":\n return typeNode.kind;\n\n case \"TsTypeReference\":\n if (typeNode.typeName.type === \"Identifier\") {\n const baseName = typeNode.typeName.value;\n if (typeNode.typeParams && typeNode.typeParams.params.length > 0) {\n const params = typeNode.typeParams.params\n .map(stringifyType)\n .join(\", \");\n return `${baseName}<${params}>`;\n }\n return baseName;\n }\n return \"any\";\n\n case \"TsArrayType\":\n return `${stringifyType(typeNode.elemType)}[]`;\n\n case \"TsUnionType\":\n return typeNode.types.map(stringifyType).join(\" | \");\n\n case \"TsIntersectionType\":\n return typeNode.types.map(stringifyType).join(\" & \");\n\n case \"TsTypeLiteral\":\n const props = typeNode.members\n .map((member: any) => {\n if (member.type === \"TsPropertySignature\") {\n const key =\n member.key.type === \"Identifier\" ? member.key.value : \"\";\n const type = member.typeAnnotation\n ? stringifyType(member.typeAnnotation.typeAnnotation)\n : \"any\";\n return `${key}: ${type}`;\n }\n return \"\";\n })\n .filter(Boolean);\n return `{ ${props.join(\"; \")} }`;\n\n default:\n return \"any\";\n }\n}\n\nfunction generateStubCode(stub: ClassStub): string {\n const className = stub.name;\n\n const build = stub.methods.find((p) => p.name == \"build\");\n\n if (build == undefined) {\n throw new Error(\"Component has no build function\");\n }\n\n const decoratorsStr =\n stub.decorators.length > 0 ? stub.decorators.join(\"\\n\") + \"\\n\" : \"\";\n\n return `import { \n Inject as _Inject, \n getCurrentInjector as _getCurrentInjector, \n OrcaComponent as _OrcaComponent,\n JSX as _JSX,\n OSC as _OSC,\n HttpClient as _HttpClient,\n symbolValueReviver as _symbolValueReviver\n} from \"@kithinji/orca\";\n\n\n${decoratorsStr}export class ${className} extends _OrcaComponent {\n props!: any;\n\n constructor(\n @_Inject(\"OSC_URL\", { maybe: true }) private oscUrl?: string,\n private readonly http: _HttpClient,\n ${stub.constructorParams.join(\", \")}\n ) {\n super();\n\n if(this.oscUrl === undefined) {\n throw new Error(\"Server component requires osc url be defined\");\n } \n }\n\n build() {\n const root = document.createElement(\"div\");\n root.textContent = \"loading...\";\n\n const injector = _getCurrentInjector();\n\n if(injector == null) {\n throw new Error(\"Injector is null\");\n }\n\n const osc = new _OSC(root);\n\n const subscription = this.http.post<_JSX.Element>(\n \\`\\${this.oscUrl}?c=${className}\\`, {\n body: this.props,\n reviver: _symbolValueReviver,\n }\n ).subscribe((jsx: _JSX.Element) => {\n const action = jsx.action || \"insert\";\n\n if (action === \"insert\") {\n osc.handleInsert(jsx);\n } else if (action === \"update\") {\n osc.handleUpdate(jsx);\n } else {\n console.warn(\\`Unknown action: \\${action}\\`);\n }\n });\n\n this.pushDrop(() => subscription.unsubscribe());\n\n return root;\n }\n}`;\n}\n", "import {\n extractServiceInfo,\n GenerationError,\n parseTypeScript,\n ServiceInfo,\n ServiceMethod,\n serviceNameToPath,\n validateServiceInfo,\n} from \"./utils\";\n\nexport function generateRpcStub(filePath: string, code: string): string {\n try {\n const ast = parseTypeScript(filePath, code);\n const serviceInfo = extractServiceInfo(ast, filePath, false);\n\n if (!serviceInfo) {\n throw {\n type: \"validation\",\n message: \"No exported class with @Injectable decorator found\",\n filePath,\n } as GenerationError;\n }\n\n validateServiceInfo(serviceInfo, filePath);\n return generateStubCode(serviceInfo);\n } catch (error) {\n if ((error as any).type) {\n throw error;\n }\n throw {\n type: \"parse\",\n message: `Failed to parse TypeScript file: ${(error as Error).message}`,\n filePath,\n details: error,\n } as GenerationError;\n }\n}\n\nfunction generateStubCode(serviceInfo: ServiceInfo): string {\n const className = serviceInfo.className;\n const basePath = serviceNameToPath(className);\n\n const methods = serviceInfo.methods\n .map((method) => generateMethod(method, basePath, className))\n .join(\"\\n\\n\");\n\n const hasStreamable = serviceInfo.methods.some((m) => m.isStreamable);\n\n const imports = generateImports(hasStreamable);\n\n return `${imports}\n\n@Injectable()\nexport class ${className} {\n${methods}\n}`;\n}\n\nfunction generateImports(hasStreamable: boolean): string {\n let imports = `import { Injectable } from \"@kithinji/orca\";\\n`;\n\n if (hasStreamable) {\n imports += `import { Observable } from \"@kithinji/orca\";\\n`;\n }\n\n return imports;\n}\n\nfunction generateMethod(\n method: ServiceMethod,\n basePath: string,\n serviceName: string\n): string {\n if (method.isStreamable) {\n return generateSseMethod(method, basePath);\n }\n\n const params = method.params.map((p) => `${p.name}: ${p.type}`).join(\", \");\n const hasParams = method.params.length > 0;\n\n if (!hasParams) {\n return generateGetMethod(method, basePath);\n }\n\n return generatePostMethod(method, basePath, params);\n}\n\nfunction generateSseMethod(method: ServiceMethod, basePath: string): string {\n const params = method.params.map((p) => `${p.name}: ${p.type}`).join(\", \");\n const hasParams = method.params.length > 0;\n\n let urlBuilder: string;\n if (hasParams) {\n const queryParams = method.params\n .map((p) => `${p.name}=\\${encodeURIComponent(${p.name})}`)\n .join(\"&\");\n urlBuilder = `\\`/${basePath}/${method.name}?${queryParams}\\``;\n } else {\n urlBuilder = `\\`/${basePath}/${method.name}\\``;\n }\n\n return ` ${method.name}(${params}): Observable<${method.returnType}> {\n return new Observable((observer) => {\n const eventSource = new EventSource(${urlBuilder});\n\n eventSource.onmessage = (event) => {\n try {\n const data = JSON.parse(event.data);\n observer.next(data);\n } catch (error) {\n observer.error?.(error);\n }\n };\n\n eventSource.onerror = (error) => {\n observer.error?.(error);\n eventSource.close();\n };\n\n return () => {\n eventSource.close();\n };\n });\n }`;\n}\n\nfunction generateGetMethod(method: ServiceMethod, basePath: string): string {\n const params = method.params.map((p) => `${p.name}: ${p.type}`).join(\", \");\n const returnType = `Promise<${method.returnType}>`;\n\n return ` async ${method.name}(${params}): ${returnType} {\n const response = await fetch(\\`/${basePath}/${method.name}\\`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n }\n });\n\n if (!response.ok) {\n throw new Error(\\`HTTP error! status: \\${response.status}\\`);\n }\n\n return response.json();\n }`;\n}\n\nfunction generatePostMethod(\n method: ServiceMethod,\n basePath: string,\n params: string\n): string {\n const paramNames = method.params.map((p) => p.name).join(\", \");\n const returnType = `Promise<${method.returnType}>`;\n\n return ` async ${method.name}(${params}): ${returnType} {\n const response = await fetch(\\`/${basePath}/${method.name}\\`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ ${paramNames} }),\n });\n\n if (!response.ok) {\n throw new Error(\\`HTTP error! status: \\${response.status}\\`);\n }\n\n return response.json();\n }`;\n}\n", "import { parseSync } from \"@swc/core\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport type { Module, Decorator } from \"@swc/core\";\nimport { Store } from \"@/store\";\n\ntype SymbolKind =\n | \"class\"\n | \"function\"\n | \"variable\"\n | \"interface\"\n | \"type\"\n | \"enum\"\n | \"namespace\"\n | \"unknown\";\n\ninterface SymbolInfo {\n name: string;\n kind: SymbolKind;\n decorators?: string[];\n isDefault?: boolean;\n}\n\ninterface ImportInfo {\n sourcePath: string;\n resolvedPath: string | null;\n symbols: SymbolInfo[];\n}\n\nexport interface FileNode {\n filePath: string;\n isTsx: boolean;\n directive: \"public\" | \"interactive\" | null;\n imports: ImportInfo[];\n exports: SymbolInfo[];\n}\n\nexport interface DependencyGraph {\n [filePath: string]: FileNode;\n}\n\nfunction resolveFilePath(fromFile: string, importPath: string): string | null {\n if (!importPath.startsWith(\".\")) return null;\n\n const dir = path.dirname(fromFile);\n const basePath = path.resolve(dir, importPath);\n\n const extensions = [\"\", \".ts\", \".tsx\", \".js\", \".jsx\"];\n for (const ext of extensions) {\n const fullPath = basePath + ext;\n if (fs.existsSync(fullPath) && fs.statSync(fullPath).isFile())\n return fullPath;\n }\n\n const indexFiles = [\"/index.ts\", \"/index.tsx\", \"/index.js\", \"/index.jsx\"];\n for (const indexFile of indexFiles) {\n const fullPath = basePath + indexFile;\n if (fs.existsSync(fullPath) && fs.statSync(fullPath).isFile())\n return fullPath;\n }\n\n return null;\n}\n\nfunction extractDecorators(decorators?: Decorator[]): string[] {\n if (!decorators) return [];\n return decorators\n .map((d) => {\n const exp = d.expression;\n if (exp.type === \"CallExpression\" && exp.callee.type === \"Identifier\")\n return exp.callee.value;\n if (exp.type === \"Identifier\") return exp.value;\n return \"unknown\";\n })\n .filter((n) => n !== \"unknown\");\n}\n\nfunction extractDirective(ast: Module): \"public\" | \"interactive\" | null {\n for (const item of ast.body) {\n if (\n item.type === \"ExpressionStatement\" &&\n item.expression.type === \"StringLiteral\"\n ) {\n const val = item.expression.value;\n if (val === \"use public\") return \"public\";\n if (val === \"use interactive\") return \"interactive\";\n } else {\n break;\n }\n }\n return null;\n}\n\nfunction extractImports(\n ast: Module\n): Array<{ path: string; specifiers: any[] }> {\n const imports: Array<{ path: string; specifiers: any[] }> = [];\n for (const item of ast.body) {\n if (item.type === \"ImportDeclaration\") {\n imports.push({ path: item.source.value, specifiers: item.specifiers });\n }\n }\n return imports;\n}\n\nfunction extractExports(\n ast: Module,\n currentFile: string,\n graph: DependencyGraph,\n processFile: (fp: string) => void\n): SymbolInfo[] {\n const exports: SymbolInfo[] = [];\n\n for (const item of ast.body) {\n if (item.type === \"ExportDeclaration\" && item.declaration) {\n const decl = item.declaration;\n\n if (decl.type === \"ClassDeclaration\" && decl.identifier) {\n const decorators = extractDecorators(decl.decorators);\n exports.push({\n name: decl.identifier.value,\n kind: \"class\",\n decorators: decorators.length > 0 ? decorators : undefined,\n });\n } else if (decl.type === \"FunctionDeclaration\" && decl.identifier) {\n exports.push({ name: decl.identifier.value, kind: \"function\" });\n } else if (decl.type === \"VariableDeclaration\") {\n for (const declarator of decl.declarations) {\n if (declarator.id.type === \"Identifier\") {\n exports.push({ name: declarator.id.value, kind: \"variable\" });\n }\n }\n } else if (decl.type === \"TsInterfaceDeclaration\") {\n exports.push({ name: decl.id.value, kind: \"interface\" });\n } else if (decl.type === \"TsTypeAliasDeclaration\") {\n exports.push({ name: decl.id.value, kind: \"type\" });\n } else if (decl.type === \"TsEnumDeclaration\") {\n exports.push({ name: decl.id.value, kind: \"enum\" });\n }\n }\n\n if (item.type === \"ExportNamedDeclaration\" && item.source) {\n const resolved = resolveFilePath(currentFile, item.source.value);\n if (resolved) {\n processFile(resolved);\n const sourceExports = graph[resolved]?.exports || [];\n for (const spec of item.specifiers) {\n if (spec.type === \"ExportSpecifier\") {\n const exp = sourceExports.find((e) => e.name === spec.orig.value);\n exports.push({\n name: spec.exported?.value || spec.orig.value,\n kind: exp?.kind || \"unknown\",\n decorators: exp?.decorators,\n });\n }\n }\n }\n }\n\n if (item.type === \"ExportAllDeclaration\") {\n const resolved = resolveFilePath(currentFile, item.source.value);\n if (resolved) {\n processFile(resolved);\n const sourceExports = graph[resolved]?.exports || [];\n for (const exp of sourceExports) {\n exports.push({ ...exp });\n }\n }\n }\n\n if (item.type === \"ExportDefaultDeclaration\") {\n const decl = item.decl;\n let kind: SymbolKind = \"unknown\";\n let decorators: string[] | undefined;\n\n if (decl.type === \"ClassExpression\") {\n kind = \"class\";\n decorators = extractDecorators(decl.decorators);\n } else if (decl.type === \"FunctionExpression\") {\n kind = \"function\";\n } else if (decl.type === \"TsInterfaceDeclaration\") {\n kind = \"interface\";\n }\n\n exports.push({\n name: \"default\",\n kind,\n isDefault: true,\n decorators: decorators?.length ? decorators : undefined,\n });\n }\n\n if (item.type === \"ExportDefaultExpression\") {\n exports.push({ name: \"default\", kind: \"unknown\", isDefault: true });\n }\n }\n\n return exports;\n}\n\nexport function buildGraph(entryPoints: string[]): DependencyGraph {\n const graph: DependencyGraph = {};\n const visited = new Set<string>();\n\n function processFile(filePath: string): void {\n const allowedExt = [\".ts\", \".tsx\", \".js\", \".jsx\"];\n if (!allowedExt.includes(path.extname(filePath))) return;\n if (visited.has(filePath)) return;\n visited.add(filePath);\n\n if (!fs.existsSync(filePath)) {\n console.warn(`File not found: ${filePath}`);\n return;\n }\n\n const isTsx = [\".tsx\", \".jsx\"].includes(path.extname(filePath));\n const store = Store.getInstance();\n const newCode = store.get<string>(filePath);\n const content = newCode ? newCode[0] : fs.readFileSync(filePath, \"utf-8\");\n\n const ast = parseSync(content, {\n syntax: \"typescript\",\n tsx: isTsx,\n decorators: true,\n });\n\n const directive = extractDirective(ast);\n const rawImports = extractImports(ast);\n const exports = extractExports(ast, filePath, graph, processFile);\n\n for (const { path: importPath } of rawImports) {\n const resolved = resolveFilePath(filePath, importPath);\n if (resolved) processFile(resolved);\n }\n\n const imports: ImportInfo[] = rawImports.map(\n ({ path: importPath, specifiers }) => {\n const resolvedPath = resolveFilePath(filePath, importPath);\n const sourceExports =\n resolvedPath && graph[resolvedPath]\n ? graph[resolvedPath].exports\n : [];\n const symbols: SymbolInfo[] = [];\n\n for (const spec of specifiers) {\n if (spec.type === \"ImportDefaultSpecifier\") {\n const def = sourceExports.find((e) => e.isDefault);\n symbols.push({\n name: spec.local.value,\n kind: def?.kind || \"unknown\",\n decorators: def?.decorators,\n isDefault: true,\n });\n } else if (spec.type === \"ImportNamespaceSpecifier\") {\n symbols.push({ name: spec.local.value, kind: \"namespace\" });\n } else if (spec.type === \"ImportSpecifier\") {\n const importedName = spec.imported\n ? spec.imported.value\n : spec.local.value;\n const exp = sourceExports.find((e) => e.name === importedName);\n symbols.push({\n name: importedName,\n kind: exp?.kind || \"unknown\",\n decorators: exp?.decorators,\n });\n }\n }\n\n return { sourcePath: importPath, resolvedPath, symbols };\n }\n );\n\n graph[filePath] = { filePath, isTsx, directive, imports, exports };\n }\n\n for (const entry of entryPoints) processFile(path.resolve(entry));\n\n return graph;\n}\n", "import { Store } from \"@/store\";\nimport { PluginBuild } from \"esbuild\";\nimport * as fs from \"fs\";\n\nexport function stylePlugin(store: Store) {\n return {\n name: \"style\",\n setup(build: PluginBuild) {\n build.onEnd(() => {\n const styleRules = store.get(\"style_rules\");\n\n if (!styleRules || styleRules.length === 0) {\n console.log(\"No style rules generated\");\n return;\n }\n\n const allRules = styleRules.flat();\n const uniqueRules = [...new Set(allRules)];\n\n const cssOutput = uniqueRules.join(\"\\n\");\n fs.writeFileSync(\"public/index.css\", cssOutput);\n });\n },\n };\n}\n", "import * as fs from \"fs/promises\";\n\nexport interface HtmlPreprocessorOptions {\n injectScripts?: string[];\n injectStyles?: string[];\n replaceVariables?: Record<string, string>;\n transformers?: HtmlTransformer[];\n minify?: boolean;\n}\n\nexport type HtmlTransformer = (html: string) => string | Promise<string>;\n\nexport class HtmlPreprocessor {\n private options: HtmlPreprocessorOptions;\n\n constructor(options: HtmlPreprocessorOptions = {}) {\n this.options = options;\n }\n\n async processFile(inputPath: string, outputPath: string): Promise<void> {\n const html = await fs.readFile(inputPath, \"utf-8\");\n const processed = await this.process(html);\n await fs.writeFile(outputPath, processed, \"utf-8\");\n }\n\n async process(html: string): Promise<string> {\n let result = html;\n\n if (this.options.transformers) {\n for (const transformer of this.options.transformers) {\n result = await transformer(result);\n }\n }\n\n if (this.options.injectScripts && this.options.injectScripts.length > 0) {\n result = this.injectScripts(result, this.options.injectScripts);\n }\n\n if (this.options.injectStyles && this.options.injectStyles.length > 0) {\n result = this.injectStyles(result, this.options.injectStyles);\n }\n\n if (this.options.replaceVariables) {\n result = this.replaceVariables(result, this.options.replaceVariables);\n }\n\n if (this.options.minify) {\n result = this.minify(result);\n }\n\n return result;\n }\n\n private injectScripts(html: string, scripts: string[]): string {\n const scriptTags = scripts\n .map((src) => ` <script src=\"${src}\"></script>`)\n .join(\"\\n\");\n\n if (html.includes(\"</body>\")) {\n return html.replace(\"</body>\", `${scriptTags}\\n</body>`);\n } else if (html.includes(\"</head>\")) {\n return html.replace(\"</head>\", `${scriptTags}\\n</head>`);\n } else {\n return html + `\\n${scriptTags}`;\n }\n }\n\n private injectStyles(html: string, styles: string[]): string {\n const styleTags = styles\n .map((href) => ` <link rel=\"stylesheet\" href=\"${href}\">`)\n .join(\"\\n\");\n\n if (html.includes(\"</head>\")) {\n return html.replace(\"</head>\", `${styleTags}\\n</head>`);\n } else if (html.includes(\"<head>\")) {\n return html.replace(\"<head>\", `<head>\\n${styleTags}`);\n } else {\n return styleTags + \"\\n\" + html;\n }\n }\n\n private replaceVariables(\n html: string,\n variables: Record<string, string>\n ): string {\n let result = html;\n for (const [key, value] of Object.entries(variables)) {\n result = result.replace(new RegExp(`\\\\{\\\\{${key}\\\\}\\\\}`, \"g\"), value);\n result = result.replace(new RegExp(`\\\\$\\\\{${key}\\\\}`, \"g\"), value);\n }\n return result;\n }\n\n private minify(html: string): string {\n return html\n .replace(/<!--[\\s\\S]*?-->/g, \"\")\n .replace(/\\s+/g, \" \")\n .replace(/>\\s+</g, \"><\")\n .trim();\n }\n}\n\nexport function createHotReloadTransformer(\n port: number\n): (html: string) => string {\n return (html: string) => {\n const hotReloadScript = `\n<script>\n(function() {\n let ws;\n let reconnectAttempts = 0;\n const maxReconnectAttempts = 10;\n\n function connect() {\n ws = new WebSocket('ws://localhost:${port}');\n \n ws.onopen = () => {\n reconnectAttempts = 0;\n };\n \n ws.onmessage = (event) => {\n if (event.data === 'reload') {\n window.location.reload();\n }\n };\n \n ws.onclose = () => { \n if (reconnectAttempts < maxReconnectAttempts) {\n reconnectAttempts++;\n console.log(\\`\uD83D\uDD04 Reconnecting... (attempt \\${reconnectAttempts}/\\${maxReconnectAttempts})\\`);\n setTimeout(connect, 1000 * reconnectAttempts);\n } else {\n console.log('\u274C Max reconnection attempts reached');\n }\n };\n \n ws.onerror = (error) => {\n console.error('\uD83D\uDD25 Hot reload error:', error);\n };\n }\n \n connect();\n})();\n</script>`;\n\n if (html.includes(\"</body>\")) {\n return html.replace(\"</body>\", `${hotReloadScript}\\n</body>`);\n }\n return html + hotReloadScript;\n };\n}\n\nexport const createMetaTagsTransformer = (\n meta: Record<string, string>\n): HtmlTransformer => {\n return (html: string) => {\n const metaTags = Object.entries(meta)\n .map(([name, content]) => ` <meta name=\"${name}\" content=\"${content}\">`)\n .join(\"\\n\");\n\n if (html.includes(\"</head>\")) {\n return html.replace(\"</head>\", `${metaTags}\\n</head>`);\n } else if (html.includes(\"<head>\")) {\n return html.replace(\"<head>\", `<head>\\n${metaTags}`);\n }\n return metaTags + \"\\n\" + html;\n };\n};\n\nexport async function preprocessHtml(\n inputPath: string,\n outputPath: string,\n options?: HtmlPreprocessorOptions\n): Promise<void> {\n const preprocessor = new HtmlPreprocessor(options);\n await preprocessor.processFile(inputPath, outputPath);\n}\n", "export * from \"./config\"", "import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as ts from \"typescript\";\n\nabstract class ComponentDefinition {\n abstract name: string;\n abstract dependencies: string[];\n abstract generate(): string;\n}\n\nclass ButtonComponent extends ComponentDefinition {\n name = \"button\";\n dependencies: string[] = [];\n\n generate(): string {\n return `\"use interactive\";\n\nimport { Component, JSX } from \"@kithinji/orca\";\n\n@Component()\nexport class Button {\n props!: {\n children: any\n };\n \n build() {\n return (\n <button>\n {this.props.children}\n </button>\n );\n }\n}\n`;\n }\n}\n\nclass InputComponent extends ComponentDefinition {\n name = \"input\";\n dependencies: string[] = [];\n\n generate(): string {\n return `\"use interactive\";\n\nimport { Component } from \"@kithinji/orca\";\n\n@Component()\nexport class Input { \n build() {\n return (\n <input />\n );\n }\n}\n`;\n }\n}\n\nclass FormComponent extends ComponentDefinition {\n name = \"form\";\n dependencies = [\"button\", \"input\"];\n\n generate(): string {\n return `\"use interactive\";\n\nimport { Component } from \"@kithinji/orca\";\nimport { Button } from \"./button.component\";\nimport { Input } from \"./input.component\";\n\n@Component()\nexport class Form {\n props!: {\n onSubmit?: () => void;\n };\n \n build() {\n return (\n <form onSubmit={this.props.onSubmit}>\n <Input />\n <Button>Submit</Button>\n </form>\n );\n }\n}\n`;\n }\n}\n\nclass CardComponent extends ComponentDefinition {\n name = \"card\";\n dependencies = [\"button\"];\n\n generate(): string {\n return `\"use interactive\";\n \nimport { Component } from \"@kithinji/orca\";\nimport { Button } from \"./button.component\";\n\n@Component()\nexport class Card {\n props!: {\n title: string;\n children: any;\n onAction?: () => void;\n };\n \n build() {\n return (\n <div className=\"card\">\n <h3>{this.props.title}</h3>\n <div>{this.props.children}</div>\n {this.props.onAction && (\n <Button onClick={this.props.onAction}>Action</Button>\n )}\n </div>\n );\n }\n}\n`;\n }\n}\n\nclass ComponentRegistry {\n private static components = new Map<string, ComponentDefinition>([\n [\"button\", new ButtonComponent()],\n [\"input\", new InputComponent()],\n [\"form\", new FormComponent()],\n [\"card\", new CardComponent()],\n ]);\n\n static get(name: string): ComponentDefinition | undefined {\n return this.components.get(name);\n }\n\n static has(name: string): boolean {\n return this.components.has(name);\n }\n\n static getAll(): string[] {\n return Array.from(this.components.keys());\n }\n\n static register(component: ComponentDefinition): void {\n this.components.set(component.name, component);\n }\n}\n\nexport function addComponent(\n name: string,\n processedComponents: Set<string> = new Set()\n) {\n if (processedComponents.has(name)) {\n return;\n }\n\n const component = ComponentRegistry.get(name);\n if (!component) {\n throw new Error(\n `Component \"${name}\" not found. Available components: ${ComponentRegistry.getAll().join(\n \", \"\n )}`\n );\n }\n\n processedComponents.add(name);\n\n if (component.dependencies.length > 0) {\n console.log(\n `\\nProcessing dependencies for \"${name}\": [${component.dependencies.join(\n \", \"\n )}]`\n );\n for (const dependency of component.dependencies) {\n addComponent(dependency, processedComponents);\n }\n }\n\n const componentModulePath = path.join(\n process.cwd(),\n \"src/component/component.module.ts\"\n );\n const componentPath = path.join(\n process.cwd(),\n `src/component/component/${name}.component.tsx`\n );\n const componentDir = path.dirname(componentPath);\n const appModulePath = path.join(process.cwd(), \"src/app/app.module.ts\");\n\n if (!fs.existsSync(componentModulePath)) {\n const moduleDir = path.dirname(componentModulePath);\n if (!fs.existsSync(moduleDir)) {\n fs.mkdirSync(moduleDir, { recursive: true });\n }\n fs.writeFileSync(componentModulePath, createModule(), \"utf-8\");\n }\n\n if (!fs.existsSync(componentDir)) {\n fs.mkdirSync(componentDir, { recursive: true });\n }\n\n if (!fs.existsSync(componentPath)) {\n fs.writeFileSync(componentPath, component.generate(), \"utf-8\");\n console.log(`Created ${name}.component.tsx`);\n } else {\n console.log(`${name}.component.tsx already exists, skipping file creation`);\n }\n\n const moduleContent = fs.readFileSync(componentModulePath, \"utf-8\");\n const updatedModule = updateModuleWithComponent(moduleContent, name);\n fs.writeFileSync(componentModulePath, updatedModule, \"utf-8\");\n\n if (fs.existsSync(appModulePath)) {\n const appModuleContent = fs.readFileSync(appModulePath, \"utf-8\");\n const updatedAppModule = ensureComponentModuleImported(appModuleContent);\n if (updatedAppModule !== appModuleContent) {\n fs.writeFileSync(appModulePath, updatedAppModule, \"utf-8\");\n }\n }\n}\n\nexport function getComponentDependencies(\n name: string,\n visited: Set<string> = new Set()\n): string[] {\n if (visited.has(name)) {\n return [];\n }\n\n const component = ComponentRegistry.get(name);\n if (!component) {\n return [];\n }\n\n visited.add(name);\n const allDeps: string[] = [];\n\n for (const dep of component.dependencies) {\n allDeps.push(dep);\n allDeps.push(...getComponentDependencies(dep, visited));\n }\n\n return [...new Set(allDeps)];\n}\n\nexport function printDependencyTree(name: string, indent: string = \"\"): void {\n const component = ComponentRegistry.get(name);\n if (!component) {\n console.log(`${indent}${name} (not found)`);\n return;\n }\n\n console.log(`${indent}${name}`);\n for (const dep of component.dependencies) {\n printDependencyTree(dep, indent + \" \u251C\u2500 \");\n }\n}\n\nexport function listComponents(): void {\n console.log(\"\\nAvailable components:\");\n for (const name of ComponentRegistry.getAll()) {\n const component = ComponentRegistry.get(name)!;\n const depsInfo =\n component.dependencies.length > 0\n ? ` (depends on: ${component.dependencies.join(\", \")})`\n : \" (no dependencies)\";\n console.log(` - ${name}${depsInfo}`);\n }\n}\n\nfunction updateModuleWithComponent(\n moduleContent: string,\n componentName: string\n): string {\n const className = capitalize(componentName);\n const importPath = `./component/${componentName}.component`;\n\n const sourceFile = ts.createSourceFile(\n \"component.module.ts\",\n moduleContent,\n ts.ScriptTarget.Latest,\n true\n );\n\n const hasImport = sourceFile.statements.some((statement) => {\n if (ts.isImportDeclaration(statement)) {\n const moduleSpecifier = statement.moduleSpecifier;\n if (ts.isStringLiteral(moduleSpecifier)) {\n return moduleSpecifier.text === importPath;\n }\n }\n return false;\n });\n\n if (hasImport) {\n return moduleContent;\n }\n\n let lastImportEnd = 0;\n sourceFile.statements.forEach((statement) => {\n if (ts.isImportDeclaration(statement)) {\n lastImportEnd = statement.end;\n }\n });\n\n const importStatement = `import { ${className} } from \"${importPath}\";\\n`;\n let updatedContent =\n moduleContent.slice(0, lastImportEnd) +\n \"\\n\" +\n importStatement +\n moduleContent.slice(lastImportEnd);\n\n const newSourceFile = ts.createSourceFile(\n \"component.module.ts\",\n updatedContent,\n ts.ScriptTarget.Latest,\n true\n );\n\n updatedContent = addToDecoratorArray(\n updatedContent,\n newSourceFile,\n \"declarations\",\n className\n );\n updatedContent = addToDecoratorArray(\n updatedContent,\n ts.createSourceFile(\n \"component.module.ts\",\n updatedContent,\n ts.ScriptTarget.Latest,\n true\n ),\n \"exports\",\n className\n );\n\n return updatedContent;\n}\n\nfunction addToDecoratorArray(\n content: string,\n sourceFile: ts.SourceFile,\n arrayName: string,\n className: string\n): string {\n let decoratorNode: ts.Decorator | undefined;\n\n sourceFile.statements.forEach((statement) => {\n if (ts.isClassDeclaration(statement) && statement.modifiers) {\n statement.modifiers.forEach((modifier) => {\n if (ts.isDecorator(modifier)) {\n const expression = modifier.expression;\n if (ts.isCallExpression(expression)) {\n const expressionText = expression.expression.getText(sourceFile);\n if (expressionText === \"Module\") {\n decoratorNode = modifier;\n }\n }\n }\n });\n }\n });\n\n if (!decoratorNode) {\n console.warn(\"Could not find @Module decorator\");\n return content;\n }\n\n const callExpression = decoratorNode.expression as ts.CallExpression;\n const objectLiteral = callExpression\n .arguments[0] as ts.ObjectLiteralExpression;\n\n if (!objectLiteral || !ts.isObjectLiteralExpression(objectLiteral)) {\n return content;\n }\n\n let targetProperty: ts.PropertyAssignment | undefined;\n objectLiteral.properties.forEach((prop) => {\n if (ts.isPropertyAssignment(prop)) {\n const propName = prop.name.getText(sourceFile);\n if (propName === arrayName) {\n targetProperty = prop;\n }\n }\n });\n\n if (!targetProperty) {\n console.warn(`Could not find ${arrayName} property`);\n return content;\n }\n\n const arrayLiteral = targetProperty.initializer;\n if (!ts.isArrayLiteralExpression(arrayLiteral)) {\n return content;\n }\n\n const hasClassName = arrayLiteral.elements.some((element) => {\n return element.getText(sourceFile).trim() === className;\n });\n\n if (hasClassName) {\n return content;\n }\n\n const arrayStart = arrayLiteral.getStart(sourceFile);\n const arrayEnd = arrayLiteral.getEnd();\n\n if (arrayLiteral.elements.length === 0) {\n const newArray = `[${className}]`;\n return (\n content.substring(0, arrayStart) + newArray + content.substring(arrayEnd)\n );\n }\n\n const lastElement = arrayLiteral.elements[arrayLiteral.elements.length - 1];\n const insertPos = lastElement.getEnd();\n const newElement = `, ${className}`;\n\n return (\n content.substring(0, insertPos) + newElement + content.substring(insertPos)\n );\n}\n\nfunction ensureComponentModuleImported(appModuleContent: string): string {\n const sourceFile = ts.createSourceFile(\n \"app.module.ts\",\n appModuleContent,\n ts.ScriptTarget.Latest,\n true\n );\n\n const hasComponentModuleImport = sourceFile.statements.some((statement) => {\n if (ts.isImportDeclaration(statement) && statement.importClause) {\n const namedBindings = statement.importClause.namedBindings;\n if (namedBindings && ts.isNamedImports(namedBindings)) {\n return namedBindings.elements.some(\n (element) => element.name.text === \"ComponentModule\"\n );\n }\n }\n return false;\n });\n\n if (hasComponentModuleImport) {\n return ensureInImportsArray(appModuleContent, sourceFile);\n }\n\n let lastImportEnd = 0;\n sourceFile.statements.forEach((statement) => {\n if (ts.isImportDeclaration(statement)) {\n lastImportEnd = statement.end;\n }\n });\n\n const importStatement = `import { ComponentModule } from \"../component/component.module\";\\n`;\n let updatedContent =\n appModuleContent.slice(0, lastImportEnd) +\n \"\\n\" +\n importStatement +\n appModuleContent.slice(lastImportEnd);\n\n const newSourceFile = ts.createSourceFile(\n \"app.module.ts\",\n updatedContent,\n ts.ScriptTarget.Latest,\n true\n );\n\n updatedContent = ensureInImportsArray(updatedContent, newSourceFile);\n\n return updatedContent;\n}\n\nfunction ensureInImportsArray(\n content: string,\n sourceFile: ts.SourceFile\n): string {\n return addToDecoratorArray(content, sourceFile, \"imports\", \"ComponentModule\");\n}\n\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nfunction createModule() {\n return `import { Module } from \"@kithinji/orca\";\n\n@Module({\n imports: [],\n providers: [],\n declarations: [],\n exports: [],\n})\nexport class ComponentModule {}\n`;\n}\n", "export function toCamelCase(str: string): string {\n return str\n .replace(/[-_](.)/g, (_, char) => char.toUpperCase())\n .replace(/^./, (char) => char.toLowerCase());\n}\n\nexport function toPascalCase(str: string): string {\n return str\n .replace(/[-_](.)/g, (_, char) => char.toUpperCase())\n .replace(/^./, (char) => char.toUpperCase());\n}\n\nexport function toSnakeCase(str: string): string {\n return str.replace(/[-\\s]/g, \"_\").toLowerCase();\n}\n", "import * as fs from \"fs\";\nimport * as path from \"path\";\n\ninterface FileEntry {\n name: string;\n content: string;\n}\n\nexport interface DirEntry {\n name?: string;\n files?: FileEntry[];\n dirs?: DirEntry[];\n}\n\nexport function createStructure(basePath: string, entry: DirEntry) {\n fs.mkdirSync(basePath, { recursive: true });\n\n entry.files?.forEach((file) => {\n fs.writeFileSync(path.join(basePath, file.name), file.content);\n });\n\n entry.dirs?.forEach((dir) => {\n const dirPath = path.join(basePath, dir.name || \"\");\n createStructure(dirPath, dir);\n });\n}\n", "import { createStructure, DirEntry } from \"@/utils\";\nimport path from \"path\";\nimport { addModule } from \"../module\";\nimport { addComponent } from \"../component\";\n\nexport function addNew(name: string) {\n const baseDir = path.join(process.cwd(), name);\n\n const structure: DirEntry = {\n files: [\n { name: \"package.json\", content: genPackageJson(name) },\n { name: \"tsconfig.json\", content: gentsconfig() },\n { name: \"pod.config.ts\", content: genPodConfig(name) },\n { name: \"README.md\", content: genReadMe() },\n { name: \".gitignore\", content: genGitIgnore() },\n { name: \".env\", content: genEnv() },\n ],\n dirs: [\n {\n name: \"src\",\n files: [{ name: \"main.ts\", content: genMainTs() }],\n dirs: [\n {\n name: \"client\",\n files: [\n { name: \"index.html\", content: genIndexHtml(name) },\n { name: \"client.tsx\", content: genClientTsx() },\n ],\n },\n ],\n },\n ],\n };\n\n createStructure(baseDir, structure);\n\n const appDir = path.join(process.cwd(), name, \"src\", \"app\");\n\n addModule(\"app\", appDir, true);\n\n process.chdir(baseDir);\n\n addComponent(\"button\");\n\n console.log(`App ${name} created successfully`);\n}\n\nfunction genPackageJson(name: string) {\n const pj = {\n name,\n private: true,\n version: \"0.0.0\",\n type: \"module\",\n scripts: {\n dev: \"pod dev\",\n build: \"pod build\",\n start: \"pod start\",\n },\n dependencies: {\n \"reflect-metadata\": \"latest\",\n zod: \"^4.2.1\",\n \"@kithinji/orca\": \"latest\",\n \"@kithinji/arcane\": \"latest\",\n },\n devDependencies: {\n \"@types/node\": \"^20.19.27\",\n typescript: \"~5.9.3\",\n \"@kithinji/pod\": \"latest\",\n },\n };\n\n return JSON.stringify(pj, null, 2);\n}\n\nfunction gentsconfig() {\n const tsconfig = {\n compilerOptions: {\n target: \"ES2020\",\n module: \"ESNext\",\n moduleResolution: \"bundler\",\n strict: true,\n esModuleInterop: true,\n skipLibCheck: true,\n jsx: \"react-jsx\",\n jsxImportSource: \"@kithinji/orca\",\n experimentalDecorators: true,\n emitDecoratorMetadata: true,\n baseUrl: \".\",\n paths: {\n \"@/*\": [\"src/*\"],\n },\n },\n include: [\"src\"],\n };\n\n return JSON.stringify(tsconfig, null, 2);\n}\n\nfunction genPodConfig(name: string) {\n return `import { PodConfig, stylePlugin } from \"@kithinji/pod\";\n\nexport default function defaultConfig(): PodConfig {\n return {\n name: \"${name}\",\n client_plugins: [stylePlugin],\n };\n} \n`;\n}\n\nfunction genReadMe() {\n return `# Pod Project \n`;\n}\n\nfunction genGitIgnore() {\n return `node_modules\ndist\nbuild\n.orca\n*.log\n.env\n.DS_Store\n`;\n}\n\nfunction genEnv() {\n return `HOST=localhost\n`;\n}\n\nfunction genIndexHtml(name: string) {\n return `<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>${name} app</title>\n <link rel=\"stylesheet\" href=\"index.css\" />\n </head>\n <body>\n <div id=\"root\"></div>\n <script type=\"module\" src=\"/src/client/client.js\"></script>\n </body>\n</html>\n`;\n}\n\nfunction genClientTsx() {\n return `\"use interactive\";\n\nimport {\n Module,\n BrowserFactory,\n Component,\n RouterModule,\n RouterOutlet,\n HttpClientModule,\n} from \"@kithinji/orca\";\n\n@Component({\n deps: [RouterOutlet],\n})\nclass AppComponent {\n build() {\n return <RouterOutlet />;\n }\n}\n\n@Module({\n imports: [RouterModule.forRoot(), HttpClientModule],\n declarations: [AppComponent],\n bootstrap: AppComponent,\n})\nclass AppModule {}\n\nexport function bootstrap() {\n BrowserFactory.create(AppModule, document.getElementById(\"root\")!);\n}\n\nbootstrap();\n\n/* Don't modify */\nexport { Navigate, getCurrentInjector } from \"@kithinji/orca\";\n`;\n}\n\nfunction genMainTs() {\n return `import { NodeFactory } from \"@kithinji/orca\";\nimport { AppModule } from \"./app/app.module\";\n\nasync function bootstrap() {\n const app = await NodeFactory.create(AppModule);\n app.listen(8080, () => {\n console.log(\"Server started\");\n });\n}\n\nbootstrap();\n`;\n}\n", "import { createStructure, DirEntry, toCamelCase, toPascalCase } from \"@/utils\";\nimport * as path from \"path\";\nimport * as fs from \"fs\";\nimport * as ts from \"typescript\";\n\nexport function addFeature(name: string) {\n const featureDir = path.join(process.cwd(), \"src\", \"features\", name);\n\n addModule(name, featureDir);\n\n updateFeaturesIndex(name);\n\n updateAppModule(name);\n}\n\nexport function addModule(name: string, baseDir: string, root?: boolean) {\n const structure: DirEntry = {\n files: [\n { name: `${name}.module.ts`, content: createModule(name, root) },\n { name: `${name}.service.ts`, content: createService(name) },\n { name: `${name}.page.tsx`, content: createPage(name) },\n ],\n dirs: [\n {\n name: \"schemas\",\n files: [\n {\n name: \"get.ts\",\n content: createGetSchema(name),\n },\n {\n name: \"create.ts\",\n content: createCreateSchema(name),\n },\n {\n name: \"update.ts\",\n content: createUpdateSchema(name),\n },\n {\n name: \"list.ts\",\n content: createListSchema(name),\n },\n {\n name: \"delete.ts\",\n content: createDeleteSchema(name),\n },\n ],\n },\n {\n name: \"components\",\n files: [\n {\n name: `${name}-list.component.tsx`,\n content: createListComponent(name),\n },\n ],\n },\n ],\n };\n\n createStructure(baseDir, structure);\n}\n\nfunction updateFeaturesIndex(featureName: string) {\n const featuresIndexPath = path.join(\n process.cwd(),\n \"src\",\n \"features\",\n \"index.ts\"\n );\n\n const moduleName = toPascalCase(featureName + \"_\" + \"Module\");\n const importPath = `./${featureName}/${featureName}.module`;\n\n if (fs.existsSync(featuresIndexPath)) {\n let content = fs.readFileSync(featuresIndexPath, \"utf-8\");\n const sourceFile = ts.createSourceFile(\n \"index.ts\",\n content,\n ts.ScriptTarget.Latest,\n true\n );\n\n const hasExport = sourceFile.statements.some((statement) => {\n if (ts.isExportDeclaration(statement)) {\n const moduleSpecifier = statement.moduleSpecifier;\n if (moduleSpecifier && ts.isStringLiteral(moduleSpecifier)) {\n return moduleSpecifier.text === importPath;\n }\n if (\n statement.exportClause &&\n ts.isNamedExports(statement.exportClause)\n ) {\n return statement.exportClause.elements.some(\n (element) => element.name.text === moduleName\n );\n }\n }\n return false;\n });\n\n if (hasExport) {\n return;\n }\n\n const exportStatement = `export { ${moduleName} } from \"${importPath}\";\\n`;\n fs.appendFileSync(featuresIndexPath, exportStatement);\n } else {\n const featuresDir = path.dirname(featuresIndexPath);\n if (!fs.existsSync(featuresDir)) {\n fs.mkdirSync(featuresDir, { recursive: true });\n }\n\n const exportStatement = `export { ${moduleName} } from \"${importPath}\";\\n`;\n fs.writeFileSync(featuresIndexPath, exportStatement, \"utf-8\");\n }\n}\n\nfunction updateAppModule(featureName: string) {\n const appModulePath = path.join(process.cwd(), \"src\", \"app\", \"app.module.ts\");\n\n if (!fs.existsSync(appModulePath)) {\n return;\n }\n\n const moduleName = toPascalCase(featureName + \"_\" + \"Module\");\n let content = fs.readFileSync(appModulePath, \"utf-8\");\n\n const sourceFile = ts.createSourceFile(\n \"app.module.ts\",\n content,\n ts.ScriptTarget.Latest,\n true\n );\n\n const hasImport = sourceFile.statements.some((statement) => {\n if (ts.isImportDeclaration(statement)) {\n const moduleSpecifier = statement.moduleSpecifier;\n if (ts.isStringLiteral(moduleSpecifier)) {\n const importPath = moduleSpecifier.text;\n return importPath.includes(`/${featureName}/${featureName}.module`);\n }\n\n if (\n statement.importClause?.namedBindings &&\n ts.isNamedImports(statement.importClause.namedBindings)\n ) {\n return statement.importClause.namedBindings.elements.some(\n (element) => element.name.text === moduleName\n );\n }\n }\n return false;\n });\n\n if (hasImport) {\n content = addToModuleImportsArray(content, sourceFile, moduleName);\n fs.writeFileSync(appModulePath, content, \"utf-8\");\n return;\n }\n\n let lastImportEnd = 0;\n sourceFile.statements.forEach((statement) => {\n if (ts.isImportDeclaration(statement)) {\n lastImportEnd = statement.end;\n }\n });\n\n const importStatement = `import { ${moduleName} } from \"../features/${featureName}/${featureName}.module\";\\n`;\n content =\n content.slice(0, lastImportEnd) +\n \"\\n\" +\n importStatement +\n content.slice(lastImportEnd);\n\n const newSourceFile = ts.createSourceFile(\n \"app.module.ts\",\n content,\n ts.ScriptTarget.Latest,\n true\n );\n\n content = addToModuleImportsArray(content, newSourceFile, moduleName);\n\n fs.writeFileSync(appModulePath, content, \"utf-8\");\n}\n\nfunction addToModuleImportsArray(\n content: string,\n sourceFile: ts.SourceFile,\n moduleName: string\n): string {\n let decoratorNode: ts.Decorator | undefined;\n\n sourceFile.statements.forEach((statement) => {\n if (ts.isClassDeclaration(statement) && statement.modifiers) {\n statement.modifiers.forEach((modifier) => {\n if (ts.isDecorator(modifier)) {\n const expression = modifier.expression;\n if (ts.isCallExpression(expression)) {\n const expressionText = expression.expression.getText(sourceFile);\n if (expressionText === \"Module\") {\n decoratorNode = modifier;\n }\n }\n }\n });\n }\n });\n\n if (!decoratorNode) {\n return content;\n }\n\n const callExpression = decoratorNode.expression as ts.CallExpression;\n const objectLiteral = callExpression\n .arguments[0] as ts.ObjectLiteralExpression;\n\n if (!objectLiteral || !ts.isObjectLiteralExpression(objectLiteral)) {\n return content;\n }\n\n let importsProperty: ts.PropertyAssignment | undefined;\n objectLiteral.properties.forEach((prop) => {\n if (ts.isPropertyAssignment(prop)) {\n const propName = prop.name.getText(sourceFile);\n if (propName === \"imports\") {\n importsProperty = prop;\n }\n }\n });\n\n if (!importsProperty) {\n return content;\n }\n\n const arrayLiteral = importsProperty.initializer;\n if (!ts.isArrayLiteralExpression(arrayLiteral)) {\n return content;\n }\n\n const hasModule = arrayLiteral.elements.some((element) => {\n return element.getText(sourceFile).trim() === moduleName;\n });\n\n if (hasModule) {\n return content;\n }\n\n const arrayStart = arrayLiteral.getStart(sourceFile);\n const arrayEnd = arrayLiteral.getEnd();\n\n if (arrayLiteral.elements.length === 0) {\n const newArray = `[${moduleName}]`;\n return (\n content.substring(0, arrayStart) + newArray + content.substring(arrayEnd)\n );\n }\n\n const lastElement = arrayLiteral.elements[arrayLiteral.elements.length - 1];\n const insertPos = lastElement.getEnd();\n const newElement = `, ${moduleName}`;\n\n return (\n content.substring(0, insertPos) + newElement + content.substring(insertPos)\n );\n}\n\nfunction createModule(name: string, root?: boolean) {\n const serviceName = toPascalCase(name + \"_\" + \"Service\");\n const pageName = toPascalCase(name + \"_\" + \"Page\");\n const moduleName = toPascalCase(name + \"_\" + \"Module\");\n const componentName = toPascalCase(name + \"_\" + \"List\");\n\n if (root) {\n return `import { Module, RouterModule, ServeStaticModule } from \"@kithinji/orca\";\nimport { ComponentModule } from \"@/component/component.module\";\nimport { ${serviceName} } from \"./${name}.service\";\nimport { ${pageName} } from \"./${name}.page\";\nimport { ${componentName} } from \"./components/${name}-list.component\";\n\n@Module({\n imports: [\n ServeStaticModule.forRoot({\n rootPath: \"./public\",\n }),\n RouterModule.forRoot(),\n ComponentModule\n ],\n providers: [${serviceName}],\n declarations: [${pageName}, ${componentName}],\n exports: [${serviceName}, ${pageName}],\n bootstrap: ${pageName}\n})\nexport class ${moduleName} {}\n`;\n }\n\n return `import { Module } from \"@kithinji/orca\";\nimport { ComponentModule } from \"@/component/component.module\";\nimport { ${serviceName} } from \"./${name}.service\";\nimport { ${pageName} } from \"./${name}.page\";\nimport { ${componentName} } from \"./components/${name}-list.component\";\n\n@Module({\n imports: [ComponentModule],\n providers: [${serviceName}],\n declarations: [${pageName}, ${componentName}],\n exports: [${serviceName}, ${pageName}],\n})\nexport class ${moduleName} {}\n`;\n}\n\nfunction createGetSchema(name: string) {\n return `import { z } from \"zod\";\n\nexport const ${toCamelCase(name + \"_\" + \"GetInput\")} = z.object({\n id: z.string().uuid(),\n});\n\nexport const ${toCamelCase(name + \"_\" + \"GetOutput\")} = z.object({\n id: z.string().uuid(),\n name: z.string(),\n description: z.string().optional(),\n createdAt: z.date(),\n updatedAt: z.date().optional(),\n});\n`;\n}\n\nfunction createCreateSchema(name: string) {\n return `import { z } from \"zod\";\n\nexport const ${toCamelCase(name + \"_\" + \"CreateInput\")} = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n});\n\nexport const ${toCamelCase(name + \"_\" + \"CreateOutput\")} = z.object({\n id: z.string().uuid(),\n name: z.string(),\n description: z.string().optional(),\n createdAt: z.date(),\n});\n`;\n}\n\nfunction createUpdateSchema(name: string) {\n return `import { z } from \"zod\";\n\nexport const ${toCamelCase(name + \"_\" + \"UpdateInput\")} = z.object({\n id: z.string().uuid(),\n name: z.string().min(1).optional(),\n description: z.string().optional(),\n});\n\nexport const ${toCamelCase(name + \"_\" + \"UpdateOutput\")} = z.object({\n id: z.string().uuid(),\n name: z.string(),\n description: z.string().optional(),\n createdAt: z.date(),\n updatedAt: z.date(),\n});\n`;\n}\n\nfunction createListSchema(name: string) {\n return `import { z } from \"zod\";\n\nexport const ${toCamelCase(name + \"_\" + \"ListOutput\")} = z.array(\n z.object({\n id: z.string().uuid(),\n name: z.string(),\n description: z.string().optional(),\n createdAt: z.date(),\n updatedAt: z.date().optional(),\n })\n);\n`;\n}\n\nfunction createDeleteSchema(name: string) {\n return `import { z } from \"zod\";\n\nexport const ${toCamelCase(name + \"_\" + \"DeleteInput\")} = z.object({\n id: z.string().uuid(),\n});\n\nexport const ${toCamelCase(name + \"_\" + \"DeleteOutput\")} = z.object({\n id: z.string().uuid(),\n name: z.string(),\n description: z.string().optional(),\n createdAt: z.date(),\n updatedAt: z.date().optional(),\n});\n`;\n}\n\nfunction createService(name: string) {\n const serviceName = toPascalCase(name + \"_\" + \"Service\");\n\n return `\"use public\";\n\nimport { Injectable, Signature } from \"@kithinji/orca\";\nimport { \n ${toCamelCase(name + \"_\" + \"CreateInput\")}, \n ${toCamelCase(name + \"_\" + \"CreateOutput\")} \n} from \"./schemas/create\";\nimport { \n ${toCamelCase(name + \"_\" + \"GetInput\")}, \n ${toCamelCase(name + \"_\" + \"GetOutput\")} \n} from \"./schemas/get\";\nimport { \n ${toCamelCase(name + \"_\" + \"UpdateInput\")}, \n ${toCamelCase(name + \"_\" + \"UpdateOutput\")} \n} from \"./schemas/update\";\nimport { ${toCamelCase(name + \"_\" + \"ListOutput\")} } from \"./schemas/list\";\nimport { \n ${toCamelCase(name + \"_\" + \"DeleteInput\")}, \n ${toCamelCase(name + \"_\" + \"DeleteOutput\")} \n} from \"./schemas/delete\";\n\n@Injectable()\nexport class ${serviceName} {\n private items: any[] = [];\n\n @Signature(${toCamelCase(name + \"_\" + \"CreateInput\")}, ${toCamelCase(\n name + \"_\" + \"CreateOutput\"\n )})\n public async create(input: any) {\n const item = {\n id: crypto.randomUUID(),\n ...input,\n createdAt: new Date(),\n };\n this.items.push(item);\n return item;\n }\n\n @Signature(${toCamelCase(name + \"_\" + \"GetInput\")}, ${toCamelCase(\n name + \"_\" + \"GetOutput\"\n )})\n public async get(input: any) {\n const item = this.items.find((i) => i.id === input.id);\n if (!item) {\n throw new Error(\"Item not found\");\n }\n return item;\n }\n\n @Signature(${toCamelCase(name + \"_\" + \"ListOutput\")})\n public async list() {\n return this.items;\n }\n\n @Signature(${toCamelCase(name + \"_\" + \"UpdateInput\")}, ${toCamelCase(\n name + \"_\" + \"UpdateOutput\"\n )})\n public async update(input: any) {\n const index = this.items.findIndex((i) => i.id === input.id);\n if (index === -1) {\n throw new Error(\"Item not found\");\n }\n \n this.items[index] = {\n ...this.items[index],\n ...input,\n updatedAt: new Date(),\n };\n \n return this.items[index];\n }\n\n @Signature(${toCamelCase(name + \"_\" + \"DeleteInput\")}, ${toCamelCase(\n name + \"_\" + \"DeleteOutput\"\n )})\n public async delete(input: any) {\n const index = this.items.findIndex((i) => i.id === input.id);\n if (index === -1) {\n throw new Error(\"Item not found\");\n }\n \n const deleted = this.items.splice(index, 1)[0];\n return deleted;\n }\n}\n`;\n}\n\nfunction createPage(name: string) {\n const pageName = toPascalCase(name + \"_\" + \"Page\");\n const listComponent = toPascalCase(name + \"_\" + \"List\");\n\n return `import { Component } from \"@kithinji/orca\";\nimport { ${listComponent} } from \"./components/${name}-list.component\";\n\n@Component({\n deps: [${listComponent}]\n})\nexport class ${pageName} {\n build() {\n return (\n <div>\n <h1>${toPascalCase(name)} Management</h1>\n <${listComponent} name=\"hello\" />\n </div>\n );\n }\n}\n`;\n}\n\nfunction createListComponent(name: string) {\n const componentName = toPascalCase(name + \"_\" + \"List\");\n const serviceName = toPascalCase(name + \"_\" + \"Service\");\n const serviceVar = toCamelCase(name + \"_\" + \"Service\");\n\n return `\"use interactive\";\n\nimport { Component } from \"@kithinji/orca\";\nimport { ${serviceName} } from \"../${name}.service\";\n\n@Component()\nexport class ${componentName} {\n props!: {\n name: string;\n };\n\n constructor(\n public readonly ${serviceVar}: ${serviceName}\n ) {}\n\n build() {\n return (\n <div>\n <h2>${toPascalCase(name)} List</h2>\n <p>List component for ${name}</p>\n {/* Add your list implementation here */}\n </div>\n );\n }\n}\n`;\n}\n", "import { createStructure, DirEntry } from \"@/utils\";\nimport path from \"path\";\nimport prompts from \"prompts\";\n\nexport interface ProjectOptions {\n name: string;\n target: \"browser\" | \"node\" | \"both\";\n}\n\nexport async function addTs(name: string) {\n const baseDir = path.join(process.cwd(), name);\n\n const response = await prompts({\n type: \"select\",\n name: \"target\",\n message: \"Where will this project run?\",\n choices: [\n { title: \"Browser\", value: \"browser\" },\n { title: \"Node.js\", value: \"node\" },\n { title: \"Both (Browser & Node.js)\", value: \"both\" },\n ],\n initial: 2,\n });\n\n if (!response.target) {\n console.log(\"Project creation cancelled\");\n process.exit(0);\n }\n\n const target = response.target as \"browser\" | \"node\" | \"both\";\n\n const structure: DirEntry = {\n files: [\n { name: \"package.json\", content: genPackageJson(name, target) },\n { name: \"tsconfig.json\", content: genTsConfig(target) },\n { name: \"build.js\", content: genBuildConfig(name, target) },\n { name: \"README.md\", content: genReadMe(name, target) },\n { name: \".gitignore\", content: genGitIgnore() },\n { name: \".env\", content: genEnv() },\n ],\n dirs: [\n {\n name: \"src\",\n files: getSrcFiles(target),\n },\n ],\n };\n\n createStructure(baseDir, structure);\n\n process.chdir(baseDir);\n\n console.log(`TypeScript project created for ${target} environment`);\n}\n\nfunction getSrcFiles(target: \"browser\" | \"node\" | \"both\") {\n switch (target) {\n case \"both\":\n return [\n { name: \"index.ts\", content: genIndexTs() },\n { name: \"index.browser.ts\", content: genBrowserIndexTs() },\n { name: \"index.node.ts\", content: genNodeIndexTs() },\n ];\n case \"browser\":\n return [{ name: \"index.ts\", content: genBrowserIndexTs() }];\n case \"node\":\n return [{ name: \"index.ts\", content: genNodeIndexTs() }];\n }\n}\n\nfunction genPackageJson(name: string, target: \"browser\" | \"node\" | \"both\") {\n const pkg: any = {\n name,\n version: \"1.0.0\",\n type: \"module\",\n scripts: {\n build: \"node build.js\",\n dev: \"node build.js --watch\",\n clean: \"rm -rf dist\",\n },\n devDependencies: {\n typescript: \"^5.9.3\",\n esbuild: \"^0.27.2\",\n \"@types/node\": \"^25.0.3\",\n },\n };\n\n if (target === \"node\") {\n pkg.main = \"dist/index.mjs\";\n pkg.types = \"./dist/types/index.d.ts\";\n } else if (target === \"browser\") {\n pkg.main = \"dist/index.mjs\";\n pkg.types = \"./dist/types/index.d.ts\";\n } else if (target === \"both\") {\n pkg.exports = {\n \".\": {\n browser: {\n import: \"./dist/browser/index.mjs\",\n },\n node: {\n import: \"./dist/node/index.mjs\",\n },\n types: \"./dist/types/index.d.ts\",\n },\n };\n }\n\n return JSON.stringify(pkg, null, 2);\n}\n\nfunction genTsConfig(target: \"browser\" | \"node\" | \"both\") {\n const config: any = {\n compilerOptions: {\n target: \"ES2020\",\n module: \"ESNext\",\n moduleResolution: \"bundler\",\n declaration: true,\n declarationMap: true,\n emitDeclarationOnly: true,\n outDir: \"./dist/types\",\n rootDir: \"./src\",\n strict: true,\n esModuleInterop: true,\n skipLibCheck: true,\n forceConsistentCasingInFileNames: true,\n baseUrl: \".\",\n paths: {\n \"@/*\": [\"./src/*\"],\n },\n },\n include: [\"src/**/*\"],\n exclude: [\"node_modules\", \"dist\"],\n };\n\n if (target === \"browser\" || target === \"both\") {\n config.compilerOptions.lib = [\"ES2020\", \"DOM\"];\n } else {\n config.compilerOptions.lib = [\"ES2020\"];\n }\n\n return JSON.stringify(config, null, 2);\n}\n\nfunction genBuildConfig(name: string, target: \"browser\" | \"node\" | \"both\") {\n return `import * as esbuild from \"esbuild\";\nimport { execSync } from \"child_process\";\nimport path from \"path\";\n\nconst isWatch = process.argv.includes('--watch');\n\n\nconst aliasPlugin = {\n name: 'alias',\n setup(build) {\n build.onResolve({ filter: /^@\\/ }, args => {\n return {\n path: path.resolve(__dirname, 'src', args.path.slice(2))\n };\n });\n }\n};\n\nconst buildConfigs = ${JSON.stringify(getBuildConfigs(target), null, 2).replace(\n /\"plugins\": null/g,\n '\"plugins\": [aliasPlugin]'\n )};\n\nasync function build() {\n try {\n execSync('rm -rf dist', { stdio: 'inherit' });\n \n \n for (const config of buildConfigs) {\n console.log(\\`Building \\${config.outfile}...\\`);\n \n if (isWatch) {\n const ctx = await esbuild.context(config);\n await ctx.watch();\n console.log(\\`Watching \\${config.outfile}...\\`);\n } else {\n await esbuild.build(config);\n }\n }\n\n console.log('Generating TypeScript declarations...');\n execSync(\"npx tsc\", {\n stdio: \"inherit\",\n });\n\n if (!isWatch) {\n console.log('Build successful!');\n } else {\n console.log('Initial build complete. Watching for changes...');\n }\n } catch (error) {\n console.error('Build failed:', error.message);\n process.exit(1);\n }\n}\n\nbuild();\n`;\n}\n\nfunction getBuildConfigs(target: \"browser\" | \"node\" | \"both\") {\n const baseConfig = {\n bundle: true,\n sourcemap: true,\n minify: false,\n plugins: null,\n };\n\n switch (target) {\n case \"browser\":\n return [\n {\n ...baseConfig,\n entryPoints: [\"src/index.ts\"],\n outfile: \"dist/index.mjs\",\n platform: \"browser\",\n format: \"esm\",\n target: [\"es2020\"],\n external: [],\n },\n ];\n\n case \"node\":\n return [\n {\n ...baseConfig,\n entryPoints: [\"src/index.ts\"],\n outfile: \"dist/index.mjs\",\n platform: \"node\",\n format: \"esm\",\n target: [\"node18\"],\n packages: \"external\",\n },\n ];\n\n case \"both\":\n return [\n {\n ...baseConfig,\n entryPoints: [\"src/index.browser.ts\"],\n outfile: \"dist/browser/index.mjs\",\n platform: \"browser\",\n format: \"esm\",\n target: [\"es2020\"],\n external: [],\n },\n {\n ...baseConfig,\n entryPoints: [\"src/index.node.ts\"],\n outfile: \"dist/node/index.mjs\",\n platform: \"node\",\n format: \"esm\",\n target: [\"node18\"],\n packages: \"external\",\n },\n ];\n }\n}\n\nfunction genReadMe(name: string, target: \"browser\" | \"node\" | \"both\") {\n return `# ${name}\n\nTypeScript project configured for **${target}** environment(s).\n\n## Features\n\n- Fast builds with esbuild\n- Proper bundling for ${target}\n- Source maps for debugging\n- TypeScript declarations\n- Watch mode for development\n\n## Installation\n\n\\`\\`\\`bash\nnpm install\n\\`\\`\\`\n\n## Development\n\n\\`\\`\\`bash\nnpm run dev\n\\`\\`\\`\n\nWatch mode will automatically rebuild when you change files.\n\n## Build\n\n\\`\\`\\`bash\nnpm run build\n\\`\\`\\`\n\nThis will:\n1. Bundle your code with esbuild\n2. Generate TypeScript declarations\n3. Create source maps\n\n## Clean\n\n\\`\\`\\`bash\nnpm run clean\n\\`\\`\\`\n\n${\n target === \"both\"\n ? `\n## Usage\n\nThis package builds separate bundles for browser and Node.js:\n\n### In Browser\n\\`\\`\\`javascript\nimport { platform } from '${name}';\n\nconsole.log(platform); \n\\`\\`\\`\n\n### In Node.js\n\\`\\`\\`javascript\nimport { platform } from '${name}';\n\nconsole.log(platform); \n\\`\\`\\`\n`\n : target === \"browser\"\n ? `\n## Usage\n\n\\`\\`\\`javascript\nimport { platform } from '${name}';\nconsole.log(platform); \n\\`\\`\\`\n\nInclude \\`dist/index.mjs\\` in your HTML or bundle with your favorite bundler.\n`\n : `\n## Usage\n\n\\`\\`\\`javascript\nimport { platform } from '${name}';\nconsole.log(platform); \n\\`\\`\\`\n`\n}\n\n## Build Output\n\n- \\`dist/*.mjs\\` - Bundled JavaScript (ESM)\n- \\`dist/types/*.d.ts\\` - TypeScript declarations\n- \\`dist/*.map\\` - Source maps\n`;\n}\n\nfunction genGitIgnore() {\n return `node_modules/\ndist/\n.env\n*.log\n.DS_Store\ncoverage/\n.vscode/\n.idea/\n*.tsbuildinfo\n`;\n}\n\nfunction genEnv() {\n return `# Environment variables\n`;\n}\n\nfunction genIndexTs() {\n return `\nexport * from './index.browser.js';\nexport * from './index.node.js';\n`;\n}\n\nfunction genBrowserIndexTs() {\n return `\nexport const platform = 'browser' as const;\n\nexport function getBrowserInfo() {\n if (typeof window !== 'undefined') {\n return {\n userAgent: navigator.userAgent,\n language: navigator.language,\n };\n }\n return null;\n}\n\nconsole.log('Running in browser environment');\n`;\n}\n\nfunction genNodeIndexTs() {\n return `\nimport { platform as osPlatform, arch } from 'os';\n\nexport const platform = 'node' as const;\n\nexport function getNodeInfo() {\n return {\n platform: osPlatform(),\n arch: arch(),\n nodeVersion: process.version,\n };\n}\n\nconsole.log('Running in Node.js environment');\n`;\n}\n", "import fs from \"fs-extra\";\nimport path from \"path\";\nimport prompts from \"prompts\";\nimport yaml from \"js-yaml\";\n\ninterface PackageJson {\n name: string;\n dependencies?: Record<string, string>;\n}\n\ninterface DockerService {\n name: string;\n needsTunnel?: boolean;\n}\n\nexport async function dockerize(env: \"dev\" | \"prod\" = \"prod\") {\n const cwd = process.cwd();\n const packageJsonPath = path.join(cwd, \"package.json\");\n\n if (!fs.existsSync(packageJsonPath)) {\n throw new Error(\"package.json not found. Are you in a Pod project?\");\n }\n\n const packageJson: PackageJson = await fs.readJSON(packageJsonPath);\n const projectName = packageJson.name;\n\n const detectedServices = detectServices(packageJson);\n const selectedServices = await selectServices(detectedServices);\n\n await restructureProject(cwd, projectName);\n await createDockerfile(cwd, projectName);\n\n if (env === \"prod\") {\n await setupProduction(cwd, projectName, selectedServices);\n } else {\n await setupDevelopment(cwd, projectName, selectedServices);\n }\n\n await createDeployfile(cwd, projectName);\n\n await writeEnvVars(cwd, selectedServices, env);\n\n printNextSteps(projectName, env, selectedServices);\n}\n\nfunction detectServices(packageJson: PackageJson): DockerService[] {\n const deps = packageJson.dependencies || {};\n const services: DockerService[] = [];\n\n if (deps.pg || deps.postgres) services.push({ name: \"postgres\" });\n if (deps.mysql || deps.mysql2) services.push({ name: \"mysql\" });\n if (deps.redis || deps.ioredis) services.push({ name: \"redis\" });\n if (deps.mongodb || deps.mongoose) services.push({ name: \"mongodb\" });\n\n return services;\n}\n\nasync function selectServices(\n detected: DockerService[]\n): Promise<DockerService[]> {\n if (detected.length === 0) return [];\n\n const response = await prompts({\n type: \"multiselect\",\n name: \"services\",\n message: \"Select services to include:\",\n choices: detected.map((s) => ({\n title: s.name,\n value: s.name,\n selected: true,\n })),\n });\n\n if (!response.services || response.services.length === 0) return [];\n return detected.filter((s) => response.services.includes(s.name));\n}\n\nasync function restructureProject(cwd: string, projectName: string) {\n const nestedDir = path.join(cwd, projectName);\n\n if (fs.existsSync(nestedDir)) {\n console.log(\"\u26A0\uFE0F Project already restructured, skipping...\");\n return;\n }\n\n await fs.ensureDir(nestedDir);\n\n const items = await fs.readdir(cwd);\n const toMove = items.filter((item) => item !== projectName);\n\n for (const item of toMove) {\n const src = path.join(cwd, item);\n const dest = path.join(nestedDir, item);\n await fs.move(src, dest, { overwrite: true });\n }\n\n const envSrc = path.join(nestedDir, \".env\");\n const envDest = path.join(cwd, \".env\");\n\n if (fs.existsSync(envSrc)) {\n await fs.move(envSrc, envDest, { overwrite: true });\n }\n}\n\nasync function writeEnvVars(\n cwd: string,\n services: DockerService[],\n env: string\n) {\n const envPath = path.join(cwd, \".env\");\n let existingEnv: Record<string, string> = {};\n let existingContent = \"\";\n\n if (fs.existsSync(envPath)) {\n existingContent = await fs.readFile(envPath, \"utf8\");\n existingEnv = parseEnvFile(existingContent);\n }\n\n const newVars: string[] = [];\n\n if (env === \"prod\" && !existingEnv.HOST) {\n newVars.push(\"HOST=example.com\");\n }\n\n for (const service of services) {\n const serviceVars = getEnvVars(service.name);\n for (const varLine of serviceVars) {\n const [key] = varLine.split(\"=\");\n if (!existingEnv[key]) {\n newVars.push(varLine);\n }\n }\n\n if (env === \"dev\" && service.needsTunnel) {\n const remoteHostKey = `${service.name.toUpperCase()}_REMOTE_HOST`;\n const remotePortKey = `${service.name.toUpperCase()}_REMOTE_PORT`;\n\n if (!existingEnv[remoteHostKey]) {\n newVars.push(`${remoteHostKey}=user@remote-server.com`);\n }\n if (!existingEnv[remotePortKey]) {\n newVars.push(`${remotePortKey}=${getDefaultPort(service.name)}`);\n }\n }\n }\n\n if (newVars.length > 0) {\n const separator =\n existingContent && !existingContent.endsWith(\"\\n\") ? \"\\n\" : \"\";\n const newContent =\n existingContent +\n separator +\n (existingContent ? \"\\n\" : \"\") +\n newVars.join(\"\\n\") +\n \"\\n\";\n await fs.writeFile(envPath, newContent);\n console.log(\n `\u2705 Added ${newVars.length} new environment variable(s) to .env`\n );\n } else {\n console.log(\"\u2705 All required environment variables already exist in .env\");\n }\n}\n\nfunction parseEnvFile(content: string): Record<string, string> {\n const env: Record<string, string> = {};\n const lines = content.split(\"\\n\");\n\n for (const line of lines) {\n const trimmed = line.trim();\n\n if (!trimmed || trimmed.startsWith(\"#\")) continue;\n\n const equalIndex = trimmed.indexOf(\"=\");\n if (equalIndex > 0) {\n const key = trimmed.substring(0, equalIndex).trim();\n const value = trimmed.substring(equalIndex + 1).trim();\n env[key] = value;\n }\n }\n\n return env;\n}\n\nasync function createDockerfile(cwd: string, projectName: string) {\n const dockerfilePath = path.join(cwd, projectName, \"Dockerfile\");\n const dockerignorePath = path.join(cwd, projectName, \".dockerignore\");\n\n const dockerfile = `FROM node:18-alpine\n\nWORKDIR /app\n\nCOPY package*.json ./\n\nRUN npm install\n\nCOPY . .\n\nEXPOSE 8080\n\nCMD [\"npm\", \"run\", \"dev\"]\n`;\n\n const dockerignore = `# Dependencies\nnode_modules\nnpm-debug.log\nyarn-error.log\npackage-lock.json\nyarn.lock\n\n# Environment files\n.env\n.env.*\n\n# Git\n.git\n.gitignore\n\n# IDE\n.vscode\n.idea\n*.swp\n*.swo\n*~\n\n# OS\n.DS_Store\nThumbs.db\n\n# Testing\ncoverage\n.nyc_output\n*.test.js\n*.spec.js\n__tests__\n\n# Build files\ndist\npublic\n\n# Logs\nlogs\n*.log\n\n# Documentation\nREADME.md\ndocs\n*.md\n\n# Docker\nDockerfile\n.dockerignore\ndocker-compose*.yml\n\n# Misc\n.cache\ntmp\ntemp\n`;\n\n await fs.writeFile(dockerfilePath, dockerfile);\n await fs.writeFile(dockerignorePath, dockerignore);\n}\n\nasync function createDeployfile(cwd: string, projectName: string) {\n const deployFile = `name: ${projectName}\nversion: 1.0.0\n\ndeploy_path: &deploy_path \"/home/ubuntu/${projectName}\"\nbackup_path: &backup_path \"/home/ubuntu/backups\"\nuser: &user \"ubuntu\"\n\nshared_operations:\n install_docker: &install_docker\n type: ensure\n ensure:\n docker:\n version: \"28.5.2\"\n addUserToGroup: true\n\n stop_containers: &stop_containers\n type: action\n action:\n command: docker compose down --remove-orphans 2>/dev/null || true\n\n pull_images: &pull_images\n type: action\n action:\n command: docker compose pull --quiet\n\n build_and_start: &build_and_start\n type: action\n action:\n command: docker compose up -d --build --remove-orphans --wait\n\n cleanup_docker: &cleanup_docker\n type: action\n action:\n command: docker system prune -f --volumes --filter \"until=168h\"\n\ntargets:\n localhost:\n type: local\n operations:\n #- name: \"Environment Setup\"\n # <<: *install_docker\n - name: \"Refresh Stack\"\n <<: *build_and_start\n\n ec2:\n type: ssh\n host: ec2-xx-xx-xxx-xxx.xx-xxxx-x.compute.amazonaws.com\n user: *user\n keyPath: ~/xxxx.pem\n port: 22\n deployPath: *deploy_path\n\n operations:\n - name: \"Provision Directories and Swap\"\n type: ensure\n ensure:\n swap:\n size: 4G\n\n - name: \"Install Docker\"\n <<: *install_docker\n\n - name: \"Create application directories\"\n type: ensure\n ensure:\n directory:\n path: *deploy_path\n owner: *user\n\n - name: \"Create backup directory\"\n type: ensure\n ensure:\n directory:\n path: *backup_path\n owner: *user\n\n - name: \"Sync Source Files\"\n type: action\n action:\n rsync:\n source: ./\n destination: *deploy_path\n delete: true\n exclude:\n - .git/\n - node_modules/\n - .env.local\n - \"*.log\"\n\n - name: \"Navigate to Deploy Path\"\n type: action\n action:\n command: cd \\${deploy_path}\n\n - name: \"Create Pre-deployment Backup\"\n type: action\n action:\n command: tar -czf \\${backup_path}/backup-$(date +%Y%m%d-%H%M%S).tar.gz .\n\n - name: \"Pull Latest Images\"\n <<: *pull_images\n\n - name: \"Stop Existing Stack\"\n <<: *stop_containers\n\n - name: \"Build and Launch\"\n <<: *build_and_start\n\n - name: \"Maintenance: Cleanup\"\n type: action\n action:\n command: |\n find *backup_path -name \"backup-*.tar.gz\" -mtime +7 -delete\n docker image prune -af --filter \"until=24h\"\n`;\n\n const deployFilePath = path.join(cwd, \"pod.deploy.yml\");\n\n await fs.writeFile(deployFilePath, deployFile);\n}\n\nasync function setupProduction(\n cwd: string,\n projectName: string,\n services: DockerService[]\n) {\n const compose: any = {\n services: {\n traefik: {\n image: \"traefik:v2.10\",\n command: [\n \"--api.insecure=true\",\n \"--providers.docker=true\",\n \"--providers.docker.exposedbydefault=false\",\n \"--entrypoints.web.address=:80\",\n \"--entrypoints.websecure.address=:443\",\n \"--certificatesresolvers.myresolver.acme.tlschallenge=true\",\n \"--certificatesresolvers.myresolver.acme.email=admin@example.com\",\n \"--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json\",\n ],\n labels: [\n \"traefik.enable=true\",\n \"traefik.http.routers.http-catchall.rule=HostRegexp(`{host:.+}`)\",\n \"traefik.http.routers.http-catchall.entrypoints=web\",\n \"traefik.http.routers.http-catchall.middlewares=redirect-to-https\",\n \"traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https\",\n \"traefik.http.routers.dashboard.rule=Host(`traefik.${HOST}`)\",\n \"traefik.http.routers.dashboard.entrypoints=websecure\",\n \"traefik.http.routers.dashboard.tls.certresolver=myresolver\",\n \"traefik.http.routers.dashboard.service=api@internal\",\n ],\n ports: [\"80:80\", \"443:443\"],\n volumes: [\n \"/var/run/docker.sock:/var/run/docker.sock:ro\",\n \"./letsencrypt:/letsencrypt\",\n ],\n networks: [\"web\"],\n env_file: [\".env\"],\n },\n [projectName]: {\n build: {\n context: `./${projectName}`,\n dockerfile: \"Dockerfile\",\n },\n labels: [\n \"traefik.enable=true\",\n \"traefik.http.routers.app.rule=Host(`app.${HOST}`)\",\n \"traefik.http.routers.app.entrypoints=websecure\",\n \"traefik.http.routers.app.tls.certresolver=myresolver\",\n \"traefik.http.services.app.loadbalancer.server.port=8080\",\n ],\n env_file: [\".env\"],\n networks: [\"web\"],\n volumes: [`./${projectName}:/app`, `/app/node_modules`],\n command: \"npm run dev\",\n depends_on: [],\n },\n },\n networks: {\n web: {\n driver: \"bridge\",\n },\n },\n volumes: {},\n };\n\n for (const service of services) {\n const config = getServiceConfig(service.name);\n compose.services[service.name] = config.service;\n if (config.volume) {\n compose.volumes[config.volume.name] = {};\n }\n compose.services[projectName].depends_on.push(service.name);\n }\n\n const composePath = path.join(cwd, \"docker-compose.yml\");\n await fs.writeFile(\n composePath,\n yaml.dump(compose, { indent: 2, lineWidth: -1 })\n );\n}\n\nasync function setupDevelopment(\n cwd: string,\n projectName: string,\n services: DockerService[]\n) {\n const existingCompose = path.join(cwd, \"docker-compose.yml\");\n\n let existingServices: DockerService[] = [];\n\n if (fs.existsSync(existingCompose)) {\n const content = await fs.readFile(existingCompose, \"utf8\");\n const existing: any = yaml.load(content);\n if (existing.services) {\n existingServices = Object.keys(existing.services)\n .filter((s) => [\"postgres\", \"mysql\", \"redis\", \"mongodb\"].includes(s))\n .map((name) => ({ name }));\n }\n }\n\n const servicesToTunnel: DockerService[] = [];\n\n if (existingServices.length > 0) {\n const { tunnel } = await prompts({\n type: \"confirm\",\n name: \"tunnel\",\n message: \"Tunnel to remote database services?\",\n initial: false,\n });\n\n if (tunnel) {\n const { selected } = await prompts({\n type: \"multiselect\",\n name: \"selected\",\n message: \"Select services to tunnel:\",\n choices: existingServices.map((s) => ({\n title: s.name,\n value: s.name,\n })),\n });\n\n if (selected && selected.length > 0) {\n servicesToTunnel.push(\n ...existingServices\n .filter((s) => selected.includes(s.name))\n .map((s) => ({ ...s, needsTunnel: true }))\n );\n }\n }\n }\n\n for (const service of servicesToTunnel) {\n await createTunnelService(cwd, service.name);\n }\n\n const compose: any = {\n services: {\n [projectName]: {\n build: {\n context: `./${projectName}`,\n dockerfile: \"Dockerfile\",\n },\n ports: [\"8080:8080\"],\n env_file: [\".env\"],\n volumes: [`./${projectName}:/app`, `/app/node_modules`],\n command: \"npm run dev\",\n depends_on: [],\n },\n },\n networks: {\n default: {\n driver: \"bridge\",\n },\n },\n };\n\n for (const service of servicesToTunnel) {\n const tunnelName = `${service.name}-tunnel`;\n compose.services[tunnelName] = {\n build: `./${tunnelName}`,\n environment: [\n `REMOTE_HOST=\\${${service.name.toUpperCase()}_REMOTE_HOST}`,\n `REMOTE_PORT=\\${${service.name.toUpperCase()}_REMOTE_PORT:-${getDefaultPort(\n service.name\n )}}`,\n `LOCAL_PORT=${getDefaultPort(service.name)}`,\n ],\n volumes: [`./${service.name}.pem:/ssh/${service.name}.pem:ro`],\n };\n compose.services[projectName].depends_on.push(tunnelName);\n }\n\n const devComposePath = path.join(cwd, \"docker-compose.dev.yml\");\n await fs.writeFile(\n devComposePath,\n yaml.dump(compose, { indent: 2, lineWidth: -1 })\n );\n}\n\nasync function createTunnelService(projectDir: string, serviceName: string) {\n const tunnelDir = path.join(projectDir, `${serviceName}-tunnel`);\n await fs.ensureDir(tunnelDir);\n\n const dockerfile = `FROM alpine:latest\n\nRUN apk add --no-cache openssh-client\n\nCOPY tunnel.sh /tunnel.sh\nRUN chmod +x /tunnel.sh\n\nCMD [\"/tunnel.sh\"]\n`;\n\n const tunnelScript = `#!/bin/sh\n\nSSH_KEY=\"/ssh/${serviceName}.pem\"\nREMOTE_HOST=\\${REMOTE_HOST}\nREMOTE_PORT=\\${REMOTE_PORT:-${getDefaultPort(serviceName)}}\nLOCAL_PORT=\\${LOCAL_PORT:-${getDefaultPort(serviceName)}}\n\nchmod 600 $SSH_KEY\n\necho \"Starting SSH tunnel for ${serviceName}...\"\necho \"Remote: $REMOTE_HOST:$REMOTE_PORT -> Local: $LOCAL_PORT\"\n\nssh -i $SSH_KEY \\\\\n -N -L 0.0.0.0:$LOCAL_PORT:localhost:$REMOTE_PORT \\\\\n -o StrictHostKeyChecking=no \\\\\n -o ServerAliveInterval=60 \\\\\n $REMOTE_HOST\n`;\n\n await fs.writeFile(path.join(tunnelDir, \"Dockerfile\"), dockerfile);\n await fs.writeFile(path.join(tunnelDir, \"tunnel.sh\"), tunnelScript);\n}\n\nfunction getServiceConfig(serviceName: string) {\n const configs: Record<string, any> = {\n postgres: {\n service: {\n image: \"postgres:15-alpine\",\n environment: [\n \"POSTGRES_USER=${DB_USER}\",\n \"POSTGRES_PASSWORD=${DB_PASSWORD}\",\n \"POSTGRES_DB=${DB_NAME}\",\n ],\n volumes: [\"postgres_data:/var/lib/postgresql/data\"],\n networks: [\"web\"],\n },\n volume: { name: \"postgres_data\" },\n },\n mysql: {\n service: {\n image: \"mysql:8\",\n environment: [\n \"MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}\",\n \"MYSQL_DATABASE=${DB_NAME}\",\n \"MYSQL_USER=${DB_USER}\",\n \"MYSQL_PASSWORD=${DB_PASSWORD}\",\n ],\n volumes: [\"mysql_data:/var/lib/mysql\"],\n networks: [\"web\"],\n },\n volume: { name: \"mysql_data\" },\n },\n redis: {\n service: {\n image: \"redis:7-alpine\",\n volumes: [\"redis_data:/data\"],\n networks: [\"web\"],\n },\n volume: { name: \"redis_data\" },\n },\n mongodb: {\n service: {\n image: \"mongo:6\",\n environment: [\n \"MONGO_INITDB_ROOT_USERNAME=${DB_USER}\",\n \"MONGO_INITDB_ROOT_PASSWORD=${DB_PASSWORD}\",\n ],\n volumes: [\"mongo_data:/data/db\"],\n networks: [\"web\"],\n },\n volume: { name: \"mongo_data\" },\n },\n };\n\n return configs[serviceName];\n}\n\nfunction getEnvVars(serviceName: string): string[] {\n const vars: Record<string, string[]> = {\n postgres: [\n \"DB_HOST=postgres\",\n \"DB_PORT=5432\",\n \"DB_USER=myuser\",\n \"DB_PASSWORD=mypassword\",\n \"DB_NAME=mydb\",\n ],\n mysql: [\n \"DB_HOST=mysql\",\n \"DB_PORT=3306\",\n \"DB_USER=myuser\",\n \"DB_PASSWORD=mypassword\",\n \"DB_NAME=mydb\",\n \"DB_ROOT_PASSWORD=rootpassword\",\n ],\n redis: [\"REDIS_HOST=redis\", \"REDIS_PORT=6379\"],\n mongodb: [\n \"MONGO_HOST=mongodb\",\n \"MONGO_PORT=27017\",\n \"MONGO_USER=myuser\",\n \"MONGO_PASSWORD=mypassword\",\n ],\n };\n\n return vars[serviceName] || [];\n}\n\nfunction getDefaultPort(service: string): number {\n const ports: Record<string, number> = {\n postgres: 5432,\n mysql: 3306,\n redis: 6379,\n mongodb: 27017,\n };\n return ports[service] || 3000;\n}\n\nfunction printNextSteps(\n projectName: string,\n env: string,\n services: DockerService[]\n) {\n console.log(`\\n\u2705 Done! Next steps:\\n`);\n\n if (env === \"prod\") {\n console.log(` # Review and edit .env with your settings`);\n console.log(` docker-compose up -d`);\n console.log(` # Access at https://app.\\${HOST}\\n`);\n } else {\n console.log(` # Review and edit .env with your settings`);\n if (services.some((s) => s.needsTunnel)) {\n console.log(` # Add SSH keys: {service}.pem`);\n }\n console.log(` docker-compose -f docker-compose.dev.yml up -d\\n`);\n }\n}\n", "import fs from \"fs-extra\";\nimport yaml from \"js-yaml\";\nimport path from \"path\";\nimport os from \"os\";\nimport { NodeSSH } from \"node-ssh\";\nimport chalk from \"chalk\";\nimport { exec } from \"child_process\";\nimport { promisify } from \"util\";\n\nconst execAsync = promisify(exec);\n\ninterface PodConfig {\n name: string;\n version: string;\n targets: Record<string, TargetConfig>;\n}\n\ninterface TargetConfig {\n type?: \"ssh\" | \"local\";\n host?: string;\n user?: string;\n keyPath?: string;\n port?: number;\n deployPath?: string;\n operations: Operation[];\n}\n\ntype Operation = EnsureOperation | ActionOperation | VerifyOperation;\n\ninterface EnsureOperation {\n name: string;\n type: \"ensure\";\n ensure: {\n swap?: { size: string };\n docker?: { version: string; addUserToGroup?: boolean };\n directory?: { path: string; owner?: string };\n };\n}\n\ninterface ActionOperation {\n name: string;\n type: \"action\";\n when?: \"always\" | \"once\" | \"never\";\n action: {\n rsync?: {\n source: string;\n destination: string;\n exclude?: string[];\n };\n command?: string;\n };\n}\n\ninterface VerifyOperation {\n name: string;\n type: \"verify\";\n verify: {\n http?: { url: string; timeout?: string };\n command?: string;\n };\n}\n\ninterface LockFile {\n deployment_version?: string;\n ensures: Record<string, { version: string; config: any }>;\n once_actions: string[];\n}\n\nfunction interpolate(\n str: string | undefined,\n context: Record<string, any>\n): string {\n if (!str) return \"\";\n return str.replace(/\\${([^}]+)}/g, (match, key) => {\n return context[key] !== undefined ? String(context[key]) : match;\n });\n}\n\nfunction deepInterpolate(obj: any, context: Record<string, any>): any {\n if (typeof obj === \"string\") {\n return interpolate(obj, context);\n }\n if (Array.isArray(obj)) {\n return obj.map((item) => deepInterpolate(item, context));\n }\n if (obj && typeof obj === \"object\") {\n const result: any = {};\n for (const [key, value] of Object.entries(obj)) {\n result[key] = deepInterpolate(value, context);\n }\n return result;\n }\n return obj;\n}\n\nfunction expandTilde(fp: string): string {\n if (!fp || typeof fp !== \"string\") return fp;\n return fp.startsWith(\"~/\") ? path.join(os.homedir(), fp.slice(2)) : fp;\n}\n\nfunction resolveLocalPaths(obj: any, cwd: string): any {\n if (Array.isArray(obj)) {\n return obj.map((item) => resolveLocalPaths(item, cwd));\n }\n if (obj && typeof obj === \"object\") {\n const result: any = {};\n for (const [key, value] of Object.entries(obj)) {\n const isLocalPathKey = key === \"keyPath\" || key === \"source\";\n if (isLocalPathKey && typeof value === \"string\") {\n const expanded = expandTilde(value);\n result[key] = path.isAbsolute(expanded)\n ? expanded\n : path.resolve(cwd, expanded);\n } else {\n result[key] = resolveLocalPaths(value, cwd);\n }\n }\n return result;\n }\n return obj;\n}\n\nconst SCRIPTS = {\n SWAP: (size: string) => `#!/bin/bash\nset -euo pipefail\n\n# Check if swap file exists\nif [ -f /swapfile ]; then\n CURRENT_SIZE=$(stat -c%s /swapfile 2>/dev/null || echo \"0\")\n CURRENT_SIZE_GB=$((CURRENT_SIZE / 1024 / 1024 / 1024))\n REQ_SIZE=$(echo \"${size}\" | tr -d 'G' | tr -d 'g')\n \n if [ \"$CURRENT_SIZE_GB\" -ge \"$REQ_SIZE\" ]; then\n echo \"LOG: Swap of sufficient size exists. Skipping.\"\n exit 0\n fi\n \n # Remove old swap if size doesn't match\n sudo swapoff /swapfile || true\n sudo rm /swapfile\nfi\n\necho \"LOG: Creating ${size} swap file...\"\nsudo fallocate -l ${size} /swapfile || \\\\\n sudo dd if=/dev/zero of=/swapfile bs=1M count=$(($(echo ${size} | tr -d 'G' | tr -d 'g') * 1024))\n\nsudo chmod 600 /swapfile\nsudo mkswap /swapfile\nsudo swapon /swapfile\n\n# Add to fstab if not already there\ngrep -q \"/swapfile\" /etc/fstab || echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab\n\necho \"LOG: Swap file configured successfully\"\n`,\n\n DOCKER: (version: string, user: string, addToGroup: boolean) => `#!/bin/bash\nset -euo pipefail\n\necho \"LOG: Target Docker version: ${version}\"\n\n# Check current Docker installation\nINSTALLED_VER=$(docker --version 2>/dev/null | awk '{print $3}' | tr -d ',' || echo \"none\")\necho \"LOG: Currently installed: $INSTALLED_VER\"\n\n# Determine if we need to install/reinstall\nNEEDS_INSTALL=false\n\nif [ \"$INSTALLED_VER\" = \"none\" ]; then\n echo \"LOG: Docker not installed\"\n NEEDS_INSTALL=true\nelif [ \"${version}\" = \"latest\" ]; then\n echo \"LOG: Latest version requested\"\n NEEDS_INSTALL=true\nelif [[ \"$INSTALLED_VER\" != *\"${version}\"* ]]; then\n echo \"LOG: Version mismatch detected (need ${version}, have $INSTALLED_VER)\"\n echo \"LOG: Uninstalling current Docker...\"\n \n # Stop Docker services\n sudo systemctl stop docker.socket 2>/dev/null || true\n sudo systemctl stop docker 2>/dev/null || true\n sudo systemctl stop containerd 2>/dev/null || true\n \n # Remove Docker packages (data is preserved)\n sudo apt-get purge -y \\\\\n docker-ce \\\\\n docker-ce-cli \\\\\n containerd.io \\\\\n docker-buildx-plugin \\\\\n docker-compose-plugin \\\\\n docker-ce-rootless-extras \\\\\n 2>/dev/null || true\n \n sudo apt-get purge -y docker docker-engine docker.io runc 2>/dev/null || true\n sudo apt-get autoremove -y\n \n echo \"LOG: Uninstall complete\"\n NEEDS_INSTALL=true\nelse\n echo \"LOG: Correct version already installed\"\nfi\n\nif [ \"$NEEDS_INSTALL\" = true ]; then\n echo \"LOG: Installing Docker ${version}...\"\n \n # Update and install prerequisites\n sudo apt-get update -y\n sudo apt-get install -y ca-certificates curl gnupg lsb-release\n \n # Add Docker GPG key\n sudo install -m 0755 -d /etc/apt/keyrings\n curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \\\\\n sudo gpg --dearmor --batch --yes -o /etc/apt/keyrings/docker.gpg\n sudo chmod a+r /etc/apt/keyrings/docker.gpg\n \n # Add Docker repository\n ARCH=\"$(dpkg --print-architecture)\"\n RELEASE=\"$(lsb_release -cs)\"\n echo \"deb [arch=\\${ARCH} signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \\${RELEASE} stable\" | \\\\\n sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n \n sudo apt-get update -y\n \n # Install Docker\n if [ \"${version}\" = \"latest\" ]; then\n echo \"LOG: Installing latest Docker version\"\n sudo apt-get install -y \\\\\n docker-ce \\\\\n docker-ce-cli \\\\\n containerd.io \\\\\n docker-buildx-plugin \\\\\n docker-compose-plugin\n else\n echo \"LOG: Finding version ${version}...\"\n VERSION_STRING=$(apt-cache madison docker-ce | grep \"${version}\" | head -1 | awk '{print $3}')\n \n if [ -z \"$VERSION_STRING\" ]; then\n echo \"LOG: ERROR - Version ${version} not found!\"\n echo \"LOG: Available versions:\"\n apt-cache madison docker-ce | head -10\n exit 1\n fi\n \n echo \"LOG: Installing Docker CE version: $VERSION_STRING\"\n sudo apt-get install -y \\\\\n docker-ce=$VERSION_STRING \\\\\n docker-ce-cli=$VERSION_STRING \\\\\n containerd.io \\\\\n docker-buildx-plugin \\\\\n docker-compose-plugin\n fi\n \n # Enable and start Docker\n sudo systemctl enable docker\n sudo systemctl start docker\n \n FINAL_VER=$(docker --version | awk '{print $3}' | tr -d ',')\n echo \"LOG: Docker installed successfully - $FINAL_VER\"\nfi\n\n# Configure docker group\nif [ \"${addToGroup}\" = \"true\" ]; then\n if ! getent group docker >/dev/null 2>&1; then\n sudo groupadd docker\n echo \"LOG: Created docker group\"\n fi\n \n if groups ${user} | grep -q '\\\\bdocker\\\\b'; then\n echo \"LOG: User ${user} already in docker group\"\n else\n sudo usermod -aG docker ${user}\n echo \"LOG: Added ${user} to docker group (logout required)\"\n fi\nfi\n`,\n};\n\ninterface ExecutionStrategy {\n connect(): Promise<void>;\n disconnect(): Promise<void>;\n\n runCommand(\n cmd: string,\n silent?: boolean\n ): Promise<{ stdout: string; stderr: string; code: number | null }>;\n runScript(\n name: string,\n content: string,\n context: Record<string, any>\n ): Promise<void>;\n\n uploadContent(remotePath: string, content: string): Promise<void>;\n readJson<T>(remotePath: string): Promise<T | null>;\n\n syncDirectory(\n source: string,\n destination: string,\n exclude?: string[]\n ): Promise<void>;\n}\n\nclass SSHStrategy implements ExecutionStrategy {\n private ssh: NodeSSH;\n private target: TargetConfig;\n private currentDir: string;\n\n constructor(target: TargetConfig) {\n this.ssh = new NodeSSH();\n this.target = target;\n this.currentDir = target.deployPath || \".\";\n }\n\n async connect(): Promise<void> {\n await this.ssh.connect({\n host: this.target.host!,\n username: this.target.user!,\n privateKeyPath: this.target.keyPath!,\n port: this.target.port || 22,\n });\n }\n\n async disconnect(): Promise<void> {\n this.ssh.dispose();\n }\n\n async runCommand(\n cmd: string,\n silent = false\n ): Promise<{ stdout: string; stderr: string; code: number | null }> {\n const trimmed = cmd.trim();\n\n if (trimmed.startsWith(\"cd \")) {\n const newPath = trimmed.replace(\"cd \", \"\").trim();\n this.currentDir = path.posix.resolve(this.currentDir, newPath);\n if (!silent) console.log(chalk.gray(` [SSH Path: ${this.currentDir}]`));\n return { stdout: \"\", stderr: \"\", code: 0 };\n }\n\n const result = await this.ssh.execCommand(trimmed, {\n cwd: this.currentDir,\n });\n\n if (result.code !== 0 && result.code !== null) {\n throw new Error(`Execution failed: ${trimmed}\\nSTDERR: ${result.stderr}`);\n }\n\n if (!silent && result.stdout) {\n result.stdout\n .split(\"\\n\")\n .filter((l) => l.startsWith(\"LOG:\"))\n .forEach((l) => console.log(chalk.gray(` ${l.replace(\"LOG: \", \"\")}`)));\n }\n\n return result;\n }\n\n async runScript(\n name: string,\n content: string,\n context: Record<string, any>\n ): Promise<void> {\n const interpolated = interpolate(content, context);\n const remotePath = `/tmp/pod_script_${name}_${Date.now()}.sh`;\n\n await this.uploadContent(remotePath, interpolated);\n\n try {\n await this.ssh.execCommand(`chmod +x ${remotePath}`);\n await this.runCommand(remotePath);\n } finally {\n await this.ssh.execCommand(`rm -f ${remotePath}`);\n }\n }\n\n async uploadContent(remotePath: string, content: string): Promise<void> {\n const localTmp = path.join(os.tmpdir(), `pod_tmp_${Date.now()}`);\n fs.writeFileSync(localTmp, content);\n\n try {\n await this.ssh.execCommand(`mkdir -p $(dirname ${remotePath})`);\n await this.ssh.putFile(localTmp, remotePath);\n } finally {\n if (fs.existsSync(localTmp)) fs.unlinkSync(localTmp);\n }\n }\n\n async readJson<T>(remotePath: string): Promise<T | null> {\n const res = await this.ssh.execCommand(`cat ${remotePath}`);\n try {\n return res.code === 0 ? JSON.parse(res.stdout) : null;\n } catch {\n return null;\n }\n }\n\n async syncDirectory(\n source: string,\n destination: string,\n exclude?: string[]\n ): Promise<void> {\n const putOptions: any = { recursive: true, concurrency: 10 };\n\n if (exclude?.length) {\n putOptions.validate = (filePath: string) => {\n const relative = path.relative(source, filePath);\n if (relative === \"\") return true;\n\n return !exclude.some((pattern) => {\n if (pattern.endsWith(\"/\")) {\n const dir = pattern.slice(0, -1);\n const segment = \"/\" + dir + \"/\";\n return (\n relative === dir ||\n relative.startsWith(dir + \"/\") ||\n relative.includes(segment)\n );\n }\n\n if (pattern.startsWith(\"*.\")) {\n return relative.endsWith(pattern.slice(1));\n }\n\n return relative === pattern;\n });\n };\n }\n\n console.log(chalk.gray(` Syncing ${source} \u2192 ${destination}`));\n await this.ssh.putDirectory(source, destination, putOptions);\n }\n}\n\nclass LocalStrategy implements ExecutionStrategy {\n private target: TargetConfig;\n private currentDir: string;\n\n constructor(target: TargetConfig, cwd: string) {\n this.target = target;\n this.currentDir = cwd;\n }\n\n async connect(): Promise<void> {}\n async disconnect(): Promise<void> {}\n\n async runCommand(\n cmd: string,\n silent = false\n ): Promise<{ stdout: string; stderr: string; code: number | null }> {\n const trimmed = cmd.trim();\n\n if (trimmed.startsWith(\"cd \")) {\n const newPath = trimmed.replace(\"cd \", \"\").trim();\n this.currentDir = path.resolve(this.currentDir, newPath);\n if (!silent) console.log(chalk.gray(` [Local Path: ${this.currentDir}]`));\n return { stdout: \"\", stderr: \"\", code: 0 };\n }\n\n try {\n const { stdout, stderr } = await execAsync(trimmed, {\n cwd: this.currentDir,\n });\n\n if (!silent && stdout) {\n stdout\n .split(\"\\n\")\n .filter((l) => l.startsWith(\"LOG:\"))\n .forEach((l) =>\n console.log(chalk.gray(` ${l.replace(\"LOG: \", \"\")}`))\n );\n }\n\n return { stdout, stderr, code: 0 };\n } catch (err: any) {\n throw new Error(\n `Execution failed: ${trimmed}\\nSTDERR: ${err.stderr || err.message}`\n );\n }\n }\n\n async runScript(\n name: string,\n content: string,\n context: Record<string, any>\n ): Promise<void> {\n const interpolated = interpolate(content, context);\n const scriptPath = path.join(\n os.tmpdir(),\n `pod_script_${name}_${Date.now()}.sh`\n );\n\n fs.writeFileSync(scriptPath, interpolated);\n fs.chmodSync(scriptPath, \"755\");\n\n try {\n await this.runCommand(scriptPath);\n } finally {\n if (fs.existsSync(scriptPath)) fs.unlinkSync(scriptPath);\n }\n }\n\n async uploadContent(localPath: string, content: string): Promise<void> {\n const dir = path.dirname(localPath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n fs.writeFileSync(localPath, content);\n }\n\n async readJson<T>(localPath: string): Promise<T | null> {\n try {\n if (!fs.existsSync(localPath)) return null;\n const content = fs.readFileSync(localPath, \"utf8\");\n return JSON.parse(content);\n } catch {\n return null;\n }\n }\n\n async syncDirectory(\n source: string,\n destination: string,\n exclude?: string[]\n ): Promise<void> {\n console.log(chalk.gray(` Copying ${source} \u2192 ${destination}`));\n\n if (!fs.existsSync(destination)) {\n fs.mkdirSync(destination, { recursive: true });\n }\n\n const shouldExclude = (relativePath: string): boolean => {\n if (!exclude?.length) return false;\n\n return exclude.some((pattern) => {\n if (pattern.endsWith(\"/\")) {\n const dir = pattern.slice(0, -1);\n const segment = \"/\" + dir + \"/\";\n return (\n relativePath === dir ||\n relativePath.startsWith(dir + \"/\") ||\n relativePath.includes(segment)\n );\n }\n\n if (pattern.startsWith(\"*.\")) {\n return relativePath.endsWith(pattern.slice(1));\n }\n\n return relativePath === pattern;\n });\n };\n\n const copyRecursive = (src: string, dest: string) => {\n const entries = fs.readdirSync(src, { withFileTypes: true });\n\n for (const entry of entries) {\n const srcPath = path.join(src, entry.name);\n const destPath = path.join(dest, entry.name);\n const relativePath = path.relative(source, srcPath);\n\n if (shouldExclude(relativePath)) continue;\n\n if (entry.isDirectory()) {\n if (!fs.existsSync(destPath)) {\n fs.mkdirSync(destPath, { recursive: true });\n }\n copyRecursive(srcPath, destPath);\n } else {\n fs.copyFileSync(srcPath, destPath);\n }\n }\n };\n\n copyRecursive(source, destination);\n }\n}\n\nclass StrategyFactory {\n static create(target: TargetConfig, cwd: string): ExecutionStrategy {\n const targetType = target.type || (target.host ? \"ssh\" : \"local\");\n\n switch (targetType) {\n case \"ssh\":\n return new SSHStrategy(target);\n case \"local\":\n return new LocalStrategy(target, cwd);\n default:\n throw new Error(`Unknown target type: ${targetType}`);\n }\n }\n}\n\nclass OperationHandler {\n constructor(\n private strategy: ExecutionStrategy,\n private target: TargetConfig,\n private lock: LockFile,\n private lockPath: string\n ) {}\n\n async handleEnsure(\n op: EnsureOperation,\n options?: { forceEnsure?: boolean }\n ): Promise<void> {\n if (!op.ensure) {\n throw new Error(`Ensure operation \"${op.name}\" missing ensure config`);\n }\n\n if (op.ensure.swap) {\n await this.ensureSwap(op, options);\n }\n\n if (op.ensure.docker) {\n await this.ensureDocker(op, options);\n }\n\n if (op.ensure.directory) {\n await this.ensureDirectory(op, options);\n }\n }\n\n private async ensureSwap(\n op: EnsureOperation,\n options?: { forceEnsure?: boolean }\n ): Promise<void> {\n const key = \"swap\";\n const locked = this.lock.ensures[key];\n const currentConfig = op.ensure.swap!;\n const configChanged =\n JSON.stringify(locked?.config) !== JSON.stringify(currentConfig);\n\n if (\n options?.forceEnsure ||\n !locked ||\n locked.version !== currentConfig.size ||\n configChanged\n ) {\n console.log(chalk.yellow(`\u2192 Ensuring: ${op.name}`));\n const script = SCRIPTS.SWAP(currentConfig.size);\n await this.strategy.runScript(key, script, this.target);\n this.lock.ensures[key] = {\n version: currentConfig.size,\n config: currentConfig,\n };\n await this.saveLock();\n } else {\n console.log(chalk.gray(`\u2713 ${op.name} (already satisfied)`));\n }\n }\n\n private async ensureDocker(\n op: EnsureOperation,\n options?: { forceEnsure?: boolean }\n ): Promise<void> {\n const key = \"docker\";\n const locked = this.lock.ensures[key];\n const currentConfig = op.ensure.docker!;\n const configChanged =\n JSON.stringify(locked?.config) !== JSON.stringify(currentConfig);\n\n if (\n options?.forceEnsure ||\n !locked ||\n locked.version !== currentConfig.version ||\n configChanged\n ) {\n console.log(chalk.yellow(`\u2192 Ensuring: ${op.name}`));\n const script = SCRIPTS.DOCKER(\n currentConfig.version,\n this.target.user || os.userInfo().username,\n !!currentConfig.addUserToGroup\n );\n await this.strategy.runScript(key, script, this.target);\n this.lock.ensures[key] = {\n version: currentConfig.version,\n config: currentConfig,\n };\n await this.saveLock();\n } else {\n console.log(chalk.gray(`\u2713 ${op.name} (already satisfied)`));\n }\n }\n\n private async ensureDirectory(\n op: EnsureOperation,\n options?: { forceEnsure?: boolean }\n ): Promise<void> {\n const key = `directory_${op.ensure.directory!.path}`;\n const locked = this.lock.ensures[key];\n const currentConfig = op.ensure.directory!;\n const configChanged =\n JSON.stringify(locked?.config) !== JSON.stringify(currentConfig);\n\n if (options?.forceEnsure || !locked || configChanged) {\n console.log(chalk.yellow(`\u2192 Ensuring: ${op.name}`));\n const dirPath = interpolate(currentConfig.path, this.target);\n const owner = currentConfig.owner\n ? interpolate(currentConfig.owner, this.target)\n : this.target.user || os.userInfo().username;\n\n await this.strategy.runCommand(`mkdir -p ${dirPath}`, true);\n\n if (this.target.user) {\n await this.strategy.runCommand(\n `sudo chown -R ${owner}:${owner} ${dirPath}`,\n true\n );\n }\n\n this.lock.ensures[key] = {\n version: dirPath,\n config: currentConfig,\n };\n await this.saveLock();\n } else {\n console.log(chalk.gray(`\u2713 ${op.name} (already satisfied)`));\n }\n }\n\n async handleAction(op: ActionOperation): Promise<void> {\n if (!op.action) {\n throw new Error(`Action operation \"${op.name}\" missing action config`);\n }\n\n const when = op.when || \"always\";\n\n if (when === \"never\") {\n console.log(chalk.gray(`\u2298 ${op.name} (disabled)`));\n return;\n }\n\n const actionId = `action_${op.name}`;\n\n if (when === \"once\" && this.lock.once_actions.includes(actionId)) {\n console.log(chalk.gray(`\u2713 ${op.name} (already completed)`));\n return;\n }\n\n console.log(chalk.cyan(`\u2192 Running: ${op.name}`));\n\n if (op.action.rsync) {\n const src = op.action.rsync.source;\n const dest = interpolate(op.action.rsync.destination || \".\", this.target);\n await this.strategy.syncDirectory(src, dest, op.action.rsync.exclude);\n }\n\n if (op.action.command) {\n const cmd = interpolate(op.action.command, this.target);\n await this.strategy.runCommand(cmd);\n }\n\n if (when === \"once\") {\n this.lock.once_actions.push(actionId);\n await this.saveLock();\n }\n }\n\n async handleVerify(op: VerifyOperation): Promise<void> {\n if (!op.verify) {\n throw new Error(`Verify operation \"${op.name}\" missing verify config`);\n }\n\n console.log(chalk.cyan(`\u2192 Verifying: ${op.name}`));\n\n if (op.verify.http) {\n const url = interpolate(op.verify.http.url, this.target);\n const timeout = op.verify.http.timeout || \"30s\";\n await this.strategy.runCommand(\n `curl -f --max-time ${timeout} ${url}`,\n true\n );\n }\n\n if (op.verify.command) {\n const cmd = interpolate(op.verify.command, this.target);\n await this.strategy.runCommand(cmd, true);\n }\n }\n\n private async saveLock(): Promise<void> {\n await this.strategy.uploadContent(\n this.lockPath,\n JSON.stringify(this.lock, null, 2)\n );\n }\n}\n\nexport async function deploy(\n targetName: string,\n options?: { forceEnsure?: boolean }\n) {\n const cwd = process.cwd();\n const rawConfig = yaml.load(\n fs.readFileSync(path.join(cwd, \"pod.deploy.yml\"), \"utf8\"),\n { schema: yaml.DEFAULT_SCHEMA }\n ) as any;\n\n const rawTarget = rawConfig.targets?.[targetName];\n if (!rawTarget) throw new Error(`Target ${targetName} not found.`);\n\n console.log(\n chalk.blue.bold(\n `\\nPod Deploy: ${rawConfig.name} v${rawConfig.version} \u2192 ${targetName}\\n`\n )\n );\n\n let target = deepInterpolate(rawTarget, {\n ...rawConfig,\n ...rawTarget,\n }) as TargetConfig;\n\n target = resolveLocalPaths(target, cwd);\n\n const strategy = StrategyFactory.create(target, cwd);\n\n try {\n await strategy.connect();\n\n const lockPath = target.deployPath\n ? path.posix.join(target.deployPath, \"pod-lock.json\")\n : path.join(cwd, \"pod-lock.json\");\n\n let lock = (await strategy.readJson<LockFile>(lockPath)) || {\n ensures: {},\n once_actions: [],\n };\n\n if (lock.deployment_version !== rawConfig.version) {\n console.log(chalk.magenta(`\u2192 Version change: ${rawConfig.version}`));\n lock.deployment_version = rawConfig.version;\n lock.once_actions = [];\n await strategy.uploadContent(lockPath, JSON.stringify(lock, null, 2));\n }\n\n const handler = new OperationHandler(strategy, target, lock, lockPath);\n\n for (const op of target.operations) {\n try {\n if (op.type === \"ensure\") {\n await handler.handleEnsure(op, options);\n } else if (op.type === \"action\") {\n await handler.handleAction(op);\n } else if (op.type === \"verify\") {\n await handler.handleVerify(op);\n } else {\n throw new Error(`Unknown operation type: ${(op as any).type}`);\n }\n } catch (err: any) {\n throw new Error(`Failed at operation \"${op.name}\": ${err.message}`);\n }\n }\n\n console.log(chalk.green.bold(`\\nDeployment successful!\\n`));\n } catch (err: any) {\n console.error(chalk.red.bold(`\\nDeployment Failed: ${err.message}`));\n throw err;\n } finally {\n await strategy.disconnect();\n }\n}\n"],
5
+ "mappings": ";;;;;;;;AACA,SAAS,eAAe;;;ACDxB,YAAYA,cAAa;AACzB,SAAS,aAA2B;AACpC,YAAYC,SAAQ;AACpB,SAAS,iBAAiB,iBAAiB;;;ACH3C,YAAY,UAAU;AACtB,SAAS,qBAAqB;AAC9B,YAAY,QAAQ;AAoBpB,IAAM,eAAe;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,eAAsB,WACpB,OAAe,QAAQ,IAAI,GACP;AACpB,aAAW,cAAc,cAAc;AACrC,UAAM,aAAkB,aAAQ,MAAM,UAAU;AAEhD,QAAI;AACF,YAAS,UAAO,UAAU;AAE1B,UAAI,WAAW,SAAS,KAAK,KAAK,WAAW,SAAS,MAAM,GAAG;AAC7D,eAAO,MAAM,aAAa,UAAU;AAAA,MACtC;AAEA,aAAO,MAAM,aAAa,UAAU;AAAA,IACtC,SAAS,OAAO;AACd;AAAA,IACF;AAAA,EACF;AAEA,SAAO,iBAAiB;AAC1B;AAEA,eAAe,aAAa,YAAwC;AAClE,MAAI;AACF,UAAM,UAAU,cAAc,UAAU,EAAE;AAE1C,UAAM,eAAe,MAAM,OAAO,GAAG,OAAO,MAAM,KAAK,IAAI,CAAC;AAE5D,UAAM,SAAS,aAAa,WAAW;AAEvC,QAAI,OAAO,WAAW,YAAY;AAChC,aAAO,MAAM,OAAO;AAAA,IACtB;AAEA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,YAAQ,MAAM,qCAAgC,UAAU,KAAK,KAAK;AAClE,UAAM;AAAA,EACR;AACF;AAEA,eAAe,aAAa,YAAwC;AAClE,MAAI;AACF,UAAMC,WAAU,MAAM,OAAO,SAAS;AAEtC,UAAM,SAAS,MAAMA,SAAQ,MAAM;AAAA,MACjC,aAAa,CAAC,UAAU;AAAA,MACxB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,WAAW;AAAA,MACX,UAAU;AAAA,IACZ,CAAC;AAED,UAAM,WAAW,GAAG,UAAU,IAAI,KAAK,IAAI,CAAC;AAC5C,UAAS,aAAU,UAAU,OAAO,YAAY,CAAC,EAAE,IAAI;AAEvD,QAAI;AACF,YAAM,UAAU,cAAc,QAAQ,EAAE;AAExC,YAAM,eAAe,MAAM,OAAO;AAElC,YAAM,SAAS,aAAa,WAAW;AAEvC,UAAI,OAAO,WAAW,YAAY;AAChC,eAAO,MAAM,OAAO;AAAA,MACtB;AAEA,aAAO;AAAA,IACT,UAAE;AACA,YAAS,UAAO,QAAQ,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IAC1C;AAAA,EACF,SAAS,OAAO;AACd,YAAQ;AAAA,MACN,gDAA2C,UAAU;AAAA,MACrD;AAAA,IACF;AACA,UAAM;AAAA,EACR;AACF;AAEO,SAAS,mBAA8B;AAC5C,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,QAAQ;AAAA,IACV;AAAA,IACA,SAAS,CAAC;AAAA,IACV,gBAAgB,CAAC;AAAA,IACjB,gBAAgB,CAAC;AAAA,EACnB;AACF;AAEO,SAAS,YACd,UACA,YACW;AACX,SAAO;AAAA,IACL,MAAM,WAAW;AAAA,IACjB,OAAO,EAAE,GAAG,SAAS,OAAO,GAAG,WAAW,MAAM;AAAA,IAChD,SAAS,CAAC,GAAI,SAAS,WAAW,CAAC,GAAI,GAAI,WAAW,WAAW,CAAC,CAAE;AAAA,IACpE,gBAAgB;AAAA,MACd,GAAI,SAAS,kBAAkB,CAAC;AAAA,MAChC,GAAI,WAAW,kBAAkB,CAAC;AAAA,IACpC;AAAA,IACA,gBAAgB;AAAA,MACd,GAAI,SAAS,kBAAkB,CAAC;AAAA,MAChC,GAAI,WAAW,kBAAkB,CAAC;AAAA,IACpC;AAAA,EACF;AACF;;;AC9IA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,YAAYC,SAAQ;AACpB,SAAsB,iBAAiB;AACvC,YAAY,WAAW;AACvB,YAAYC,WAAU;;;ACJtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,OAAO,QAAQ;AACf,OAAOC,WAAU;AACjB,OAAOC,aAAY;;;ACFnB,YAAY,QAAQ;AACpB,YAAY,aAAa;AACzB,YAAYC,WAAU;AACtB,OAAO,YAAY;AAMZ,IAAM,gBAAN,MAAoB;AAAA,EAApB;AACL,SAAQ,QAAQ,oBAAI,IAA0B;AAAA;AAAA,EAE9C,SAAS,WAAmB,WAAmC;AAC7D,QAAI,CAAC,KAAK,MAAM,IAAI,SAAS,GAAG;AAC9B,WAAK,KAAK,SAAS;AAAA,IACrB;AACA,UAAM,SAAS,KAAK,MAAM,IAAI,SAAS;AACvC,QAAI,WAAW;AACb,YAAM,KAAK,OAAO,SAAS;AAC3B,UAAI,CAAC,IAAI;AACP,cAAM,IAAI,MAAM,UAAU,SAAS,kBAAkB,SAAS,EAAE;AAAA,MAClE;AACA,aAAO;AAAA,IACT;AACA,UAAM,QAAQ,OAAO,KAAK,MAAM;AAChC,QAAI,MAAM,WAAW,GAAG;AACtB,aAAO,OAAO,MAAM,CAAC,CAAC;AAAA,IACxB;AACA,QAAI,OAAO,SAAS;AAClB,aAAO,OAAO;AAAA,IAChB;AACA,UAAM,IAAI,MAAM,sBAAsB,SAAS,KAAK,MAAM,KAAK,IAAI,CAAC,EAAE;AAAA,EACxE;AAAA,EAEQ,KAAK,WAAmB;AAC9B,UAAM,kBAAkB,OAAO;AAAA,MAC7B,QAAQ,IAAI,IAAI;AAAA,IAClB;AACA,UAAM,QAAQ,gBAAgB,QAAQ,SAAS;AAE/C,UAAM,EAAE,YAAY,IAAY,kBAAU;AAAA,MACxC,aAAa,CAAC,KAAK;AAAA,MACnB,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,UAAU;AAAA,QACR,GAAG,OAAO;AAAA,QACV,GAAG,OAAO,eAAe,IAAI,CAAC,MAAM,QAAQ,CAAC,EAAE;AAAA,MACjD;AAAA,MACA,QAAQ;AAAA,MACR,YAAY,CAAC,UAAU,MAAM;AAAA,MAC7B,YAAY,CAAC,QAAQ,UAAU,SAAS;AAAA,MACxC,UAAU;AAAA,MACV,UAAU;AAAA,IACZ,CAAC;AAED,UAAM,OAAO,YAAY,CAAC,EAAE;AAC5B,UAAM,iBAAiB,OAAO,cAAc,KAAK;AAEjD,UAAM,UAAe;AAAA;AAAA,MAEnB,QAAQ,EAAE,SAAS,CAAC,EAAE;AAAA,MACtB,SAAS,CAAC;AAAA,MACV,SAAS;AAAA,MAET;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA,YAAY;AAAA,MACZ,WAAgB,cAAQ,KAAK;AAAA,MAE7B,SAAS;AAAA,QACP,KAAK,QAAQ;AAAA,QACb,KAAK,QAAQ;AAAA,QACb,SAAS,QAAQ;AAAA,QACjB,UAAU,QAAQ;AAAA,QAClB,UAAU,QAAQ;AAAA,QAClB,MAAM,QAAQ;AAAA,QACd,MAAM,QAAQ;AAAA,QACd,UAAU,QAAQ;AAAA,QAClB,KAAK,QAAQ;AAAA,MACf;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,YAAQ,SAAS;AACjB,YAAQ,aAAa;AAErB,UAAMC,WAAa,iBAAc,SAAS;AAAA,MACxC,MAAM,SAAc,eAAS,KAAK,CAAC;AAAA,MACnC,gBAAgB;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,IACF,CAAC;AAED,QAAI;AACF,YAAM,SAAS,IAAO,UAAO,MAAM;AAAA,QACjC,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB,CAAC;AAED,aAAO,aAAaA,UAAS;AAAA,QAC3B,eAAe;AAAA,MACjB,CAAC;AAAA,IACH,SAAS,OAAO;AACd,YAAM,IAAI;AAAA,QACR,gCAAgC,SAAS,KACvC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CACvD;AAAA,MACF;AAAA,IACF;AAEA,UAAM,SAAuB,CAAC;AAC9B,UAAM,UAAU,QAAQ,OAAO;AAE/B,QAAI,OAAO,YAAY,YAAY;AACjC,aAAO,UAAU;AAAA,IACnB,WAAW,OAAO,YAAY,YAAY,YAAY,MAAM;AAC1D,iBAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AACnD,YAAI,OAAO,UAAU,cAAc,KAAK,SAAS,GAAG,GAAG;AACrD,iBAAO,IAAI,IAAI;AAAA,QACjB;AAAA,MACF;AAEA,UAAI,OAAO,QAAQ,YAAY,YAAY;AACzC,eAAO,UAAU,QAAQ;AAAA,MAC3B;AAAA,IACF;AAEA,QAAI,CAAC,OAAO,KAAK,MAAM,EAAE,QAAQ;AAC/B,YAAM,IAAI,MAAM,sBAAsB,SAAS,EAAE;AAAA,IACnD;AAEA,SAAK,MAAM,IAAI,WAAW,MAAM;AAAA,EAClC;AAAA,EAEA,WAAW,WAAoB;AAC7B,QAAI,WAAW;AACb,WAAK,MAAM,OAAO,SAAS;AAAA,IAC7B,OAAO;AACL,WAAK,MAAM,MAAM;AAAA,IACnB;AAAA,EACF;AACF;AAEA,IAAM,gBAAgB,IAAI,cAAc;AAEjC,SAAS,gBAA+B;AAC7C,SAAO;AACT;;;AC5LA;AAAA;AAAA;AAAA;;;ACAO,IAAM,QAAN,MAAM,OAAM;AAAA,EAIT,cAAc;AAFtB,SAAQ,aAAqC,oBAAI,IAAI;AAAA,EAE9B;AAAA,EAEvB,OAAc,cAAqB;AACjC,QAAI,CAAC,OAAM,UAAU;AACnB,aAAM,WAAW,IAAI,OAAM;AAAA,IAC7B;AACA,WAAO,OAAM;AAAA,EACf;AAAA,EAEO,IAAO,KAAa,OAAgB;AACzC,UAAM,WAAW,KAAK,WAAW,IAAI,GAAG,KAAK,CAAC;AAC9C,aAAS,KAAK,KAAK;AACnB,SAAK,WAAW,IAAI,KAAK,QAAQ;AAAA,EACnC;AAAA,EAEO,IAAO,KAA8B;AAC1C,UAAM,SAAS,KAAK,WAAW,IAAI,GAAG;AACtC,WAAO;AAAA,EACT;AAAA,EAEO,IAAI,KAAsB;AAC/B,WAAO,KAAK,WAAW,IAAI,GAAG;AAAA,EAChC;AAAA,EAEO,OAAO,KAAsB;AAClC,WAAO,KAAK,WAAW,OAAO,GAAG;AAAA,EACnC;AAAA,EAEO,QAAc;AACnB,SAAK,WAAW,MAAM;AAAA,EACxB;AAAA,EAEO,OAAiC;AACtC,WAAO,KAAK,WAAW,KAAK;AAAA,EAC9B;AAAA,EAEA,IAAW,OAAe;AACxB,WAAO,KAAK,WAAW;AAAA,EACzB;AACF;;;AHZA,IAAM,uBAAN,MAA2B;AAAA,EAKzB,YAAY,aAAqB;AAJjC,SAAQ,QAAQ,oBAAI,IAAuB;AAKzC,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,eAAe,SAAyB;AACtC,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,UAAU,YAA2B,cAA8B;AACjE,UAAM,eAAeC,MAAK,SAAS,KAAK,aAAa,WAAW,QAAQ;AACxE,UAAM,aAAa,aAAa,QAAQ,OAAO,GAAG;AAClD,WAAO,GAAG,UAAU,IAAI,YAAY;AAAA,EACtC;AAAA,EAEA,QACE,KACA,cACA,MACA,YACA;AACA,QAAI,CAAC,KAAK,MAAM,IAAI,GAAG,GAAG;AACxB,WAAK,MAAM,IAAI,KAAK;AAAA,QAClB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU,WAAW;AAAA,QACrB,cAAc,oBAAI,IAAI;AAAA,QACtB,WAAW;AAAA,QACX,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,QAAQ,KAAoC;AAC1C,WAAO,KAAK,MAAM,IAAI,GAAG;AAAA,EAC3B;AAAA,EAEA,cAAc,SAAiB,OAAe;AAC5C,UAAM,OAAO,KAAK,MAAM,IAAI,OAAO;AACnC,QAAI,MAAM;AACR,WAAK,aAAa,IAAI,KAAK;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,UAAU,KAAa,WAAoB;AACzC,UAAM,OAAO,KAAK,MAAM,IAAI,GAAG;AAC/B,QAAI,MAAM;AACR,WAAK,WAAW;AAChB,WAAK,YAAY;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,UAAU,KAAkC;AAC1C,WAAO,KAAK,MAAM,IAAI,GAAG,GAAG;AAAA,EAC9B;AAAA,EAEA,WAAW,KAAsB;AAC/B,WAAO,KAAK,MAAM,IAAI,GAAG,GAAG,YAAY;AAAA,EAC1C;AAAA,EAEA,kBAA4B;AAC1B,UAAM,UAAU,oBAAI,IAAY;AAChC,UAAM,aAAa,oBAAI,IAAY;AACnC,UAAM,SAAmB,CAAC;AAE1B,UAAM,QAAQ,CAAC,KAAaA,SAAiB,CAAC,MAAM;AAClD,UAAI,QAAQ,IAAI,GAAG,EAAG;AAEtB,UAAI,WAAW,IAAI,GAAG,GAAG;AACvB,cAAM,QAAQ,CAAC,GAAGA,QAAM,GAAG,EAAE,KAAK,MAAM;AACxC,cAAM,IAAI,MAAM,uCAAuC,KAAK,EAAE;AAAA,MAChE;AAEA,YAAM,OAAO,KAAK,MAAM,IAAI,GAAG;AAC/B,UAAI,CAAC,KAAM;AAEX,iBAAW,IAAI,GAAG;AAElB,iBAAW,UAAU,KAAK,cAAc;AACtC,cAAM,QAAQ,CAAC,GAAGA,QAAM,GAAG,CAAC;AAAA,MAC9B;AAEA,iBAAW,OAAO,GAAG;AACrB,cAAQ,IAAI,GAAG;AACf,aAAO,KAAK,GAAG;AAAA,IACjB;AAEA,eAAW,OAAO,KAAK,MAAM,KAAK,GAAG;AACnC,YAAM,GAAG;AAAA,IACX;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ;AACN,SAAK,MAAM,MAAM;AAAA,EACnB;AAAA,EAEA,gBAAgB,UAA+B;AAC7C,WAAO,MAAM,KAAK,KAAK,MAAM,OAAO,CAAC,EAAE;AAAA,MACrC,CAAC,SAAS,KAAK,aAAa;AAAA,IAC9B;AAAA,EACF;AACF;AAEA,IAAI,cAA2C;AAExC,SAAS,oBAAoB,aAA2C;AAC7E,MAAI,CAAC,aAAa;AAChB,kBAAc,IAAI,qBAAqB,WAAW;AAAA,EACpD;AACA,SAAO;AACT;AAEO,SAAS,wBAAwB;AACtC,gBAAc;AAChB;AAEA,SAAS,uBACP,YACA,UACA,iBACoB;AACpB,QAAM,WAAW,GAAG;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL;AAEA,MAAI,SAAS,gBAAgB,kBAAkB;AAC7C,WAAO,SAAS,eAAe;AAAA,EACjC;AAEA,MAAI;AACF,UAAM,kBAAkBC,QAAO,cAAc,QAAQ;AACrD,WAAO,gBAAgB,QAAQ,UAAU;AAAA,EAC3C,SAAS,GAAG;AACV,WAAO;AAAA,EACT;AACF;AAEA,SAAS,sBACP,YACA,YACA,iBACsE;AACtE,MAAI;AAEJ,aAAW,aAAa,CAAC,SAAS;AAChC,QAAI,CAAC,GAAG,oBAAoB,IAAI,KAAK,CAAC,KAAK,aAAc;AAEzD,UAAM,EAAE,eAAe,KAAK,IAAI,KAAK;AAErC,QAAI,QAAQ,KAAK,SAAS,YAAY;AACpC,mBAAc,KAAK,gBAAqC;AAAA,IAC1D;AAEA,QAAI,iBAAiB,GAAG,eAAe,aAAa,GAAG;AACrD,iBAAW,aAAa,cAAc,UAAU;AAC9C,cAAM,eAAe,UAAU,KAAK;AACpC,YAAI,iBAAiB,YAAY;AAC/B,uBAAc,KAAK,gBAAqC;AAAA,QAC1D;AAAA,MACF;AAAA,IACF;AAEA,QAAI,iBAAiB,GAAG,kBAAkB,aAAa,GAAG;AACxD,UAAI,WAAW,WAAW,cAAc,KAAK,OAAO,GAAG,GAAG;AACxD,qBAAc,KAAK,gBAAqC;AAAA,MAC1D;AAAA,IACF;AAAA,EACF,CAAC;AAED,MAAI,CAAC,WAAY,QAAO;AAExB,QAAM,eAAe;AAAA,IACnB;AAAA,IACA,WAAW;AAAA,IACX;AAAA,EACF;AAEA,SAAO;AAAA,IACL,YAAY,WAAW,WAAW,GAAG,IAAI,eAAgB;AAAA,IACzD;AAAA,EACF;AACF;AAEA,SAAS,aAAa,YAA6B;AACjD,SACE,CAAC,WAAW,WAAW,GAAG,KAC1B,CAAC,WAAW,WAAW,GAAG,KAC1B,CAACD,MAAK,WAAW,UAAU;AAE/B;AAEA,SAAS,8BACP,cACA,YACoC;AACpC,MAAI;AAEJ,WAAS,MAAM,MAAe;AAC5B,QAAI,MAAO;AAEX,QAAI,GAAG,sBAAsB,IAAI,GAAG;AAClC,UAAI,GAAG,aAAa,KAAK,IAAI,KAAK,KAAK,KAAK,SAAS,cAAc;AACjE,gBAAQ;AACR;AAAA,MACF;AAAA,IACF;AAEA,OAAG,aAAa,MAAM,KAAK;AAAA,EAC7B;AAEA,QAAM,UAAU;AAChB,SAAO;AACT;AAEO,SAAS,qBAAqB,MAAgC;AACnE,MAAI,GAAG,gBAAgB,IAAI,KAAK,GAAG,gCAAgC,IAAI,GAAG;AACxE,WAAO,KAAK;AAAA,EACd;AACA,MAAI,GAAG,iBAAiB,IAAI,EAAG,QAAO,OAAO,KAAK,IAAI;AACtD,MAAI,KAAK,SAAS,GAAG,WAAW,YAAa,QAAO;AACpD,MAAI,KAAK,SAAS,GAAG,WAAW,aAAc,QAAO;AACrD,MAAI,KAAK,SAAS,GAAG,WAAW,YAAa,QAAO;AACpD,MAAI,KAAK,SAAS,GAAG,WAAW,iBAAkB,QAAO;AAEzD,MAAI,GAAG,qBAAqB,IAAI,GAAG;AACjC,QAAI,SAAS,KAAK,KAAK;AACvB,eAAW,QAAQ,KAAK,eAAe;AACrC,YAAM,YAAY,qBAAqB,KAAK,UAAU;AACtD,gBAAU,OAAO,SAAS,IAAI,KAAK,QAAQ;AAAA,IAC7C;AACA,WAAO;AAAA,EACT;AAEA,MAAI,GAAG,0BAA0B,IAAI,GAAG;AACtC,UAAM,MAAW,CAAC;AAClB,eAAW,QAAQ,KAAK,YAAY;AAClC,UAAI,GAAG,qBAAqB,IAAI,GAAG;AACjC,cAAM,MAAM,GAAG,aAAa,KAAK,IAAI,IACjC,KAAK,KAAK,OACV,GAAG,gBAAgB,KAAK,IAAI,IAC5B,KAAK,KAAK,OACV,GAAG,iBAAiB,KAAK,IAAI,IAC7B,KAAK,KAAK,OACV,GAAG,uBAAuB,KAAK,IAAI,IACnC,qBAAqB,KAAK,KAAK,UAAU,IACzC;AAEJ,YAAI,QAAQ,QAAW;AACrB,cAAI,GAAG,IAAI,qBAAqB,KAAK,WAAW;AAAA,QAClD;AAAA,MACF,WAAW,GAAG,8BAA8B,IAAI,GAAG;AACjD,YAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK;AAAA,MAClC,WAAW,GAAG,mBAAmB,IAAI,GAAG;AACtC,cAAM,SAAS,qBAAqB,KAAK,UAAU;AACnD,YAAI,OAAO,WAAW,YAAY,WAAW,MAAM;AACjD,iBAAO,OAAO,KAAK,MAAM;AAAA,QAC3B;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,MAAI,GAAG,yBAAyB,IAAI,GAAG;AACrC,WAAO,KAAK,SACT,IAAI,CAAC,OAAO;AACX,UAAI,GAAG,gBAAgB,EAAE,GAAG;AAC1B,cAAM,SAAS,qBAAqB,GAAG,UAAU;AACjD,eAAO,MAAM,QAAQ,MAAM,IAAI,SAAS,CAAC,MAAM;AAAA,MACjD;AACA,aAAO,qBAAqB,EAAE;AAAA,IAChC,CAAC,EACA,KAAK;AAAA,EACV;AAEA,MAAI,GAAG,wBAAwB,IAAI,GAAG;AACpC,UAAM,UAAU,qBAAqB,KAAK,OAAO;AACjD,YAAQ,KAAK,UAAU;AAAA,MACrB,KAAK,GAAG,WAAW;AACjB,eAAO,CAAC;AAAA,MACV,KAAK,GAAG,WAAW;AACjB,eAAO,CAAC;AAAA,MACV,KAAK,GAAG,WAAW;AACjB,eAAO,CAAC;AAAA,MACV,KAAK,GAAG,WAAW;AACjB,eAAO,CAAC;AAAA,IACZ;AAAA,EACF;AAEA,MAAI,GAAG,mBAAmB,IAAI,GAAG;AAC/B,UAAM,OAAO,qBAAqB,KAAK,IAAI;AAC3C,UAAM,QAAQ,qBAAqB,KAAK,KAAK;AAE7C,YAAQ,KAAK,cAAc,MAAM;AAAA,MAC/B,KAAK,GAAG,WAAW;AACjB,eAAO,OAAO;AAAA,MAChB,KAAK,GAAG,WAAW;AACjB,eAAO,OAAO;AAAA,MAChB,KAAK,GAAG,WAAW;AACjB,eAAO,OAAO;AAAA,MAChB,KAAK,GAAG,WAAW;AACjB,eAAO,OAAO;AAAA,MAChB,KAAK,GAAG,WAAW;AACjB,eAAO,OAAO;AAAA,MAChB,KAAK,GAAG,WAAW;AACjB,eAAO,QAAQ;AAAA,MACjB,KAAK,GAAG,WAAW;AACjB,eAAO,QAAQ;AAAA,MACjB,KAAK,GAAG,WAAW;AACjB,eAAO,SAAS;AAAA,MAClB,KAAK,GAAG,WAAW;AACjB,eAAO,QAAQ;AAAA,MACjB,KAAK,GAAG,WAAW;AACjB,eAAO,SAAS;AAAA,MAClB,KAAK,GAAG,WAAW;AACjB,eAAO,OAAO;AAAA,MAChB,KAAK,GAAG,WAAW;AACjB,eAAO,QAAQ;AAAA,MACjB,KAAK,GAAG,WAAW;AACjB,eAAO,OAAO;AAAA,MAChB,KAAK,GAAG,WAAW;AACjB,eAAO,QAAQ;AAAA,MACjB,KAAK,GAAG,WAAW;AACjB,eAAO,QAAQ;AAAA,MACjB,KAAK,GAAG,WAAW;AACjB,eAAO,QAAQ;AAAA,MACjB,KAAK,GAAG,WAAW;AACjB,eAAO,QAAQ;AAAA,IACnB;AAAA,EACF;AAEA,MAAI,GAAG,0BAA0B,IAAI,GAAG;AACtC,WAAO,qBAAqB,KAAK,UAAU;AAAA,EAC7C;AAEA,MAAI,GAAG,wBAAwB,IAAI,GAAG;AACpC,UAAM,YAAY,qBAAqB,KAAK,SAAS;AACrD,WAAO,YACH,qBAAqB,KAAK,QAAQ,IAClC,qBAAqB,KAAK,SAAS;AAAA,EACzC;AAEA,MAAI,GAAG,2BAA2B,IAAI,GAAG;AACvC,UAAM,MAAM,qBAAqB,KAAK,UAAU;AAChD,UAAM,WAAW,KAAK,KAAK;AAC3B,WAAO,MAAM,QAAQ;AAAA,EACvB;AAEA,MAAI,GAAG,0BAA0B,IAAI,GAAG;AACtC,UAAM,MAAM,qBAAqB,KAAK,UAAU;AAChD,UAAM,QAAQ,qBAAqB,KAAK,kBAAkB;AAC1D,WAAO,MAAM,KAAK;AAAA,EACpB;AAEA,SAAO;AACT;AAEA,SAAS,mBACP,OACA,gBACA,YACA,iBACA;AACA,QAAM,sBAAgC,CAAC;AAEvC,WAAS,wBAAwB,YAAoC;AACnE,UAAM,OAAO,WAAW;AAGxB,UAAM,cAAc,8BAA8B,MAAM,UAAU;AAElE,QAAI,eAAe,YAAY,aAAa;AAC1C,YAAM,eAAe,YAAY,OAAO;AACxC,YAAM,UAAU,aAAa,gBAAgB,QAAQ,GAAG,UAAU;AAElE,UAAI,CAAC,SAAS;AACZ,cAAM,IAAI;AAAA,UACR,mBAAmB,IAAI;AAAA,QACzB;AAAA,MACF;AAGA,UAAI,GAAG,iBAAiB,YAAY,WAAW,GAAG;AAChD,cAAM,OAAO,YAAY,YAAY;AAErC,YAAI,GAAG,aAAa,IAAI,KAAK,KAAK,KAAK,SAAS,GAAG,GAAG;AACpD,gBAAM,SAAS,MAAM,UAAU,YAAY,IAAI;AAC/C,8BAAoB,KAAK,MAAM;AAE/B,gBAAM,SAAS,MAAM,UAAU,MAAM;AACrC,cAAI,WAAW,QAAW;AACxB,mBAAO;AAAA,UACT;AAEA,gBAAM,IAAI;AAAA,YACR,qBAAqB,IAAI;AAAA,UAC3B;AAAA,QACF;AAAA,MACF;AAEA,aAAO,YAAY;AAAA,IACrB;AAGA,UAAM,WAAW,sBAAsB,MAAM,YAAY,eAAe;AAExE,QAAI,UAAU;AACZ,UAAI,aAAa,SAAS,UAAU,GAAG;AACrC,cAAM,IAAI;AAAA,UACR,8BAA8B,IAAI,uBAAuB,SAAS,UAAU;AAAA,QAE9E;AAAA,MACF;AAEA,UAAI,CAAC,SAAS,cAAc;AAC1B,cAAM,IAAI;AAAA,UACR,kCAAkC,SAAS,UAAU;AAAA,QACvD;AAAA,MACF;AAEA,YAAM,iBAAiB,GAAG,IAAI,SAAS,SAAS,YAAY;AAC5D,UAAI,CAAC,gBAAgB;AACnB,cAAM,IAAI;AAAA,UACR,iCAAiC,SAAS,YAAY;AAAA,QACxD;AAAA,MACF;AAEA,YAAM,qBAAqB,GAAG;AAAA,QAC5B,SAAS;AAAA,QACT;AAAA,QACA,GAAG,aAAa;AAAA,QAChB;AAAA,MACF;AAEA,YAAM,eAAe;AAAA,QACnB;AAAA,QACA;AAAA,MACF;AAEA,UAAI,gBAAgB,aAAa,aAAa;AAE5C,YAAI,GAAG,iBAAiB,aAAa,WAAW,GAAG;AACjD,gBAAM,OAAO,aAAa,YAAY;AACtC,cAAI,GAAG,aAAa,IAAI,KAAK,KAAK,KAAK,SAAS,GAAG,GAAG;AACpD,kBAAM,SAAS,MAAM,UAAU,oBAAoB,IAAI;AACvD,gCAAoB,KAAK,MAAM;AAE/B,kBAAM,SAAS,MAAM,UAAU,MAAM;AACrC,gBAAI,WAAW,QAAW;AACxB,qBAAO;AAAA,YACT;AAEA,kBAAM,IAAI;AAAA,cACR,gCAAgC,IAAI,WAAW,SAAS,YAAY;AAAA,YACtE;AAAA,UACF;AAAA,QACF;AAEA,eAAO,aAAa;AAAA,MACtB;AAAA,IACF;AAEA,UAAM,IAAI;AAAA,MACR,iCAAiC,IAAI;AAAA,IACvC;AAAA,EACF;AAEA,WAAS,iBAAiB,MAAoB;AAC5C,QAAI,GAAG,aAAa,IAAI,GAAG;AACzB,YAAM,eAAe,wBAAwB,IAAI;AACjD,aAAO,qBAAqB,YAAY;AAAA,IAC1C;AACA,WAAO,qBAAqB,IAAI;AAAA,EAClC;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,wBAAwB,MAAM;AAAA,EAChC;AACF;AAEA,eAAsB,aACpB,QACA,UACA,cAAsB,QAAQ,IAAI,GACjB;AACjB,MAAI,CAAC,OAAO,SAAS,IAAI,KAAK,CAAC,OAAO,SAAS,IAAI,GAAG;AACpD,WAAO;AAAA,EACT;AAEA,QAAM,kBAAsC;AAAA,IAC1C,QAAQ,GAAG,WAAW;AAAA,IACtB,QAAQ,GAAG,aAAa;AAAA,IACxB,kBAAkB,GAAG,qBAAqB;AAAA,EAC5C;AAEA,QAAM,aAAa,GAAG;AAAA,IACpB;AAAA,IACA;AAAA,IACA,GAAG,aAAa;AAAA,IAChB;AAAA,IACA,SAAS,SAAS,MAAM,IAAI,GAAG,WAAW,MAAM,GAAG,WAAW;AAAA,EAChE;AAEA,QAAM,QAAQ,oBAAoB,WAAW;AAE7C,QAAM,aAAa,MACjB,GAAG,cAAc,CAAC,QAAQ,GAAG;AAAA,IAC3B,QAAQ,GAAG,aAAa;AAAA,IACxB,QAAQ,GAAG,WAAW;AAAA,EACxB,CAAC;AAEH,QAAM,iBAAiB,MAAM,WAAW,GAAG,eAAe;AAG1D,WAAS,eAAe,MAAe;AACrC,QAAI,GAAG,sBAAsB,IAAI,KAAK,KAAK,aAAa;AACtD,UACE,GAAG,iBAAiB,KAAK,WAAW,KACpC,GAAG,aAAa,KAAK,YAAY,UAAU,KAC3C,KAAK,YAAY,WAAW,KAAK,SAAS,GAAG,GAC7C;AACA,YAAI,GAAG,aAAa,KAAK,IAAI,GAAG;AAC9B,gBAAM,eAAe,KAAK,KAAK;AAC/B,gBAAM,MAAM,MAAM,UAAU,YAAY,YAAY;AACpD,gBAAM,QAAQ,KAAK,cAAc,KAAK,aAAa,UAAU;AAAA,QAC/D;AAAA,MACF;AAAA,IACF;AACA,OAAG,aAAa,MAAM,cAAc;AAAA,EACtC;AAEA,iBAAe,UAAU;AAGzB,QAAM,YAAY,MAAM,gBAAgB,QAAQ;AAEhD,aAAW,aAAa,WAAW;AACjC,QAAI,MAAM,WAAW,UAAU,GAAG,EAAG;AAErC,UAAM,WAAW;AAAA,MACf;AAAA,MACA,UAAU;AAAA,MACV,UAAU;AAAA,MACV;AAAA,IACF;AAEA,QAAI;AAEF,iBAAW,OAAO,UAAU,KAAK,WAAW;AAC1C,YAASE,gBAAT,SAAsB,GAAY;AAChC,cAAI,GAAG,aAAa,CAAC,GAAG;AACtB,gBAAI;AACF,uBAAS,wBAAwB,CAAC;AAAA,YACpC,SAAS,GAAG;AAAA,YAEZ;AAAA,UACF;AACA,aAAG,aAAa,GAAGA,aAAY;AAAA,QACjC;AATS,2BAAAA;AAUT,QAAAA,cAAa,GAAG;AAAA,MAClB;AAEA,YAAM,OAAO,SAAS,uBAAuB;AAC7C,iBAAW,OAAO,MAAM;AACtB,cAAM,cAAc,UAAU,KAAK,GAAG;AAAA,MACxC;AAAA,IACF,SAAS,GAAG;AAAA,IAEZ;AAAA,EACF;AAGA,QAAM,aAAa,MAAM,gBAAgB;AAEzC,aAAW,OAAO,YAAY;AAC5B,UAAM,YAAY,MAAM,QAAQ,GAAG;AACnC,QAAI,CAAC,aAAa,MAAM,WAAW,GAAG,EAAG;AAEzC,UAAM,OAAO,UAAU;AACvB,UAAM,OAAQ,KAAK,WAA6B;AAEhD,UAAM,WAAW;AAAA,MACf;AAAA,MACA,UAAU;AAAA,MACV;AAAA,IACF;AAEA,QAAI,CAAC,UAAU;AACb,YAAM,IAAI,MAAM,uCAAuC,IAAI,GAAG;AAAA,IAChE;AAEA,UAAM,QAAQ,cAAc,EAAE,SAAS,SAAS,YAAY,IAAI;AAEhE,QAAI,CAAC,OAAO;AACV,YAAM,IAAI,MAAM,wBAAwB,IAAI,cAAc,GAAG,GAAG;AAAA,IAClE;AAEA,UAAM,WAAW;AAAA,MACf;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV;AAAA,IACF;AAEA,UAAM,eAA6B;AAAA,MACjC;AAAA,MACA,YAAY,UAAU;AAAA,MACtB;AAAA,MACA,OAAO,MAAM,YAAY;AAAA,MACzB,SAAS,GAAG;AAAA,MACZ;AAAA,MACA,IAAI,UAAU;AACZ,eAAO,WAAW;AAAA,MACpB;AAAA,MACA,IAAI,UAAU;AACZ,eAAO,eAAe;AAAA,MACxB;AAAA,MACA,OAAO,CAAC,QAAgB;AACtB,cAAM,IAAI,MAAM,GAAG;AAAA,MACrB;AAAA,MACA,kBAAkB,SAAS;AAAA,MAC3B,mBAAmB,SAAS;AAAA,IAC9B;AAEA,QAAI;AAEF,YAAMC,UAAS,MAAM,GAAG,KAAK,WAAW,YAAY;AAEpD,UAAI,CAACA,WAAU,OAAOA,YAAW,YAAY,EAAE,UAAUA,UAAS;AAChE,cAAM,IAAI,MAAM,UAAU,IAAI,qCAAqC;AAAA,MACrE;AAEA,YAAM,UAAU,KAAKA,OAAM;AAAA,IAC7B,SAAS,GAAQ;AACf,cAAQ,MAAM,UAAU,IAAI,uBAAuB,GAAG,WAAW,CAAC,EAAE;AACpE,YAAM;AAAA,IACR;AAAA,EACF;AAGA,QAAM,cAAoD,CAACC,aAAY;AACrE,UAAM,QAAQ,CAAC,SAA2B;AACxC,UAAI,GAAG,sBAAsB,IAAI,KAAK,KAAK,aAAa;AACtD,YACE,GAAG,iBAAiB,KAAK,WAAW,KACpC,GAAG,aAAa,KAAK,YAAY,UAAU,KAC3C,KAAK,YAAY,WAAW,KAAK,SAAS,GAAG,KAC7C,GAAG,aAAa,KAAK,IAAI,GACzB;AACA,gBAAM,MAAM,MAAM,UAAU,YAAY,KAAK,KAAK,IAAI;AACtD,gBAAM,YAAY,MAAM,QAAQ,GAAG;AAEnC,cAAI,aAAa,MAAM,WAAW,GAAG,GAAG;AACtC,kBAAMD,UAAS,MAAM,UAAU,GAAG;AAElC,mBAAOC,SAAQ,QAAQ;AAAA,cACrB;AAAA,cACA,KAAK;AAAA,cACL,KAAK;AAAA,cACL,KAAK;AAAA,cACLD;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,UAAI,GAAG,iBAAiB,IAAI,KAAK,GAAG,aAAa,KAAK,UAAU,GAAG;AACjE,cAAM,OAAO,KAAK,WAAW;AAE7B,YAAI,KAAK,SAAS,GAAG,GAAG;AACtB,gBAAM,WAAW;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAEA,cAAI,UAAU;AACZ,kBAAM,QAAQ,cAAc,EAAE,SAAS,SAAS,YAAY,IAAI;AAEhE,gBAAI,OAAO;AACT,oBAAM,UAAU,GAAG,MAAM,UAAU,YAAY,UAAU,CAAC,IACxD,KAAK,GACP;AACA,oBAAM,WAAW;AAAA,gBACf;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAEA,oBAAM,eAA6B;AAAA,gBACjC;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,OAAO,MAAM,YAAY;AAAA,gBACzB,SAASC,SAAQ;AAAA,gBACjB,IAAI,UAAU;AACZ,yBAAO,WAAW;AAAA,gBACpB;AAAA,gBACA,IAAI,UAAU;AACZ,yBAAO,eAAe;AAAA,gBACxB;AAAA,gBACA,OAAO,CAAC,QAAgB;AACtB,wBAAM,IAAI,MAAM,GAAG;AAAA,gBACrB;AAAA,gBACA,kBAAkB,SAAS;AAAA,gBAC3B,mBAAmB,SAAS;AAAA,cAC9B;AAEA,kBAAI;AAEF,sBAAMD,UAAS,MAAM,GAAG,KAAK,WAAW,YAAY;AAEpD,oBACE,CAACA,WACD,OAAOA,YAAW,YAClB,EAAE,UAAUA,UACZ;AACA,wBAAM,IAAI;AAAA,oBACR,UAAU,IAAI;AAAA,kBAChB;AAAA,gBACF;AAEA,uBAAOA;AAAA,cACT,SAAS,GAAQ;AACf,wBAAQ;AAAA,kBACN,UAAU,IAAI,uBAAuB,GAAG,WAAW,CAAC;AAAA,gBACtD;AACA,uBAAO;AAAA,cACT;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,aAAO,GAAG,eAAe,MAAM,OAAOC,QAAO;AAAA,IAC/C;AAEA,WAAO,CAAC,OAAO,GAAG,UAAU,IAAI,KAAK;AAAA,EACvC;AAEA,QAAM,SAAS,GAAG,UAAU,YAAY,CAAC,WAAW,CAAC;AACrD,QAAM,SAAS,GAAG,cAAc,EAAE,UAAU,OAAO,YAAY,CAAC,CAAC;AACjE,SAAO,QAAQ;AAEf,SAAO;AACT;;;AItxBA,YAAYC,WAAU;;;ACAtB;AAAA,EAME;AAAA,OAGK;AAoDA,IAAM,sBAA0C;AAAA,EACrD;AAAA,IACE,UAAU;AAAA,IACV,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,eAAe;AAAA,EACjB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,IACV,cAAc;AAAA,IACd,eAAe;AAAA,IACf,eAAe;AAAA,EACjB;AACF;AAEO,SAAS,gBAAgB,UAAkB,MAAc;AAC9D,SAAO,UAAU,MAAM;AAAA,IACrB,QAAQ;AAAA,IACR,KAAK,SAAS,SAAS,GAAG,KAAK,SAAS,SAAS,MAAM;AAAA,IACvD,YAAY;AAAA,EACd,CAAC;AACH;AAEO,SAAS,uBAAuB,YAAmC;AACxE,MAAI,CAAC,WAAY,QAAO;AAExB,SAAO,WAAW,KAAK,CAAC,MAAM;AAC5B,UAAM,OAAO,EAAE;AACf,WACG,KAAK,SAAS,gBAAgB,KAAK,UAAU,gBAC7C,KAAK,SAAS,oBACb,KAAK,OAAO,SAAS,gBACrB,KAAK,OAAO,UAAU;AAAA,EAE5B,CAAC;AACH;AAEO,SAAS,eAAe,QAA4C;AACzE,SACE,OAAO,SAAS,kBACf,OAAO,kBAAkB,YAAY,CAAC,OAAO;AAElD;AAEO,SAAS,cAAc,QAAoC;AAChE,MAAI,OAAO,IAAI,SAAS,cAAc;AACpC,WAAO,OAAO,IAAI;AAAA,EACpB;AACA,SAAO;AACT;AAEO,SAAS,iBAAiB,KAAkC;AACjE,QAAM,YAAoC,CAAC;AAE3C,aAAW,QAAQ,IAAI,MAAM;AAC3B,QAAI,KAAK,SAAS,qBAAqB;AACrC,YAAM,OAAO;AACb,YAAM,SAAS,KAAK,OAAO;AAC3B,WAAK,WAAW,QAAQ,CAAC,SAAS;AAChC,YACE,KAAK,SAAS,qBACd,KAAK,SAAS,4BACd,KAAK,SAAS,4BACd;AACA,oBAAU,KAAK,MAAM,KAAK,IAAI;AAAA,QAChC;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,oBAAoB,KAAmC;AACrE,aAAW,QAAQ,IAAI,MAAM;AAC3B,QACE,KAAK,SAAS,uBACd,KAAK,aAAa,SAAS,oBAC3B;AACA,YAAM,YAAY,KAAK;AACvB,UAAI,uBAAuB,UAAU,UAAU,GAAG;AAChD,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,kBAAkB,QAAqC;AACrE,QAAM,aAAa,OAAO,SAAS,YAAY;AAE/C,MAAI,CAAC,YAAY;AACf,WAAO;AAAA,MACL,MAAM;AAAA,MACN,cAAc;AAAA,MACd,eAAe;AAAA,IACjB;AAAA,EACF;AAEA,MACE,WAAW,SAAS,qBACpB,WAAW,SAAS,SAAS,cAC7B;AACA,UAAM,WAAW,WAAW,SAAS;AACrC,UAAM,SAAS,oBAAoB,KAAK,CAAC,MAAM,EAAE,aAAa,QAAQ;AAEtE,QAAI,QAAQ;AACV,YAAM,YAAY,WAAW,YAAY,OAAO,CAAC;AACjD,aAAO;AAAA,QACL,MAAM,YAAY,cAAc,SAAS,IAAI;AAAA,QAC7C,cAAc,OAAO;AAAA,QACrB,YAAY,OAAO;AAAA,QACnB,eAAe,OAAO;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM,cAAc,UAAU;AAAA,IAC9B,cAAc;AAAA,IACd,eAAe;AAAA,EACjB;AACF;AAEO,SAAS,cAAc,MAAkC;AAC9D,MAAI,CAAC,KAAM,QAAO;AAElB,UAAQ,KAAK,MAAM;AAAA,IACjB,KAAK;AACH,aAAO,KAAK;AAAA,IAEd,KAAK;AACH,UAAI,KAAK,SAAS,SAAS,aAAc,QAAO;AAChD,YAAM,OAAO,KAAK,SAAS;AAC3B,YAAM,OAAO,KAAK,YAAY,SAC1B,IAAI,KAAK,WAAW,OAAO,IAAI,aAAa,EAAE,KAAK,IAAI,CAAC,MACxD;AACJ,aAAO,OAAO;AAAA,IAEhB,KAAK;AACH,aAAO,GAAG,cAAc,KAAK,QAAQ,CAAC;AAAA,IAExC,KAAK;AACH,aAAO,KAAK,MAAM,IAAI,aAAa,EAAE,KAAK,KAAK;AAAA,IAEjD,KAAK;AACH,aAAO,KAAK,MAAM,IAAI,aAAa,EAAE,KAAK,KAAK;AAAA,IAEjD,KAAK;AACH,YAAM,QAAQ,KAAK,QAChB,IAAI,CAAC,WAAgB;AACpB,YAAI,OAAO,SAAS,uBAAuB;AACzC,gBAAM,MACJ,OAAO,IAAI,SAAS,eAAe,OAAO,IAAI,QAAQ;AACxD,gBAAM,OAAO,OAAO,iBAChB,cAAc,OAAO,eAAe,cAAc,IAClD;AACJ,iBAAO,GAAG,GAAG,KAAK,IAAI;AAAA,QACxB;AACA,eAAO;AAAA,MACT,CAAC,EACA,OAAO,OAAO;AACjB,aAAO,KAAK,MAAM,KAAK,IAAI,CAAC;AAAA,IAE9B;AACE,aAAO;AAAA,EACX;AACF;AAEO,SAAS,oBAAoB,QAAgC;AAClE,SAAO,OAAO,IAAI,CAAC,MAAM;AACvB,UAAM,MAAO,EAAU;AAEvB,QAAI,IAAI,SAAS,cAAc;AAC7B,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM;AAAA,QACN,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAEA,WAAO;AAAA,MACL,MAAM,IAAI;AAAA,MACV,MAAM,IAAI,iBACN,cAAc,IAAI,eAAe,cAAc,IAC/C;AAAA,MACJ,YAAY,CAAC;AAAA,IACf;AAAA,EACF,CAAC;AACH;AAEO,SAAS,iBACd,YACA,YACA;AACA,MAAI,CAAC,WAAY,QAAO,EAAE,cAAc,CAAC,EAAE;AAE3C,aAAW,aAAa,YAAY;AAClC,UAAM,OAAO,UAAU;AACvB,QACE,KAAK,SAAS,oBACd,KAAK,OAAO,SAAS,gBACrB,KAAK,OAAO,UAAU,aACtB;AACA,YAAM,OAAO,KAAK;AAClB,UAAI,KAAK,WAAW,EAAG,QAAO,EAAE,cAAc,CAAC,EAAE;AAEjD,YAAM,gBAAgB,KAAK;AAAA,QAAI,CAAC,QAC9B,oBAAoB,IAAI,UAAU;AAAA,MACpC;AAEA,UAAI,KAAK,WAAW,GAAG;AACrB,eAAO,EAAE,cAAc,CAAC,GAAG,cAAc,cAAc,CAAC,EAAE;AAAA,MAC5D;AAEA,aAAO;AAAA,QACL,cAAc,cAAc,MAAM,GAAG,EAAE;AAAA,QACvC,cAAc,cAAc,cAAc,SAAS,CAAC;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AACA,SAAO,EAAE,cAAc,CAAC,EAAE;AAC5B;AAEA,SAAS,oBAAoB,MAAmB;AAC9C,MAAI,CAAC,KAAM,QAAO;AAElB,MAAI,KAAK,SAAS,cAAc;AAC9B,WAAO,KAAK;AAAA,EACd;AAEA,MAAI,KAAK,SAAS,oBAAoB;AACpC,UAAM,SAAS,oBAAoB,KAAK,MAAM;AAC9C,UAAM,WAAW,KAAK,SAAS,SAAS,oBAAoB,KAAK,QAAQ;AACzE,WAAO,GAAG,MAAM,IAAI,QAAQ;AAAA,EAC9B;AAEA,MAAI,KAAK,SAAS,kBAAkB;AAClC,UAAM,OAAO,KAAK,UACf,IAAI,CAAC,MAAW,oBAAoB,EAAE,UAAU,CAAC,EACjD,KAAK,IAAI;AACZ,WAAO,GAAG,oBAAoB,KAAK,MAAM,CAAC,IAAI,IAAI;AAAA,EACpD;AAEA,SAAO;AACT;AAEO,SAAS,eACd,WACA,UACA,oBAA6B,MACZ;AACjB,QAAM,UAA2B,CAAC;AAClC,QAAM,YAAY,UAAU,YAAY,SAAS;AAEjD,aAAW,UAAU,UAAU,MAAM;AACnC,QAAI,CAAC,eAAe,MAAM,EAAG;AAE7B,UAAM,SAAS;AACf,UAAM,aAAa,cAAc,MAAM;AACvC,QAAI,CAAC,WAAY;AAEjB,UAAM,iBAAiB,kBAAkB,MAAM;AAE/C,QAAI,CAAC,eAAe,gBAAgB,CAAC,OAAO,SAAS,OAAO;AAC1D,YAAM;AAAA,QACJ,MAAM;AAAA,QACN,SAAS,UAAU,SAAS,IAAI,UAAU,+CAA+C,oBAAoB;AAAA,UAC3G,CAAC,MAAM,EAAE;AAAA,QACX,EACG,IAAI,CAAC,MAAM,EAAE,QAAQ,EACrB,KAAK,IAAI,CAAC;AAAA,QACb;AAAA,QACA,SAAS,EAAE,WAAW,WAAW;AAAA,MACnC;AAAA,IACF;AAEA,UAAM,aAAa,oBACf;AAAA,MACE,OAAO,SAAS;AAAA,MAChB,OAAO,SAAS,OAAO;AAAA,IACzB,IACA,EAAE,cAAc,CAAC,EAAE;AAEvB,YAAQ,KAAK;AAAA,MACX,MAAM;AAAA,MACN,QAAQ,oBAAoB,OAAO,SAAS,MAAM;AAAA,MAClD,YAAY,eAAe;AAAA,MAC3B,SAAS,OAAO,SAAS;AAAA,MACzB,cAAc,eAAe;AAAA,MAC7B,YAAY,eAAe;AAAA,MAC3B,cAAc,WAAW;AAAA,MACzB,cAAc,WAAW;AAAA,IAC3B,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEO,SAAS,kBAAkB,aAA6B;AAC7D,SAAO,YACJ,QAAQ,YAAY,EAAE,EACtB,QAAQ,mBAAmB,OAAO,EAClC,YAAY;AACjB;AAEO,SAAS,eAAe,WAA2B;AACxD,SAAO,UAAU,OAAO,CAAC,EAAE,YAAY,IAAI,UAAU,MAAM,CAAC;AAC9D;AAEO,SAAS,WAAW,KAAqB;AAC9C,SAAO,IAAI,OAAO,CAAC,EAAE,YAAY,IAAI,IAAI,MAAM,CAAC;AAClD;AAEO,SAAS,oBACd,aACA,UACM;AACN,MAAI,CAAC,YAAY,WAAW;AAC1B,UAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,MAAI,YAAY,QAAQ,WAAW,GAAG;AACpC,YAAQ;AAAA,MACN,oBAAoB,YAAY,SAAS;AAAA,IAC3C;AAAA,EACF;AAEA,cAAY,QAAQ,QAAQ,CAAC,WAAW;AACtC,QAAI,OAAO,OAAO,SAAS,KAAK,OAAO,cAAc,WAAW,GAAG;AACjE,cAAQ;AAAA,QACN,mBAAmB,YAAY,SAAS,IAAI,OAAO,IAAI;AAAA,MACzD;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEO,SAAS,mBACd,KACA,UACA,oBAA6B,MACT;AACpB,MAAI;AACF,UAAM,eAAe,oBAAoB,GAAG;AAC5C,UAAM,YAAY,iBAAiB,GAAG;AAEtC,QAAI,CAAC,cAAc,YAAY;AAC7B,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,MACL,WAAW,aAAa,WAAW;AAAA,MACnC,SAAS,eAAe,cAAc,UAAU,iBAAiB;AAAA,MACjE,eAAe;AAAA,MACf;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,UAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS,mCAAoC,MAAgB,OAAO;AAAA,MACpE;AAAA,MACA,SAAS;AAAA,IACX;AAAA,EACF;AACF;;;ADhaO,SAAS,mBACd,UACA,MACe;AACf,MAAI;AACF,UAAM,MAAM,gBAAgB,UAAU,IAAI;AAC1C,UAAM,cAAc,mBAAmB,KAAK,UAAU,IAAI;AAE1D,QAAI,CAAC,eAAe,CAAC,YAAY,eAAe;AAC9C,aAAO;AAAA,IACT;AAEA,wBAAoB,aAAa,QAAQ;AACzC,WAAO,uBAAuB,aAAa,QAAQ;AAAA,EACrD,SAAS,OAAO;AACd,QAAK,MAAc,MAAM;AACvB,YAAM;AAAA,IACR;AACA,UAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS,oCAAqC,MAAgB,OAAO;AAAA,MACrE;AAAA,MACA,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAEA,SAAS,uBACP,aACA,UACQ;AACR,QAAM,cAAc,YAAY;AAChC,QAAM,iBAAiB,YAAY,QAAQ,YAAY,eAAe;AACtE,QAAM,oBAAoB,cAAc,QAAQ;AAChD,QAAM,iBAAiB,kBAAkB,WAAW;AAEpD,QAAM,UAAU,gBAAgB,aAAa,aAAa,iBAAiB;AAC3E,QAAM,UAAU,gBAAgB,WAAW;AAC3C,QAAM,kBAAkB,eAAe,WAAW;AAElD,SAAO,GAAG,OAAO;AAAA;AAAA,gBAEH,cAAc;AAAA;AAAA;AAAA,eAGf,cAAc;AAAA;AAAA,uBAEN,eAAe,KAAK,WAAW;AAAA;AAAA;AAAA,EAGpD,OAAO;AAAA;AAET;AAGA,SAAS,cAAc,UAA0B;AAC/C,QAAMC,YAAgB,eAAS,QAAQ;AACvC,SAAO,KAAKA,UAAS,QAAQ,WAAW,EAAE,CAAC;AAC7C;AAEA,SAAS,gBACP,aACA,aACA,mBACQ;AACR,QAAM,eAAe,oBAAI,IAAyB;AAElD,QAAM,qBAAqB,CAAC,OAAe;AACzC,UAAM,SAAS,YAAY,UAAU,EAAE,KAAK;AAC5C,QAAI,CAAC,aAAa,IAAI,MAAM,GAAG;AAC7B,mBAAa,IAAI,QAAQ,oBAAI,IAAI,CAAC;AAAA,IACpC;AACA,iBAAa,IAAI,MAAM,EAAG,IAAI,EAAE;AAAA,EAClC;AAEA,cAAY,QAAQ,QAAQ,CAAC,MAAM;AACjC,KAAC,GAAG,EAAE,cAAc,EAAE,YAAY,EAAE,OAAO,OAAO,EAAE,QAAQ,CAAC,MAAM;AACjE,YAAM,UAAU,EAAG,MAAM,oBAAoB;AAC7C,eAAS,QAAQ,kBAAkB;AACnC,UAAI,EAAG,SAAS,IAAI,GAAG;AACrB,2BAAmB,GAAG;AAAA,MACxB;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,QAAM,UAAU,YAAY,QAAQ;AAAA,IAClC,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,OAAO,SAAS;AAAA,EAC9C;AACA,QAAM,SAAS,YAAY,QAAQ;AAAA,IACjC,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,OAAO,WAAW;AAAA,EAChD;AACA,QAAM,SAAS,YAAY,QAAQ;AAAA,IACjC,CAAC,MAAM,EAAE,gBAAgB,EAAE;AAAA,EAC7B;AACA,QAAM,0BAA0B,YAAY,QAAQ;AAAA,IAClD,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,SAAS;AAAA,EAC7C;AAEA,QAAM,aAAa,CAAC,YAAY;AAChC,MAAI,QAAS,YAAW,KAAK,MAAM;AACnC,MAAI,OAAQ,YAAW,KAAK,KAAK;AACjC,MAAI,QAAS,YAAW,KAAK,MAAM;AACnC,MAAI,OAAQ,YAAW,KAAK,KAAK;AACjC,MAAI,wBAAyB,YAAW,KAAK,OAAO;AAEpD,MAAI,gBAAgB,YAAY,WAAW;AAAA,IACzC;AAAA,EACF,CAAC;AAAA;AAED,eAAa,QAAQ,CAAC,KAAK,WAAW;AACpC,UAAM,cAAc,MAAM,KAAK,GAAG,EAAE,OAAO,CAAC,OAAO,OAAO,WAAW;AACrE,QAAI,YAAY,SAAS,GAAG;AAC1B,uBAAiB,YAAY,YAAY;AAAA,QACvC;AAAA,MACF,CAAC,YAAY,MAAM;AAAA;AAAA,IACrB;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAEA,SAAS,gBAAgB,aAAkC;AACzD,SAAO,YAAY,QAChB,IAAI,CAAC,MAAM,eAAe,GAAG,YAAY,SAAS,CAAC,EACnD,KAAK,MAAM;AAChB;AAEA,SAAS,eAAe,QAAuB,aAA6B;AAC1E,QAAM,YAAY,OAAO,OAAO,SAAS;AACzC,QAAM,kBAAkB,eAAe,WAAW;AAElD,MAAI,OAAO,cAAc;AACvB,UAAM,cAAc,YAChB,OAAO,OACJ,IAAI,CAAC,MAAM,WAAW,EAAE,IAAI,MAAM,EAAE,IAAI,KAAK,EAAE,IAAI,EAAE,EACrD,KAAK,IAAI,IACZ;AACJ,UAAMC,QAAO,mBAAmB,QAAQ,iBAAiB,KAAK;AAC9D,UAAM,iBAAiB,OAAO,cAAc;AAE5C,WAAO,WAAW,OAAO,IAAI;AAAA,IAC7B,OAAO,IAAI,IAAI,WAAW,MAAM,cAAc,IAAI,OAAO,UAAU;AAAA,EACrEA,KAAI;AAAA;AAAA,EAEJ;AAEA,QAAM,YAAY,YAAY,SAAS;AACvC,QAAM,YAAY,YAAY,sBAAsB;AACpD,QAAM,OAAO,mBAAmB,QAAQ,iBAAiB,IAAI;AAE7D,SAAO,MAAM,SAAS,KAAK,OAAO,IAAI;AAAA,UAC9B,OAAO,IAAI,IAAI,SAAS,cAAc,OAAO,UAAU;AAAA,EAC/D,IAAI;AAAA;AAEN;AAEA,SAAS,mBACP,QACA,iBACA,SACQ;AACR,QAAM,QAAkB,CAAC;AACzB,QAAM,YAAY,OAAO,OAAO,SAAS;AAEzC,MAAI,aAAa,OAAO,gBAAgB,OAAO,aAAa,SAAS,GAAG;AACtE,WAAO,OAAO,QAAQ,CAAC,GAAG,MAAM;AAC9B,YAAM;AAAA,QACJ,sBAAsB,WAAW,EAAE,IAAI,CAAC,MACtC,OAAO,aAAa,CAAC,CACvB,UAAU,EAAE,IAAI;AAAA,MAClB;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,aAAa,CAAC,OAAO,cAAc;AACrC,QAAI,OAAO,aAAa,SAAS,GAAG;AAClC,YAAM;AAAA,QACJ;AAAA,MACF;AACA,aAAO,OAAO,QAAQ,CAAC,GAAG,MAAM;AAC9B,cAAM;AAAA,UACJ,aAAa,EAAE,IAAI,MAAM,OAAO,aAAa,CAAC,CAAC,YAAY,EAAE,IAAI;AAAA,QACnE;AAAA,MACF,CAAC;AAAA,IACH,OAAO;AACL,YAAM,aAAa,OAAO,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,IAAI;AAC7D,YAAM,KAAK,eAAe,UAAU,kBAAkB;AAAA,IACxD;AAAA,EACF;AAEA,MAAI;AACJ,MAAI,aAAa,OAAO,gBAAgB,OAAO,aAAa,SAAS,GAAG;AACtE,eAAW,OAAO,OACf,IAAI,CAAC,MAAM,YAAY,WAAW,EAAE,IAAI,CAAC,EAAE,EAC3C,KAAK,IAAI;AAAA,EACd,OAAO;AACL,eAAW,OAAO,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,IAAI;AAAA,EACvD;AACA,QAAM,cAAc,GAAG,eAAe,IAAI,OAAO,IAAI,IAAI,QAAQ;AAEjE,MAAI,OAAO,gBAAgB,SAAS;AAClC,UAAM,KAAK,8BAA8B,WAAW,GAAG;AACvD,UAAM,KAAK,cAAc,OAAO,YAAY,cAAc;AAAA,EAC5D,WAAW,SAAS;AAClB,UAAM,KAAK,mBAAmB,WAAW,GAAG;AAAA,EAC9C,OAAO;AACL,UAAM,KAAK,mBAAmB,WAAW,GAAG;AAAA,EAC9C;AAEA,SAAO,MAAM,KAAK,IAAI;AACxB;;;AEhOA,YAAYC,WAAU;AACtB,SAAS,kBAAkB;AAC3B,SAAS,aAAAC,YAAW,iBAAiB;AAmB9B,SAAS,mBAAmB,UAAkB,MAAsB;AACzE,QAAM,OAAO,WAAW,KAAK,EAAE,OAAO,QAAQ,EAAE,OAAO,KAAK,EAAE,MAAM,GAAG,CAAC;AACxE,QAAM,kBAAkB,SAAS,MAAM,OAAO,EAAE,CAAC;AACjD,QAAM,SAAc,YAAM,eAAe;AAEzC,QAAM,WAAgB,WAAK,OAAO,OAAO,KAAK,OAAO,IAAI;AAEzD,QAAM,MAAMA,WAAU,MAAM;AAAA,IAC1B,QAAQ;AAAA,IACR,KAAK,SAAS,SAAS,GAAG;AAAA,IAC1B,YAAY;AAAA,EACd,CAAC;AAED,QAAM,YAAuB,CAAC;AAC9B,aAAW,QAAQ,IAAI,MAAM;AAC3B,QAAI,KAAK,SAAS,qBAAqB;AACrC,YAAM,OAAO;AACb,iBAAW,aAAa,KAAK,cAAc,CAAC,GAAG;AAC7C,YAAI;AACJ,YAAI,UAAU,SAAS,mBAAmB;AACxC,sBAAY,UAAU,MAAM;AAAA,QAC9B,WAAW,UAAU,SAAS,0BAA0B;AACtD,sBAAY,UAAU,MAAM;AAAA,QAC9B,OAAO;AACL;AAAA,QACF;AACA,kBAAU,SAAS,IAAI,KAAK,OAAO;AAAA,MACrC;AAAA,IACF;AAAA,EACF;AAEA,QAAM,iBAA+B,CAAC;AACtC,QAAM,iBAA8B,CAAC;AAErC,aAAW,QAAQ,IAAI,MAAM;AAC3B,QAAI,aAAa;AAEjB,QACE,KAAK,SAAS,uBACd,KAAK,aAAa,SAAS,oBAC3B;AACA,YAAM,YAAY,KAAK;AAEvB,UAAI,sBAAsB,UAAU,UAAU,GAAG;AAC/C,qBAAa;AACb,cAAM,OAAO,iBAAiB,SAAS;AACvC,YAAI,MAAM;AACR,yBAAe,KAAK,IAAI;AAAA,QAC1B;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,YAAY;AACf,qBAAe,KAAK,IAAI;AAAA,IAC1B;AAAA,EACF;AAEA,QAAM,gBACJ,eAAe,SAAS,IACpB,UAAU;AAAA,IACR,MAAM;AAAA,IACN,MAAM,IAAI;AAAA,IACV,MAAM;AAAA,IACN,aAAa,IAAI;AAAA,EACnB,CAAC,EAAE,OACH;AAEN,QAAM,WAAW,eACd,IAAI,CAAC,SAAS,kBAAkB,MAAM,MAAM,QAAQ,CAAC,EACrD,KAAK,MAAM;AAEd,SAAO;AAAA,EACP,aAAa;AAAA,EACb,QAAQ;AAAA,IACN,KAAK;AACT;AAEA,SAAS,sBAAsB,YAAmC;AAChE,MAAI,CAAC,WAAY,QAAO;AACxB,SAAO,WAAW,KAAK,CAAC,cAAc;AACpC,UAAM,OAAO,UAAU;AACvB,QAAI,KAAK,SAAS,gBAAgB,KAAK,UAAU,aAAa;AAC5D,aAAO;AAAA,IACT;AACA,QACE,KAAK,SAAS,oBACd,KAAK,OAAO,SAAS,gBACrB,KAAK,OAAO,UAAU,aACtB;AACA,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT,CAAC;AACH;AAEA,SAAS,iBAAiB,WAA+C;AACvE,QAAM,YAAY,UAAU,YAAY;AACxC,MAAI,CAAC,UAAW,QAAO;AAEvB,MAAI,YAAY;AAChB,QAAM,aAAuB,CAAC;AAC9B,QAAM,oBAA8B,CAAC;AAErC,MAAI,UAAU,YAAY;AACxB,eAAW,OAAO,UAAU,YAAY;AACtC,YAAM,MAAM,mBAAmB,GAAG;AAClC,UAAI,IAAK,YAAW,KAAK,GAAG;AAAA,IAC9B;AAAA,EACF;AAEA,aAAW,UAAU,UAAU,MAAM;AACnC,QAAI,OAAO,SAAS,iBAAiB;AACnC,UAAI,OAAO,IAAI,SAAS,gBAAgB,OAAO,IAAI,UAAU,SAAS;AACpE,oBAAY,iBAAiB,MAAM;AAAA,MACrC;AAAA,IACF,WAAW,OAAO,SAAS,eAAe;AACxC,iBAAW,SAAS,OAAO,QAAQ;AACjC,cAAM,WAAW,eAAe,KAAK;AACrC,YAAI,SAAU,mBAAkB,KAAK,QAAQ;AAAA,MAC/C;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,mBAAmB,WAA8B;AAC/D,QAAM,WAAW,UAAU;AAAA,IACzB,MAAM;AAAA,IACN,MAAM,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,EAAE;AAAA,IAClC,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,YAAY,UAAU;AAAA,QACtB,MAAM,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,EAAE;AAAA,MACpC;AAAA,IACF;AAAA,IACA,aAAa;AAAA,EACf,CAAC,EAAE;AAEH,QAAM,YAAY,SAAS,QAAQ,WAAW,EAAE,EAAE,KAAK;AAEvD,SAAO,IAAI,UAAU,QAAQ,MAAM,EAAE,CAAC;AACxC;AAEA,SAAS,iBAAiB,QAAqB;AAC7C,QAAM,UAAU,OAAO,gBAAgB;AACvC,MAAI,CAAC,QAAS,QAAO;AAErB,MAAI,QAAQ,SAAS,iBAAiB;AACpC,UAAM,QAAkB,CAAC;AACzB,eAAW,KAAK,QAAQ,SAAS;AAC/B,UAAI,EAAE,SAAS,uBAAuB;AACpC,cAAM,MAAM,EAAE,IAAI,SAAS,eAAe,EAAE,IAAI,QAAQ;AACxD,cAAM,IAAI,EAAE,iBACRC,eAAc,EAAE,eAAe,cAAc,IAC7C;AACJ,cAAM,KAAK,GAAG,GAAG,KAAK,CAAC,EAAE;AAAA,MAC3B;AAAA,IACF;AACA,WAAO,KAAK,MAAM,KAAK,IAAI,CAAC;AAAA,EAC9B;AAEA,SAAOA,eAAc,OAAO;AAC9B;AAEA,SAAS,eAAe,OAAoB;AAC1C,MAAI,aAAuB,CAAC;AAC5B,MAAI,MAAM,YAAY;AACpB,eAAW,KAAK,MAAM,YAAY;AAChC,YAAM,MAAM,mBAAmB,CAAC;AAChC,UAAI,IAAK,YAAW,KAAK,GAAG;AAAA,IAC9B;AAAA,EACF;AACA,QAAM,kBAAkB,WAAW,SAAS,WAAW,KAAK,GAAG,IAAI,MAAM;AAEzE,MAAI,WAAW;AACf,MAAI,YAAY;AAChB,MAAI,gBAAgB;AAEpB,MAAI,MAAM,SAAS,uBAAuB;AACxC,oBAAgB,MAAM,iBAAiB;AACvC,UAAM,QAAQ,MAAM;AACpB,QAAI,MAAM,SAAS,aAAc,QAAO;AAExC,gBAAY,MAAM;AAClB,QAAI,MAAM,gBAAgB,gBAAgB;AACxC,iBAAW,gBAAgB,MAAM,eAAe,cAAc;AAAA,IAChE;AAAA,EACF,WAAW,MAAM,SAAS,aAAa;AACrC,UAAM,MAAM,MAAM;AAClB,QAAI,IAAI,SAAS,aAAc,QAAO;AAEtC,gBAAY,IAAI;AAChB,QAAI,IAAI,gBAAgB,gBAAgB;AACtC,iBAAW,gBAAgB,IAAI,eAAe,cAAc;AAAA,IAC9D;AAAA,EACF,OAAO;AACL,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,gBAAgB,GAAG,aAAa,MAAM;AAC3D,QAAM,SAAS,GAAG,eAAe,GAAG,YAAY,GAAG,SAAS,KAAK,QAAQ;AAEzE,SAAO;AACT;AAEA,SAAS,gBAAgB,UAAuB;AAC9C,MACE,SAAS,SAAS,qBAClB,SAAS,SAAS,SAAS,cAC3B;AACA,WAAO,SAAS,SAAS;AAAA,EAC3B;AACA,SAAOA,eAAc,QAAQ;AAC/B;AAEA,SAASA,eAAc,UAAuB;AAC5C,MAAI,CAAC,SAAU,QAAO;AAEtB,UAAQ,SAAS,MAAM;AAAA,IACrB,KAAK;AACH,aAAO,SAAS;AAAA,IAClB,KAAK;AACH,UAAI,SAAS,SAAS,SAAS;AAC7B,eAAO,SAAS,SAAS;AAC3B,UAAI,SAAS,SAAS,SAAS,mBAAmB;AAChD,eAAO,GAAG,uBAAuB,SAAS,SAAS,IAAI,CAAC,IACtD,SAAS,SAAS,MAAM,KAC1B;AAAA,MACF;AACA,aAAO;AAAA,IACT,KAAK;AACH,aAAO,GAAGA,eAAc,SAAS,QAAQ,CAAC;AAAA,IAC5C,KAAK;AACH,aAAO,SAAS,MAAM,IAAIA,cAAa,EAAE,KAAK,KAAK;AAAA,IACrD,KAAK;AACH,aAAO,SAAS,MAAM,IAAIA,cAAa,EAAE,KAAK,KAAK;AAAA,IACrD;AACE,aAAO;AAAA,EACX;AACF;AAEA,SAAS,uBAAuB,MAAmB;AACjD,MAAI,KAAK,SAAS,aAAc,QAAO,KAAK;AAC5C,MAAI,KAAK,SAAS,mBAAmB;AACnC,WAAO,GAAG,uBAAuB,KAAK,IAAI,CAAC,IAAI,KAAK,MAAM,KAAK;AAAA,EACjE;AACA,SAAO;AACT;AAEA,SAAS,kBACP,MACA,MACA,UACQ;AACR,QAAM,WAAW,GAAG,KAAK,IAAI,IAAI,IAAI;AACrC,QAAM,aAAa,IAAI,QAAQ;AAC/B,QAAM,gBACJ,KAAK,WAAW,SAAS,IAAI,KAAK,WAAW,KAAK,IAAI,IAAI,OAAO;AAEnE,QAAM,iBAAiB,KAAK,kBAAkB,SAC1C,eAAe,KAAK,kBAAkB,KAAK,IAAI,CAAC,SAChD;AAEJ,SAAO;AAAA,EACP,aAAa,gBAAgB,KAAK,IAAI;AAAA,YAC5B,KAAK,SAAS;AAAA,IACtB,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,aAKL,QAAQ;AAAA,eACN,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA,iBAIP,QAAQ;AAAA,mBACN,UAAU;AAAA,mBACV,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO1B,KAAK;AACP;;;ACrSA,IAAM,iBAAN,MAAqB;AAAA,EACnB,YAAoB,GAAsB;AAAtB;AAAA,EAAuB;AAAA,EAE3C,eAAe,MAA4D;AACzE,WACE,KAAK,EAAE,mBAAmB,IAAI,KAC9B,KAAK,EAAE,aAAa,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AAAA,EAExD;AAAA,EAEA,wBACE,MACqC;AACrC,WACE,KAAK,EAAE,mBAAmB,IAAI,KAC9B,KAAK,EAAE,aAAa,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAAA,EAEzD;AACF;AAEA,IAAM,eAAN,MAAmB;AAAA,EACjB,YAAoB,GAA8B,QAAwB;AAAtD;AAA8B;AAAA,EAAyB;AAAA,EAE3E,UAAU,MAAoD;AAC5D,QACE,KAAK,OAAO,eAAe,IAAI,KAC/B,KAAK,OAAO,wBAAwB,IAAI,GACxC;AACA,aAAO,KAAK;AAAA,IACd;AACA,WAAO;AAAA,EACT;AAAA,EAEA,oBAA+C,MAAY;AACzD,UAAM,SAAS,KAAK,EAAE,UAAU,MAAM,IAAI;AAC1C,SAAK,iBAAiB,QAAQ,CAAC,MAAW;AACxC,UAAI,KAAK,EAAE,iBAAiB,CAAC,GAAG;AAC9B,eAAO,OAAO,GAAG,KAAK,EAAE,WAAW,MAAM,CAAC;AAAA,MAC5C;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEQ,iBAAiB,MAAWC,YAAsC;AACxE,QAAI,CAAC,QAAQ,OAAO,SAAS,SAAU;AAEvC,IAAAA,WAAU,IAAI;AAEd,eAAW,OAAO,MAAM;AACtB,UAAI,KAAK,cAAc,GAAG,EAAG;AAE7B,YAAM,QAAQ,KAAK,GAAG;AACtB,UAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,cAAM,QAAQ,CAAC,SAAS,KAAK,iBAAiB,MAAMA,UAAS,CAAC;AAAA,MAChE,WAAW,SAAS,OAAO,UAAU,UAAU;AAC7C,aAAK,iBAAiB,OAAOA,UAAS;AAAA,MACxC;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,cAAc,KAAsB;AAC1C,WAAO,CAAC,OAAO,SAAS,OAAO,OAAO,EAAE,SAAS,GAAG;AAAA,EACtD;AAAA,EAEA,sBAAsB,MAAqC;AACzD,UAAM,QAAQ,KAAK,MAAM,GAAG;AAC5B,QAAI,OAA8B,KAAK,EAAE,WAAW,MAAM,CAAC,CAAC;AAC5D,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,aAAO,KAAK,EAAE,iBAAiB,MAAM,KAAK,EAAE,WAAW,MAAM,CAAC,CAAC,CAAC;AAAA,IAClE;AACA,WAAO;AAAA,EACT;AAAA,EAEA,mBACE,MACA,YACM;AACN,UAAM,cAAc,KAAK;AAAA,MAAU,CAAC,SAClC,KAAK,EAAE,kBAAkB,IAAI;AAAA,IAC/B;AACA,QAAI,gBAAgB,IAAI;AACtB,WAAK,OAAO,aAAa,GAAG,GAAG,UAAU;AAAA,IAC3C,OAAO;AACL,WAAK,KAAK,GAAG,UAAU;AAAA,IACzB;AAAA,EACF;AAAA,EAEA,iBACE,OACA,YACwB;AACxB,UAAM,YAAY,MAAM,sBAAsB,SAAS;AAEvD,WAAO;AAAA;AAAA,MAEL,KAAK,EAAE,oBAAoB,SAAS;AAAA,QAClC,KAAK,EAAE,mBAAmB,WAAW,UAAU;AAAA,MACjD,CAAC;AAAA;AAAA,MAED,KAAK,EAAE;AAAA,QACL,KAAK,EAAE;AAAA,UACL;AAAA,UACA,KAAK,EAAE;AAAA,YACL,KAAK,EAAE,WAAW,MAAM;AAAA,YACxB,KAAK,EAAE,WAAW,WAAW;AAAA,UAC/B;AAAA,UACA,KAAK,EAAE,gBAAgB;AAAA,YACrB,KAAK,EAAE;AAAA,cACL,KAAK,EAAE;AAAA,gBACL;AAAA,gBACA,KAAK,EAAE;AAAA,kBACL,KAAK,EAAE,WAAW,MAAM;AAAA,kBACxB,KAAK,EAAE,WAAW,WAAW;AAAA,gBAC/B;AAAA,gBACA,KAAK,EAAE,gBAAgB,CAAC,CAAC;AAAA,cAC3B;AAAA,YACF;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,eAAN,MAAmB;AAAA,EACjB,YAAoB,GAAsB;AAAtB;AAAA,EAAuB;AAAA,EAE3C,iBACE,UAIe;AACf,QAAI,KAAK,EAAE,gBAAgB,QAAQ,GAAG;AACpC,aAAO,SAAS;AAAA,IAClB;AAEA,QAAI,KAAK,EAAE,sBAAsB,QAAQ,GAAG;AAC1C,YAAM,QAAkB,CAAC;AACzB,UAAI,UACF;AAEF,aAAO,KAAK,EAAE,sBAAsB,OAAO,GAAG;AAC5C,cAAM,QAAQ,QAAQ,SAAS,IAAI;AACnC,kBAAU,QAAQ;AAAA,MACpB;AAEA,UAAI,KAAK,EAAE,gBAAgB,OAAO,GAAG;AACnC,cAAM,QAAQ,QAAQ,IAAI;AAAA,MAC5B;AAEA,aAAO,MAAM,KAAK,GAAG;AAAA,IACvB;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,eAAe,KAA6B;AAC1C,WAAO,MAAM,SAAS,KAAK,GAAG,IAAI;AAAA,EACpC;AACF;AAEA,IAAM,oBAAN,MAAwB;AAAA,EACtB,YAAoB,GAA8B,QAAwB;AAAtD;AAA8B;AAAA,EAAyB;AAAA,EAE3E,iBAAiB,MAA+B;AAC9C,WAAO,KAAK,cAAc,IAAI;AAAA,EAChC;AAAA,EAEQ,cAAc,MAAmB;AACvC,QAAI,CAAC,KAAM,QAAO;AAClB,QAAI,KAAK,EAAE,iBAAiB,IAAI,EAAG,QAAO;AAC1C,QAAI,KAAK,EAAE,aAAa,IAAI,EAAG,QAAO,KAAK;AAE3C,QAAI,KAAK,EAAE,mBAAmB,IAAI,GAAG;AACnC,YAAM,MAAM,KAAK,cAAc,KAAK,MAAM;AAC1C,YAAM,OAAO,KAAK,WACd,IAAI,KAAK,cAAc,KAAK,QAAQ,CAAC,MACrC,IAAK,KAAK,SAAmC,IAAI;AACrD,aAAO,MAAM;AAAA,IACf;AAEA,QAAI,KAAK,EAAE,iBAAiB,IAAI,GAAG;AACjC,YAAM,SAAS,KAAK,cAAc,KAAK,MAAM;AAC7C,YAAM,OAAO,KAAK,UACf,IAAI,CAAC,QAAQ,KAAK,cAAc,GAAG,CAAC,EACpC,KAAK,GAAG;AACX,aAAO,GAAG,MAAM,IAAI,IAAI;AAAA,IAC1B;AAEA,QAAI,KAAK,EAAE,gBAAgB,IAAI,EAAG,QAAO,IAAI,KAAK,KAAK;AACvD,QAAI,KAAK,EAAE,iBAAiB,IAAI,EAAG,QAAO,OAAO,KAAK,KAAK;AAE3D,WAAO,KAAK,OAAO,KAAK,UAAU,KAAK,QAAQ,KAAK,SAAS,EAAE;AAAA,EACjE;AAAA,EAEA,mBACE,MACA,aACA,UACM;AACN,SAAK,SAAS,MAAM,CAAC,MAAW;AAC9B,UAAI,KAAK,OAAO,wBAAwB,CAAC,GAAG;AAC1C,cAAM,aAAa,SAAS;AAAA,UAC1B,EAAE;AAAA,QACJ;AACA,cAAM,MAAM,KAAK,iBAAiB,UAAU;AAC5C,YAAI,CAAC,YAAY,IAAI,GAAG,GAAG;AACzB,sBAAY,IAAI,KAAK,UAAU;AAAA,QACjC;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,8BACE,MACA,mBACA,UACG;AACH,UAAM,SAAS,KAAK,EAAE,UAAU,MAAM,IAAI;AAE1C,SAAK,SAAS,QAAQ,CAAC,MAAW;AAChC,UAAI,KAAK,OAAO,wBAAwB,CAAC,GAAG;AAC1C,cAAM,aAAa,SAAS,oBAAoB,EAAE,MAAM;AACxD,cAAM,MAAM,KAAK,iBAAiB,UAAU;AAC5C,cAAM,WAAW,kBAAkB,IAAI,GAAG;AAE1C,YAAI,UAAU;AACZ,YAAE,SAAS;AACX,YAAE,WAAW,KAAK,EAAE,WAAW,OAAO;AAAA,QACxC;AAAA,MACF;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEQ,SAAS,MAAW,UAAqC;AAC/D,QAAI,CAAC,QAAQ,OAAO,SAAS,SAAU;AAEvC,aAAS,IAAI;AAEb,eAAW,OAAO,MAAM;AACtB,UAAI,CAAC,OAAO,SAAS,OAAO,OAAO,EAAE,SAAS,GAAG,EAAG;AAEpD,YAAM,QAAQ,KAAK,GAAG;AACtB,UAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,cAAM,QAAQ,CAAC,SAAS,KAAK,SAAS,MAAM,QAAQ,CAAC;AAAA,MACvD,WAAW,SAAS,OAAO,UAAU,UAAU;AAC7C,aAAK,SAAS,OAAO,QAAQ;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,qBAAN,MAAyB;AAAA,EACvB,YACU,GACA,QACA,UACA,UACA,mBACR;AALQ;AACA;AACA;AACA;AACA;AAAA,EACP;AAAA,EAEH,iBACEC,QACA,OACAC,UACiB;AACjB,QAAI,KAAK,EAAE,cAAcD,OAAK,IAAI,GAAG;AACnC,aAAO,KAAK;AAAA,QACVA;AAAA,QACA;AAAA,QACAC;AAAA,MACF;AAAA,IACF;AACA,WAAO,KAAK;AAAA,MACVD;AAAA,MACA;AAAA,MACAC;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,oBACND,QACA,OACAC,UACiB;AACjB,UAAM,aAAaD,OAAK;AACxB,UAAM,MAAM,KAAK,SAAS,iBAAiB,WAAW,eAAe,IAAI;AACzE,UAAM,cAAc,KAAK,SAAS,eAAe,GAAG;AAEpD,QAAI,eAAe,KAAK;AACtB,aAAO,KAAK,0BAA0B,YAAY,KAAK,OAAOC,QAAO;AAAA,IACvE,WAAW,KAAK;AACd,aAAO,KAAK,oBAAoB,YAAY,KAAK,OAAOA,QAAO;AAAA,IACjE;AAEA,WAAO;AAAA,MACL,IAAI,MAAM,sBAAsB,IAAI;AAAA,MACpC,YAAY,CAAC;AAAA,IACf;AAAA,EACF;AAAA,EAEQ,0BACN,YACA,KACA,OACAA,UACiB;AACjB,UAAM,OAAO,MAAM,sBAAsB,IAAI;AAC7C,UAAM,aAAqC,CAAC;AAC5C,UAAM,QAIF,CAAC;AACL,UAAM,WAAyC,CAAC;AAEhD,SAAK;AAAA,MACH,WAAW,eAAe;AAAA,MAC1B;AAAA,MACAA;AAAA,IACF;AAEA,SAAK;AAAA,MACH,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACAA;AAAA,IACF;AAEA,QAAI,SAAS,SAAS,GAAG;AACvB,YAAM;AAAA,QACJ,KAAK,EAAE;AAAA,UACL,KAAK,EAAE,WAAW,UAAU;AAAA,UAC5B,SAAS,WAAW,IAAI,SAAS,CAAC,IAAI,KAAK,EAAE,gBAAgB,QAAQ;AAAA,QACvE;AAAA,MACF;AAAA,IACF;AAEA,eAAW;AAAA,MACT,KAAK,EAAE,oBAAoB,OAAO;AAAA,QAChC,KAAK,EAAE;AAAA,UACL;AAAA,UACA,KAAK,EAAE,eAAe,KAAK,EAAE,WAAW,kBAAkB,GAAG;AAAA,YAC3D,KAAK,SAAS,sBAAsB,GAAG;AAAA,YACvC,KAAK,EAAE,iBAAiB,KAAK;AAAA,YAC7B,KAAK,EAAE,WAAW,MAAM;AAAA,UAC1B,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WAAO,EAAE,IAAI,MAAM,WAAW;AAAA,EAChC;AAAA,EAEQ,oBACN,YACA,KACA,OACAA,UACiB;AACjB,UAAM,OAAO,MAAM,sBAAsB,IAAI;AAC7C,UAAM,aAAqC,CAAC;AAE5C,eAAW;AAAA,MACT,KAAK,EAAE,oBAAoB,OAAO;AAAA,QAChC,KAAK,EAAE;AAAA,UACL;AAAA,UACA,KAAK,EAAE;AAAA,YACL,KAAK,EAAE;AAAA,cACL,KAAK,EAAE,WAAW,UAAU;AAAA,cAC5B,KAAK,EAAE,WAAW,eAAe;AAAA,YACnC;AAAA,YACA,CAAC,KAAK,EAAE,cAAc,GAAG,CAAC;AAAA,UAC5B;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,EAAE,QAAQ,UAAU,kBAAkB,mBAAmB,IAC7D,KAAK;AAAA,MACH,WAAW,eAAe;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,MACAA;AAAA,MACA;AAAA,IACF;AAEF,QAAI,UAAU,UAAU;AACtB,iBAAW;AAAA,QACT,KAAK,EAAE;AAAA,UACL,KAAK,EAAE,qBAAqB,KAAK,UAA6B,IAAI;AAAA,QACpE;AAAA,MACF;AAAA,IACF;AAUA,QAAI,oBAAoB,oBAAoB;AAC1C,YAAM,aAAa,KAAK,EAAE,eAAe,KAAK,EAAE,WAAW,SAAS,GAAG;AAAA,QACrE,KAAK,EAAE;AAAA,UACL,CAAC;AAAA,UACD,KAAK,EAAE;AAAA,YACL;AAAA,YACA,KAAK,EAAE,iBAAiB,MAAM,KAAK,EAAE,WAAW,WAAW,CAAC;AAAA,YAC5D,KAAK,EAAE;AAAA,cACL;AAAA,cACA,KAAK,EAAE,WAAW,QAAQ;AAAA,YAC5B;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAED,YAAM,oBAAoB,KAAK,SAAS;AAAA,QACtC;AAAA,QACA;AAAA,MACF;AAEA,iBAAW,KAAK,GAAG,iBAAiB;AAAA,IACtC;AAEA,QAAI,CAAC,kBAAkB;AACrB,WAAK;AAAA,QACH,WAAW;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,QACAA;AAAA,MACF;AAAA,IACF;AAEA,WAAO,EAAE,IAAI,MAAM,WAAW;AAAA,EAChC;AAAA,EAEQ,kBACND,QACA,OACAC,UACiB;AACjB,UAAM,SAAS,MAAM,sBAAsB,MAAM;AACjD,UAAM,aAAqC,CAAC;AAE5C,eAAW;AAAA,MACT,KAAK,EAAE,oBAAoB,OAAO;AAAA,QAChC,KAAK,EAAE;AAAA,UACL;AAAA,UACA,KAAK,EAAE;AAAA,YACL,KAAK,EAAE;AAAA,cACL,KAAK,EAAE,WAAW,UAAU;AAAA,cAC5B,KAAK,EAAE,WAAW,wBAAwB;AAAA,YAC5C;AAAA,YACA,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAEA,SAAK;AAAA,MACHD,OAAK,KAAK;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACAC;AAAA,IACF;AAEA,WAAO,EAAE,IAAI,QAAQ,WAAW;AAAA,EAClC;AAAA,EAEQ,2BACN,YACA,OAKAA,UACM;AACN,eAAW,QAAQ,YAAY;AAC7B,UAAI,KAAK,EAAE,qBAAqB,IAAI,GAAG;AACrC,aAAK,kBAAkB;AAAA,UACrB,KAAK;AAAA,UACLA,SAAQ;AAAA,UACR,KAAK;AAAA,QACP;AACA,cAAM,WAAW,KAAK,kBAAkB;AAAA,UACtC,KAAK;AAAA,UACLA,SAAQ;AAAA,UACR,KAAK;AAAA,QACP;AACA,cAAM;AAAA,UACJ,KAAK,EAAE,cAAc,KAAK,SAAS,oBAAoB,QAAQ,CAAC;AAAA,QAClE;AACA;AAAA,MACF;AAEA,YAAM,MAAO,KAAK,KAAkC;AAEpD,UAAI,KAAK,EAAE,gBAAgB,KAAK,KAAK,GAAG;AACtC,cAAM,KAAK,KAAK,EAAE,eAAe,KAAK,EAAE,WAAW,GAAG,GAAG,KAAK,KAAK,CAAC;AAAA,MACtE,WAAW,KAAK,EAAE,yBAAyB,KAAK,KAAK,GAAG;AACtD,cAAM,OAAO,KAAK,MAAM;AACxB,aAAK,kBAAkB;AAAA,UACrB;AAAA,UACAA,SAAQ;AAAA,UACR,KAAK;AAAA,QACP;AAEA,YACE,KAAK,OAAO,eAAe,IAAI,KAC/B,KAAK,OAAO,wBAAwB,IAAI,GACxC;AACA,gBAAM,WAAW,KAAK,kBAAkB;AAAA,YACtC;AAAA,YACAA,SAAQ;AAAA,YACR,KAAK;AAAA,UACP;AACA,gBAAM;AAAA,YACJ,KAAK,EAAE;AAAA,cACL;AAAA,cACA,KAAK,EAAE,WAAW,GAAG;AAAA,cACrB,CAAC;AAAA,cACD,KAAK,EAAE,eAAe;AAAA,gBACpB,KAAK,EAAE;AAAA,kBACL,KAAK,SAAS,oBAAoB,QAAQ;AAAA,gBAC5C;AAAA,cACF,CAAC;AAAA,YACH;AAAA,UACF;AAAA,QACF,OAAO;AACL,gBAAM,WAAW,KAAK,kBAAkB;AAAA,YACtC;AAAA,YACAA,SAAQ;AAAA,YACR,KAAK;AAAA,UACP;AACA,gBAAM;AAAA,YACJ,KAAK,EAAE;AAAA,cACL,KAAK,EAAE,WAAW,GAAG;AAAA,cACrB,KAAK,SAAS,oBAAoB,QAAQ;AAAA,YAC5C;AAAA,UACF;AAAA,QACF;AAAA,MACF,OAAO;AACL,cAAM;AAAA,UACJ,KAAK,EAAE;AAAA,YACL,KAAK,EAAE,WAAW,GAAG;AAAA,YACrB,KAAK,EAAE,eAAe,IAAI;AAAA,UAC5B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,qBACN,YACA,MACA,YACA,OACAA,UACA,KAMA;AACA,QAAI,SAAS;AACb,QAAI,WAAyC;AAC7C,QAAI,mBAAmB;AACvB,QAAI,qBAAmD;AACvD,QAAI,kBAAkB;AACtB,QAAI,YAA2B;AAE/B,eAAW,QAAQ,YAAY;AAC7B,UAAI,KAAK,EAAE,qBAAqB,IAAI,GAAG;AACrC,aAAK,kBAAkB;AAAA,UACrB,KAAK;AAAA,UACLA,SAAQ;AAAA,UACR,KAAK;AAAA,QACP;AACA,cAAM,WAAW,KAAK,kBAAkB;AAAA,UACtC,KAAK;AAAA,UACLA,SAAQ;AAAA,UACR,KAAK;AAAA,QACP;AAEA,cAAM,aAAa,KAAK,EAAE,eAAe,KAAK,EAAE,WAAW,SAAS,GAAG;AAAA,UACrE,KAAK,EAAE;AAAA,YACL,CAAC;AAAA,YACD,KAAK,EAAE,eAAe,KAAK,EAAE,WAAW,SAAS,GAAG;AAAA,cAClD;AAAA,cACA,KAAK,SAAS,oBAAoB,QAAQ;AAAA,YAC5C,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAED,cAAM,oBAAoB,KAAK,SAAS;AAAA,UACtC;AAAA,UACA;AAAA,QACF;AAEA,mBAAW,KAAK,GAAG,iBAAiB;AAEpC;AAAA,MACF;AAEA,YAAM,MAAO,KAAK,KAAkC;AAEpD,UAAI,QAAQ,OAAO;AACjB,iBAAS;AACT,YAAI,KAAK,EAAE,yBAAyB,KAAK,KAAK,GAAG;AAC/C,eAAK,kBAAkB;AAAA,YACrB,KAAK,MAAM;AAAA,YACXA,SAAQ;AAAA,YACR,KAAK;AAAA,UACP;AACA,gBAAM,WAAW,KAAK,kBAAkB;AAAA,YACtC,KAAK,MAAM;AAAA,YACXA,SAAQ;AAAA,YACR,KAAK;AAAA,UACP;AACA,qBAAW,KAAK,SAAS,oBAAoB,QAAQ;AAAA,QACvD;AACA;AAAA,MACF;AAEA,UAAI,QAAQ,2BAA2B;AACrC,2BAAmB;AACnB,YAAI,KAAK,EAAE,yBAAyB,KAAK,KAAK,GAAG;AAC/C,eAAK,kBAAkB;AAAA,YACrB,KAAK,MAAM;AAAA,YACXA,SAAQ;AAAA,YACR,KAAK;AAAA,UACP;AACA,gBAAM,WAAW,KAAK,kBAAkB;AAAA,YACtC,KAAK,MAAM;AAAA,YACXA,SAAQ;AAAA,YACR,KAAK;AAAA,UACP;AACA,+BAAqB,KAAK,SAAS,oBAAoB,QAAQ;AAAA,QACjE;AACA;AAAA,MACF;AAEA,UAAI,WAAW,KAAK,GAAG,GAAG;AACxB,YAAI,QAAQ,WAAW;AACrB,4BAAkB;AAAA,QACpB;AACA,aAAK,qBAAqB,KAAK,MAAM,MAAM,YAAYA,QAAO;AAC9D;AAAA,MACF;AAEA,UAAI,QAAQ,UAAU,KAAK,EAAE,gBAAgB,KAAK,KAAK,GAAG;AACxD,oBAAY,KAAK,MAAM;AAAA,MACzB;AAEA,UAAI,QAAQ,WAAW,KAAK,EAAE,yBAAyB,KAAK,KAAK,GAAG;AAClE,aAAK,sBAAsB,MAAM,MAAM,YAAY,OAAOA,QAAO;AACjE;AAAA,MACF;AAEA,WAAK,wBAAwB,KAAK,MAAM,MAAM,YAAYA,QAAO;AAAA,IACnE;AAEA,QACE,QAAQ,OACR,CAAC,mBACD,aACA,KAAK,cAAc,SAAS,GAC5B;AACA,iBAAW;AAAA,QACT,KAAK,EAAE;AAAA,UACL,KAAK,EAAE;AAAA,YACL,KAAK,EAAE;AAAA,cACL;AAAA,cACA,KAAK,EAAE,WAAW,kBAAkB;AAAA,YACtC;AAAA,YACA;AAAA,cACE,KAAK,EAAE,cAAc,OAAO;AAAA,cAC5B,KAAK,EAAE;AAAA,gBACL,CAAC,KAAK,EAAE,WAAW,OAAO,CAAC;AAAA,gBAC3B,KAAK,EAAE;AAAA,kBACL,KAAK,EAAE;AAAA,oBACL,KAAK,EAAE,WAAW,MAAM;AAAA,oBACxB,KAAK,EAAE,WAAW,UAAU;AAAA,kBAC9B;AAAA,kBACA,CAAC,KAAK,EAAE,WAAW,OAAO,GAAG,KAAK,EAAE,cAAc,SAAS,CAAC;AAAA,gBAC9D;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO,EAAE,QAAQ,UAAU,kBAAkB,mBAAmB;AAAA,EAClE;AAAA,EAEQ,cAAc,KAAsB;AAC1C,QAAI;AACF,UAAI,IAAI,GAAG;AACX,aAAO;AAAA,IACT,QAAQ;AACN,UACE,IAAI,WAAW,GAAG,KAClB,IAAI,WAAW,SAAS,KACxB,IAAI,WAAW,MAAM,GACrB;AACA,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,qBACN,KACA,MACA,MACA,YACAA,UACM;AACN,UAAM,YAAY,IAAI,MAAM,CAAC,EAAE,YAAY;AAC3C,QAAI,UAAiC,KAAK,EAAE,YAAY;AAExD,QAAI,KAAK,EAAE,yBAAyB,KAAK,KAAK,GAAG;AAC/C,WAAK,kBAAkB;AAAA,QACrB,KAAK,MAAM;AAAA,QACXA,SAAQ;AAAA,QACR,KAAK;AAAA,MACP;AACA,YAAM,WAAW,KAAK,kBAAkB;AAAA,QACtC,KAAK,MAAM;AAAA,QACXA,SAAQ;AAAA,QACR,KAAK;AAAA,MACP;AACA,gBAAU,KAAK,SAAS,oBAAoB,QAAQ;AAAA,IACtD;AAEA,eAAW;AAAA,MACT,KAAK,EAAE;AAAA,QACL,KAAK,EAAE;AAAA,UACL,KAAK,EAAE,iBAAiB,MAAM,KAAK,EAAE,WAAW,kBAAkB,CAAC;AAAA,UACnE,CAAC,KAAK,EAAE,cAAc,SAAS,GAAG,OAAO;AAAA,QAC3C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,sBACN,MACA,MACA,YACA,OACAA,UACM;AACN,QAAI,CAAC,KAAK,EAAE,yBAAyB,KAAK,KAAK,EAAG;AAElD,SAAK,kBAAkB;AAAA,MACrB,KAAK,MAAM;AAAA,MACXA,SAAQ;AAAA,MACR,KAAK;AAAA,IACP;AACA,UAAM,WAAW,KAAK,kBAAkB;AAAA,MACtC,KAAK,MAAM;AAAA,MACXA,SAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAEA,UAAM,aAAa,KAAK,EAAE,eAAe,KAAK,EAAE,WAAW,SAAS,GAAG;AAAA,MACrE,KAAK,EAAE;AAAA,QACL,CAAC;AAAA,QACD,KAAK,EAAE,eAAe,KAAK,EAAE,WAAW,QAAQ,GAAG;AAAA,UACjD;AAAA,UACA,KAAK,SAAS,oBAAoB,QAAQ;AAAA,QAC5C,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AACD,UAAM,oBAAoB,KAAK,SAAS,iBAAiB,OAAO,UAAU;AAE1E,eAAW,KAAK,GAAG,iBAAiB;AAAA,EACtC;AAAA,EAEQ,wBACN,KACA,MACA,MACA,YACAA,UACM;AACN,UAAM,WAAW,QAAQ,cAAc,UAAU;AACjD,QAAI;AAEJ,QAAI,KAAK,EAAE,gBAAgB,KAAK,KAAK,GAAG;AACtC,cAAQ,KAAK;AAAA,IACf,WAAW,KAAK,EAAE,yBAAyB,KAAK,KAAK,GAAG;AACtD,WAAK,kBAAkB;AAAA,QACrB,KAAK,MAAM;AAAA,QACXA,SAAQ;AAAA,QACR,KAAK;AAAA,MACP;AACA,YAAM,WAAW,KAAK,kBAAkB;AAAA,QACtC,KAAK,MAAM;AAAA,QACXA,SAAQ;AAAA,QACR,KAAK;AAAA,MACP;AACA,cAAQ,KAAK,SAAS,oBAAoB,QAAQ;AAAA,IACpD,OAAO;AACL,cAAQ,KAAK,EAAE,eAAe,IAAI;AAAA,IACpC;AAEA,eAAW;AAAA,MACT,KAAK,EAAE;AAAA,QACL,KAAK,EAAE;AAAA,UACL,KAAK,EAAE,iBAAiB,MAAM,KAAK,EAAE,WAAW,cAAc,CAAC;AAAA,UAC/D,CAAC,KAAK,EAAE,cAAc,QAAQ,GAAG,KAAK;AAAA,QACxC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,gBACN,UAOA,kBACA,YACA,OACAA,UACM;AACN,eAAW,SAAS,UAAU;AAC5B,UAAI,KAAK,EAAE,UAAU,KAAK,GAAG;AAC3B,cAAM,OAAO,MAAM,MAAM,KAAK;AAC9B,YAAI,KAAM,kBAAiB,KAAK,KAAK,EAAE,cAAc,IAAI,CAAC;AAAA,MAC5D,WAAW,KAAK,EAAE,yBAAyB,KAAK,GAAG;AACjD,cAAM,OAAO,MAAM;AACnB,YAAI,CAAC,KAAK,EAAE,qBAAqB,IAAI,GAAG;AACtC,eAAK,kBAAkB;AAAA,YACrB;AAAA,YACAA,SAAQ;AAAA,YACR,KAAK;AAAA,UACP;AACA,gBAAM,WAAW,KAAK,kBAAkB;AAAA,YACtC;AAAA,YACAA,SAAQ;AAAA,YACR,KAAK;AAAA,UACP;AACA,2BAAiB,KAAK,KAAK,SAAS,oBAAoB,QAAQ,CAAC;AAAA,QACnE;AAAA,MACF,WAAW,KAAK,EAAE,aAAa,KAAK,KAAK,KAAK,EAAE,cAAc,KAAK,GAAG;AACpE,cAAM,UAAU,KAAK,iBAAiB,EAAE,MAAM,MAAM,GAAG,OAAOA,QAAO;AACrE,mBAAW,KAAK,GAAG,QAAQ,UAAU;AACrC,yBAAiB,KAAK,QAAQ,EAAE;AAAA,MAClC;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,mBACN,UAOA,UACA,YACA,OACAA,UACM;AACN,eAAW,SAAS,UAAU;AAC5B,UAAI,KAAK,EAAE,UAAU,KAAK,GAAG;AAC3B,cAAM,OAAO,MAAM,MAAM,KAAK;AAC9B,YAAI,CAAC,KAAM;AACX,mBAAW;AAAA,UACT,KAAK,EAAE;AAAA,YACL,KAAK,EAAE,eAAe,KAAK,EAAE,WAAW,SAAS,GAAG;AAAA,cAClD;AAAA,cACA,KAAK,EAAE,cAAc,IAAI;AAAA,YAC3B,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF,WAAW,KAAK,EAAE,yBAAyB,KAAK,GAAG;AACjD,cAAM,OAAO,MAAM;AACnB,YAAI,KAAK,EAAE,qBAAqB,IAAI,EAAG;AAEvC,aAAK,kBAAkB;AAAA,UACrB;AAAA,UACAA,SAAQ;AAAA,UACR,KAAK;AAAA,QACP;AAEA,YAAI;AACJ,YAAI,KAAK,OAAO,eAAe,IAAI,GAAG;AACpC,0BAAgB,KAAK,SAAS;AAAA,YAC5B;AAAA,UACF;AAAA,QACF,WAAW,KAAK,OAAO,wBAAwB,IAAI,GAAG;AACpD,gBAAM,WAAW,KAAK,kBAAkB;AAAA,YACtC;AAAA,YACAA,SAAQ;AAAA,YACR,KAAK;AAAA,UACP;AACA,0BAAgB,KAAK,SAAS,UAAU,QAAQ;AAAA,QAClD,OAAO;AACL,gBAAM,WAAW,KAAK,kBAAkB;AAAA,YACtC;AAAA,YACAA,SAAQ;AAAA,YACR,KAAK;AAAA,UACP;AACA,0BAAgB,KAAK,EAAE;AAAA,YACrB,CAAC;AAAA,YACD,KAAK,SAAS,oBAAoB,QAAQ;AAAA,UAC5C;AAAA,QACF;AAEA,mBAAW;AAAA,UACT,KAAK,EAAE;AAAA,YACL,KAAK,EAAE,eAAe,KAAK,EAAE,WAAW,SAAS,GAAG;AAAA,cAClD;AAAA,cACA;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF,WAAW,KAAK,EAAE,aAAa,KAAK,KAAK,KAAK,EAAE,cAAc,KAAK,GAAG;AACpE,cAAM,UAAU,KAAK,iBAAiB,EAAE,MAAM,MAAM,GAAG,OAAOA,QAAO;AACrE,mBAAW,KAAK,GAAG,QAAQ,UAAU;AACrC,mBAAW;AAAA,UACT,KAAK,EAAE;AAAA,YACL,KAAK,EAAE,eAAe,KAAK,EAAE,WAAW,SAAS,GAAG;AAAA,cAClD;AAAA,cACA,QAAQ;AAAA,YACV,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,IAAI,EAAE,OAAO,EAAE,GAA0C;AACvE,QAAM,SAAS,IAAI,eAAe,CAAC;AACnC,QAAM,WAAW,IAAI,aAAa,GAAG,MAAM;AAC3C,QAAM,WAAW,IAAI,aAAa,CAAC;AACnC,QAAM,oBAAoB,IAAI,kBAAkB,GAAG,MAAM;AACzD,QAAM,qBAAqB,IAAI;AAAA,IAC7B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,MACP,SAAS;AAAA,QACP,KAAKD,QAAoC,OAAoB;AAC3D,cAAI,MAAM,gBAAiB;AAE3B,gBAAM,UAAU;AAAA,YACd,EAAE,OAAO,WAAW,UAAU,SAAS;AAAA,YACvC,EAAE,OAAO,oBAAoB,UAAU,kBAAkB;AAAA,YACzD,EAAE,OAAO,UAAU,UAAU,QAAQ;AAAA,YACrC,EAAE,OAAO,WAAW,UAAU,SAAS;AAAA,YACvC,EAAE,OAAO,aAAa,UAAU,WAAW;AAAA,YAC3C,EAAE,OAAO,WAAW,UAAU,SAAS;AAAA,UACzC;AAEA,qBAAW,UAAU,SAAS;AAC5B,YAAAA,OAAK;AAAA,cACH;AAAA,cACA,EAAE;AAAA,gBACA;AAAA,kBACE,EAAE;AAAA,oBACA,EAAE,WAAW,OAAO,KAAK;AAAA,oBACzB,EAAE,WAAW,OAAO,QAAQ;AAAA,kBAC9B;AAAA,gBACF;AAAA,gBACA,EAAE,cAAc,gBAAgB;AAAA,cAClC;AAAA,YACF;AAAA,UACF;AAEA,gBAAM,kBAAkB;AAAA,QAC1B;AAAA,MACF;AAAA,MAEA,YAAYA,QAAwC;AAClD,YAAIA,OAAK,QAAQ,WAAW,EAAG;AAG/B,YAAI,SAAS;AACb,QAAAA,OAAK,SAAS;AAAA,UACZ,aAAa;AACX,qBAAS;AAAA,UACX;AAAA,UACA,cAAc;AACZ,qBAAS;AAAA,UACX;AAAA,QACF,CAAC;AAED,YAAI,CAAC,OAAQ;AACb,QAAAA,OAAK,QAAQ,aAAa,IAAI;AAE9B,cAAM,OAAOA,OAAK,KAAK;AACvB,YAAI,CAAC,EAAE,iBAAiB,IAAI,EAAG;AAE/B,cAAM,cAAc,oBAAI,IAAmC;AAC3D,QAAAA,OAAK,SAAS;AAAA,UACZ,WAAW,SAA0C;AACnD,8BAAkB;AAAA,cAChB,QAAQ;AAAA,cACR;AAAA,cACA;AAAA,YACF;AAAA,UACF;AAAA,UACA,YAAY,SAA2C;AACrD,8BAAkB;AAAA,cAChB,QAAQ;AAAA,cACR;AAAA,cACA;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAC;AAED,aAAK,KAAK;AAAA,UACR,EAAE,oBAAoB,SAAS;AAAA,YAC7B,EAAE,mBAAmB,EAAE,WAAW,MAAM,GAAG,EAAE,eAAe,CAAC;AAAA,UAC/D,CAAC;AAAA,QACH;AAEA,cAAM,oBAAoB,oBAAI,IAAmC;AACjE,cAAM,qBAA6C,CAAC;AAEpD,mBAAW,CAAC,KAAK,UAAU,KAAK,aAAa;AAC3C,gBAAM,WAAWA,OAAK,MAAM,sBAAsB,KAAK;AACvD,4BAAkB,IAAI,KAAK,QAAQ;AACnC,6BAAmB;AAAA,YACjB,EAAE,oBAAoB,SAAS;AAAA,cAC7B,EAAE;AAAA,gBACA;AAAA,gBACA,EAAE,eAAe,EAAE,WAAW,WAAW,GAAG;AAAA,kBAC1C;AAAA,kBACA,EAAE,WAAW,MAAM;AAAA,gBACrB,CAAC;AAAA,cACH;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF;AAEA,YAAI,mBAAmB,SAAS,GAAG;AACjC,mBAAS,mBAAmB,KAAK,MAAM,kBAAkB;AAAA,QAC3D;AAEA,cAAMC,WAA4B,EAAE,aAAa,kBAAkB;AAEnE,QAAAD,OAAK,SAAS;AAAA,UACZ,WAAW,SAA0C;AACnD,gBAAI,QAAQ,QAAQ,WAAW,EAAG;AAClC,oBAAQ,QAAQ,aAAa,IAAI;AAEjC,kBAAM,EAAE,IAAI,WAAW,IAAI,mBAAmB;AAAA,cAC5C;AAAA,cACA,QAAQ;AAAA,cACRC;AAAA,YACF;AAEA,oBAAQ;AAAA,cACN,EAAE;AAAA,gBACA,EAAE;AAAA,kBACA,CAAC;AAAA,kBACD,EAAE,eAAe,CAAC,GAAG,YAAY,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAAA,gBACzD;AAAA,gBACA,CAAC;AAAA,cACH;AAAA,YACF;AAAA,UACF;AAAA,UACA,YAAY,SAA2C;AACrD,gBAAI,QAAQ,QAAQ,WAAW,EAAG;AAClC,oBAAQ,QAAQ,aAAa,IAAI;AAEjC,kBAAM,EAAE,IAAI,WAAW,IAAI,mBAAmB;AAAA,cAC5C;AAAA,cACA,QAAQ;AAAA,cACRA;AAAA,YACF;AAEA,oBAAQ;AAAA,cACN,EAAE;AAAA,gBACA,EAAE;AAAA,kBACA,CAAC;AAAA,kBACD,EAAE,eAAe,CAAC,GAAG,YAAY,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAAA,gBACzD;AAAA,gBACA,CAAC;AAAA,cACH;AAAA,YACF;AAAA,UACF;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;;;ACjnCA,SAAS,aAAAC,YAAW,aAAAC,kBAAiB;AAgC9B,SAAS,wBACd,UACA,MACQ;AACR,QAAM,MAAMD,WAAU,MAAM;AAAA,IAC1B,QAAQ;AAAA,IACR,KAAK,SAAS,SAAS,GAAG;AAAA,IAC1B,YAAY;AAAA,EACd,CAAC;AAED,QAAM,YAAuB,CAAC;AAC9B,aAAW,QAAQ,IAAI,MAAM;AAC3B,QAAI,KAAK,SAAS,qBAAqB;AACrC,YAAM,OAAO;AACb,iBAAW,aAAa,KAAK,cAAc,CAAC,GAAG;AAC7C,YAAI;AACJ,YAAI,UAAU,SAAS,mBAAmB;AACxC,sBAAY,UAAU,MAAM;AAAA,QAC9B,WAAW,UAAU,SAAS,0BAA0B;AACtD,sBAAY,UAAU,MAAM;AAAA,QAC9B,OAAO;AACL;AAAA,QACF;AACA,kBAAU,SAAS,IAAI,KAAK,OAAO;AAAA,MACrC;AAAA,IACF;AAAA,EACF;AAEA,QAAM,iBAA+B,CAAC;AACtC,QAAM,iBAA8B,CAAC;AAErC,aAAW,QAAQ,IAAI,MAAM;AAC3B,QAAI,aAAa;AAEjB,QACE,KAAK,SAAS,uBACd,KAAK,aAAa,SAAS,oBAC3B;AACA,YAAM,YAAY,KAAK;AAEvB,UAAIE,uBAAsB,UAAU,UAAU,GAAG;AAC/C,qBAAa;AACb,cAAM,OAAOC,kBAAiB,SAAS;AACvC,YAAI,MAAM;AACR,yBAAe,KAAK,IAAI;AAAA,QAC1B;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,YAAY;AACf,qBAAe,KAAK,IAAI;AAAA,IAC1B;AAAA,EACF;AAEA,QAAM,gBACJ,eAAe,SAAS,IACpBF,WAAU;AAAA,IACR,MAAM;AAAA,IACN,MAAM,IAAI;AAAA,IACV,MAAM;AAAA,IACN,aAAa,IAAI;AAAA,EACnB,CAAC,EAAE,OACH;AAEN,QAAM,WAAW,eACd,IAAI,CAAC,SAAS,iBAAiB,IAAI,CAAC,EACpC,KAAK,MAAM;AAEd,SAAO;AAAA,EACP,aAAa;AAAA,EACb,QAAQ;AAAA,IACN,KAAK;AACT;AAEA,SAASC,uBAAsB,YAAmC;AAChE,MAAI,CAAC,WAAY,QAAO;AAExB,SAAO,WAAW,KAAK,CAAC,cAAc;AACpC,UAAM,OAAO,UAAU;AAEvB,QAAI,KAAK,SAAS,kBAAkB;AAClC,UACE,KAAK,OAAO,SAAS,gBACrB,KAAK,OAAO,UAAU,aACtB;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAEA,QAAI,KAAK,SAAS,gBAAgB,KAAK,UAAU,aAAa;AAC5D,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT,CAAC;AACH;AAEA,SAASC,kBAAiB,WAA+C;AACvE,QAAM,YAAY,UAAU,YAAY;AACxC,MAAI,CAAC,UAAW,QAAO;AAEvB,MAAI,YAAY;AAChB,QAAM,aAAuB,CAAC;AAC9B,QAAM,oBAA8B,CAAC;AAErC,MAAI,UAAU,YAAY;AACxB,eAAW,OAAO,UAAU,YAAY;AACtC,YAAM,MAAMC,oBAAmB,GAAG;AAClC,UAAI,IAAK,YAAW,KAAK,GAAG;AAAA,IAC9B;AAAA,EACF;AAEA,aAAW,UAAU,UAAU,MAAM;AACnC,QAAI,OAAO,SAAS,iBAAiB;AACnC,UAAI,OAAO,IAAI,SAAS,gBAAgB,OAAO,IAAI,UAAU,SAAS;AACpE,oBAAYC,kBAAiB,MAAM;AAAA,MACrC;AAAA,IACF,WAAW,OAAO,SAAS,eAAe;AACxC,iBAAW,SAAS,OAAO,QAAQ;AACjC,cAAM,WAAWC,gBAAe,KAAK;AACrC,YAAI,SAAU,mBAAkB,KAAK,QAAQ;AAAA,MAC/C;AAAA,IACF;AAAA,EACF;AAEA,QAAM,UAAUC,gBAAe,SAAS;AAExC,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAASH,oBAAmB,WAA8B;AAC/D,QAAM,WAAWH,WAAU;AAAA,IACzB,MAAM;AAAA,IACN,MAAM,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,EAAE;AAAA,IAClC,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,YAAY,UAAU;AAAA,QACtB,MAAM,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,EAAE;AAAA,MACpC;AAAA,IACF;AAAA,IACA,aAAa;AAAA,EACf,CAAC,EAAE;AAEH,QAAM,YAAY,SAAS,QAAQ,WAAW,EAAE,EAAE,KAAK;AAEvD,SAAO,IAAI,UAAU,QAAQ,MAAM,EAAE,CAAC;AACxC;AAEA,SAASI,kBAAiB,QAAqB;AAC7C,QAAM,UAAU,OAAO,gBAAgB;AACvC,MAAI,CAAC,QAAS,QAAO;AAErB,MAAI,QAAQ,SAAS,iBAAiB;AACpC,UAAM,QAAkB,CAAC;AACzB,eAAW,KAAK,QAAQ,SAAS;AAC/B,UAAI,EAAE,SAAS,uBAAuB;AACpC,cAAM,MAAM,EAAE,IAAI,SAAS,eAAe,EAAE,IAAI,QAAQ;AACxD,cAAM,IAAI,EAAE,iBACRG,eAAc,EAAE,eAAe,cAAc,IAC7C;AACJ,cAAM,KAAK,GAAG,GAAG,KAAK,CAAC,EAAE;AAAA,MAC3B;AAAA,IACF;AACA,WAAO,KAAK,MAAM,KAAK,IAAI,CAAC;AAAA,EAC9B;AAEA,SAAOA,eAAc,OAAO;AAC9B;AAEA,SAASF,gBAAe,OAAoB;AAC1C,MAAI,aAAuB,CAAC;AAC5B,MAAI,MAAM,YAAY;AACpB,eAAW,KAAK,MAAM,YAAY;AAChC,YAAM,MAAMF,oBAAmB,CAAC;AAChC,UAAI,IAAK,YAAW,KAAK,GAAG;AAAA,IAC9B;AAAA,EACF;AACA,QAAM,kBAAkB,WAAW,SAAS,WAAW,KAAK,GAAG,IAAI,MAAM;AAEzE,MAAI,WAAW;AACf,MAAI,YAAY;AAChB,MAAI,gBAAgB;AAEpB,MAAI,MAAM,SAAS,uBAAuB;AACxC,oBAAgB,MAAM,iBAAiB;AACvC,UAAM,QAAQ,MAAM;AACpB,QAAI,MAAM,SAAS,aAAc,QAAO;AAExC,gBAAY,MAAM;AAClB,QAAI,MAAM,gBAAgB,gBAAgB;AACxC,iBAAWK,iBAAgB,MAAM,eAAe,cAAc;AAAA,IAChE;AAAA,EACF,WAAW,MAAM,SAAS,aAAa;AACrC,UAAM,MAAM,MAAM;AAClB,QAAI,IAAI,SAAS,aAAc,QAAO;AAEtC,gBAAY,IAAI;AAChB,QAAI,IAAI,gBAAgB,gBAAgB;AACtC,iBAAWA,iBAAgB,IAAI,eAAe,cAAc;AAAA,IAC9D;AAAA,EACF,OAAO;AACL,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,gBAAgB,GAAG,aAAa,MAAM;AAC3D,QAAM,SAAS,GAAG,eAAe,GAAG,YAAY,GAAG,SAAS,KAAK,QAAQ;AAEzE,SAAO;AACT;AAEA,SAASA,iBAAgB,UAAuB;AAC9C,MACE,SAAS,SAAS,qBAClB,SAAS,SAAS,SAAS,cAC3B;AACA,WAAO,SAAS,SAAS;AAAA,EAC3B;AACA,SAAOD,eAAc,QAAQ;AAC/B;AAEA,SAASD,gBAAe,WAAgD;AACtE,QAAM,UAA6B,CAAC;AAEpC,aAAW,UAAU,UAAU,MAAM;AACnC,QAAI,OAAO,SAAS,eAAe;AACjC,YAAM,SAAS;AAEf,YAAM,aACJ,OAAO,IAAI,SAAS,eAAe,OAAO,IAAI,QAAQ;AAExD,UAAI,CAAC,YAAY;AACf;AAAA,MACF;AAEA,YAAM,SAASG,qBAAoB,OAAO,SAAS,UAAU,CAAC,CAAC;AAC/D,YAAM,aAAa,kBAAkB,OAAO,SAAS,UAAU;AAC/D,YAAM,UAAU,OAAO,SAAS,SAAS;AAEzC,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAASA,qBAAoB,QAA8B;AACzD,QAAM,SAAwB,CAAC;AAE/B,aAAW,SAAS,QAAQ;AAC1B,QAAI,MAAM,SAAS,aAAa;AAC9B,YAAM,MAAM,MAAM;AAElB,UAAI,IAAI,SAAS,cAAc;AAC7B,cAAM,OAAO,IAAI;AACjB,cAAM,OAAO,IAAI,gBAAgB,iBAC7BF,eAAc,IAAI,eAAe,cAAc,IAC/C;AAEJ,eAAO,KAAK;AAAA,UACV;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,kBAAkB,YAA0B;AACnD,MAAI,CAAC,cAAc,CAAC,WAAW,gBAAgB;AAC7C,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,WAAW;AAExB,MAAI,KAAK,SAAS,mBAAmB;AACnC,UAAM,WAAW,KAAK;AACtB,QAAI,SAAS,SAAS,gBAAgB,SAAS,UAAU,WAAW;AAClE,UAAI,KAAK,cAAc,KAAK,WAAW,OAAO,SAAS,GAAG;AACxD,eAAOA,eAAc,KAAK,WAAW,OAAO,CAAC,CAAC;AAAA,MAChD;AAAA,IACF;AAAA,EACF;AAEA,SAAOA,eAAc,IAAI;AAC3B;AAEA,SAASA,eAAc,UAAuB;AAC5C,MAAI,CAAC,SAAU,QAAO;AAEtB,UAAQ,SAAS,MAAM;AAAA,IACrB,KAAK;AACH,aAAO,SAAS;AAAA,IAElB,KAAK;AACH,UAAI,SAAS,SAAS,SAAS,cAAc;AAC3C,cAAM,WAAW,SAAS,SAAS;AACnC,YAAI,SAAS,cAAc,SAAS,WAAW,OAAO,SAAS,GAAG;AAChE,gBAAM,SAAS,SAAS,WAAW,OAChC,IAAIA,cAAa,EACjB,KAAK,IAAI;AACZ,iBAAO,GAAG,QAAQ,IAAI,MAAM;AAAA,QAC9B;AACA,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IAET,KAAK;AACH,aAAO,GAAGA,eAAc,SAAS,QAAQ,CAAC;AAAA,IAE5C,KAAK;AACH,aAAO,SAAS,MAAM,IAAIA,cAAa,EAAE,KAAK,KAAK;AAAA,IAErD,KAAK;AACH,aAAO,SAAS,MAAM,IAAIA,cAAa,EAAE,KAAK,KAAK;AAAA,IAErD,KAAK;AACH,YAAM,QAAQ,SAAS,QACpB,IAAI,CAAC,WAAgB;AACpB,YAAI,OAAO,SAAS,uBAAuB;AACzC,gBAAM,MACJ,OAAO,IAAI,SAAS,eAAe,OAAO,IAAI,QAAQ;AACxD,gBAAM,OAAO,OAAO,iBAChBA,eAAc,OAAO,eAAe,cAAc,IAClD;AACJ,iBAAO,GAAG,GAAG,KAAK,IAAI;AAAA,QACxB;AACA,eAAO;AAAA,MACT,CAAC,EACA,OAAO,OAAO;AACjB,aAAO,KAAK,MAAM,KAAK,IAAI,CAAC;AAAA,IAE9B;AACE,aAAO;AAAA,EACX;AACF;AAEA,SAAS,iBAAiB,MAAyB;AACjD,QAAM,YAAY,KAAK;AAEvB,QAAM,QAAQ,KAAK,QAAQ,KAAK,CAAC,MAAM,EAAE,QAAQ,OAAO;AAExD,MAAI,SAAS,QAAW;AACtB,UAAM,IAAI,MAAM,iCAAiC;AAAA,EACnD;AAEA,QAAM,gBACJ,KAAK,WAAW,SAAS,IAAI,KAAK,WAAW,KAAK,IAAI,IAAI,OAAO;AAEnE,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWP,aAAa,gBAAgB,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMhC,KAAK,kBAAkB,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAsBT,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBzC;;;AC5bO,SAAS,gBAAgB,UAAkB,MAAsB;AACtE,MAAI;AACF,UAAM,MAAM,gBAAgB,UAAU,IAAI;AAC1C,UAAM,cAAc,mBAAmB,KAAK,UAAU,KAAK;AAE3D,QAAI,CAAC,aAAa;AAChB,YAAM;AAAA,QACJ,MAAM;AAAA,QACN,SAAS;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAEA,wBAAoB,aAAa,QAAQ;AACzC,WAAOG,kBAAiB,WAAW;AAAA,EACrC,SAAS,OAAO;AACd,QAAK,MAAc,MAAM;AACvB,YAAM;AAAA,IACR;AACA,UAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS,oCAAqC,MAAgB,OAAO;AAAA,MACrE;AAAA,MACA,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAEA,SAASA,kBAAiB,aAAkC;AAC1D,QAAM,YAAY,YAAY;AAC9B,QAAM,WAAW,kBAAkB,SAAS;AAE5C,QAAM,UAAU,YAAY,QACzB,IAAI,CAAC,WAAWC,gBAAe,QAAQ,UAAU,SAAS,CAAC,EAC3D,KAAK,MAAM;AAEd,QAAM,gBAAgB,YAAY,QAAQ,KAAK,CAAC,MAAM,EAAE,YAAY;AAEpE,QAAM,UAAUC,iBAAgB,aAAa;AAE7C,SAAO,GAAG,OAAO;AAAA;AAAA;AAAA,eAGJ,SAAS;AAAA,EACtB,OAAO;AAAA;AAET;AAEA,SAASA,iBAAgB,eAAgC;AACvD,MAAI,UAAU;AAAA;AAEd,MAAI,eAAe;AACjB,eAAW;AAAA;AAAA,EACb;AAEA,SAAO;AACT;AAEA,SAASD,gBACP,QACA,UACA,aACQ;AACR,MAAI,OAAO,cAAc;AACvB,WAAO,kBAAkB,QAAQ,QAAQ;AAAA,EAC3C;AAEA,QAAM,SAAS,OAAO,OAAO,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,IAAI;AACzE,QAAM,YAAY,OAAO,OAAO,SAAS;AAEzC,MAAI,CAAC,WAAW;AACd,WAAO,kBAAkB,QAAQ,QAAQ;AAAA,EAC3C;AAEA,SAAO,mBAAmB,QAAQ,UAAU,MAAM;AACpD;AAEA,SAAS,kBAAkB,QAAuB,UAA0B;AAC1E,QAAM,SAAS,OAAO,OAAO,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,IAAI;AACzE,QAAM,YAAY,OAAO,OAAO,SAAS;AAEzC,MAAI;AACJ,MAAI,WAAW;AACb,UAAM,cAAc,OAAO,OACxB,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,0BAA0B,EAAE,IAAI,IAAI,EACxD,KAAK,GAAG;AACX,iBAAa,MAAM,QAAQ,IAAI,OAAO,IAAI,IAAI,WAAW;AAAA,EAC3D,OAAO;AACL,iBAAa,MAAM,QAAQ,IAAI,OAAO,IAAI;AAAA,EAC5C;AAEA,SAAO,KAAK,OAAO,IAAI,IAAI,MAAM,iBAAiB,OAAO,UAAU;AAAA;AAAA,4CAEzB,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBtD;AAEA,SAAS,kBAAkB,QAAuB,UAA0B;AAC1E,QAAM,SAAS,OAAO,OAAO,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,IAAI;AACzE,QAAM,aAAa,WAAW,OAAO,UAAU;AAE/C,SAAO,WAAW,OAAO,IAAI,IAAI,MAAM,MAAM,UAAU;AAAA,sCACnB,QAAQ,IAAI,OAAO,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAa7D;AAEA,SAAS,mBACP,QACA,UACA,QACQ;AACR,QAAM,aAAa,OAAO,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,IAAI;AAC7D,QAAM,aAAa,WAAW,OAAO,UAAU;AAE/C,SAAO,WAAW,OAAO,IAAI,IAAI,MAAM,MAAM,UAAU;AAAA,sCACnB,QAAQ,IAAI,OAAO,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,+BAK9B,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASzC;;;AX1IA,eAAe,aACb,QACA,SACA,MAAe,OACf,OACuB;AACvB,QAAM,aAAkB,cAAQ,OAAO;AAEvC,QAAM,YAAY,MAAM,UAAU,QAAQ;AAAA,IACxC,UAAU;AAAA,IACV,KAAK;AAAA,MACH,QAAQ;AAAA,QACN,QAAQ;AAAA,QACR;AAAA,QACA,YAAY;AAAA,MACd;AAAA,MACA,WAAW;AAAA,QACT,iBAAiB;AAAA,QACjB,mBAAmB;AAAA,QACnB;AAAA,MACF;AAAA,MACA,QAAQ;AAAA,IACV;AAAA,IACA,UAAU;AAAA,EACZ,CAAC;AAED,SAAO;AAAA,IACL,UAAU,UAAU;AAAA,IACpB,QAAQ;AAAA,IACR;AAAA,EACF;AACF;AAEA,SAAS,kBAAkB,QAAgBE,QAA4B;AACrE,QAAM,QAAQA,OAAK,SAAS,MAAM;AAClC,QAAM,oBACJ,OAAO,WAAW,mBAAmB,KACrC,OAAO,WAAW,mBAAmB;AACvC,QAAM,eACJ,OAAO,WAAW,cAAc,KAAK,OAAO,WAAW,cAAc;AAEvE,MAAI,YAA2B;AAC/B,MAAI,kBAAmB,aAAY;AAAA,WAC1B,aAAc,aAAY;AAEnC,SAAO;AAAA,IACL;AAAA,IACA,MAAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,IAAM,yBAAN,MAA6B;AAAA,EAC3B,MAAM,oBACJ,QACAA,QACuB;AACvB,UAAM,iBAAiB,mBAAmBA,QAAM,MAAM;AAEtD,QAAI,gBAAgB;AAClB,eAAS,GAAG,MAAM;AAAA;AAAA,EAAO,cAAc;AAAA;AAAA,IACzC;AAEA,WAAO,aAAa,QAAQA,MAAI;AAAA,EAClC;AAAA,EAEA,MAAM,2BACJ,QACAA,QACA,UACuB;AACvB,QAAI,UAAU;AACZ,aAAO,KAAK,oBAAoB,QAAQA,MAAI;AAAA,IAC9C;AACA,WAAO,aAAa,QAAQA,MAAI;AAAA,EAClC;AAAA,EAEA,MAAM,mBACJ,QACAA,QACuB;AACvB,WAAO,aAAa,QAAQA,QAAM,MAAM;AAAA,MACtC,SAAS;AAAA,MACT,cAAc;AAAA,IAChB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,4BACJ,QACAA,QACuB;AACvB,UAAM,aAAa,mBAAmBA,QAAM,MAAM;AAElD,WAAO,aAAa,YAAYA,MAAI;AAAA,EACtC;AAAA,EAEA,MAAM,QACJ,UACA,eACuB;AACvB,UAAM,iBAAiB,MAAM,aAAa,SAAS,QAAQ,SAAS,IAAI;AAExE,UAAM,mBAAmB,EAAE,GAAG,UAAU,QAAQ,eAAe;AAC/D,UAAM,EAAE,QAAQ,MAAAA,QAAM,OAAO,mBAAmB,aAAa,IAC3D;AAEF,QAAI,OAAO;AACT,UAAI,mBAAmB;AACrB,sBAAcA,MAAI;AAClB,cAAM,aAAa,MAAM,KAAK,4BAA4B,QAAQA,MAAI;AAEtE,cAAM,QAAQ,MAAM,YAAY;AAEhC,cAAM,IAAIA,QAAM,WAAW,QAAQ;AAEnC,eAAO;AAAA,MACT;AACA,aAAO,KAAK,mBAAmB,QAAQA,MAAI;AAAA,IAC7C;AAEA,WAAO,KAAK,2BAA2B,QAAQA,QAAM,YAAY;AAAA,EACnE;AACF;AAEA,IAAM,yBAAN,MAA6B;AAAA,EAC3B,MAAM,wBACJ,QACAA,QACuB;AACvB,UAAM,YAAY,MAAM,aAAa,QAAQA,QAAM,MAAM;AAAA,MACvD,SAAS;AAAA,IACX,CAAC;AAED,UAAM,cAAc,MAAY;AAAA,MAC9B,UAAU;AAAA,MACV;AAAA,QACE,UAAUA;AAAA,QACV,YAAY;AAAA,QACZ,SAAS,CAAC,GAAG;AAAA,QACb,YAAY;AAAA,UACV,SAAS,CAAC,KAAK;AAAA,QACjB;AAAA,QACA,YAAY;AAAA,QACZ,SAAS;AAAA,MACX;AAAA,IACF;AAEA,WAAO;AAAA,MACL,UAAU,aAAa,QAAQ;AAAA,MAC/B,QAAQ;AAAA,MACR,YAAY,UAAU;AAAA,IACxB;AAAA,EACF;AAAA,EAEA,MAAM,yBACJ,MACA,QACAA,QACuB;AACvB,UAAM,WAAW,wBAAwBA,QAAM,MAAM;AACrD,WAAO,aAAa,UAAUA,MAAI;AAAA,EACpC;AAAA,EAEA,MAAM,uBACJ,MACA,QACAA,QACuB;AACvB,UAAM,aAAa,gBAAgBA,QAAM,MAAM;AAC/C,WAAO,aAAa,YAAYA,MAAI;AAAA,EACtC;AAAA,EAEA,MAAM,oBACJ,QACAA,QACuB;AACvB,WAAO,aAAa,QAAQA,MAAI;AAAA,EAClC;AAAA,EAEA,MAAM,QAAQ,MAAgB,UAA+C;AAC3E,UAAM,iBAAiB,MAAM,aAAa,SAAS,QAAQ,SAAS,IAAI;AAExE,UAAM,mBAAmB,EAAE,GAAG,UAAU,QAAQ,eAAe;AAC/D,UAAM,EAAE,QAAQ,MAAAA,QAAM,OAAO,UAAU,IAAI;AAE3C,QAAI,OAAO;AACT,UAAI,cAAc,eAAe;AAC/B,eAAO,KAAK,wBAAwB,QAAQA,MAAI;AAAA,MAClD,WAAW,cAAc,MAAM;AAC7B,eAAO,KAAK,yBAAyB,MAAM,QAAQA,MAAI;AAAA,MACzD,OAAO;AACL,cAAM,IAAI;AAAA,UACR,yBAAyB,SAAS,mBAAmBA,MAAI;AAAA,QAC3D;AAAA,MACF;AAAA,IACF;AAEA,QAAI,cAAc,UAAU;AAC1B,aAAO,KAAK,uBAAuB,MAAM,QAAQA,MAAI;AAAA,IACvD;AAEA,QAAI,cAAc,MAAM;AACtB,aAAO,KAAK,oBAAoB,QAAQA,MAAI;AAAA,IAC9C;AAEA,WAAO;AAAA,MACL,UAAU;AAAA,MACV,QAAQ,QAAQ,QAAQ;AAAA,IAC1B;AAAA,EACF;AACF;AAEO,SAAS,YAAY,SAAiC;AAC3D,QAAM,oBAAoB,IAAI,uBAAuB;AACrD,QAAM,oBAAoB,IAAI,uBAAuB;AAErD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,OAAO;AACX,YAAM;AAAA,QACJ,EAAE,QAAQ,UAAU;AAAA,QACpB,OAAO,SAA4C;AACjD,gBAAM,SAAS,MAAS,aAAS,KAAK,MAAM,MAAM;AAClD,gBAAM,WAAW,kBAAkB,QAAQ,KAAK,IAAI;AAEpD,cAAI,QAAQ,eAAe;AACzB,mBAAO,kBAAkB,QAAQ,UAAU,QAAQ,aAAa;AAAA,UAClE;AAEA,cAAI,CAAC,QAAQ,OAAO;AAClB,kBAAM,IAAI;AAAA,cACR;AAAA,YACF;AAAA,UACF;AAEA,gBAAM,OAAO,QAAQ,MAAM,KAAK,IAAI;AAEpC,cAAI,CAAC,MAAM;AACT,oBAAQ,IAAI,wCAAwC,KAAK,IAAI,EAAE;AAC/D,kBAAM,IAAI,MAAM,KAAK;AAAA,UACvB;AAEA,iBAAO,kBAAkB,QAAQ,MAAM,QAAQ;AAAA,QACjD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AYzRA,SAAS,aAAAC,kBAAiB;AAC1B,YAAYC,SAAQ;AACpB,YAAYC,WAAU;AAuCtB,SAAS,gBAAgB,UAAkB,YAAmC;AAC5E,MAAI,CAAC,WAAW,WAAW,GAAG,EAAG,QAAO;AAExC,QAAM,MAAW,cAAQ,QAAQ;AACjC,QAAM,WAAgB,cAAQ,KAAK,UAAU;AAE7C,QAAM,aAAa,CAAC,IAAI,OAAO,QAAQ,OAAO,MAAM;AACpD,aAAW,OAAO,YAAY;AAC5B,UAAM,WAAW,WAAW;AAC5B,QAAO,eAAW,QAAQ,KAAQ,aAAS,QAAQ,EAAE,OAAO;AAC1D,aAAO;AAAA,EACX;AAEA,QAAM,aAAa,CAAC,aAAa,cAAc,aAAa,YAAY;AACxE,aAAW,aAAa,YAAY;AAClC,UAAM,WAAW,WAAW;AAC5B,QAAO,eAAW,QAAQ,KAAQ,aAAS,QAAQ,EAAE,OAAO;AAC1D,aAAO;AAAA,EACX;AAEA,SAAO;AACT;AAEA,SAAS,kBAAkB,YAAoC;AAC7D,MAAI,CAAC,WAAY,QAAO,CAAC;AACzB,SAAO,WACJ,IAAI,CAAC,MAAM;AACV,UAAM,MAAM,EAAE;AACd,QAAI,IAAI,SAAS,oBAAoB,IAAI,OAAO,SAAS;AACvD,aAAO,IAAI,OAAO;AACpB,QAAI,IAAI,SAAS,aAAc,QAAO,IAAI;AAC1C,WAAO;AAAA,EACT,CAAC,EACA,OAAO,CAAC,MAAM,MAAM,SAAS;AAClC;AAEA,SAAS,iBAAiB,KAA8C;AACtE,aAAW,QAAQ,IAAI,MAAM;AAC3B,QACE,KAAK,SAAS,yBACd,KAAK,WAAW,SAAS,iBACzB;AACA,YAAM,MAAM,KAAK,WAAW;AAC5B,UAAI,QAAQ,aAAc,QAAO;AACjC,UAAI,QAAQ,kBAAmB,QAAO;AAAA,IACxC,OAAO;AACL;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,eACP,KAC4C;AAC5C,QAAM,UAAsD,CAAC;AAC7D,aAAW,QAAQ,IAAI,MAAM;AAC3B,QAAI,KAAK,SAAS,qBAAqB;AACrC,cAAQ,KAAK,EAAE,MAAM,KAAK,OAAO,OAAO,YAAY,KAAK,WAAW,CAAC;AAAA,IACvE;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,eACP,KACA,aACA,OACA,aACc;AACd,QAAM,UAAwB,CAAC;AAE/B,aAAW,QAAQ,IAAI,MAAM;AAC3B,QAAI,KAAK,SAAS,uBAAuB,KAAK,aAAa;AACzD,YAAM,OAAO,KAAK;AAElB,UAAI,KAAK,SAAS,sBAAsB,KAAK,YAAY;AACvD,cAAM,aAAa,kBAAkB,KAAK,UAAU;AACpD,gBAAQ,KAAK;AAAA,UACX,MAAM,KAAK,WAAW;AAAA,UACtB,MAAM;AAAA,UACN,YAAY,WAAW,SAAS,IAAI,aAAa;AAAA,QACnD,CAAC;AAAA,MACH,WAAW,KAAK,SAAS,yBAAyB,KAAK,YAAY;AACjE,gBAAQ,KAAK,EAAE,MAAM,KAAK,WAAW,OAAO,MAAM,WAAW,CAAC;AAAA,MAChE,WAAW,KAAK,SAAS,uBAAuB;AAC9C,mBAAW,cAAc,KAAK,cAAc;AAC1C,cAAI,WAAW,GAAG,SAAS,cAAc;AACvC,oBAAQ,KAAK,EAAE,MAAM,WAAW,GAAG,OAAO,MAAM,WAAW,CAAC;AAAA,UAC9D;AAAA,QACF;AAAA,MACF,WAAW,KAAK,SAAS,0BAA0B;AACjD,gBAAQ,KAAK,EAAE,MAAM,KAAK,GAAG,OAAO,MAAM,YAAY,CAAC;AAAA,MACzD,WAAW,KAAK,SAAS,0BAA0B;AACjD,gBAAQ,KAAK,EAAE,MAAM,KAAK,GAAG,OAAO,MAAM,OAAO,CAAC;AAAA,MACpD,WAAW,KAAK,SAAS,qBAAqB;AAC5C,gBAAQ,KAAK,EAAE,MAAM,KAAK,GAAG,OAAO,MAAM,OAAO,CAAC;AAAA,MACpD;AAAA,IACF;AAEA,QAAI,KAAK,SAAS,4BAA4B,KAAK,QAAQ;AACzD,YAAM,WAAW,gBAAgB,aAAa,KAAK,OAAO,KAAK;AAC/D,UAAI,UAAU;AACZ,oBAAY,QAAQ;AACpB,cAAM,gBAAgB,MAAM,QAAQ,GAAG,WAAW,CAAC;AACnD,mBAAW,QAAQ,KAAK,YAAY;AAClC,cAAI,KAAK,SAAS,mBAAmB;AACnC,kBAAM,MAAM,cAAc,KAAK,CAAC,MAAM,EAAE,SAAS,KAAK,KAAK,KAAK;AAChE,oBAAQ,KAAK;AAAA,cACX,MAAM,KAAK,UAAU,SAAS,KAAK,KAAK;AAAA,cACxC,MAAM,KAAK,QAAQ;AAAA,cACnB,YAAY,KAAK;AAAA,YACnB,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAI,KAAK,SAAS,wBAAwB;AACxC,YAAM,WAAW,gBAAgB,aAAa,KAAK,OAAO,KAAK;AAC/D,UAAI,UAAU;AACZ,oBAAY,QAAQ;AACpB,cAAM,gBAAgB,MAAM,QAAQ,GAAG,WAAW,CAAC;AACnD,mBAAW,OAAO,eAAe;AAC/B,kBAAQ,KAAK,EAAE,GAAG,IAAI,CAAC;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AAEA,QAAI,KAAK,SAAS,4BAA4B;AAC5C,YAAM,OAAO,KAAK;AAClB,UAAI,OAAmB;AACvB,UAAI;AAEJ,UAAI,KAAK,SAAS,mBAAmB;AACnC,eAAO;AACP,qBAAa,kBAAkB,KAAK,UAAU;AAAA,MAChD,WAAW,KAAK,SAAS,sBAAsB;AAC7C,eAAO;AAAA,MACT,WAAW,KAAK,SAAS,0BAA0B;AACjD,eAAO;AAAA,MACT;AAEA,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN;AAAA,QACA,WAAW;AAAA,QACX,YAAY,YAAY,SAAS,aAAa;AAAA,MAChD,CAAC;AAAA,IACH;AAEA,QAAI,KAAK,SAAS,2BAA2B;AAC3C,cAAQ,KAAK,EAAE,MAAM,WAAW,MAAM,WAAW,WAAW,KAAK,CAAC;AAAA,IACpE;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,WAAW,aAAwC;AACjE,QAAM,QAAyB,CAAC;AAChC,QAAM,UAAU,oBAAI,IAAY;AAEhC,WAAS,YAAY,UAAwB;AAC3C,UAAM,aAAa,CAAC,OAAO,QAAQ,OAAO,MAAM;AAChD,QAAI,CAAC,WAAW,SAAc,cAAQ,QAAQ,CAAC,EAAG;AAClD,QAAI,QAAQ,IAAI,QAAQ,EAAG;AAC3B,YAAQ,IAAI,QAAQ;AAEpB,QAAI,CAAI,eAAW,QAAQ,GAAG;AAC5B,cAAQ,KAAK,mBAAmB,QAAQ,EAAE;AAC1C;AAAA,IACF;AAEA,UAAM,QAAQ,CAAC,QAAQ,MAAM,EAAE,SAAc,cAAQ,QAAQ,CAAC;AAC9D,UAAM,QAAQ,MAAM,YAAY;AAChC,UAAM,UAAU,MAAM,IAAY,QAAQ;AAC1C,UAAM,UAAU,UAAU,QAAQ,CAAC,IAAO,iBAAa,UAAU,OAAO;AAExE,UAAM,MAAMC,WAAU,SAAS;AAAA,MAC7B,QAAQ;AAAA,MACR,KAAK;AAAA,MACL,YAAY;AAAA,IACd,CAAC;AAED,UAAM,YAAY,iBAAiB,GAAG;AACtC,UAAM,aAAa,eAAe,GAAG;AACrC,UAAM,UAAU,eAAe,KAAK,UAAU,OAAO,WAAW;AAEhE,eAAW,EAAE,MAAM,WAAW,KAAK,YAAY;AAC7C,YAAM,WAAW,gBAAgB,UAAU,UAAU;AACrD,UAAI,SAAU,aAAY,QAAQ;AAAA,IACpC;AAEA,UAAM,UAAwB,WAAW;AAAA,MACvC,CAAC,EAAE,MAAM,YAAY,WAAW,MAAM;AACpC,cAAM,eAAe,gBAAgB,UAAU,UAAU;AACzD,cAAM,gBACJ,gBAAgB,MAAM,YAAY,IAC9B,MAAM,YAAY,EAAE,UACpB,CAAC;AACP,cAAM,UAAwB,CAAC;AAE/B,mBAAW,QAAQ,YAAY;AAC7B,cAAI,KAAK,SAAS,0BAA0B;AAC1C,kBAAM,MAAM,cAAc,KAAK,CAAC,MAAM,EAAE,SAAS;AACjD,oBAAQ,KAAK;AAAA,cACX,MAAM,KAAK,MAAM;AAAA,cACjB,MAAM,KAAK,QAAQ;AAAA,cACnB,YAAY,KAAK;AAAA,cACjB,WAAW;AAAA,YACb,CAAC;AAAA,UACH,WAAW,KAAK,SAAS,4BAA4B;AACnD,oBAAQ,KAAK,EAAE,MAAM,KAAK,MAAM,OAAO,MAAM,YAAY,CAAC;AAAA,UAC5D,WAAW,KAAK,SAAS,mBAAmB;AAC1C,kBAAM,eAAe,KAAK,WACtB,KAAK,SAAS,QACd,KAAK,MAAM;AACf,kBAAM,MAAM,cAAc,KAAK,CAAC,MAAM,EAAE,SAAS,YAAY;AAC7D,oBAAQ,KAAK;AAAA,cACX,MAAM;AAAA,cACN,MAAM,KAAK,QAAQ;AAAA,cACnB,YAAY,KAAK;AAAA,YACnB,CAAC;AAAA,UACH;AAAA,QACF;AAEA,eAAO,EAAE,YAAY,YAAY,cAAc,QAAQ;AAAA,MACzD;AAAA,IACF;AAEA,UAAM,QAAQ,IAAI,EAAE,UAAU,OAAO,WAAW,SAAS,QAAQ;AAAA,EACnE;AAEA,aAAW,SAAS,YAAa,aAAiB,cAAQ,KAAK,CAAC;AAEhE,SAAO;AACT;;;ACpRA,YAAYC,SAAQ;AAEb,SAAS,YAAY,OAAc;AACxC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,OAAoB;AACxB,YAAM,MAAM,MAAM;AAChB,cAAM,aAAa,MAAM,IAAI,aAAa;AAE1C,YAAI,CAAC,cAAc,WAAW,WAAW,GAAG;AAC1C,kBAAQ,IAAI,0BAA0B;AACtC;AAAA,QACF;AAEA,cAAM,WAAW,WAAW,KAAK;AACjC,cAAM,cAAc,CAAC,GAAG,IAAI,IAAI,QAAQ,CAAC;AAEzC,cAAM,YAAY,YAAY,KAAK,IAAI;AACvC,QAAG,kBAAc,oBAAoB,SAAS;AAAA,MAChD,CAAC;AAAA,IACH;AAAA,EACF;AACF;;;ACxBA,YAAYC,SAAQ;AAYb,IAAM,mBAAN,MAAuB;AAAA,EAG5B,YAAY,UAAmC,CAAC,GAAG;AACjD,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,MAAM,YAAY,WAAmB,YAAmC;AACtE,UAAM,OAAO,MAAS,aAAS,WAAW,OAAO;AACjD,UAAM,YAAY,MAAM,KAAK,QAAQ,IAAI;AACzC,UAAS,cAAU,YAAY,WAAW,OAAO;AAAA,EACnD;AAAA,EAEA,MAAM,QAAQ,MAA+B;AAC3C,QAAI,SAAS;AAEb,QAAI,KAAK,QAAQ,cAAc;AAC7B,iBAAW,eAAe,KAAK,QAAQ,cAAc;AACnD,iBAAS,MAAM,YAAY,MAAM;AAAA,MACnC;AAAA,IACF;AAEA,QAAI,KAAK,QAAQ,iBAAiB,KAAK,QAAQ,cAAc,SAAS,GAAG;AACvE,eAAS,KAAK,cAAc,QAAQ,KAAK,QAAQ,aAAa;AAAA,IAChE;AAEA,QAAI,KAAK,QAAQ,gBAAgB,KAAK,QAAQ,aAAa,SAAS,GAAG;AACrE,eAAS,KAAK,aAAa,QAAQ,KAAK,QAAQ,YAAY;AAAA,IAC9D;AAEA,QAAI,KAAK,QAAQ,kBAAkB;AACjC,eAAS,KAAK,iBAAiB,QAAQ,KAAK,QAAQ,gBAAgB;AAAA,IACtE;AAEA,QAAI,KAAK,QAAQ,QAAQ;AACvB,eAAS,KAAK,OAAO,MAAM;AAAA,IAC7B;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,cAAc,MAAc,SAA2B;AAC7D,UAAM,aAAa,QAChB,IAAI,CAAC,QAAQ,kBAAkB,GAAG,aAAa,EAC/C,KAAK,IAAI;AAEZ,QAAI,KAAK,SAAS,SAAS,GAAG;AAC5B,aAAO,KAAK,QAAQ,WAAW,GAAG,UAAU;AAAA,QAAW;AAAA,IACzD,WAAW,KAAK,SAAS,SAAS,GAAG;AACnC,aAAO,KAAK,QAAQ,WAAW,GAAG,UAAU;AAAA,QAAW;AAAA,IACzD,OAAO;AACL,aAAO,OAAO;AAAA,EAAK,UAAU;AAAA,IAC/B;AAAA,EACF;AAAA,EAEQ,aAAa,MAAc,QAA0B;AAC3D,UAAM,YAAY,OACf,IAAI,CAAC,SAAS,kCAAkC,IAAI,IAAI,EACxD,KAAK,IAAI;AAEZ,QAAI,KAAK,SAAS,SAAS,GAAG;AAC5B,aAAO,KAAK,QAAQ,WAAW,GAAG,SAAS;AAAA,QAAW;AAAA,IACxD,WAAW,KAAK,SAAS,QAAQ,GAAG;AAClC,aAAO,KAAK,QAAQ,UAAU;AAAA,EAAW,SAAS,EAAE;AAAA,IACtD,OAAO;AACL,aAAO,YAAY,OAAO;AAAA,IAC5B;AAAA,EACF;AAAA,EAEQ,iBACN,MACA,WACQ;AACR,QAAI,SAAS;AACb,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,SAAS,GAAG;AACpD,eAAS,OAAO,QAAQ,IAAI,OAAO,SAAS,GAAG,UAAU,GAAG,GAAG,KAAK;AACpE,eAAS,OAAO,QAAQ,IAAI,OAAO,SAAS,GAAG,OAAO,GAAG,GAAG,KAAK;AAAA,IACnE;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,OAAO,MAAsB;AACnC,WAAO,KACJ,QAAQ,oBAAoB,EAAE,EAC9B,QAAQ,QAAQ,GAAG,EACnB,QAAQ,UAAU,IAAI,EACtB,KAAK;AAAA,EACV;AACF;AAEO,SAAS,2BACd,MAC0B;AAC1B,SAAO,CAAC,SAAiB;AACvB,UAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yCAQa,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+BzC,QAAI,KAAK,SAAS,SAAS,GAAG;AAC5B,aAAO,KAAK,QAAQ,WAAW,GAAG,eAAe;AAAA,QAAW;AAAA,IAC9D;AACA,WAAO,OAAO;AAAA,EAChB;AACF;;;AjBpIA,IAAM,qBAAkD;AAAA,EACtD,oBAAoB;AAAA,IAClB,QAAQ;AAAA,IACR,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAmBJ,KAAK;AAAA,EACT;AACF;AAEA,SAAS,0BACP,cACgB;AAChB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,OAAO;AACX,YAAM,UAAU,EAAE,QAAQ,YAAY,GAAG,CAAC,SAAS;AACjD,YAAI,aAAa,KAAK,IAAI,GAAG;AAC3B,iBAAO;AAAA,YACL,MAAM,KAAK;AAAA,YACX,WAAW;AAAA,UACb;AAAA,QACF;AAAA,MACF,CAAC;AAED,YAAM,OAAO,EAAE,QAAQ,MAAM,WAAW,UAAU,GAAG,CAAC,SAAS;AAC7D,cAAM,cAAc,aAAa,KAAK,IAAI;AAE1C,YAAI,aAAa;AACf,iBAAO;AAAA,YACL,UAAU,YAAY;AAAA,YACtB,QAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,IAAM,mBAAN,MAAuB;AAAA,EAKrB,YAAY,OAAe,MAAM;AAJjC,SAAQ,MAA8B;AACtC,SAAQ,UAA0B,oBAAI,IAAI;AAIxC,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,QAAc;AACZ,SAAK,MAAM,IAAI,gBAAgB,EAAE,MAAM,KAAK,KAAK,CAAC;AAElD,SAAK,IAAI,GAAG,cAAc,CAAC,OAAkB;AAC3C,WAAK,QAAQ,IAAI,EAAE;AAEnB,SAAG,GAAG,SAAS,MAAM;AACnB,aAAK,QAAQ,OAAO,EAAE;AAAA,MACxB,CAAC;AAED,SAAG,GAAG,SAAS,CAAC,UAAU;AACxB,gBAAQ,MAAM,oBAAoB,KAAK;AACvC,aAAK,QAAQ,OAAO,EAAE;AAAA,MACxB,CAAC;AAAA,IACH,CAAC;AAED,YAAQ,IAAI,iDAAiD,KAAK,IAAI,EAAE;AAAA,EAC1E;AAAA,EAEA,SAAe;AACb,UAAM,gBAAgB,MAAM,KAAK,KAAK,OAAO,EAAE;AAAA,MAC7C,CAAC,WAAW,OAAO,eAAe,UAAU;AAAA,IAC9C;AAEA,QAAI,cAAc,WAAW,GAAG;AAC9B;AAAA,IACF;AAEA,kBAAc,QAAQ,CAAC,WAAW;AAChC,UAAI;AACF,eAAO,KAAK,QAAQ;AAAA,MACtB,SAAS,OAAO;AACd,gBAAQ,MAAM,iCAAiC,KAAK;AACpD,aAAK,QAAQ,OAAO,MAAM;AAAA,MAC5B;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,QAAc;AACZ,QAAI,KAAK,KAAK;AACZ,WAAK,QAAQ,QAAQ,CAAC,WAAW,OAAO,MAAM,CAAC;AAC/C,WAAK,IAAI,MAAM;AAAA,IACjB;AAAA,EACF;AACF;AAEA,eAAe,mBACb,eACA,qBACe;AACf,MAAI;AACF,UAAS,UAAM,UAAU,EAAE,WAAW,KAAK,CAAC;AAE5C,UAAM,eAAe,IAAI,iBAAiB;AAAA,MACxC,cAAc,CAAC,2BAA2B,aAAa,CAAC;AAAA,MACxD,eAAe,CAAC,eAAe;AAAA,MAC/B,GAAG;AAAA,IACL,CAAC;AAED,UAAM,aAAa;AAAA,MACjB;AAAA,MACA;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,YAAQ,MAAM,0CAA0C,KAAK;AAC7D,UAAM;AAAA,EACR;AACF;AAEA,eAAe,mBAAkC;AAC/C,QAAM,QAAQ,IAAI;AAAA,IACb,OAAG,QAAQ,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,IAC3C,OAAG,UAAU,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,EAClD,CAAC;AACH;AAEA,SAAS,0BACP,eACA,uBACA,kBACgB;AAChB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,OAAO;AACX,YAAM,MAAM,CAAC,WAAW;AACtB,YAAI,OAAO,OAAO,SAAS,GAAG;AAC5B,kBAAQ;AAAA,YACN,4BAA4B,OAAO,OAAO,MAAM;AAAA,UAClD;AACA;AAAA,QACF;AAEA,YAAI,cAAc,SAAS;AACzB,wBAAc,QAAQ,KAAK,SAAS;AAAA,QACtC;AAEA,sBAAc,UAAU,MAAM,QAAQ,CAAC,cAAc,GAAG;AAAA,UACtD,OAAO;AAAA,QACT,CAAC;AAED,sBAAc,QAAQ,GAAG,SAAS,CAAC,QAAQ;AACzC,kBAAQ,MAAM,yBAAyB,GAAG;AAAA,QAC5C,CAAC;AAED,mBAAW,MAAM;AACf,2BAAiB,OAAO;AAAA,QAC1B,GAAG,GAAG;AAEN,8BAAsB;AAAA,MACxB,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,eAAsB,iBAAgC;AACpD,QAAM,QAAQ,MAAM,YAAY;AAChC,QAAM,aAAa,MAAM,WAAW;AACpC,QAAM,SAAS,YAAY,iBAAiB,GAAG,UAAU;AAEzD,QAAM,kBAAkB;AACxB,QAAM,mBAAmB,IAAI,iBAAiB,eAAe;AAE7D,QAAM,iBAAiB;AACvB,QAAM,mBAAmB,iBAAiB,OAAO,gBAAgB;AAEjE,mBAAiB,MAAM;AAEvB,QAAM,cAAc,CAAC,aAAa;AAClC,QAAM,cAAc,oBAAI,IAAY,CAAC,uBAAuB,CAAC;AAC7D,QAAM,mBAAmB,EAAE,SAAS,KAA4B;AAChE,MAAI,YAAyC;AAC7C,MAAI,aAA0C;AAC9C,MAAI,iBAAiB;AAErB,MAAI,qBAAqB,oBAAI,IAAY;AACzC,MAAI,qBAAqB;AAEzB,iBAAe,oBAAmC;AAChD,QAAI,eAAgB;AAEpB,QAAI;AACF,UAAI,YAAY;AACd,cAAM,WAAW,QAAQ;AACzB,qBAAa;AAAA,MACf;AAEA,YAAM,qBAA6C,CAAC;AACpD,aAAO,QAAQ,kBAAkB,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC3D,2BAAmB,MAAM,MAAM,IAAI;AAAA,MACrC,CAAC;AAED,mBAAa,MAAc,iBAAQ;AAAA,QACjC,aAAa;AAAA,QACb,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,WAAW,OAAO,OAAO,aAAa;AAAA,QACtC,QAAQ,OAAO,OAAO,UAAU;AAAA,QAChC,SAAS,CAAC,0BAA0B,kBAAkB,CAAC;AAAA,QACvD,OAAO;AAAA,MACT,CAAC;AAED,YAAM,WAAW,QAAQ;AAAA,IAC3B,SAAS,OAAO;AACd,cAAQ,MAAM,kCAAkC,KAAK;AACrD,YAAM;AAAA,IACR;AAAA,EACF;AAEA,iBAAe,gBAA+B;AAC5C,QAAI,eAAgB;AAEpB,QAAI;AACF,UAAI,WAAW;AACb,cAAM,UAAU,QAAQ;AACxB,oBAAY;AAAA,MACd;AAEA,UAAI,YAAY,SAAS,EAAG;AAE5B,YAAMC,eAAc,MAAM,KAAK,WAAW;AAC1C,YAAM,QAAQ,WAAWA,YAAW;AAEpC,kBAAY,MAAc,iBAAQ;AAAA,QAChC,aAAAA;AAAA,QACA,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,WAAW,OAAO,OAAO,aAAa;AAAA,QACtC,WAAW;AAAA,QACX,QAAQ,OAAO,OAAO,UAAU;AAAA,QAChC,SAAS;AAAA,UACP,GAAI,OAAO,SAAS,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC;AAAA,UAC/C,GAAI,OAAO,gBAAgB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC;AAAA,UACtD,YAAY;AAAA,YACV;AAAA,YACA,eAAe;AAAA,YACf,eAAe,MAAM;AAAA,YAAC;AAAA,UACxB,CAAC;AAAA,UACD;AAAA,YACE,MAAM;AAAA,YACN,MAAM,OAAY;AAChB,oBAAM,MAAM,CAAC,WAAgB;AAC3B,oBAAI,OAAO,OAAO,SAAS,GAAG;AAC5B,0BAAQ;AAAA,oBACN,4BAA4B,OAAO,OAAO,MAAM;AAAA,kBAClD;AAAA,gBACF,OAAO;AACL,0BAAQ,IAAI,wBAAwB;AACpC,mCAAiB,OAAO;AAAA,gBAC1B;AAAA,cACF,CAAC;AAAA,YACH;AAAA,UACF;AAAA,QACF;AAAA,QACA,OAAO;AAAA,MACT,CAAC;AAED,YAAM,UAAU,MAAM;AACtB,yBAAmB,MAAM;AACzB,2BAAqB;AAAA,IACvB,SAAS,OAAO;AACd,cAAQ,MAAM,6BAA6B,KAAK;AAChD,YAAM;AAAA,IACR;AAAA,EACF;AAEA,iBAAe,wBAAuC;AACpD,QAAI,sBAAsB,mBAAmB,OAAO,GAAG;AACrD,YAAM,cAAc;AAAA,IACtB;AAAA,EACF;AAEA,QAAM,YAAY,MAAc,iBAAQ;AAAA,IACtC;AAAA,IACA,QAAQ;AAAA,IACR,QAAQ,OAAO,OAAO,UAAU;AAAA,IAChC,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,WAAW,OAAO,OAAO,aAAa;AAAA,IACtC,QAAQ,OAAO,OAAO,UAAU;AAAA,IAChC,SAAS;AAAA,MACP,GAAI,OAAO,SAAS,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC;AAAA,MAC/C,YAAY;AAAA,QACV,eAAe;AAAA,QACf,eAAe,OAAO,aAAa;AACjC,gBAAM,YAAY,CAAC,YAAY,IAAI,QAAQ;AAE3C,cAAI,WAAW;AACb,wBAAY,IAAI,QAAQ;AACxB,+BAAmB,IAAI,QAAQ;AAC/B,iCAAqB;AAAA,UACvB;AAAA,QACF;AAAA,MACF,CAAC;AAAA,MACD;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,OAAO;AAAA,EACT,CAAC;AAED,iBAAe,WAA0B;AACvC,QAAI,eAAgB;AACpB,qBAAiB;AAEjB,YAAQ,IAAI,+BAA+B;AAE3C,QAAI;AACF,UAAI,iBAAiB,SAAS;AAC5B,yBAAiB,QAAQ,KAAK,SAAS;AACvC,cAAM,IAAI,QAAQ,CAACC,aAAY,WAAWA,UAAS,GAAI,CAAC;AAAA,MAC1D;AAEA,YAAM,UAAU,QAAQ;AACxB,UAAI,UAAW,OAAM,UAAU,QAAQ;AACvC,UAAI,WAAY,OAAM,WAAW,QAAQ;AACzC,uBAAiB,MAAM;AAEvB,cAAQ,IAAI,mCAAmC;AAC/C,cAAQ,KAAK,CAAC;AAAA,IAChB,SAAS,OAAO;AACd,cAAQ,MAAM,0BAA0B,KAAK;AAC7C,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AAEA,UAAQ,GAAG,UAAU,QAAQ;AAC7B,UAAQ,GAAG,WAAW,QAAQ;AAE9B,UAAQ,IAAI,wBAAwB;AAEpC,QAAM,kBAAkB;AAExB,QAAM,UAAU,MAAM;AACxB;;;AkBhYA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,YAAYC,SAAQ;AACpB,YAAYC,WAAU;AACtB,YAAYC,SAAQ;AAEpB,IAAe,sBAAf,MAAmC;AAInC;AAEA,IAAM,kBAAN,cAA8B,oBAAoB;AAAA,EAAlD;AAAA;AACE,gBAAO;AACP,wBAAyB,CAAC;AAAA;AAAA,EAE1B,WAAmB;AACjB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBT;AACF;AAEA,IAAM,iBAAN,cAA6B,oBAAoB;AAAA,EAAjD;AAAA;AACE,gBAAO;AACP,wBAAyB,CAAC;AAAA;AAAA,EAE1B,WAAmB;AACjB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaT;AACF;AAEA,IAAM,gBAAN,cAA4B,oBAAoB;AAAA,EAAhD;AAAA;AACE,gBAAO;AACP,wBAAe,CAAC,UAAU,OAAO;AAAA;AAAA,EAEjC,WAAmB;AACjB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBT;AACF;AAEA,IAAM,gBAAN,cAA4B,oBAAoB;AAAA,EAAhD;AAAA;AACE,gBAAO;AACP,wBAAe,CAAC,QAAQ;AAAA;AAAA,EAExB,WAAmB;AACjB,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0BT;AACF;AAEA,IAAM,oBAAN,MAAwB;AAAA,EACtB;AAAA,SAAe,aAAa,oBAAI,IAAiC;AAAA,MAC/D,CAAC,UAAU,IAAI,gBAAgB,CAAC;AAAA,MAChC,CAAC,SAAS,IAAI,eAAe,CAAC;AAAA,MAC9B,CAAC,QAAQ,IAAI,cAAc,CAAC;AAAA,MAC5B,CAAC,QAAQ,IAAI,cAAc,CAAC;AAAA,IAC9B,CAAC;AAAA;AAAA,EAED,OAAO,IAAI,MAA+C;AACxD,WAAO,KAAK,WAAW,IAAI,IAAI;AAAA,EACjC;AAAA,EAEA,OAAO,IAAI,MAAuB;AAChC,WAAO,KAAK,WAAW,IAAI,IAAI;AAAA,EACjC;AAAA,EAEA,OAAO,SAAmB;AACxB,WAAO,MAAM,KAAK,KAAK,WAAW,KAAK,CAAC;AAAA,EAC1C;AAAA,EAEA,OAAO,SAAS,WAAsC;AACpD,SAAK,WAAW,IAAI,UAAU,MAAM,SAAS;AAAA,EAC/C;AACF;AAEO,SAAS,aACd,MACA,sBAAmC,oBAAI,IAAI,GAC3C;AACA,MAAI,oBAAoB,IAAI,IAAI,GAAG;AACjC;AAAA,EACF;AAEA,QAAM,YAAY,kBAAkB,IAAI,IAAI;AAC5C,MAAI,CAAC,WAAW;AACd,UAAM,IAAI;AAAA,MACR,cAAc,IAAI,sCAAsC,kBAAkB,OAAO,EAAE;AAAA,QACjF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,sBAAoB,IAAI,IAAI;AAE5B,MAAI,UAAU,aAAa,SAAS,GAAG;AACrC,YAAQ;AAAA,MACN;AAAA,+BAAkC,IAAI,OAAO,UAAU,aAAa;AAAA,QAClE;AAAA,MACF,CAAC;AAAA,IACH;AACA,eAAW,cAAc,UAAU,cAAc;AAC/C,mBAAa,YAAY,mBAAmB;AAAA,IAC9C;AAAA,EACF;AAEA,QAAM,sBAA2B;AAAA,IAC/B,QAAQ,IAAI;AAAA,IACZ;AAAA,EACF;AACA,QAAM,gBAAqB;AAAA,IACzB,QAAQ,IAAI;AAAA,IACZ,2BAA2B,IAAI;AAAA,EACjC;AACA,QAAM,eAAoB,cAAQ,aAAa;AAC/C,QAAM,gBAAqB,WAAK,QAAQ,IAAI,GAAG,uBAAuB;AAEtE,MAAI,CAAI,eAAW,mBAAmB,GAAG;AACvC,UAAM,YAAiB,cAAQ,mBAAmB;AAClD,QAAI,CAAI,eAAW,SAAS,GAAG;AAC7B,MAAG,cAAU,WAAW,EAAE,WAAW,KAAK,CAAC;AAAA,IAC7C;AACA,IAAG,kBAAc,qBAAqB,aAAa,GAAG,OAAO;AAAA,EAC/D;AAEA,MAAI,CAAI,eAAW,YAAY,GAAG;AAChC,IAAG,cAAU,cAAc,EAAE,WAAW,KAAK,CAAC;AAAA,EAChD;AAEA,MAAI,CAAI,eAAW,aAAa,GAAG;AACjC,IAAG,kBAAc,eAAe,UAAU,SAAS,GAAG,OAAO;AAC7D,YAAQ,IAAI,WAAW,IAAI,gBAAgB;AAAA,EAC7C,OAAO;AACL,YAAQ,IAAI,GAAG,IAAI,uDAAuD;AAAA,EAC5E;AAEA,QAAM,gBAAmB,iBAAa,qBAAqB,OAAO;AAClE,QAAM,gBAAgB,0BAA0B,eAAe,IAAI;AACnE,EAAG,kBAAc,qBAAqB,eAAe,OAAO;AAE5D,MAAO,eAAW,aAAa,GAAG;AAChC,UAAM,mBAAsB,iBAAa,eAAe,OAAO;AAC/D,UAAM,mBAAmB,8BAA8B,gBAAgB;AACvE,QAAI,qBAAqB,kBAAkB;AACzC,MAAG,kBAAc,eAAe,kBAAkB,OAAO;AAAA,IAC3D;AAAA,EACF;AACF;AAmDA,SAAS,0BACP,eACA,eACQ;AACR,QAAM,YAAYC,YAAW,aAAa;AAC1C,QAAM,aAAa,eAAe,aAAa;AAE/C,QAAM,aAAgB;AAAA,IACpB;AAAA,IACA;AAAA,IACG,iBAAa;AAAA,IAChB;AAAA,EACF;AAEA,QAAM,YAAY,WAAW,WAAW,KAAK,CAAC,cAAc;AAC1D,QAAO,wBAAoB,SAAS,GAAG;AACrC,YAAM,kBAAkB,UAAU;AAClC,UAAO,oBAAgB,eAAe,GAAG;AACvC,eAAO,gBAAgB,SAAS;AAAA,MAClC;AAAA,IACF;AACA,WAAO;AAAA,EACT,CAAC;AAED,MAAI,WAAW;AACb,WAAO;AAAA,EACT;AAEA,MAAI,gBAAgB;AACpB,aAAW,WAAW,QAAQ,CAAC,cAAc;AAC3C,QAAO,wBAAoB,SAAS,GAAG;AACrC,sBAAgB,UAAU;AAAA,IAC5B;AAAA,EACF,CAAC;AAED,QAAM,kBAAkB,YAAY,SAAS,YAAY,UAAU;AAAA;AACnE,MAAI,iBACF,cAAc,MAAM,GAAG,aAAa,IACpC,OACA,kBACA,cAAc,MAAM,aAAa;AAEnC,QAAM,gBAAmB;AAAA,IACvB;AAAA,IACA;AAAA,IACG,iBAAa;AAAA,IAChB;AAAA,EACF;AAEA,mBAAiB;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,mBAAiB;AAAA,IACf;AAAA,IACG;AAAA,MACD;AAAA,MACA;AAAA,MACG,iBAAa;AAAA,MAChB;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,oBACP,SACA,YACA,WACA,WACQ;AACR,MAAI;AAEJ,aAAW,WAAW,QAAQ,CAAC,cAAc;AAC3C,QAAO,uBAAmB,SAAS,KAAK,UAAU,WAAW;AAC3D,gBAAU,UAAU,QAAQ,CAAC,aAAa;AACxC,YAAO,gBAAY,QAAQ,GAAG;AAC5B,gBAAM,aAAa,SAAS;AAC5B,cAAO,qBAAiB,UAAU,GAAG;AACnC,kBAAM,iBAAiB,WAAW,WAAW,QAAQ,UAAU;AAC/D,gBAAI,mBAAmB,UAAU;AAC/B,8BAAgB;AAAA,YAClB;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,MAAI,CAAC,eAAe;AAClB,YAAQ,KAAK,kCAAkC;AAC/C,WAAO;AAAA,EACT;AAEA,QAAM,iBAAiB,cAAc;AACrC,QAAM,gBAAgB,eACnB,UAAU,CAAC;AAEd,MAAI,CAAC,iBAAiB,CAAI,8BAA0B,aAAa,GAAG;AAClE,WAAO;AAAA,EACT;AAEA,MAAI;AACJ,gBAAc,WAAW,QAAQ,CAAC,SAAS;AACzC,QAAO,yBAAqB,IAAI,GAAG;AACjC,YAAM,WAAW,KAAK,KAAK,QAAQ,UAAU;AAC7C,UAAI,aAAa,WAAW;AAC1B,yBAAiB;AAAA,MACnB;AAAA,IACF;AAAA,EACF,CAAC;AAED,MAAI,CAAC,gBAAgB;AACnB,YAAQ,KAAK,kBAAkB,SAAS,WAAW;AACnD,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,eAAe;AACpC,MAAI,CAAI,6BAAyB,YAAY,GAAG;AAC9C,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,aAAa,SAAS,KAAK,CAAC,YAAY;AAC3D,WAAO,QAAQ,QAAQ,UAAU,EAAE,KAAK,MAAM;AAAA,EAChD,CAAC;AAED,MAAI,cAAc;AAChB,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,aAAa,SAAS,UAAU;AACnD,QAAM,WAAW,aAAa,OAAO;AAErC,MAAI,aAAa,SAAS,WAAW,GAAG;AACtC,UAAM,WAAW,IAAI,SAAS;AAC9B,WACE,QAAQ,UAAU,GAAG,UAAU,IAAI,WAAW,QAAQ,UAAU,QAAQ;AAAA,EAE5E;AAEA,QAAM,cAAc,aAAa,SAAS,aAAa,SAAS,SAAS,CAAC;AAC1E,QAAM,YAAY,YAAY,OAAO;AACrC,QAAM,aAAa,KAAK,SAAS;AAEjC,SACE,QAAQ,UAAU,GAAG,SAAS,IAAI,aAAa,QAAQ,UAAU,SAAS;AAE9E;AAEA,SAAS,8BAA8B,kBAAkC;AACvE,QAAM,aAAgB;AAAA,IACpB;AAAA,IACA;AAAA,IACG,iBAAa;AAAA,IAChB;AAAA,EACF;AAEA,QAAM,2BAA2B,WAAW,WAAW,KAAK,CAAC,cAAc;AACzE,QAAO,wBAAoB,SAAS,KAAK,UAAU,cAAc;AAC/D,YAAM,gBAAgB,UAAU,aAAa;AAC7C,UAAI,iBAAoB,mBAAe,aAAa,GAAG;AACrD,eAAO,cAAc,SAAS;AAAA,UAC5B,CAAC,YAAY,QAAQ,KAAK,SAAS;AAAA,QACrC;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT,CAAC;AAED,MAAI,0BAA0B;AAC5B,WAAO,qBAAqB,kBAAkB,UAAU;AAAA,EAC1D;AAEA,MAAI,gBAAgB;AACpB,aAAW,WAAW,QAAQ,CAAC,cAAc;AAC3C,QAAO,wBAAoB,SAAS,GAAG;AACrC,sBAAgB,UAAU;AAAA,IAC5B;AAAA,EACF,CAAC;AAED,QAAM,kBAAkB;AAAA;AACxB,MAAI,iBACF,iBAAiB,MAAM,GAAG,aAAa,IACvC,OACA,kBACA,iBAAiB,MAAM,aAAa;AAEtC,QAAM,gBAAmB;AAAA,IACvB;AAAA,IACA;AAAA,IACG,iBAAa;AAAA,IAChB;AAAA,EACF;AAEA,mBAAiB,qBAAqB,gBAAgB,aAAa;AAEnE,SAAO;AACT;AAEA,SAAS,qBACP,SACA,YACQ;AACR,SAAO,oBAAoB,SAAS,YAAY,WAAW,iBAAiB;AAC9E;AAEA,SAASA,YAAW,KAAqB;AACvC,SAAO,IAAI,OAAO,CAAC,EAAE,YAAY,IAAI,IAAI,MAAM,CAAC;AAClD;AAEA,SAAS,eAAe;AACtB,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUT;;;AC/eO,SAAS,YAAY,KAAqB;AAC/C,SAAO,IACJ,QAAQ,YAAY,CAAC,GAAG,SAAS,KAAK,YAAY,CAAC,EACnD,QAAQ,MAAM,CAAC,SAAS,KAAK,YAAY,CAAC;AAC/C;AAEO,SAAS,aAAa,KAAqB;AAChD,SAAO,IACJ,QAAQ,YAAY,CAAC,GAAG,SAAS,KAAK,YAAY,CAAC,EACnD,QAAQ,MAAM,CAAC,SAAS,KAAK,YAAY,CAAC;AAC/C;;;ACVA,YAAYC,SAAQ;AACpB,YAAYC,WAAU;AAaf,SAAS,gBAAgB,UAAkB,OAAiB;AACjE,EAAG,cAAU,UAAU,EAAE,WAAW,KAAK,CAAC;AAE1C,QAAM,OAAO,QAAQ,CAAC,SAAS;AAC7B,IAAG,kBAAmB,WAAK,UAAU,KAAK,IAAI,GAAG,KAAK,OAAO;AAAA,EAC/D,CAAC;AAED,QAAM,MAAM,QAAQ,CAAC,QAAQ;AAC3B,UAAM,UAAe,WAAK,UAAU,IAAI,QAAQ,EAAE;AAClD,oBAAgB,SAAS,GAAG;AAAA,EAC9B,CAAC;AACH;;;ACxBA,OAAOC,YAAU;;;ACAjB,YAAYC,YAAU;AACtB,YAAYC,SAAQ;AACpB,YAAYC,SAAQ;AAEb,SAAS,WAAW,MAAc;AACvC,QAAM,aAAkB,YAAK,QAAQ,IAAI,GAAG,OAAO,YAAY,IAAI;AAEnE,YAAU,MAAM,UAAU;AAE1B,sBAAoB,IAAI;AAExB,kBAAgB,IAAI;AACtB;AAEO,SAAS,UAAU,MAAc,SAAiB,MAAgB;AACvE,QAAM,YAAsB;AAAA,IAC1B,OAAO;AAAA,MACL,EAAE,MAAM,GAAG,IAAI,cAAc,SAASC,cAAa,MAAM,IAAI,EAAE;AAAA,MAC/D,EAAE,MAAM,GAAG,IAAI,eAAe,SAAS,cAAc,IAAI,EAAE;AAAA,MAC3D,EAAE,MAAM,GAAG,IAAI,aAAa,SAAS,WAAW,IAAI,EAAE;AAAA,IACxD;AAAA,IACA,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,UACL;AAAA,YACE,MAAM;AAAA,YACN,SAAS,gBAAgB,IAAI;AAAA,UAC/B;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,SAAS,mBAAmB,IAAI;AAAA,UAClC;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,SAAS,mBAAmB,IAAI;AAAA,UAClC;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,SAAS,iBAAiB,IAAI;AAAA,UAChC;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,SAAS,mBAAmB,IAAI;AAAA,UAClC;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,OAAO;AAAA,UACL;AAAA,YACE,MAAM,GAAG,IAAI;AAAA,YACb,SAAS,oBAAoB,IAAI;AAAA,UACnC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,kBAAgB,SAAS,SAAS;AACpC;AAEA,SAAS,oBAAoB,aAAqB;AAChD,QAAM,oBAAyB;AAAA,IAC7B,QAAQ,IAAI;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,aAAa,aAAa,cAAc,SAAc;AAC5D,QAAM,aAAa,KAAK,WAAW,IAAI,WAAW;AAElD,MAAO,eAAW,iBAAiB,GAAG;AACpC,QAAI,UAAa,iBAAa,mBAAmB,OAAO;AACxD,UAAM,aAAgB;AAAA,MACpB;AAAA,MACA;AAAA,MACG,iBAAa;AAAA,MAChB;AAAA,IACF;AAEA,UAAM,YAAY,WAAW,WAAW,KAAK,CAAC,cAAc;AAC1D,UAAO,wBAAoB,SAAS,GAAG;AACrC,cAAM,kBAAkB,UAAU;AAClC,YAAI,mBAAsB,oBAAgB,eAAe,GAAG;AAC1D,iBAAO,gBAAgB,SAAS;AAAA,QAClC;AACA,YACE,UAAU,gBACP,mBAAe,UAAU,YAAY,GACxC;AACA,iBAAO,UAAU,aAAa,SAAS;AAAA,YACrC,CAAC,YAAY,QAAQ,KAAK,SAAS;AAAA,UACrC;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT,CAAC;AAED,QAAI,WAAW;AACb;AAAA,IACF;AAEA,UAAM,kBAAkB,YAAY,UAAU,YAAY,UAAU;AAAA;AACpE,IAAG,mBAAe,mBAAmB,eAAe;AAAA,EACtD,OAAO;AACL,UAAM,cAAmB,eAAQ,iBAAiB;AAClD,QAAI,CAAI,eAAW,WAAW,GAAG;AAC/B,MAAG,cAAU,aAAa,EAAE,WAAW,KAAK,CAAC;AAAA,IAC/C;AAEA,UAAM,kBAAkB,YAAY,UAAU,YAAY,UAAU;AAAA;AACpE,IAAG,kBAAc,mBAAmB,iBAAiB,OAAO;AAAA,EAC9D;AACF;AAEA,SAAS,gBAAgB,aAAqB;AAC5C,QAAM,gBAAqB,YAAK,QAAQ,IAAI,GAAG,OAAO,OAAO,eAAe;AAE5E,MAAI,CAAI,eAAW,aAAa,GAAG;AACjC;AAAA,EACF;AAEA,QAAM,aAAa,aAAa,cAAc,SAAc;AAC5D,MAAI,UAAa,iBAAa,eAAe,OAAO;AAEpD,QAAM,aAAgB;AAAA,IACpB;AAAA,IACA;AAAA,IACG,iBAAa;AAAA,IAChB;AAAA,EACF;AAEA,QAAM,YAAY,WAAW,WAAW,KAAK,CAAC,cAAc;AAC1D,QAAO,wBAAoB,SAAS,GAAG;AACrC,YAAM,kBAAkB,UAAU;AAClC,UAAO,oBAAgB,eAAe,GAAG;AACvC,cAAM,aAAa,gBAAgB;AACnC,eAAO,WAAW,SAAS,IAAI,WAAW,IAAI,WAAW,SAAS;AAAA,MACpE;AAEA,UACE,UAAU,cAAc,iBACrB,mBAAe,UAAU,aAAa,aAAa,GACtD;AACA,eAAO,UAAU,aAAa,cAAc,SAAS;AAAA,UACnD,CAAC,YAAY,QAAQ,KAAK,SAAS;AAAA,QACrC;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT,CAAC;AAED,MAAI,WAAW;AACb,cAAU,wBAAwB,SAAS,YAAY,UAAU;AACjE,IAAG,kBAAc,eAAe,SAAS,OAAO;AAChD;AAAA,EACF;AAEA,MAAI,gBAAgB;AACpB,aAAW,WAAW,QAAQ,CAAC,cAAc;AAC3C,QAAO,wBAAoB,SAAS,GAAG;AACrC,sBAAgB,UAAU;AAAA,IAC5B;AAAA,EACF,CAAC;AAED,QAAM,kBAAkB,YAAY,UAAU,wBAAwB,WAAW,IAAI,WAAW;AAAA;AAChG,YACE,QAAQ,MAAM,GAAG,aAAa,IAC9B,OACA,kBACA,QAAQ,MAAM,aAAa;AAE7B,QAAM,gBAAmB;AAAA,IACvB;AAAA,IACA;AAAA,IACG,iBAAa;AAAA,IAChB;AAAA,EACF;AAEA,YAAU,wBAAwB,SAAS,eAAe,UAAU;AAEpE,EAAG,kBAAc,eAAe,SAAS,OAAO;AAClD;AAEA,SAAS,wBACP,SACA,YACA,YACQ;AACR,MAAI;AAEJ,aAAW,WAAW,QAAQ,CAAC,cAAc;AAC3C,QAAO,uBAAmB,SAAS,KAAK,UAAU,WAAW;AAC3D,gBAAU,UAAU,QAAQ,CAAC,aAAa;AACxC,YAAO,gBAAY,QAAQ,GAAG;AAC5B,gBAAM,aAAa,SAAS;AAC5B,cAAO,qBAAiB,UAAU,GAAG;AACnC,kBAAM,iBAAiB,WAAW,WAAW,QAAQ,UAAU;AAC/D,gBAAI,mBAAmB,UAAU;AAC/B,8BAAgB;AAAA,YAClB;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,MAAI,CAAC,eAAe;AAClB,WAAO;AAAA,EACT;AAEA,QAAM,iBAAiB,cAAc;AACrC,QAAM,gBAAgB,eACnB,UAAU,CAAC;AAEd,MAAI,CAAC,iBAAiB,CAAI,8BAA0B,aAAa,GAAG;AAClE,WAAO;AAAA,EACT;AAEA,MAAI;AACJ,gBAAc,WAAW,QAAQ,CAAC,SAAS;AACzC,QAAO,yBAAqB,IAAI,GAAG;AACjC,YAAM,WAAW,KAAK,KAAK,QAAQ,UAAU;AAC7C,UAAI,aAAa,WAAW;AAC1B,0BAAkB;AAAA,MACpB;AAAA,IACF;AAAA,EACF,CAAC;AAED,MAAI,CAAC,iBAAiB;AACpB,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,gBAAgB;AACrC,MAAI,CAAI,6BAAyB,YAAY,GAAG;AAC9C,WAAO;AAAA,EACT;AAEA,QAAM,YAAY,aAAa,SAAS,KAAK,CAAC,YAAY;AACxD,WAAO,QAAQ,QAAQ,UAAU,EAAE,KAAK,MAAM;AAAA,EAChD,CAAC;AAED,MAAI,WAAW;AACb,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,aAAa,SAAS,UAAU;AACnD,QAAM,WAAW,aAAa,OAAO;AAErC,MAAI,aAAa,SAAS,WAAW,GAAG;AACtC,UAAM,WAAW,IAAI,UAAU;AAC/B,WACE,QAAQ,UAAU,GAAG,UAAU,IAAI,WAAW,QAAQ,UAAU,QAAQ;AAAA,EAE5E;AAEA,QAAM,cAAc,aAAa,SAAS,aAAa,SAAS,SAAS,CAAC;AAC1E,QAAM,YAAY,YAAY,OAAO;AACrC,QAAM,aAAa,KAAK,UAAU;AAElC,SACE,QAAQ,UAAU,GAAG,SAAS,IAAI,aAAa,QAAQ,UAAU,SAAS;AAE9E;AAEA,SAASA,cAAa,MAAc,MAAgB;AAClD,QAAM,cAAc,aAAa,OAAO,UAAe;AACvD,QAAM,WAAW,aAAa,OAAO,OAAY;AACjD,QAAM,aAAa,aAAa,OAAO,SAAc;AACrD,QAAM,gBAAgB,aAAa,OAAO,OAAY;AAEtD,MAAI,MAAM;AACR,WAAO;AAAA;AAAA,WAEA,WAAW,cAAc,IAAI;AAAA,WAC7B,QAAQ,cAAc,IAAI;AAAA,WAC1B,aAAa,yBAAyB,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAUnC,WAAW;AAAA,qBACR,QAAQ,KAAK,aAAa;AAAA,gBAC/B,WAAW,KAAK,QAAQ;AAAA,iBACvB,QAAQ;AAAA;AAAA,eAEV,UAAU;AAAA;AAAA,EAEvB;AAEA,SAAO;AAAA;AAAA,WAEE,WAAW,cAAc,IAAI;AAAA,WAC7B,QAAQ,cAAc,IAAI;AAAA,WAC1B,aAAa,yBAAyB,IAAI;AAAA;AAAA;AAAA;AAAA,kBAInC,WAAW;AAAA,qBACR,QAAQ,KAAK,aAAa;AAAA,gBAC/B,WAAW,KAAK,QAAQ;AAAA;AAAA,eAEzB,UAAU;AAAA;AAEzB;AAEA,SAAS,gBAAgB,MAAc;AACrC,SAAO;AAAA;AAAA,eAEM,YAAY,OAAO,WAAgB,CAAC;AAAA;AAAA;AAAA;AAAA,eAIpC,YAAY,OAAO,YAAiB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQpD;AAEA,SAAS,mBAAmB,MAAc;AACxC,SAAO;AAAA;AAAA,eAEM,YAAY,OAAO,cAAmB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,eAKvC,YAAY,OAAO,eAAoB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOvD;AAEA,SAAS,mBAAmB,MAAc;AACxC,SAAO;AAAA;AAAA,eAEM,YAAY,OAAO,cAAmB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAMvC,YAAY,OAAO,eAAoB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQvD;AAEA,SAAS,iBAAiB,MAAc;AACtC,SAAO;AAAA;AAAA,eAEM,YAAY,OAAO,aAAkB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUrD;AAEA,SAAS,mBAAmB,MAAc;AACxC,SAAO;AAAA;AAAA,eAEM,YAAY,OAAO,cAAmB,CAAC;AAAA;AAAA;AAAA;AAAA,eAIvC,YAAY,OAAO,eAAoB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQvD;AAEA,SAAS,cAAc,MAAc;AACnC,QAAM,cAAc,aAAa,OAAO,UAAe;AAEvD,SAAO;AAAA;AAAA;AAAA;AAAA,IAIL,YAAY,OAAO,cAAmB,CAAC;AAAA,IACvC,YAAY,OAAO,eAAoB,CAAC;AAAA;AAAA;AAAA,IAGxC,YAAY,OAAO,WAAgB,CAAC;AAAA,IACpC,YAAY,OAAO,YAAiB,CAAC;AAAA;AAAA;AAAA,IAGrC,YAAY,OAAO,cAAmB,CAAC;AAAA,IACvC,YAAY,OAAO,eAAoB,CAAC;AAAA;AAAA,WAEjC,YAAY,OAAO,aAAkB,CAAC;AAAA;AAAA,IAE7C,YAAY,OAAO,cAAmB,CAAC;AAAA,IACvC,YAAY,OAAO,eAAoB,CAAC;AAAA;AAAA;AAAA;AAAA,eAI7B,WAAW;AAAA;AAAA;AAAA,iBAGT,YAAY,OAAO,cAAmB,CAAC,KAAK;AAAA,IACzD,OAAO;AAAA,EACT,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAWc,YAAY,OAAO,WAAgB,CAAC,KAAK;AAAA,IACtD,OAAO;AAAA,EACT,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBASc,YAAY,OAAO,aAAkB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,iBAKtC,YAAY,OAAO,cAAmB,CAAC,KAAK;AAAA,IACzD,OAAO;AAAA,EACT,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAgBc,YAAY,OAAO,cAAmB,CAAC,KAAK;AAAA,IACzD,OAAO;AAAA,EACT,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYH;AAEA,SAAS,WAAW,MAAc;AAChC,QAAM,WAAW,aAAa,OAAO,OAAY;AACjD,QAAM,gBAAgB,aAAa,OAAO,OAAY;AAEtD,SAAO;AAAA,WACE,aAAa,yBAAyB,IAAI;AAAA;AAAA;AAAA,WAG1C,aAAa;AAAA;AAAA,eAET,QAAQ;AAAA;AAAA;AAAA;AAAA,sBAID,aAAa,IAAI,CAAC;AAAA,mBACrB,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAMhC;AAEA,SAAS,oBAAoB,MAAc;AACzC,QAAM,gBAAgB,aAAa,OAAO,OAAY;AACtD,QAAM,cAAc,aAAa,OAAO,UAAe;AACvD,QAAM,aAAa,YAAY,OAAO,UAAe;AAErD,SAAO;AAAA;AAAA;AAAA,WAGE,WAAW,eAAe,IAAI;AAAA;AAAA;AAAA,eAG1B,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAMF,UAAU,KAAK,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAM9B,aAAa,IAAI,CAAC;AAAA,wCACA,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAO5C;;;AD3hBO,SAAS,OAAO,MAAc;AACnC,QAAM,UAAUC,OAAK,KAAK,QAAQ,IAAI,GAAG,IAAI;AAE7C,QAAM,YAAsB;AAAA,IAC1B,OAAO;AAAA,MACL,EAAE,MAAM,gBAAgB,SAAS,eAAe,IAAI,EAAE;AAAA,MACtD,EAAE,MAAM,iBAAiB,SAAS,YAAY,EAAE;AAAA,MAChD,EAAE,MAAM,iBAAiB,SAAS,aAAa,IAAI,EAAE;AAAA,MACrD,EAAE,MAAM,aAAa,SAAS,UAAU,EAAE;AAAA,MAC1C,EAAE,MAAM,cAAc,SAAS,aAAa,EAAE;AAAA,MAC9C,EAAE,MAAM,QAAQ,SAAS,OAAO,EAAE;AAAA,IACpC;AAAA,IACA,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,OAAO,CAAC,EAAE,MAAM,WAAW,SAAS,UAAU,EAAE,CAAC;AAAA,QACjD,MAAM;AAAA,UACJ;AAAA,YACE,MAAM;AAAA,YACN,OAAO;AAAA,cACL,EAAE,MAAM,cAAc,SAAS,aAAa,IAAI,EAAE;AAAA,cAClD,EAAE,MAAM,cAAc,SAAS,aAAa,EAAE;AAAA,YAChD;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,kBAAgB,SAAS,SAAS;AAElC,QAAM,SAASA,OAAK,KAAK,QAAQ,IAAI,GAAG,MAAM,OAAO,KAAK;AAE1D,YAAU,OAAO,QAAQ,IAAI;AAE7B,UAAQ,MAAM,OAAO;AAErB,eAAa,QAAQ;AAErB,UAAQ,IAAI,OAAO,IAAI,uBAAuB;AAChD;AAEA,SAAS,eAAe,MAAc;AACpC,QAAM,KAAK;AAAA,IACT;AAAA,IACA,SAAS;AAAA,IACT,SAAS;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP,KAAK;AAAA,MACL,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA,cAAc;AAAA,MACZ,oBAAoB;AAAA,MACpB,KAAK;AAAA,MACL,kBAAkB;AAAA,MAClB,oBAAoB;AAAA,IACtB;AAAA,IACA,iBAAiB;AAAA,MACf,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,iBAAiB;AAAA,IACnB;AAAA,EACF;AAEA,SAAO,KAAK,UAAU,IAAI,MAAM,CAAC;AACnC;AAEA,SAAS,cAAc;AACrB,QAAM,WAAW;AAAA,IACf,iBAAiB;AAAA,MACf,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,kBAAkB;AAAA,MAClB,QAAQ;AAAA,MACR,iBAAiB;AAAA,MACjB,cAAc;AAAA,MACd,KAAK;AAAA,MACL,iBAAiB;AAAA,MACjB,wBAAwB;AAAA,MACxB,uBAAuB;AAAA,MACvB,SAAS;AAAA,MACT,OAAO;AAAA,QACL,OAAO,CAAC,OAAO;AAAA,MACjB;AAAA,IACF;AAAA,IACA,SAAS,CAAC,KAAK;AAAA,EACjB;AAEA,SAAO,KAAK,UAAU,UAAU,MAAM,CAAC;AACzC;AAEA,SAAS,aAAa,MAAc;AAClC,SAAO;AAAA;AAAA;AAAA;AAAA,aAII,IAAI;AAAA;AAAA;AAAA;AAAA;AAKjB;AAEA,SAAS,YAAY;AACnB,SAAO;AAAA;AAET;AAEA,SAAS,eAAe;AACtB,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQT;AAEA,SAAS,SAAS;AAChB,SAAO;AAAA;AAET;AAEA,SAAS,aAAa,MAAc;AAClC,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA,aAKI,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASjB;AAEA,SAAS,eAAe;AACtB,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCT;AAEA,SAAS,YAAY;AACnB,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYT;;;AEvMA,OAAOC,YAAU;AACjB,OAAO,aAAa;AAOpB,eAAsB,MAAM,MAAc;AACxC,QAAM,UAAUA,OAAK,KAAK,QAAQ,IAAI,GAAG,IAAI;AAE7C,QAAM,WAAW,MAAM,QAAQ;AAAA,IAC7B,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,MACP,EAAE,OAAO,WAAW,OAAO,UAAU;AAAA,MACrC,EAAE,OAAO,WAAW,OAAO,OAAO;AAAA,MAClC,EAAE,OAAO,4BAA4B,OAAO,OAAO;AAAA,IACrD;AAAA,IACA,SAAS;AAAA,EACX,CAAC;AAED,MAAI,CAAC,SAAS,QAAQ;AACpB,YAAQ,IAAI,4BAA4B;AACxC,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,SAAS,SAAS;AAExB,QAAM,YAAsB;AAAA,IAC1B,OAAO;AAAA,MACL,EAAE,MAAM,gBAAgB,SAASC,gBAAe,MAAM,MAAM,EAAE;AAAA,MAC9D,EAAE,MAAM,iBAAiB,SAAS,YAAY,MAAM,EAAE;AAAA,MACtD,EAAE,MAAM,YAAY,SAAS,eAAe,MAAM,MAAM,EAAE;AAAA,MAC1D,EAAE,MAAM,aAAa,SAASC,WAAU,MAAM,MAAM,EAAE;AAAA,MACtD,EAAE,MAAM,cAAc,SAASC,cAAa,EAAE;AAAA,MAC9C,EAAE,MAAM,QAAQ,SAASC,QAAO,EAAE;AAAA,IACpC;AAAA,IACA,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,OAAO,YAAY,MAAM;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AAEA,kBAAgB,SAAS,SAAS;AAElC,UAAQ,MAAM,OAAO;AAErB,UAAQ,IAAI,kCAAkC,MAAM,cAAc;AACpE;AAEA,SAAS,YAAY,QAAqC;AACxD,UAAQ,QAAQ;AAAA,IACd,KAAK;AACH,aAAO;AAAA,QACL,EAAE,MAAM,YAAY,SAAS,WAAW,EAAE;AAAA,QAC1C,EAAE,MAAM,oBAAoB,SAAS,kBAAkB,EAAE;AAAA,QACzD,EAAE,MAAM,iBAAiB,SAAS,eAAe,EAAE;AAAA,MACrD;AAAA,IACF,KAAK;AACH,aAAO,CAAC,EAAE,MAAM,YAAY,SAAS,kBAAkB,EAAE,CAAC;AAAA,IAC5D,KAAK;AACH,aAAO,CAAC,EAAE,MAAM,YAAY,SAAS,eAAe,EAAE,CAAC;AAAA,EAC3D;AACF;AAEA,SAASH,gBAAe,MAAc,QAAqC;AACzE,QAAM,MAAW;AAAA,IACf;AAAA,IACA,SAAS;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP,OAAO;AAAA,MACP,KAAK;AAAA,MACL,OAAO;AAAA,IACT;AAAA,IACA,iBAAiB;AAAA,MACf,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,eAAe;AAAA,IACjB;AAAA,EACF;AAEA,MAAI,WAAW,QAAQ;AACrB,QAAI,OAAO;AACX,QAAI,QAAQ;AAAA,EACd,WAAW,WAAW,WAAW;AAC/B,QAAI,OAAO;AACX,QAAI,QAAQ;AAAA,EACd,WAAW,WAAW,QAAQ;AAC5B,QAAI,UAAU;AAAA,MACZ,KAAK;AAAA,QACH,SAAS;AAAA,UACP,QAAQ;AAAA,QACV;AAAA,QACA,MAAM;AAAA,UACJ,QAAQ;AAAA,QACV;AAAA,QACA,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,SAAO,KAAK,UAAU,KAAK,MAAM,CAAC;AACpC;AAEA,SAAS,YAAY,QAAqC;AACxD,QAAM,SAAc;AAAA,IAClB,iBAAiB;AAAA,MACf,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,kBAAkB;AAAA,MAClB,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,qBAAqB;AAAA,MACrB,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,iBAAiB;AAAA,MACjB,cAAc;AAAA,MACd,kCAAkC;AAAA,MAClC,SAAS;AAAA,MACT,OAAO;AAAA,QACL,OAAO,CAAC,SAAS;AAAA,MACnB;AAAA,IACF;AAAA,IACA,SAAS,CAAC,UAAU;AAAA,IACpB,SAAS,CAAC,gBAAgB,MAAM;AAAA,EAClC;AAEA,MAAI,WAAW,aAAa,WAAW,QAAQ;AAC7C,WAAO,gBAAgB,MAAM,CAAC,UAAU,KAAK;AAAA,EAC/C,OAAO;AACL,WAAO,gBAAgB,MAAM,CAAC,QAAQ;AAAA,EACxC;AAEA,SAAO,KAAK,UAAU,QAAQ,MAAM,CAAC;AACvC;AAEA,SAAS,eAAe,MAAc,QAAqC;AACzE,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAkBc,KAAK,UAAU,gBAAgB,MAAM,GAAG,MAAM,CAAC,EAAE;AAAA,IACpE;AAAA,IACA;AAAA,EACF,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqCH;AAEA,SAAS,gBAAgB,QAAqC;AAC5D,QAAM,aAAa;AAAA,IACjB,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAEA,UAAQ,QAAQ;AAAA,IACd,KAAK;AACH,aAAO;AAAA,QACL;AAAA,UACE,GAAG;AAAA,UACH,aAAa,CAAC,cAAc;AAAA,UAC5B,SAAS;AAAA,UACT,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,QAAQ,CAAC,QAAQ;AAAA,UACjB,UAAU,CAAC;AAAA,QACb;AAAA,MACF;AAAA,IAEF,KAAK;AACH,aAAO;AAAA,QACL;AAAA,UACE,GAAG;AAAA,UACH,aAAa,CAAC,cAAc;AAAA,UAC5B,SAAS;AAAA,UACT,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,QAAQ,CAAC,QAAQ;AAAA,UACjB,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,IAEF,KAAK;AACH,aAAO;AAAA,QACL;AAAA,UACE,GAAG;AAAA,UACH,aAAa,CAAC,sBAAsB;AAAA,UACpC,SAAS;AAAA,UACT,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,QAAQ,CAAC,QAAQ;AAAA,UACjB,UAAU,CAAC;AAAA,QACb;AAAA,QACA;AAAA,UACE,GAAG;AAAA,UACH,aAAa,CAAC,mBAAmB;AAAA,UACjC,SAAS;AAAA,UACT,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,QAAQ,CAAC,QAAQ;AAAA,UACjB,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,EACJ;AACF;AAEA,SAASC,WAAU,MAAc,QAAqC;AACpE,SAAO,KAAK,IAAI;AAAA;AAAA,sCAEoB,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,wBAKpB,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqC5B,WAAW,SACP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAOsB,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAOJ,IAAI;AAAA;AAAA;AAAA;AAAA,IAK1B,WAAW,YACX;AAAA;AAAA;AAAA;AAAA,4BAIsB,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,IAM1B;AAAA;AAAA;AAAA;AAAA,4BAIsB,IAAI;AAAA;AAAA;AAAA,CAIhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AAEA,SAASC,gBAAe;AACtB,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUT;AAEA,SAASC,UAAS;AAChB,SAAO;AAAA;AAET;AAEA,SAAS,aAAa;AACpB,SAAO;AAAA;AAAA;AAAA;AAIT;AAEA,SAAS,oBAAoB;AAC3B,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeT;AAEA,SAAS,iBAAiB;AACxB,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeT;;;AzBxYA,OAAOC,YAAU;AACjB,SAAe,gBAAgB;;;A0BzB/B,OAAOC,UAAQ;AACf,OAAOC,YAAU;AACjB,OAAOC,cAAa;AACpB,OAAO,UAAU;AAYjB,eAAsB,UAAU,MAAsB,QAAQ;AAC5D,QAAM,MAAM,QAAQ,IAAI;AACxB,QAAM,kBAAkBD,OAAK,KAAK,KAAK,cAAc;AAErD,MAAI,CAACD,KAAG,WAAW,eAAe,GAAG;AACnC,UAAM,IAAI,MAAM,mDAAmD;AAAA,EACrE;AAEA,QAAM,cAA2B,MAAMA,KAAG,SAAS,eAAe;AAClE,QAAM,cAAc,YAAY;AAEhC,QAAM,mBAAmB,eAAe,WAAW;AACnD,QAAM,mBAAmB,MAAM,eAAe,gBAAgB;AAE9D,QAAM,mBAAmB,KAAK,WAAW;AACzC,QAAM,iBAAiB,KAAK,WAAW;AAEvC,MAAI,QAAQ,QAAQ;AAClB,UAAM,gBAAgB,KAAK,aAAa,gBAAgB;AAAA,EAC1D,OAAO;AACL,UAAM,iBAAiB,KAAK,aAAa,gBAAgB;AAAA,EAC3D;AAEA,QAAM,iBAAiB,KAAK,WAAW;AAEvC,QAAM,aAAa,KAAK,kBAAkB,GAAG;AAE7C,iBAAe,aAAa,KAAK,gBAAgB;AACnD;AAEA,SAAS,eAAe,aAA2C;AACjE,QAAM,OAAO,YAAY,gBAAgB,CAAC;AAC1C,QAAM,WAA4B,CAAC;AAEnC,MAAI,KAAK,MAAM,KAAK,SAAU,UAAS,KAAK,EAAE,MAAM,WAAW,CAAC;AAChE,MAAI,KAAK,SAAS,KAAK,OAAQ,UAAS,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC9D,MAAI,KAAK,SAAS,KAAK,QAAS,UAAS,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/D,MAAI,KAAK,WAAW,KAAK,SAAU,UAAS,KAAK,EAAE,MAAM,UAAU,CAAC;AAEpE,SAAO;AACT;AAEA,eAAe,eACb,UAC0B;AAC1B,MAAI,SAAS,WAAW,EAAG,QAAO,CAAC;AAEnC,QAAM,WAAW,MAAME,SAAQ;AAAA,IAC7B,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS,SAAS,IAAI,CAAC,OAAO;AAAA,MAC5B,OAAO,EAAE;AAAA,MACT,OAAO,EAAE;AAAA,MACT,UAAU;AAAA,IACZ,EAAE;AAAA,EACJ,CAAC;AAED,MAAI,CAAC,SAAS,YAAY,SAAS,SAAS,WAAW,EAAG,QAAO,CAAC;AAClE,SAAO,SAAS,OAAO,CAAC,MAAM,SAAS,SAAS,SAAS,EAAE,IAAI,CAAC;AAClE;AAEA,eAAe,mBAAmB,KAAa,aAAqB;AAClE,QAAM,YAAYD,OAAK,KAAK,KAAK,WAAW;AAE5C,MAAID,KAAG,WAAW,SAAS,GAAG;AAC5B,YAAQ,IAAI,yDAA+C;AAC3D;AAAA,EACF;AAEA,QAAMA,KAAG,UAAU,SAAS;AAE5B,QAAM,QAAQ,MAAMA,KAAG,QAAQ,GAAG;AAClC,QAAM,SAAS,MAAM,OAAO,CAAC,SAAS,SAAS,WAAW;AAE1D,aAAW,QAAQ,QAAQ;AACzB,UAAM,MAAMC,OAAK,KAAK,KAAK,IAAI;AAC/B,UAAM,OAAOA,OAAK,KAAK,WAAW,IAAI;AACtC,UAAMD,KAAG,KAAK,KAAK,MAAM,EAAE,WAAW,KAAK,CAAC;AAAA,EAC9C;AAEA,QAAM,SAASC,OAAK,KAAK,WAAW,MAAM;AAC1C,QAAM,UAAUA,OAAK,KAAK,KAAK,MAAM;AAErC,MAAID,KAAG,WAAW,MAAM,GAAG;AACzB,UAAMA,KAAG,KAAK,QAAQ,SAAS,EAAE,WAAW,KAAK,CAAC;AAAA,EACpD;AACF;AAEA,eAAe,aACb,KACA,UACA,KACA;AACA,QAAM,UAAUC,OAAK,KAAK,KAAK,MAAM;AACrC,MAAI,cAAsC,CAAC;AAC3C,MAAI,kBAAkB;AAEtB,MAAID,KAAG,WAAW,OAAO,GAAG;AAC1B,sBAAkB,MAAMA,KAAG,SAAS,SAAS,MAAM;AACnD,kBAAc,aAAa,eAAe;AAAA,EAC5C;AAEA,QAAM,UAAoB,CAAC;AAE3B,MAAI,QAAQ,UAAU,CAAC,YAAY,MAAM;AACvC,YAAQ,KAAK,kBAAkB;AAAA,EACjC;AAEA,aAAW,WAAW,UAAU;AAC9B,UAAM,cAAc,WAAW,QAAQ,IAAI;AAC3C,eAAW,WAAW,aAAa;AACjC,YAAM,CAAC,GAAG,IAAI,QAAQ,MAAM,GAAG;AAC/B,UAAI,CAAC,YAAY,GAAG,GAAG;AACrB,gBAAQ,KAAK,OAAO;AAAA,MACtB;AAAA,IACF;AAEA,QAAI,QAAQ,SAAS,QAAQ,aAAa;AACxC,YAAM,gBAAgB,GAAG,QAAQ,KAAK,YAAY,CAAC;AACnD,YAAM,gBAAgB,GAAG,QAAQ,KAAK,YAAY,CAAC;AAEnD,UAAI,CAAC,YAAY,aAAa,GAAG;AAC/B,gBAAQ,KAAK,GAAG,aAAa,yBAAyB;AAAA,MACxD;AACA,UAAI,CAAC,YAAY,aAAa,GAAG;AAC/B,gBAAQ,KAAK,GAAG,aAAa,IAAI,eAAe,QAAQ,IAAI,CAAC,EAAE;AAAA,MACjE;AAAA,IACF;AAAA,EACF;AAEA,MAAI,QAAQ,SAAS,GAAG;AACtB,UAAM,YACJ,mBAAmB,CAAC,gBAAgB,SAAS,IAAI,IAAI,OAAO;AAC9D,UAAM,aACJ,kBACA,aACC,kBAAkB,OAAO,MAC1B,QAAQ,KAAK,IAAI,IACjB;AACF,UAAMA,KAAG,UAAU,SAAS,UAAU;AACtC,YAAQ;AAAA,MACN,gBAAW,QAAQ,MAAM;AAAA,IAC3B;AAAA,EACF,OAAO;AACL,YAAQ,IAAI,iEAA4D;AAAA,EAC1E;AACF;AAEA,SAAS,aAAa,SAAyC;AAC7D,QAAM,MAA8B,CAAC;AACrC,QAAM,QAAQ,QAAQ,MAAM,IAAI;AAEhC,aAAW,QAAQ,OAAO;AACxB,UAAM,UAAU,KAAK,KAAK;AAE1B,QAAI,CAAC,WAAW,QAAQ,WAAW,GAAG,EAAG;AAEzC,UAAM,aAAa,QAAQ,QAAQ,GAAG;AACtC,QAAI,aAAa,GAAG;AAClB,YAAM,MAAM,QAAQ,UAAU,GAAG,UAAU,EAAE,KAAK;AAClD,YAAM,QAAQ,QAAQ,UAAU,aAAa,CAAC,EAAE,KAAK;AACrD,UAAI,GAAG,IAAI;AAAA,IACb;AAAA,EACF;AAEA,SAAO;AACT;AAEA,eAAe,iBAAiB,KAAa,aAAqB;AAChE,QAAM,iBAAiBC,OAAK,KAAK,KAAK,aAAa,YAAY;AAC/D,QAAM,mBAAmBA,OAAK,KAAK,KAAK,aAAa,eAAe;AAEpE,QAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAenB,QAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyDrB,QAAMD,KAAG,UAAU,gBAAgB,UAAU;AAC7C,QAAMA,KAAG,UAAU,kBAAkB,YAAY;AACnD;AAEA,eAAe,iBAAiB,KAAa,aAAqB;AAChE,QAAM,aAAa,SAAS,WAAW;AAAA;AAAA;AAAA,0CAGC,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiHnD,QAAM,iBAAiBC,OAAK,KAAK,KAAK,gBAAgB;AAEtD,QAAMD,KAAG,UAAU,gBAAgB,UAAU;AAC/C;AAEA,eAAe,gBACb,KACA,aACA,UACA;AACA,QAAM,UAAe;AAAA,IACnB,UAAU;AAAA,MACR,SAAS;AAAA,QACP,OAAO;AAAA,QACP,SAAS;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,QAAQ;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAO,CAAC,SAAS,SAAS;AAAA,QAC1B,SAAS;AAAA,UACP;AAAA,UACA;AAAA,QACF;AAAA,QACA,UAAU,CAAC,KAAK;AAAA,QAChB,UAAU,CAAC,MAAM;AAAA,MACnB;AAAA,MACA,CAAC,WAAW,GAAG;AAAA,QACb,OAAO;AAAA,UACL,SAAS,KAAK,WAAW;AAAA,UACzB,YAAY;AAAA,QACd;AAAA,QACA,QAAQ;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,UAAU,CAAC,MAAM;AAAA,QACjB,UAAU,CAAC,KAAK;AAAA,QAChB,SAAS,CAAC,KAAK,WAAW,SAAS,mBAAmB;AAAA,QACtD,SAAS;AAAA,QACT,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,KAAK;AAAA,QACH,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,IACA,SAAS,CAAC;AAAA,EACZ;AAEA,aAAW,WAAW,UAAU;AAC9B,UAAM,SAAS,iBAAiB,QAAQ,IAAI;AAC5C,YAAQ,SAAS,QAAQ,IAAI,IAAI,OAAO;AACxC,QAAI,OAAO,QAAQ;AACjB,cAAQ,QAAQ,OAAO,OAAO,IAAI,IAAI,CAAC;AAAA,IACzC;AACA,YAAQ,SAAS,WAAW,EAAE,WAAW,KAAK,QAAQ,IAAI;AAAA,EAC5D;AAEA,QAAM,cAAcC,OAAK,KAAK,KAAK,oBAAoB;AACvD,QAAMD,KAAG;AAAA,IACP;AAAA,IACA,KAAK,KAAK,SAAS,EAAE,QAAQ,GAAG,WAAW,GAAG,CAAC;AAAA,EACjD;AACF;AAEA,eAAe,iBACb,KACA,aACA,UACA;AACA,QAAM,kBAAkBC,OAAK,KAAK,KAAK,oBAAoB;AAE3D,MAAI,mBAAoC,CAAC;AAEzC,MAAID,KAAG,WAAW,eAAe,GAAG;AAClC,UAAM,UAAU,MAAMA,KAAG,SAAS,iBAAiB,MAAM;AACzD,UAAM,WAAgB,KAAK,KAAK,OAAO;AACvC,QAAI,SAAS,UAAU;AACrB,yBAAmB,OAAO,KAAK,SAAS,QAAQ,EAC7C,OAAO,CAAC,MAAM,CAAC,YAAY,SAAS,SAAS,SAAS,EAAE,SAAS,CAAC,CAAC,EACnE,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE;AAAA,IAC7B;AAAA,EACF;AAEA,QAAM,mBAAoC,CAAC;AAE3C,MAAI,iBAAiB,SAAS,GAAG;AAC/B,UAAM,EAAE,OAAO,IAAI,MAAME,SAAQ;AAAA,MAC/B,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,IACX,CAAC;AAED,QAAI,QAAQ;AACV,YAAM,EAAE,SAAS,IAAI,MAAMA,SAAQ;AAAA,QACjC,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS,iBAAiB,IAAI,CAAC,OAAO;AAAA,UACpC,OAAO,EAAE;AAAA,UACT,OAAO,EAAE;AAAA,QACX,EAAE;AAAA,MACJ,CAAC;AAED,UAAI,YAAY,SAAS,SAAS,GAAG;AACnC,yBAAiB;AAAA,UACf,GAAG,iBACA,OAAO,CAAC,MAAM,SAAS,SAAS,EAAE,IAAI,CAAC,EACvC,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,aAAa,KAAK,EAAE;AAAA,QAC7C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,aAAW,WAAW,kBAAkB;AACtC,UAAM,oBAAoB,KAAK,QAAQ,IAAI;AAAA,EAC7C;AAEA,QAAM,UAAe;AAAA,IACnB,UAAU;AAAA,MACR,CAAC,WAAW,GAAG;AAAA,QACb,OAAO;AAAA,UACL,SAAS,KAAK,WAAW;AAAA,UACzB,YAAY;AAAA,QACd;AAAA,QACA,OAAO,CAAC,WAAW;AAAA,QACnB,UAAU,CAAC,MAAM;AAAA,QACjB,SAAS,CAAC,KAAK,WAAW,SAAS,mBAAmB;AAAA,QACtD,SAAS;AAAA,QACT,YAAY,CAAC;AAAA,MACf;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,SAAS;AAAA,QACP,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAEA,aAAW,WAAW,kBAAkB;AACtC,UAAM,aAAa,GAAG,QAAQ,IAAI;AAClC,YAAQ,SAAS,UAAU,IAAI;AAAA,MAC7B,OAAO,KAAK,UAAU;AAAA,MACtB,aAAa;AAAA,QACX,kBAAkB,QAAQ,KAAK,YAAY,CAAC;AAAA,QAC5C,kBAAkB,QAAQ,KAAK,YAAY,CAAC,iBAAiB;AAAA,UAC3D,QAAQ;AAAA,QACV,CAAC;AAAA,QACD,cAAc,eAAe,QAAQ,IAAI,CAAC;AAAA,MAC5C;AAAA,MACA,SAAS,CAAC,KAAK,QAAQ,IAAI,aAAa,QAAQ,IAAI,SAAS;AAAA,IAC/D;AACA,YAAQ,SAAS,WAAW,EAAE,WAAW,KAAK,UAAU;AAAA,EAC1D;AAEA,QAAM,iBAAiBD,OAAK,KAAK,KAAK,wBAAwB;AAC9D,QAAMD,KAAG;AAAA,IACP;AAAA,IACA,KAAK,KAAK,SAAS,EAAE,QAAQ,GAAG,WAAW,GAAG,CAAC;AAAA,EACjD;AACF;AAEA,eAAe,oBAAoB,YAAoB,aAAqB;AAC1E,QAAM,YAAYC,OAAK,KAAK,YAAY,GAAG,WAAW,SAAS;AAC/D,QAAMD,KAAG,UAAU,SAAS;AAE5B,QAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUnB,QAAM,eAAe;AAAA;AAAA,gBAEP,WAAW;AAAA;AAAA,8BAEG,eAAe,WAAW,CAAC;AAAA,4BAC7B,eAAe,WAAW,CAAC;AAAA;AAAA;AAAA;AAAA,gCAIvB,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUzC,QAAMA,KAAG,UAAUC,OAAK,KAAK,WAAW,YAAY,GAAG,UAAU;AACjE,QAAMD,KAAG,UAAUC,OAAK,KAAK,WAAW,WAAW,GAAG,YAAY;AACpE;AAEA,SAAS,iBAAiB,aAAqB;AAC7C,QAAM,UAA+B;AAAA,IACnC,UAAU;AAAA,MACR,SAAS;AAAA,QACP,OAAO;AAAA,QACP,aAAa;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS,CAAC,wCAAwC;AAAA,QAClD,UAAU,CAAC,KAAK;AAAA,MAClB;AAAA,MACA,QAAQ,EAAE,MAAM,gBAAgB;AAAA,IAClC;AAAA,IACA,OAAO;AAAA,MACL,SAAS;AAAA,QACP,OAAO;AAAA,QACP,aAAa;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS,CAAC,2BAA2B;AAAA,QACrC,UAAU,CAAC,KAAK;AAAA,MAClB;AAAA,MACA,QAAQ,EAAE,MAAM,aAAa;AAAA,IAC/B;AAAA,IACA,OAAO;AAAA,MACL,SAAS;AAAA,QACP,OAAO;AAAA,QACP,SAAS,CAAC,kBAAkB;AAAA,QAC5B,UAAU,CAAC,KAAK;AAAA,MAClB;AAAA,MACA,QAAQ,EAAE,MAAM,aAAa;AAAA,IAC/B;AAAA,IACA,SAAS;AAAA,MACP,SAAS;AAAA,QACP,OAAO;AAAA,QACP,aAAa;AAAA,UACX;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS,CAAC,qBAAqB;AAAA,QAC/B,UAAU,CAAC,KAAK;AAAA,MAClB;AAAA,MACA,QAAQ,EAAE,MAAM,aAAa;AAAA,IAC/B;AAAA,EACF;AAEA,SAAO,QAAQ,WAAW;AAC5B;AAEA,SAAS,WAAW,aAA+B;AACjD,QAAM,OAAiC;AAAA,IACrC,UAAU;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,OAAO,CAAC,oBAAoB,iBAAiB;AAAA,IAC7C,SAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO,KAAK,WAAW,KAAK,CAAC;AAC/B;AAEA,SAAS,eAAe,SAAyB;AAC/C,QAAM,QAAgC;AAAA,IACpC,UAAU;AAAA,IACV,OAAO;AAAA,IACP,OAAO;AAAA,IACP,SAAS;AAAA,EACX;AACA,SAAO,MAAM,OAAO,KAAK;AAC3B;AAEA,SAAS,eACP,aACA,KACA,UACA;AACA,UAAQ,IAAI;AAAA;AAAA,CAAyB;AAErC,MAAI,QAAQ,QAAQ;AAClB,YAAQ,IAAI,6CAA6C;AACzD,YAAQ,IAAI,wBAAwB;AACpC,YAAQ,IAAI;AAAA,CAAsC;AAAA,EACpD,OAAO;AACL,YAAQ,IAAI,6CAA6C;AACzD,QAAI,SAAS,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG;AACvC,cAAQ,IAAI,iCAAiC;AAAA,IAC/C;AACA,YAAQ,IAAI;AAAA,CAAoD;AAAA,EAClE;AACF;;;ACzsBA,OAAOE,UAAQ;AACf,OAAOC,WAAU;AACjB,OAAOC,YAAU;AACjB,OAAO,QAAQ;AACf,SAAS,eAAe;AACxB,OAAO,WAAW;AAClB,SAAS,YAAY;AACrB,SAAS,iBAAiB;AAE1B,IAAM,YAAY,UAAU,IAAI;AA2DhC,SAAS,YACP,KACAC,UACQ;AACR,MAAI,CAAC,IAAK,QAAO;AACjB,SAAO,IAAI,QAAQ,gBAAgB,CAAC,OAAO,QAAQ;AACjD,WAAOA,SAAQ,GAAG,MAAM,SAAY,OAAOA,SAAQ,GAAG,CAAC,IAAI;AAAA,EAC7D,CAAC;AACH;AAEA,SAAS,gBAAgB,KAAUA,UAAmC;AACpE,MAAI,OAAO,QAAQ,UAAU;AAC3B,WAAO,YAAY,KAAKA,QAAO;AAAA,EACjC;AACA,MAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,WAAO,IAAI,IAAI,CAAC,SAAS,gBAAgB,MAAMA,QAAO,CAAC;AAAA,EACzD;AACA,MAAI,OAAO,OAAO,QAAQ,UAAU;AAClC,UAAM,SAAc,CAAC;AACrB,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,GAAG,GAAG;AAC9C,aAAO,GAAG,IAAI,gBAAgB,OAAOA,QAAO;AAAA,IAC9C;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,YAAY,IAAoB;AACvC,MAAI,CAAC,MAAM,OAAO,OAAO,SAAU,QAAO;AAC1C,SAAO,GAAG,WAAW,IAAI,IAAID,OAAK,KAAK,GAAG,QAAQ,GAAG,GAAG,MAAM,CAAC,CAAC,IAAI;AACtE;AAEA,SAAS,kBAAkB,KAAU,KAAkB;AACrD,MAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,WAAO,IAAI,IAAI,CAAC,SAAS,kBAAkB,MAAM,GAAG,CAAC;AAAA,EACvD;AACA,MAAI,OAAO,OAAO,QAAQ,UAAU;AAClC,UAAM,SAAc,CAAC;AACrB,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,GAAG,GAAG;AAC9C,YAAM,iBAAiB,QAAQ,aAAa,QAAQ;AACpD,UAAI,kBAAkB,OAAO,UAAU,UAAU;AAC/C,cAAM,WAAW,YAAY,KAAK;AAClC,eAAO,GAAG,IAAIA,OAAK,WAAW,QAAQ,IAClC,WACAA,OAAK,QAAQ,KAAK,QAAQ;AAAA,MAChC,OAAO;AACL,eAAO,GAAG,IAAI,kBAAkB,OAAO,GAAG;AAAA,MAC5C;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,IAAM,UAAU;AAAA,EACd,MAAM,CAAC,SAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAOL,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAYH,IAAI;AAAA,oBACN,IAAI;AAAA,4DACoC,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAY9D,QAAQ,CAAC,SAAiB,MAAc,eAAwB;AAAA;AAAA;AAAA,oCAG9B,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAYjC,OAAO;AAAA;AAAA;AAAA,gCAGe,OAAO;AAAA,+CACQ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iCA4BrB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAqB9B,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iCASgB,OAAO;AAAA,2DACmB,OAAO;AAAA;AAAA;AAAA,mCAG/B,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAwBlC,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAMJ,IAAI;AAAA,sBACI,IAAI;AAAA;AAAA,8BAEI,IAAI;AAAA,uBACX,IAAI;AAAA;AAAA;AAAA;AAI3B;AA0BA,IAAM,cAAN,MAA+C;AAAA,EAK7C,YAAY,QAAsB;AAChC,SAAK,MAAM,IAAI,QAAQ;AACvB,SAAK,SAAS;AACd,SAAK,aAAa,OAAO,cAAc;AAAA,EACzC;AAAA,EAEA,MAAM,UAAyB;AAC7B,UAAM,KAAK,IAAI,QAAQ;AAAA,MACrB,MAAM,KAAK,OAAO;AAAA,MAClB,UAAU,KAAK,OAAO;AAAA,MACtB,gBAAgB,KAAK,OAAO;AAAA,MAC5B,MAAM,KAAK,OAAO,QAAQ;AAAA,IAC5B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,aAA4B;AAChC,SAAK,IAAI,QAAQ;AAAA,EACnB;AAAA,EAEA,MAAM,WACJ,KACA,SAAS,OACyD;AAClE,UAAM,UAAU,IAAI,KAAK;AAEzB,QAAI,QAAQ,WAAW,KAAK,GAAG;AAC7B,YAAM,UAAU,QAAQ,QAAQ,OAAO,EAAE,EAAE,KAAK;AAChD,WAAK,aAAaA,OAAK,MAAM,QAAQ,KAAK,YAAY,OAAO;AAC7D,UAAI,CAAC,OAAQ,SAAQ,IAAI,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG,CAAC;AACtE,aAAO,EAAE,QAAQ,IAAI,QAAQ,IAAI,MAAM,EAAE;AAAA,IAC3C;AAEA,UAAM,SAAS,MAAM,KAAK,IAAI,YAAY,SAAS;AAAA,MACjD,KAAK,KAAK;AAAA,IACZ,CAAC;AAED,QAAI,OAAO,SAAS,KAAK,OAAO,SAAS,MAAM;AAC7C,YAAM,IAAI,MAAM,qBAAqB,OAAO;AAAA,UAAa,OAAO,MAAM,EAAE;AAAA,IAC1E;AAEA,QAAI,CAAC,UAAU,OAAO,QAAQ;AAC5B,aAAO,OACJ,MAAM,IAAI,EACV,OAAO,CAAC,MAAM,EAAE,WAAW,MAAM,CAAC,EAClC,QAAQ,CAAC,MAAM,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,QAAQ,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,IACzE;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,UACJ,MACA,SACAC,UACe;AACf,UAAM,eAAe,YAAY,SAASA,QAAO;AACjD,UAAM,aAAa,mBAAmB,IAAI,IAAI,KAAK,IAAI,CAAC;AAExD,UAAM,KAAK,cAAc,YAAY,YAAY;AAEjD,QAAI;AACF,YAAM,KAAK,IAAI,YAAY,YAAY,UAAU,EAAE;AACnD,YAAM,KAAK,WAAW,UAAU;AAAA,IAClC,UAAE;AACA,YAAM,KAAK,IAAI,YAAY,SAAS,UAAU,EAAE;AAAA,IAClD;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,YAAoB,SAAgC;AACtE,UAAM,WAAWD,OAAK,KAAK,GAAG,OAAO,GAAG,WAAW,KAAK,IAAI,CAAC,EAAE;AAC/D,IAAAF,KAAG,cAAc,UAAU,OAAO;AAElC,QAAI;AACF,YAAM,KAAK,IAAI,YAAY,sBAAsB,UAAU,GAAG;AAC9D,YAAM,KAAK,IAAI,QAAQ,UAAU,UAAU;AAAA,IAC7C,UAAE;AACA,UAAIA,KAAG,WAAW,QAAQ,EAAG,CAAAA,KAAG,WAAW,QAAQ;AAAA,IACrD;AAAA,EACF;AAAA,EAEA,MAAM,SAAY,YAAuC;AACvD,UAAM,MAAM,MAAM,KAAK,IAAI,YAAY,OAAO,UAAU,EAAE;AAC1D,QAAI;AACF,aAAO,IAAI,SAAS,IAAI,KAAK,MAAM,IAAI,MAAM,IAAI;AAAA,IACnD,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,cACJ,QACA,aACA,SACe;AACf,UAAM,aAAkB,EAAE,WAAW,MAAM,aAAa,GAAG;AAE3D,QAAI,SAAS,QAAQ;AACnB,iBAAW,WAAW,CAAC,aAAqB;AAC1C,cAAM,WAAWE,OAAK,SAAS,QAAQ,QAAQ;AAC/C,YAAI,aAAa,GAAI,QAAO;AAE5B,eAAO,CAAC,QAAQ,KAAK,CAAC,YAAY;AAChC,cAAI,QAAQ,SAAS,GAAG,GAAG;AACzB,kBAAM,MAAM,QAAQ,MAAM,GAAG,EAAE;AAC/B,kBAAM,UAAU,MAAM,MAAM;AAC5B,mBACE,aAAa,OACb,SAAS,WAAW,MAAM,GAAG,KAC7B,SAAS,SAAS,OAAO;AAAA,UAE7B;AAEA,cAAI,QAAQ,WAAW,IAAI,GAAG;AAC5B,mBAAO,SAAS,SAAS,QAAQ,MAAM,CAAC,CAAC;AAAA,UAC3C;AAEA,iBAAO,aAAa;AAAA,QACtB,CAAC;AAAA,MACH;AAAA,IACF;AAEA,YAAQ,IAAI,MAAM,KAAK,YAAY,MAAM,WAAM,WAAW,EAAE,CAAC;AAC7D,UAAM,KAAK,IAAI,aAAa,QAAQ,aAAa,UAAU;AAAA,EAC7D;AACF;AAEA,IAAM,gBAAN,MAAiD;AAAA,EAI/C,YAAY,QAAsB,KAAa;AAC7C,SAAK,SAAS;AACd,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,MAAM,UAAyB;AAAA,EAAC;AAAA,EAChC,MAAM,aAA4B;AAAA,EAAC;AAAA,EAEnC,MAAM,WACJ,KACA,SAAS,OACyD;AAClE,UAAM,UAAU,IAAI,KAAK;AAEzB,QAAI,QAAQ,WAAW,KAAK,GAAG;AAC7B,YAAM,UAAU,QAAQ,QAAQ,OAAO,EAAE,EAAE,KAAK;AAChD,WAAK,aAAaA,OAAK,QAAQ,KAAK,YAAY,OAAO;AACvD,UAAI,CAAC,OAAQ,SAAQ,IAAI,MAAM,KAAK,iBAAiB,KAAK,UAAU,GAAG,CAAC;AACxE,aAAO,EAAE,QAAQ,IAAI,QAAQ,IAAI,MAAM,EAAE;AAAA,IAC3C;AAEA,QAAI;AACF,YAAM,EAAE,QAAQ,OAAO,IAAI,MAAM,UAAU,SAAS;AAAA,QAClD,KAAK,KAAK;AAAA,MACZ,CAAC;AAED,UAAI,CAAC,UAAU,QAAQ;AACrB,eACG,MAAM,IAAI,EACV,OAAO,CAAC,MAAM,EAAE,WAAW,MAAM,CAAC,EAClC;AAAA,UAAQ,CAAC,MACR,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,QAAQ,SAAS,EAAE,CAAC,EAAE,CAAC;AAAA,QACtD;AAAA,MACJ;AAEA,aAAO,EAAE,QAAQ,QAAQ,MAAM,EAAE;AAAA,IACnC,SAAS,KAAU;AACjB,YAAM,IAAI;AAAA,QACR,qBAAqB,OAAO;AAAA,UAAa,IAAI,UAAU,IAAI,OAAO;AAAA,MACpE;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,UACJ,MACA,SACAC,UACe;AACf,UAAM,eAAe,YAAY,SAASA,QAAO;AACjD,UAAM,aAAaD,OAAK;AAAA,MACtB,GAAG,OAAO;AAAA,MACV,cAAc,IAAI,IAAI,KAAK,IAAI,CAAC;AAAA,IAClC;AAEA,IAAAF,KAAG,cAAc,YAAY,YAAY;AACzC,IAAAA,KAAG,UAAU,YAAY,KAAK;AAE9B,QAAI;AACF,YAAM,KAAK,WAAW,UAAU;AAAA,IAClC,UAAE;AACA,UAAIA,KAAG,WAAW,UAAU,EAAG,CAAAA,KAAG,WAAW,UAAU;AAAA,IACzD;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,WAAmB,SAAgC;AACrE,UAAM,MAAME,OAAK,QAAQ,SAAS;AAClC,QAAI,CAACF,KAAG,WAAW,GAAG,GAAG;AACvB,MAAAA,KAAG,UAAU,KAAK,EAAE,WAAW,KAAK,CAAC;AAAA,IACvC;AACA,IAAAA,KAAG,cAAc,WAAW,OAAO;AAAA,EACrC;AAAA,EAEA,MAAM,SAAY,WAAsC;AACtD,QAAI;AACF,UAAI,CAACA,KAAG,WAAW,SAAS,EAAG,QAAO;AACtC,YAAM,UAAUA,KAAG,aAAa,WAAW,MAAM;AACjD,aAAO,KAAK,MAAM,OAAO;AAAA,IAC3B,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,cACJ,QACA,aACA,SACe;AACf,YAAQ,IAAI,MAAM,KAAK,YAAY,MAAM,WAAM,WAAW,EAAE,CAAC;AAE7D,QAAI,CAACA,KAAG,WAAW,WAAW,GAAG;AAC/B,MAAAA,KAAG,UAAU,aAAa,EAAE,WAAW,KAAK,CAAC;AAAA,IAC/C;AAEA,UAAM,gBAAgB,CAAC,iBAAkC;AACvD,UAAI,CAAC,SAAS,OAAQ,QAAO;AAE7B,aAAO,QAAQ,KAAK,CAAC,YAAY;AAC/B,YAAI,QAAQ,SAAS,GAAG,GAAG;AACzB,gBAAM,MAAM,QAAQ,MAAM,GAAG,EAAE;AAC/B,gBAAM,UAAU,MAAM,MAAM;AAC5B,iBACE,iBAAiB,OACjB,aAAa,WAAW,MAAM,GAAG,KACjC,aAAa,SAAS,OAAO;AAAA,QAEjC;AAEA,YAAI,QAAQ,WAAW,IAAI,GAAG;AAC5B,iBAAO,aAAa,SAAS,QAAQ,MAAM,CAAC,CAAC;AAAA,QAC/C;AAEA,eAAO,iBAAiB;AAAA,MAC1B,CAAC;AAAA,IACH;AAEA,UAAM,gBAAgB,CAAC,KAAa,SAAiB;AACnD,YAAM,UAAUA,KAAG,YAAY,KAAK,EAAE,eAAe,KAAK,CAAC;AAE3D,iBAAW,SAAS,SAAS;AAC3B,cAAM,UAAUE,OAAK,KAAK,KAAK,MAAM,IAAI;AACzC,cAAM,WAAWA,OAAK,KAAK,MAAM,MAAM,IAAI;AAC3C,cAAM,eAAeA,OAAK,SAAS,QAAQ,OAAO;AAElD,YAAI,cAAc,YAAY,EAAG;AAEjC,YAAI,MAAM,YAAY,GAAG;AACvB,cAAI,CAACF,KAAG,WAAW,QAAQ,GAAG;AAC5B,YAAAA,KAAG,UAAU,UAAU,EAAE,WAAW,KAAK,CAAC;AAAA,UAC5C;AACA,wBAAc,SAAS,QAAQ;AAAA,QACjC,OAAO;AACL,UAAAA,KAAG,aAAa,SAAS,QAAQ;AAAA,QACnC;AAAA,MACF;AAAA,IACF;AAEA,kBAAc,QAAQ,WAAW;AAAA,EACnC;AACF;AAEA,IAAM,kBAAN,MAAsB;AAAA,EACpB,OAAO,OAAO,QAAsB,KAAgC;AAClE,UAAM,aAAa,OAAO,SAAS,OAAO,OAAO,QAAQ;AAEzD,YAAQ,YAAY;AAAA,MAClB,KAAK;AACH,eAAO,IAAI,YAAY,MAAM;AAAA,MAC/B,KAAK;AACH,eAAO,IAAI,cAAc,QAAQ,GAAG;AAAA,MACtC;AACE,cAAM,IAAI,MAAM,wBAAwB,UAAU,EAAE;AAAA,IACxD;AAAA,EACF;AACF;AAEA,IAAM,mBAAN,MAAuB;AAAA,EACrB,YACU,UACA,QACA,MACA,UACR;AAJQ;AACA;AACA;AACA;AAAA,EACP;AAAA,EAEH,MAAM,aACJ,IACA,SACe;AACf,QAAI,CAAC,GAAG,QAAQ;AACd,YAAM,IAAI,MAAM,qBAAqB,GAAG,IAAI,yBAAyB;AAAA,IACvE;AAEA,QAAI,GAAG,OAAO,MAAM;AAClB,YAAM,KAAK,WAAW,IAAI,OAAO;AAAA,IACnC;AAEA,QAAI,GAAG,OAAO,QAAQ;AACpB,YAAM,KAAK,aAAa,IAAI,OAAO;AAAA,IACrC;AAEA,QAAI,GAAG,OAAO,WAAW;AACvB,YAAM,KAAK,gBAAgB,IAAI,OAAO;AAAA,IACxC;AAAA,EACF;AAAA,EAEA,MAAc,WACZ,IACA,SACe;AACf,UAAM,MAAM;AACZ,UAAM,SAAS,KAAK,KAAK,QAAQ,GAAG;AACpC,UAAM,gBAAgB,GAAG,OAAO;AAChC,UAAM,gBACJ,KAAK,UAAU,QAAQ,MAAM,MAAM,KAAK,UAAU,aAAa;AAEjE,QACE,SAAS,eACT,CAAC,UACD,OAAO,YAAY,cAAc,QACjC,eACA;AACA,cAAQ,IAAI,MAAM,OAAO,oBAAe,GAAG,IAAI,EAAE,CAAC;AAClD,YAAM,SAAS,QAAQ,KAAK,cAAc,IAAI;AAC9C,YAAM,KAAK,SAAS,UAAU,KAAK,QAAQ,KAAK,MAAM;AACtD,WAAK,KAAK,QAAQ,GAAG,IAAI;AAAA,QACvB,SAAS,cAAc;AAAA,QACvB,QAAQ;AAAA,MACV;AACA,YAAM,KAAK,SAAS;AAAA,IACtB,OAAO;AACL,cAAQ,IAAI,MAAM,KAAK,UAAK,GAAG,IAAI,sBAAsB,CAAC;AAAA,IAC5D;AAAA,EACF;AAAA,EAEA,MAAc,aACZ,IACA,SACe;AACf,UAAM,MAAM;AACZ,UAAM,SAAS,KAAK,KAAK,QAAQ,GAAG;AACpC,UAAM,gBAAgB,GAAG,OAAO;AAChC,UAAM,gBACJ,KAAK,UAAU,QAAQ,MAAM,MAAM,KAAK,UAAU,aAAa;AAEjE,QACE,SAAS,eACT,CAAC,UACD,OAAO,YAAY,cAAc,WACjC,eACA;AACA,cAAQ,IAAI,MAAM,OAAO,oBAAe,GAAG,IAAI,EAAE,CAAC;AAClD,YAAM,SAAS,QAAQ;AAAA,QACrB,cAAc;AAAA,QACd,KAAK,OAAO,QAAQ,GAAG,SAAS,EAAE;AAAA,QAClC,CAAC,CAAC,cAAc;AAAA,MAClB;AACA,YAAM,KAAK,SAAS,UAAU,KAAK,QAAQ,KAAK,MAAM;AACtD,WAAK,KAAK,QAAQ,GAAG,IAAI;AAAA,QACvB,SAAS,cAAc;AAAA,QACvB,QAAQ;AAAA,MACV;AACA,YAAM,KAAK,SAAS;AAAA,IACtB,OAAO;AACL,cAAQ,IAAI,MAAM,KAAK,UAAK,GAAG,IAAI,sBAAsB,CAAC;AAAA,IAC5D;AAAA,EACF;AAAA,EAEA,MAAc,gBACZ,IACA,SACe;AACf,UAAM,MAAM,aAAa,GAAG,OAAO,UAAW,IAAI;AAClD,UAAM,SAAS,KAAK,KAAK,QAAQ,GAAG;AACpC,UAAM,gBAAgB,GAAG,OAAO;AAChC,UAAM,gBACJ,KAAK,UAAU,QAAQ,MAAM,MAAM,KAAK,UAAU,aAAa;AAEjE,QAAI,SAAS,eAAe,CAAC,UAAU,eAAe;AACpD,cAAQ,IAAI,MAAM,OAAO,oBAAe,GAAG,IAAI,EAAE,CAAC;AAClD,YAAM,UAAU,YAAY,cAAc,MAAM,KAAK,MAAM;AAC3D,YAAM,QAAQ,cAAc,QACxB,YAAY,cAAc,OAAO,KAAK,MAAM,IAC5C,KAAK,OAAO,QAAQ,GAAG,SAAS,EAAE;AAEtC,YAAM,KAAK,SAAS,WAAW,YAAY,OAAO,IAAI,IAAI;AAE1D,UAAI,KAAK,OAAO,MAAM;AACpB,cAAM,KAAK,SAAS;AAAA,UAClB,iBAAiB,KAAK,IAAI,KAAK,IAAI,OAAO;AAAA,UAC1C;AAAA,QACF;AAAA,MACF;AAEA,WAAK,KAAK,QAAQ,GAAG,IAAI;AAAA,QACvB,SAAS;AAAA,QACT,QAAQ;AAAA,MACV;AACA,YAAM,KAAK,SAAS;AAAA,IACtB,OAAO;AACL,cAAQ,IAAI,MAAM,KAAK,UAAK,GAAG,IAAI,sBAAsB,CAAC;AAAA,IAC5D;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,IAAoC;AACrD,QAAI,CAAC,GAAG,QAAQ;AACd,YAAM,IAAI,MAAM,qBAAqB,GAAG,IAAI,yBAAyB;AAAA,IACvE;AAEA,UAAM,OAAO,GAAG,QAAQ;AAExB,QAAI,SAAS,SAAS;AACpB,cAAQ,IAAI,MAAM,KAAK,UAAK,GAAG,IAAI,aAAa,CAAC;AACjD;AAAA,IACF;AAEA,UAAM,WAAW,UAAU,GAAG,IAAI;AAElC,QAAI,SAAS,UAAU,KAAK,KAAK,aAAa,SAAS,QAAQ,GAAG;AAChE,cAAQ,IAAI,MAAM,KAAK,UAAK,GAAG,IAAI,sBAAsB,CAAC;AAC1D;AAAA,IACF;AAEA,YAAQ,IAAI,MAAM,KAAK,mBAAc,GAAG,IAAI,EAAE,CAAC;AAE/C,QAAI,GAAG,OAAO,OAAO;AACnB,YAAM,MAAM,GAAG,OAAO,MAAM;AAC5B,YAAM,OAAO,YAAY,GAAG,OAAO,MAAM,eAAe,KAAK,KAAK,MAAM;AACxE,YAAM,KAAK,SAAS,cAAc,KAAK,MAAM,GAAG,OAAO,MAAM,OAAO;AAAA,IACtE;AAEA,QAAI,GAAG,OAAO,SAAS;AACrB,YAAM,MAAM,YAAY,GAAG,OAAO,SAAS,KAAK,MAAM;AACtD,YAAM,KAAK,SAAS,WAAW,GAAG;AAAA,IACpC;AAEA,QAAI,SAAS,QAAQ;AACnB,WAAK,KAAK,aAAa,KAAK,QAAQ;AACpC,YAAM,KAAK,SAAS;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,IAAoC;AACrD,QAAI,CAAC,GAAG,QAAQ;AACd,YAAM,IAAI,MAAM,qBAAqB,GAAG,IAAI,yBAAyB;AAAA,IACvE;AAEA,YAAQ,IAAI,MAAM,KAAK,qBAAgB,GAAG,IAAI,EAAE,CAAC;AAEjD,QAAI,GAAG,OAAO,MAAM;AAClB,YAAM,MAAM,YAAY,GAAG,OAAO,KAAK,KAAK,KAAK,MAAM;AACvD,YAAM,UAAU,GAAG,OAAO,KAAK,WAAW;AAC1C,YAAM,KAAK,SAAS;AAAA,QAClB,sBAAsB,OAAO,IAAI,GAAG;AAAA,QACpC;AAAA,MACF;AAAA,IACF;AAEA,QAAI,GAAG,OAAO,SAAS;AACrB,YAAM,MAAM,YAAY,GAAG,OAAO,SAAS,KAAK,MAAM;AACtD,YAAM,KAAK,SAAS,WAAW,KAAK,IAAI;AAAA,IAC1C;AAAA,EACF;AAAA,EAEA,MAAc,WAA0B;AACtC,UAAM,KAAK,SAAS;AAAA,MAClB,KAAK;AAAA,MACL,KAAK,UAAU,KAAK,MAAM,MAAM,CAAC;AAAA,IACnC;AAAA,EACF;AACF;AAEA,eAAsB,OACpB,YACA,SACA;AACA,QAAM,MAAM,QAAQ,IAAI;AACxB,QAAM,YAAYC,MAAK;AAAA,IACrBD,KAAG,aAAaE,OAAK,KAAK,KAAK,gBAAgB,GAAG,MAAM;AAAA,IACxD,EAAE,QAAQD,MAAK,eAAe;AAAA,EAChC;AAEA,QAAM,YAAY,UAAU,UAAU,UAAU;AAChD,MAAI,CAAC,UAAW,OAAM,IAAI,MAAM,UAAU,UAAU,aAAa;AAEjE,UAAQ;AAAA,IACN,MAAM,KAAK;AAAA,MACT;AAAA,cAAiB,UAAU,IAAI,KAAK,UAAU,OAAO,WAAM,UAAU;AAAA;AAAA,IACvE;AAAA,EACF;AAEA,MAAI,SAAS,gBAAgB,WAAW;AAAA,IACtC,GAAG;AAAA,IACH,GAAG;AAAA,EACL,CAAC;AAED,WAAS,kBAAkB,QAAQ,GAAG;AAEtC,QAAM,WAAW,gBAAgB,OAAO,QAAQ,GAAG;AAEnD,MAAI;AACF,UAAM,SAAS,QAAQ;AAEvB,UAAM,WAAW,OAAO,aACpBC,OAAK,MAAM,KAAK,OAAO,YAAY,eAAe,IAClDA,OAAK,KAAK,KAAK,eAAe;AAElC,QAAI,OAAQ,MAAM,SAAS,SAAmB,QAAQ,KAAM;AAAA,MAC1D,SAAS,CAAC;AAAA,MACV,cAAc,CAAC;AAAA,IACjB;AAEA,QAAI,KAAK,uBAAuB,UAAU,SAAS;AACjD,cAAQ,IAAI,MAAM,QAAQ,0BAAqB,UAAU,OAAO,EAAE,CAAC;AACnE,WAAK,qBAAqB,UAAU;AACpC,WAAK,eAAe,CAAC;AACrB,YAAM,SAAS,cAAc,UAAU,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AAAA,IACtE;AAEA,UAAM,UAAU,IAAI,iBAAiB,UAAU,QAAQ,MAAM,QAAQ;AAErE,eAAW,MAAM,OAAO,YAAY;AAClC,UAAI;AACF,YAAI,GAAG,SAAS,UAAU;AACxB,gBAAM,QAAQ,aAAa,IAAI,OAAO;AAAA,QACxC,WAAW,GAAG,SAAS,UAAU;AAC/B,gBAAM,QAAQ,aAAa,EAAE;AAAA,QAC/B,WAAW,GAAG,SAAS,UAAU;AAC/B,gBAAM,QAAQ,aAAa,EAAE;AAAA,QAC/B,OAAO;AACL,gBAAM,IAAI,MAAM,2BAA4B,GAAW,IAAI,EAAE;AAAA,QAC/D;AAAA,MACF,SAAS,KAAU;AACjB,cAAM,IAAI,MAAM,wBAAwB,GAAG,IAAI,MAAM,IAAI,OAAO,EAAE;AAAA,MACpE;AAAA,IACF;AAEA,YAAQ,IAAI,MAAM,MAAM,KAAK;AAAA;AAAA,CAA4B,CAAC;AAAA,EAC5D,SAAS,KAAU;AACjB,YAAQ,MAAM,MAAM,IAAI,KAAK;AAAA,qBAAwB,IAAI,OAAO,EAAE,CAAC;AACnE,UAAM;AAAA,EACR,UAAE;AACA,UAAM,SAAS,WAAW;AAAA,EAC5B;AACF;;;A3B9zBA,OAAOE,YAAW;AAElB,IAAM,UAAU,IAAI,QAAQ;AAE5B,QAAQ,KAAK,KAAK,EAAE,YAAY,cAAc,EAAE,QAAQ,QAAQ;AAEhE,QACG,QAAQ,mBAAmB,EAC3B,YAAY,0BAA0B,EACtC,OAAO,OAAO,MAAc,SAAkB;AAC7C,QAAM,OAAO,YAAY;AACvB,UAAM,OAAO,IAAI;AAEjB,UAAM,SAASC,OAAK,QAAQ,QAAQ,IAAI,CAAC;AAEzC,UAAM,QACJ,QAAQ,aAAa,UACjB,QAAQ,IAAI,WAAW,YACvB;AAEN,YAAQ,IAAI,4BAA4B;AACxC,aAAS,eAAe,EAAE,OAAO,WAAW,KAAK,QAAQ,MAAM,CAAC;AAEhE,YAAQ,IAAI,gCAAgC;AAC5C,aAAS,eAAe,EAAE,OAAO,WAAW,KAAK,QAAQ,MAAM,CAAC;AAEhE,YAAQ;AAAA,MACN,uBAAuB,IAAI;AAAA,IAC7B;AAAA,EACF;AAEA,QAAMC,MAAK,YAAY;AACrB,UAAM,MAAM,IAAI;AAEhB,UAAM,SAASD,OAAK,QAAQ,QAAQ,IAAI,CAAC;AAEzC,UAAM,QACJ,QAAQ,aAAa,UACjB,QAAQ,IAAI,WAAW,YACvB;AAEN,YAAQ,IAAI,4BAA4B;AACxC,aAAS,eAAe,EAAE,OAAO,WAAW,KAAK,QAAQ,MAAM,CAAC;AAAA,EAClE;AAEA,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO,MAAM,KAAK;AAAA,IACpB,KAAK;AACH,aAAO,MAAMC,IAAG;AAAA,IAClB;AACE,aAAO,MAAM,KAAK;AAAA,EACtB;AACF,CAAC;AAEH,QACG,QAAQ,KAAK,EACb,YAAY,8BAA8B,EAC1C,OAAO,OAAO,SAAS;AACtB,QAAM,eAAe;AACvB,CAAC;AAEH,QACG,QAAQ,mBAAmB,EAC3B,YAAY,sCAAsC,EAClD,OAAO,OAAO,MAAM,SAAS;AAC5B,MAAI;AACF,QAAI,SAAS,KAAK;AAChB,YAAM,aAAa,IAAI;AAAA,IACzB,WAAW,SAAS,KAAK;AAEvB,YAAM,WAAW,IAAI;AAAA,IACvB,OAAO;AACL,cAAQ,MAAM,sCAAiC;AAAA,IACjD;AAAA,EACF,SAAS,KAAU;AACjB,YAAQ,MAAM,iBAAY,IAAI,OAAO;AAAA,EACvC;AACF,CAAC;AAEH,QACG,QAAQ,iBAAiB,EACzB,YAAY,0BAA0B,EACtC,OAAO,OAAO,QAAQ;AACrB,MAAI;AACF,UAAM,UAAU,GAAG;AAAA,EACrB,SAAS,KAAU;AACjB,YAAQ,MAAM,iBAAY,IAAI,OAAO;AAAA,EACvC;AACF,CAAC;AAEH,QACG,QAAQ,QAAQ,EAChB,YAAY,gCAAgC,EAC5C,SAAS,YAAY,gCAAgC,EACrD,OAAO,mBAAmB,gDAAgD,EAC1E,OAAO,OAAO,QAAgB,YAAuC;AACpE,MAAI;AACF,UAAM,OAAO,QAAQ,OAAO;AAAA,EAC9B,SAAS,OAAY;AACnB,YAAQ,MAAMC,OAAM,IAAI,MAAM,OAAO,CAAC;AACtC,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF,CAAC;AAEH,QAAQ,MAAM,QAAQ,IAAI;",
6
6
  "names": ["esbuild", "fs", "esbuild", "fs", "path", "path", "Module", "path", "context", "path", "Module", "visitForDeps", "result", "context", "path", "basename", "body", "path", "parseSync", "stringifyType", "transform", "path", "context", "parseSync", "printSync", "hasComponentDecorator", "extractClassStub", "stringifyDecorator", "extractPropsType", "stringifyParam", "extractMethods", "stringifyType", "extractTypeName", "extractMethodParams", "generateStubCode", "generateMethod", "generateImports", "path", "parseSync", "fs", "path", "parseSync", "fs", "fs", "entryPoints", "resolve", "fs", "path", "ts", "capitalize", "fs", "path", "path", "path", "fs", "ts", "createModule", "path", "path", "genPackageJson", "genReadMe", "genGitIgnore", "genEnv", "path", "fs", "path", "prompts", "fs", "yaml", "path", "context", "chalk", "path", "ts", "chalk"]
7
7
  }