@nanoforge-dev/cli 1.0.0
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/LICENSE +21 -0
- package/README.md +111 -0
- package/dist/command.loader.d.ts +8 -0
- package/dist/command.loader.js +1435 -0
- package/dist/command.loader.js.map +1 -0
- package/dist/nf.js +1597 -0
- package/package.json +97 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/command/command.loader.ts","../src/lib/ui/messages.ts","../src/lib/ui/emojis.ts","../src/lib/ui/prefixes.ts","../src/action/actions/build.action.ts","../src/lib/input/base-inputs.ts","../src/lib/input/ask-inputs.ts","../src/lib/input/inputs/directory.input.ts","../src/lib/input/inputs/config.input.ts","../src/lib/question/questions/confirm.question.ts","../src/lib/utils/errors.ts","../src/lib/question/questions/input.question.ts","../src/lib/question/questions/number.question.ts","../src/lib/question/questions/select.question.ts","../src/lib/input/inputs/install/names.input.ts","../src/lib/runner/runner.factory.ts","../src/lib/runner/abstract.runner.ts","../src/lib/runner/runners/bun.runner.ts","../src/lib/utils/path.ts","../src/lib/runner/runners/schematic.runner.ts","../src/lib/package-manager/abstract.package-manager.ts","../src/lib/package-manager/package-managers/bun.package-manager.ts","../src/lib/package-manager/package-manager.factory.ts","../src/lib/config/config.type.ts","../src/lib/config/config-loader.ts","../src/lib/utils/object.ts","../src/lib/config/config-defaults.ts","../src/action/common/config.ts","../src/action/abstract.action.ts","../src/action/actions/generate.action.ts","../src/lib/schematics/abstract.collection.ts","../src/lib/schematics/nanoforge.collection.ts","../src/lib/schematics/collection.factory.ts","../src/lib/utils/formatting.ts","../src/lib/schematics/schematic.option.ts","../src/action/common/spinner.ts","../src/action/common/schematics.ts","../src/action/actions/install.action.ts","../src/lib/input/inputs/new/init-functions.input.ts","../src/lib/input/inputs/new/language.input.ts","../src/lib/input/inputs/new/name.input.ts","../src/lib/input/inputs/new/package-manager.input.ts","../src/lib/input/inputs/new/path.input.ts","../src/lib/input/inputs/new/server.input.ts","../src/lib/input/inputs/new/skip-install.input.ts","../src/lib/input/inputs/new/strict.input.ts","../src/action/actions/new.action.ts","../src/action/actions/start.action.ts","../src/command/abstract.command.ts","../src/command/commands/build.command.ts","../src/command/commands/generate.command.ts","../src/command/commands/install.command.ts","../src/command/commands/new.command.ts","../src/command/commands/start.command.ts"],"sourcesContent":["import { red } from \"ansis\";\nimport { Command } from \"commander\";\n\nimport { Prefixes } from \"@lib/ui\";\n\nimport { BuildAction, GenerateAction, InstallAction, NewAction, StartAction } from \"~/action\";\n\nimport { BuildCommand } from \"./commands/build.command\";\nimport { GenerateCommand } from \"./commands/generate.command\";\nimport { InstallCommand } from \"./commands/install.command\";\nimport { NewCommand } from \"./commands/new.command\";\nimport { StartCommand } from \"./commands/start.command\";\n\nexport class CommandLoader {\n public static async load(program: Command): Promise<void> {\n new BuildCommand(new BuildAction()).load(program);\n new GenerateCommand(new GenerateAction()).load(program);\n new InstallCommand(new InstallAction()).load(program);\n new NewCommand(new NewAction()).load(program);\n new StartCommand(new StartAction()).load(program);\n this.handleInvalidCommand(program);\n }\n\n private static handleInvalidCommand(program: Command) {\n program.on(\"command:*\", () => {\n console.error(`\\n${Prefixes.ERROR} Invalid command: ${red`%s`}`, program.args.join(\" \"));\n console.log(`See ${red`--help`} for a list of available commands.\\n`);\n process.exit(1);\n });\n }\n}\n","import { green } from \"ansis\";\n\nimport { Emojis } from \"./emojis\";\n\nexport const Messages = {\n BUILD_START: \"NanoForge Build\",\n BUILD_PART_IN_PROGRESS: (part: string) => `Building ${part}...`,\n BUILD_NOTHING: \"Nothing to build, terminated.\",\n BUILD_SUCCESS: `${Emojis.ROCKET} Build succeeded !`,\n BUILD_PART_FAILED: (part: string, commandToRunManually: string) =>\n `${Emojis.SCREAM} Build of ${part} failed !\\nIn case you don't see any errors above, consider manually running the failed command ${commandToRunManually} to see more details on why it errored out.`,\n BUILD_FAILED: `${Emojis.SCREAM} Build failed !`,\n INSTALL_START: \"NanoForge Installation\",\n INSTALL_NAMES_QUESTION: \"Witch libraries do you want to install ?\",\n NEW_START: \"NanoForge Project Creation\",\n NEW_SUCCESS: `${Emojis.ROCKET} Project successfully created !`,\n NEW_FAILED: `${Emojis.SCREAM} Project creation failed !`,\n NEW_NAME_QUESTION: \"What is the name of your project ?\",\n NEW_PACKAGE_MANAGER_QUESTION: \"Which package manager do you want to use ?\",\n NEW_LANGUAGE_QUESTION: \"Which language do you want to use ?\",\n NEW_STRICT_QUESTION: \"Do you want to use types strict mode ?\",\n NEW_SERVER_QUESTION: \"Do you want generate a server to create a multiplayer game ?\",\n NEW_SKIP_INSTALL_QUESTION: \"Do you want to skip installation ?\",\n SCHEMATICS_START: \"Schematics execution\",\n SCHEMATIC_IN_PROGRESS: (name: string) => `Executing schematic ${name}...`,\n SCHEMATIC_SUCCESS: (name: string) =>\n `${Emojis.ROCKET} Schematic ${name} executed successfully !`,\n SCHEMATIC_FAILED: (name: string) =>\n `${Emojis.SCREAM} Schematic ${name} execution failed. See error below for more details.`,\n PACKAGE_MANAGER_INSTALLATION_IN_PROGRESS: `Installation in progress... ${Emojis.COFFEE}`,\n PACKAGE_MANAGER_INSTALLATION_NOTHING: \"Nothing to install, terminated.\",\n PACKAGE_MANAGER_INSTALLATION_SUCCEED: (names?: string[]) =>\n names\n ? `${Emojis.ROCKET} Packages successfully installed : ${names.map((name) => green(name)).join(\", \")} !`\n : `${Emojis.ROCKET} Packages successfully installed !`,\n PACKAGE_MANAGER_INSTALLATION_FAILED: (commandToRunManually: string) =>\n `${Emojis.SCREAM} Packages installation failed !\\nIn case you don't see any errors above, consider manually running the failed command ${commandToRunManually} to see more details on why it errored out.`,\n RUN_START: \"NanoForge Run\",\n RUN_PART_IN_PROGRESS: (part: string) => `Running ${part}...`,\n RUN_PART_SUCCESS: (part: string) => `${Emojis.ROCKET} Run of ${part} terminated.`,\n RUN_PART_FAILED: (part: string) => `${Emojis.SCREAM} Run of ${part} failed !`,\n RUNNER_EXECUTION_ERROR: (command: string) => `\\nFailed to execute command: ${command}`,\n};\n","import { get } from \"node-emoji\";\n\nexport const Emojis = {\n HEART: get(\"heart\"),\n COFFEE: get(\"coffee\"),\n BEER: get(\"beer\"),\n BROKEN_HEART: get(\"broken_heart\"),\n CRYING: get(\"crying_cat_face\"),\n HEART_EYES: get(\"heart_eyes_cat\"),\n JOY: get(\"joy_cat\"),\n KISSING: get(\"kissing_cat\"),\n SCREAM: get(\"scream_cat\"),\n ROCKET: get(\"rocket\"),\n SMIRK: get(\"smirk_cat\"),\n RAISED_HANDS: get(\"raised_hands\"),\n POINT_RIGHT: get(\"point_right\"),\n SPARKLES: get(\"sparkles\"),\n BOOM: get(\"boom\"),\n PRAY: get(\"pray\"),\n WINE: get(\"wine_glass\"),\n};\n","import { bgRgb } from \"ansis\";\n\nexport const Prefixes = {\n INFO: bgRgb(60, 190, 100).bold.rgb(0, 0, 0)(\" Info \"),\n ERROR: bgRgb(210, 0, 75).bold.rgb(0, 0, 0)(\" Error \"),\n};\n","import * as ansis from \"ansis\";\nimport * as process from \"node:process\";\n\nimport { BuildConfig } from \"@lib/config\";\nimport { Input, getDirectoryInput } from \"@lib/input\";\nimport { PackageManager, PackageManagerFactory } from \"@lib/package-manager\";\nimport { Messages } from \"@lib/ui\";\n\nimport { getConfig } from \"~/action/common/config\";\n\nimport { AbstractAction } from \"../abstract.action\";\n\ninterface BuildPart {\n entry: string;\n output: string;\n target: \"client\" | \"server\";\n}\n\nexport class BuildAction extends AbstractAction {\n public async handle(_args: Input, options: Input) {\n console.info(Messages.BUILD_START);\n console.info();\n\n try {\n const directory = getDirectoryInput(options);\n const config = await getConfig(options, directory);\n\n const client = getPart(\n config.client.build,\n options.get(\"clientDirectory\")?.value as string | undefined,\n \"client\",\n );\n let res = await buildPart(\"Client\", client, directory);\n\n if (config.server.enable) {\n const server = getPart(\n config.server.build,\n options.get(\"serverDirectory\")?.value as string | undefined,\n \"server\",\n );\n res = (await buildPart(\"Server\", server, directory)) ? res : false;\n }\n\n console.info();\n if (!res) console.info(Messages.BUILD_FAILED);\n else console.info(Messages.BUILD_SUCCESS);\n\n process.exit(0);\n } catch (e) {\n console.error(e);\n process.exit(1);\n }\n }\n}\n\nconst getPart = (\n config: BuildConfig,\n directoryOption: string | undefined,\n target: \"client\" | \"server\",\n): BuildPart => {\n return {\n entry: config.entryFile,\n output: directoryOption || config.outDir,\n target: target,\n };\n};\n\nconst buildPart = async (name: string, part: BuildPart, directory: string) => {\n const packageManagerName = PackageManager.BUN;\n\n try {\n const packageManager = PackageManagerFactory.create(packageManagerName);\n return await packageManager.build(name, directory, part.entry, part.output, [\n \"--asset-naming\",\n \"[name].[ext]\",\n \"--target\",\n part.target === \"client\" ? \"browser\" : \"node\",\n ]);\n } catch (error: any) {\n if (error && error.message) {\n console.error(ansis.red(error.message));\n }\n return false;\n }\n};\n","import { Input } from \"./input.type\";\n\nexport const getStringInput = (input: Input, field: string): string | undefined => {\n const value = input.get(field)?.value;\n if (value === undefined) return undefined;\n if (typeof value === \"string\") return value;\n throw new Error(`Invalid type for ${field}`);\n};\n\nexport const getStringInputWithDefault = (\n input: Input,\n field: string,\n defaultValue: string,\n): string => {\n return getStringInput(input, field) ?? defaultValue;\n};\n\nexport const getBooleanInput = (input: Input, field: string): boolean | undefined => {\n const value = input.get(field)?.value;\n if (value === undefined) return undefined;\n if (typeof value === \"boolean\") return value;\n throw new Error(`Invalid type for ${field}`);\n};\n\nexport const getBooleanInputWithDefault = (\n input: Input,\n field: string,\n defaultValue: boolean,\n): boolean => {\n return getBooleanInput(input, field) ?? defaultValue;\n};\n\nexport const getArrayInput = (input: Input, field: string): string[] | undefined => {\n const value = input.get(field)?.value;\n if (value === undefined) return undefined;\n if (typeof value === \"object\" && Array.isArray(value)) return value;\n throw new Error(`Invalid type for ${field}`);\n};\n\nexport const getArrayInputWithDefault = (\n input: Input,\n field: string,\n defaultValue: string[],\n): string[] => {\n return getArrayInput(input, field) ?? defaultValue;\n};\n","export const getInputOrAsk = async <T>(\n baseInput: T | undefined,\n askCb: () => Promise<T>,\n defaultValue?: T,\n): Promise<T> => {\n if (baseInput !== undefined) return baseInput;\n const res = await askCb();\n if (res !== undefined) return res;\n if (defaultValue !== undefined) return defaultValue;\n throw new Error(\"No input provided\");\n};\n","import { getStringInput, getStringInputWithDefault } from \"../base-inputs\";\nimport { Input } from \"../input.type\";\n\nexport function getDirectoryInput(inputs: Input): string;\nexport function getDirectoryInput(inputs: Input, withDefault: false): string | undefined;\nexport function getDirectoryInput(inputs: Input, withDefault = true): string | undefined {\n if (withDefault) return getStringInputWithDefault(inputs, \"directory\", \".\");\n return getStringInput(inputs, \"directory\");\n}\n","import { getStringInputWithDefault } from \"../base-inputs\";\nimport { Input } from \"../input.type\";\n\nexport const getConfigInput = (inputs: Input): string => {\n return getStringInputWithDefault(inputs, \"config\", \".\");\n};\n","import { confirm } from \"@inquirer/prompts\";\n\nimport { promptError } from \"@utils/errors\";\n\ninterface ConfirmOptions {\n default: boolean;\n}\n\nexport const askConfirm = async (\n question: string,\n baseOptions?: Partial<ConfirmOptions>,\n): Promise<boolean | never> => {\n const options: ConfirmOptions = {\n default: false,\n ...(baseOptions ?? {}),\n };\n return await confirm({\n message: question,\n default: options.default,\n }).catch(promptError);\n};\n","export const promptError = (err: Error) => {\n if (err.name === \"ExitPromptError\") {\n process.exit(1);\n } else {\n throw err;\n }\n};\n","import { input } from \"@inquirer/prompts\";\n\nimport { promptError } from \"@utils/errors\";\n\ninterface InputOptions {\n default?: string;\n required: boolean;\n}\n\ninterface InputArrayOptions {\n default?: string;\n required: boolean;\n split: string;\n filter: boolean;\n}\n\nexport const askInput = async (\n question: string,\n baseOptions?: Partial<InputOptions>,\n): Promise<string | never> => {\n const options: InputOptions = {\n required: false,\n ...(baseOptions ?? {}),\n };\n return await input({\n message: question,\n required: options.required,\n default: options.default,\n }).catch(promptError);\n};\n\nexport const askInputArray = async (\n question: string,\n baseOptions?: Partial<InputArrayOptions>,\n): Promise<string[] | never> => {\n const options: InputArrayOptions = {\n required: false,\n split: \" \",\n filter: true,\n ...(baseOptions ?? {}),\n };\n const res = (\n await input({\n message: question,\n required: options.required,\n default: options.default,\n }).catch(promptError)\n ).split(options.split);\n return options.filter ? res.filter((r) => r.length) : res;\n};\n","import { number } from \"@inquirer/prompts\";\n\nimport { promptError } from \"@utils/errors\";\n\ninterface NumberOptions {\n default?: number;\n min?: number | undefined;\n max?: number | undefined;\n step?: number | \"any\" | undefined;\n required: boolean;\n}\n\nexport const askNumber = async (\n question: string,\n baseOptions?: Partial<NumberOptions>,\n): Promise<number | never> => {\n const options: NumberOptions = {\n required: false,\n ...(baseOptions ?? {}),\n };\n const res = await number({\n message: question,\n default: options.default,\n min: options.min,\n max: options.max,\n step: options.step,\n required: options.required,\n }).catch(promptError);\n\n if (res === undefined || isNaN(res) || !isFinite(res)) throw new Error(\"Invalid number\");\n return res;\n};\n","import { checkbox, select } from \"@inquirer/prompts\";\n\nimport { promptError } from \"@utils/errors\";\n\ninterface SelectChoice<T> {\n value: T;\n name?: string;\n description?: string;\n short?: string;\n disabled?: boolean | string;\n type?: never;\n}\n\ntype SelectChoices<T> = string[] | SelectChoice<T>[];\n\ninterface MultiSelectChoice<T> {\n value: T;\n name?: string;\n checkedName?: string;\n description?: string;\n short?: string;\n disabled?: boolean | string;\n checked?: boolean;\n type?: never;\n}\n\ntype MultiSelectChoices<T> = string[] | MultiSelectChoice<T>[];\n\ninterface SelectOptions<T> {\n default?: T;\n loop: boolean;\n}\n\ninterface MultiSelectOptions {\n loop: boolean;\n required: boolean;\n}\nexport const askSelect = async <T = string>(\n question: string,\n choices: SelectChoices<T>,\n baseOptions?: Partial<SelectOptions<T>>,\n): Promise<T | never> => {\n const options: SelectOptions<T> = {\n loop: true,\n ...(baseOptions ?? {}),\n };\n return await select({\n message: question,\n choices,\n loop: options.loop,\n default: options.default,\n }).catch(promptError);\n};\n\nexport const askMultiSelect = async <T = string>(\n question: string,\n choices: MultiSelectChoices<T>,\n baseOptions?: Partial<MultiSelectOptions>,\n): Promise<T[] | never> => {\n const options: MultiSelectOptions = {\n loop: true,\n required: false,\n ...(baseOptions ?? {}),\n };\n return await checkbox({\n message: question,\n choices,\n loop: options.loop,\n required: options.required,\n }).catch(promptError);\n};\n","import { askInputArray } from \"@lib/question\";\nimport { Messages } from \"@lib/ui\";\n\nimport { getInputOrAsk } from \"../../ask-inputs\";\nimport { getArrayInput } from \"../../base-inputs\";\nimport { Input } from \"../../input.type\";\n\nconst getNamesInput = (inputs: Input) => {\n return getArrayInput(inputs, \"names\");\n};\n\nexport const getInstallNamesInputOrAsk = (inputs: Input) => {\n return getInputOrAsk(getNamesInput(inputs), () =>\n askInputArray(Messages.INSTALL_NAMES_QUESTION, { required: true }),\n );\n};\n","import { yellow } from \"ansis\";\n\nimport { Runner } from \"./runner\";\nimport { BunRunner } from \"./runners/bun.runner\";\nimport { SchematicRunner } from \"./runners/schematic.runner\";\n\nexport class RunnerFactory {\n public static create(runner: Runner) {\n switch (runner) {\n case Runner.BUN:\n return new BunRunner();\n case Runner.SCHEMATIC:\n return new SchematicRunner();\n\n default:\n console.info(yellow`[WARN] Unsupported runner: ${runner}`);\n throw Error(`Unsupported runner: ${runner}`);\n }\n }\n}\n","import { red } from \"ansis\";\nimport { ChildProcess, SpawnOptions, spawn } from \"child_process\";\nimport * as process from \"node:process\";\n\nimport { Messages } from \"@lib/ui\";\n\ninterface RunnerListeners {\n onStdout?: (chunk: any) => void;\n onStderr?: (chunk: any) => void;\n}\n\nexport class AbstractRunner {\n constructor(\n protected binary: string,\n protected args: string[] = [],\n ) {}\n\n public async run(\n args: string[],\n collect = false,\n cwd: string = process.cwd(),\n env?: Record<string, string>,\n listeners?: RunnerListeners,\n failSpinner?: () => void,\n ): Promise<null | string> {\n const options: SpawnOptions = {\n cwd,\n stdio: collect ? \"pipe\" : \"inherit\",\n shell: true,\n env: { ...process.env, ...env },\n };\n return new Promise<null | string>((resolve, reject) => {\n const child: ChildProcess = spawn(\n `${this.binary} ${[...this.args, ...args].join(\" \")}`,\n options,\n );\n\n const res: string[] = [];\n child.stdout?.on(\n \"data\",\n listeners?.onStdout ?? ((data) => res.push(data.toString().replace(/\\r\\n|\\n/, \"\"))),\n );\n child.stderr?.on(\n \"data\",\n listeners?.onStderr ?? ((data) => res.push(data.toString().replace(/\\r\\n|\\n/, \"\"))),\n );\n\n child.on(\"close\", (code) => {\n if (code === 0) {\n resolve(collect && res.length ? res.join(\"\\n\") : null);\n } else {\n if (failSpinner) failSpinner();\n console.error(\n red(Messages.RUNNER_EXECUTION_ERROR([this.binary, ...this.args, ...args].join(\" \"))),\n );\n if (res.length) {\n console.error();\n console.error(res.join(\"\\n\"));\n console.error();\n }\n reject();\n }\n });\n });\n }\n\n public rawFullCommand(args: string[]): string {\n const commandArgs: string[] = [...this.args, ...args];\n return `${this.binary} ${commandArgs.join(\" \")}`;\n }\n}\n","import { AbstractRunner } from \"../abstract.runner\";\n\nexport class BunRunner extends AbstractRunner {\n constructor() {\n super(\"bun\");\n }\n}\n","import { join } from \"path\";\n\nexport const getCwd = (directory: string) => {\n return directory.startsWith(\"/\") ? directory : join(process.cwd(), directory);\n};\n\nexport const getModulePath = (name: string, removeLast = false) => {\n const path = import.meta.resolve(name).replace(/^file:\\/\\//, \"\");\n if (removeLast) return path.split(\"/\").slice(0, -1).join(\"/\");\n return path;\n};\n","import { getModulePath } from \"@utils/path\";\n\nimport { AbstractRunner } from \"../abstract.runner\";\n\nexport class SchematicRunner extends AbstractRunner {\n public static getModulePaths() {\n return module.paths;\n }\n\n public static findClosestSchematicsBinary(): string {\n try {\n return getModulePath(\"@angular-devkit/schematics-cli/bin/schematics.js\");\n } catch (e) {\n console.error(e);\n throw new Error(\"'schematics' binary path could not be found!\");\n }\n }\n\n constructor() {\n super(`node`, [`\"${SchematicRunner.findClosestSchematicsBinary()}\"`]);\n }\n}\n","import { bold, green, red, yellow } from \"ansis\";\nimport ora, { Ora } from \"ora\";\n\nimport { AbstractRunner } from \"@lib/runner/abstract.runner\";\nimport { Messages } from \"@lib/ui\";\n\nimport { getCwd } from \"@utils/path\";\n\nimport { PackageManagerCommands } from \"./package-manager-commands\";\n\nconst SPINNER = (message: string) =>\n ora({\n text: message,\n });\n\nconst FAIL_SPINNER = (spinner: Ora) => () => spinner.fail();\n\nexport abstract class AbstractPackageManager {\n constructor(protected runner: AbstractRunner) {}\n\n public async install(directory: string) {\n const spinner = SPINNER(Messages.PACKAGE_MANAGER_INSTALLATION_IN_PROGRESS);\n spinner.start();\n try {\n const commandArgs = [this.cli.install, this.cli.silentFlag];\n const collect = true;\n await this.runner.run(commandArgs, collect, getCwd(directory), undefined, undefined, () =>\n spinner.fail(),\n );\n spinner.succeed();\n this.printInstallSuccess();\n } catch {\n const commandArgs = [this.cli.install];\n const commandToRun = this.runner.rawFullCommand(commandArgs);\n this.printInstallFailure(commandToRun);\n }\n }\n\n public version(): Promise<string> {\n const commandArguments = [\"--version\"];\n const collect = true;\n return this.runner.run(commandArguments, collect) as Promise<string>;\n }\n\n public addProduction(directory: string, dependencies: string[]): Promise<boolean> {\n const command = [this.cli.add, this.cli.saveFlag];\n return this.add(command, directory, dependencies);\n }\n\n public addDevelopment(directory: string, dependencies: string[]): Promise<boolean> {\n const command = [this.cli.add, this.cli.saveDevFlag];\n return this.add(command, directory, dependencies);\n }\n\n async build(\n name: string,\n directory: string,\n entry: string,\n output: string,\n flags?: string[],\n ): Promise<boolean> {\n if (!this.cli.build) throw new Error(`Package manager ${this.name} does not support building`);\n\n const spinner = SPINNER(Messages.BUILD_PART_IN_PROGRESS(name));\n spinner.start();\n try {\n const commandArgs = [\n this.cli.build,\n this.cli.silentFlag,\n entry,\n \"--outdir\",\n output,\n ...(flags ?? []),\n ];\n const collect = true;\n await this.runner.run(\n commandArgs,\n collect,\n getCwd(directory),\n undefined,\n undefined,\n FAIL_SPINNER(spinner),\n );\n spinner.succeed();\n return true;\n } catch {\n const commandArgs = [this.cli.install];\n const commandToRun = this.runner.rawFullCommand(commandArgs);\n console.error(red(Messages.BUILD_PART_FAILED(name, bold(commandToRun))));\n return false;\n }\n }\n\n async run(\n name: string,\n directory: string,\n file: string,\n env: Record<string, string> = {},\n flags: string[] = [],\n silent = false,\n ): Promise<boolean> {\n if (!this.cli.run) throw new Error(`Package manager ${this.name} does not support running`);\n\n try {\n console.info(Messages.RUN_PART_IN_PROGRESS(name));\n const commandArgs = [...flags, this.cli.run];\n if (silent) commandArgs.push(this.cli.silentFlag);\n commandArgs.push(file);\n await this.runner.run(commandArgs, true, getCwd(directory), env, {\n onStdout: this.onRunStdout(name),\n onStderr: this.onRunStderr(name),\n });\n console.info(Messages.RUN_PART_SUCCESS(name));\n return true;\n } catch {\n console.error(red(Messages.RUN_PART_FAILED(name)));\n return false;\n }\n }\n\n private async add(args: string[], directory: string, dependencies: string[]) {\n if (!dependencies.length) {\n console.info();\n console.info(Messages.PACKAGE_MANAGER_INSTALLATION_NOTHING);\n console.info();\n return true;\n }\n\n const commandArguments = [...args, ...dependencies];\n\n const spinner = SPINNER(Messages.PACKAGE_MANAGER_INSTALLATION_IN_PROGRESS);\n spinner.start();\n\n try {\n const collect = true;\n await this.runner.run(\n commandArguments,\n collect,\n getCwd(directory),\n undefined,\n undefined,\n FAIL_SPINNER(spinner),\n );\n\n spinner.succeed();\n this.printInstallSuccess(dependencies);\n return true;\n } catch {\n spinner.fail();\n const commandToRun = this.runner.rawFullCommand(commandArguments);\n this.printInstallFailure(commandToRun);\n return false;\n }\n }\n\n private printInstallSuccess(dependencies?: string[]) {\n console.info();\n console.info(Messages.PACKAGE_MANAGER_INSTALLATION_SUCCEED(dependencies));\n console.info();\n }\n\n private printInstallFailure(command: string) {\n console.error(red(Messages.PACKAGE_MANAGER_INSTALLATION_FAILED(bold(command))));\n }\n\n private onRunStdout = (name: string) => (chunk: string) => {\n chunk\n .toString()\n .replace(/\\r\\n|\\n/g, \"\\n\")\n .replace(/^\\n+|\\n+$/g, \"\")\n .split(\"\\n\")\n .forEach((line) => {\n const date = yellow(`[${new Date().toISOString()}]`);\n const prompt = green(`(${name}) INFO -`);\n console.info(`${date} ${prompt} ${line}`);\n });\n };\n\n private onRunStderr = (name: string) => (chunk: ArrayBuffer) => {\n chunk\n .toString()\n .replace(/\\r\\n|\\n/g, \"\\n\")\n .replace(/^\\n+|\\n+$/g, \"\")\n .split(\"\\n\")\n .forEach((line) => {\n const date = yellow(`[${new Date().toISOString()}]`);\n const prompt = red(`(${name}) ERROR -`);\n console.error(`${date} ${prompt} ${line}`);\n });\n };\n\n public abstract get name(): string;\n\n public abstract get cli(): PackageManagerCommands;\n}\n","import { BunRunner, Runner, RunnerFactory } from \"@lib/runner\";\n\nimport { AbstractPackageManager } from \"../abstract.package-manager\";\nimport { PackageManager } from \"../package-manager\";\nimport { PackageManagerCommands } from \"../package-manager-commands\";\n\nexport class BunPackageManager extends AbstractPackageManager {\n constructor() {\n super(RunnerFactory.create(Runner.BUN) as BunRunner);\n }\n\n public get name() {\n return PackageManager.BUN.toUpperCase();\n }\n\n get cli(): PackageManagerCommands {\n return {\n install: \"install\",\n add: \"add\",\n update: \"update\",\n remove: \"remove\",\n build: \"build\",\n run: \"run\",\n saveFlag: \"--save\",\n saveDevFlag: \"--dev\",\n silentFlag: \"--silent\",\n };\n }\n}\n","import { AbstractPackageManager } from \"./abstract.package-manager\";\nimport { PackageManager } from \"./package-manager\";\nimport { BunPackageManager } from \"./package-managers/bun.package-manager\";\n\nexport class PackageManagerFactory {\n public static create(name: PackageManager | string): AbstractPackageManager {\n switch (name) {\n case PackageManager.BUN:\n return new BunPackageManager();\n default:\n throw new Error(`Package manager ${name} is not managed.`);\n }\n }\n}\n","import { Expose, Type } from \"class-transformer\";\nimport { IsBoolean, IsEnum, IsNotEmpty, IsPort, IsString, ValidateNested } from \"class-validator\";\n\nexport class BuildConfig {\n @Expose()\n @IsString()\n @IsNotEmpty()\n entryFile!: string;\n\n @Expose()\n @IsString()\n @IsNotEmpty()\n outDir!: string;\n}\n\nexport class RunConfig {\n @Expose()\n @IsString()\n @IsNotEmpty()\n dir!: string;\n}\n\nexport class ClientConfig {\n @Expose()\n @IsPort()\n port!: string;\n\n @Expose()\n @IsPort()\n gameExposurePort!: string;\n\n @Expose()\n @Type(() => BuildConfig)\n @ValidateNested()\n build!: BuildConfig;\n\n @Expose()\n @Type(() => RunConfig)\n @ValidateNested()\n runtime!: RunConfig;\n}\n\nexport class ServerConfig {\n @Expose()\n @IsBoolean()\n enable!: boolean;\n\n @Expose()\n @IsPort()\n port!: string;\n\n @Expose()\n @Type(() => BuildConfig)\n @ValidateNested()\n build!: BuildConfig;\n\n @Expose()\n @Type(() => RunConfig)\n @ValidateNested()\n runtime!: RunConfig;\n}\n\nexport class Config {\n @Expose()\n @IsString()\n @IsNotEmpty()\n name!: string;\n\n @Expose()\n @IsEnum([\"ts\", \"js\"])\n language!: \"ts\" | \"js\";\n\n @Expose()\n @IsBoolean()\n initFunctions!: boolean;\n\n @Expose()\n @Type(() => ClientConfig)\n @ValidateNested()\n client!: ClientConfig;\n\n @Expose()\n @Type(() => ServerConfig)\n @ValidateNested()\n server!: ServerConfig;\n}\n","import { plainToInstance } from \"class-transformer\";\nimport { validate } from \"class-validator\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"path\";\n\nimport { deepMerge } from \"@utils/object\";\n\nimport { CONFIG_DEFAULTS } from \"./config-defaults\";\nimport { Config } from \"./config.type\";\n\nlet config: Config | null;\n\nconst getConfigPath = (directory: string, name?: string) => {\n if (name) {\n return join(directory, name);\n } else {\n for (const n of [\"nanoforge.config.json\"]) {\n const path = join(directory, n);\n if (existsSync(path)) return path;\n }\n throw new Error(`Unsupported config: ${name}`);\n }\n};\n\nexport const loadConfig = async (directory: string, name?: string): Promise<Config> => {\n if (config) return config;\n\n let rawData;\n\n const path = getConfigPath(directory, name);\n if (!path) throw new Error(\"No config file found\");\n try {\n rawData = deepMerge(CONFIG_DEFAULTS, JSON.parse(readFileSync(path, \"utf-8\")));\n } catch {\n rawData = null;\n }\n if (!rawData) throw new Error(`Not able to read config file : ${path}`);\n\n const data = plainToInstance(Config, rawData, {\n excludeExtraneousValues: true,\n });\n const errors = await validate(data);\n if (errors.length > 0)\n throw new Error(`Invalid config :\\n${errors.toString().replace(/,/g, \"\\n\")}`);\n\n config = data;\n return config;\n};\n","export const isObject = (item: any) => {\n return item && typeof item === \"object\" && !Array.isArray(item);\n};\n\nexport const deepMerge = (target: any, ...sources: [any, ...any[]]): any => {\n if (!sources.length) return target;\n const source = sources.shift();\n\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n if (!target[key]) Object.assign(target, { [key]: {} });\n deepMerge(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n\n return deepMerge(target, ...sources);\n};\n","import { Config } from \"./config.type\";\n\nexport const CONFIG_DEFAULTS: Config = {\n name: \"nanoforge-app\",\n language: \"ts\",\n initFunctions: true,\n client: {\n port: \"3000\",\n gameExposurePort: \"3001\",\n build: {\n entryFile: \"client/main.ts\",\n outDir: \".nanoforge/client\",\n },\n runtime: {\n dir: \".nanoforge/client\",\n },\n },\n server: {\n enable: false,\n port: \"3002\",\n build: {\n entryFile: \"server/main.ts\",\n outDir: \".nanoforge/server\",\n },\n runtime: {\n dir: \".nanoforge/server\",\n },\n },\n};\n","import { Config, loadConfig } from \"@lib/config\";\nimport { Input, getConfigInput } from \"@lib/input\";\n\nexport const getConfig = (inputs: Input, dir: string): Promise<Config> => {\n return loadConfig(dir, getConfigInput(inputs));\n};\n","import { Input } from \"@lib/input\";\n\nexport abstract class AbstractAction {\n public abstract handle(args?: Input, options?: Input, extraFlags?: string[]): Promise<void>;\n}\n","import * as console from \"node:console\";\n\nimport { Config } from \"@lib/config\";\nimport { Input, getDirectoryInput } from \"@lib/input\";\nimport { AbstractCollection, Collection, CollectionFactory } from \"@lib/schematics\";\nimport { Messages } from \"@lib/ui\";\n\nimport { getConfig } from \"~/action/common/config\";\n\nimport { AbstractAction } from \"../abstract.action\";\nimport { executeSchematic } from \"../common/schematics\";\n\ninterface GenerateOptions {\n name: string;\n directory: string;\n language: string;\n server: boolean;\n initFunctions: boolean;\n}\n\nexport class GenerateAction extends AbstractAction {\n public async handle(_args: Input, options: Input) {\n console.info(Messages.NEW_START);\n\n try {\n const directory = getDirectoryInput(options);\n\n const config = await getConfig(options, directory);\n\n const values = await getSchemaValues(config);\n\n await generateFiles(values, directory);\n\n console.info();\n console.info(Messages.NEW_SUCCESS);\n process.exit(0);\n } catch (e) {\n console.error(Messages.NEW_FAILED);\n console.error(e);\n process.exit(1);\n }\n }\n}\n\nconst getSchemaValues = async (config: Config): Promise<GenerateOptions> => {\n return {\n name: config.name,\n directory: \".\",\n language: config.language,\n server: config.server.enable,\n initFunctions: config.initFunctions,\n };\n};\n\nconst generateFiles = async (values: GenerateOptions, directory: string) => {\n console.info();\n const collection: AbstractCollection = CollectionFactory.create(Collection.NANOFORGE, directory);\n\n console.info();\n console.info(Messages.SCHEMATICS_START);\n console.info();\n\n await executeSchematic(\"Client main file\", collection, \"part-main\", {\n name: values.name,\n part: \"client\",\n directory: values.directory,\n language: values.language,\n initFunctions: values.initFunctions,\n });\n\n if (values.server) {\n await executeSchematic(\"Server main file\", collection, \"part-main\", {\n name: values.name,\n part: \"server\",\n directory: values.directory,\n language: values.language,\n initFunctions: values.initFunctions,\n });\n }\n};\n","import { getCwd } from \"@utils/path\";\n\nimport { AbstractRunner } from \"../runner/abstract.runner\";\nimport { Schematic } from \"./nanoforge.collection\";\nimport { SchematicOption } from \"./schematic.option\";\n\nexport abstract class AbstractCollection {\n protected constructor(\n protected collection: string,\n protected runner: AbstractRunner,\n protected cwd?: string,\n ) {}\n\n public async execute(\n name: string,\n options: SchematicOption[],\n flags?: string[],\n failSpinner?: () => void,\n ) {\n const command = this.buildCommandLine(name, options, flags);\n await this.runner.run(\n command,\n true,\n this.cwd ? getCwd(this.cwd) : undefined,\n undefined,\n undefined,\n failSpinner,\n );\n }\n\n public abstract getSchematics(): Schematic[];\n\n private buildCommandLine(\n name: string,\n options: SchematicOption[],\n flags: string[] = [],\n ): string[] {\n return [`${this.collection}:${name}`, ...flags, ...this.buildOptions(options)];\n }\n\n private buildOptions(options: SchematicOption[]): string[] {\n return options.reduce(\n (old: string[], option: SchematicOption) => [...old, ...option.toCommandString()],\n [],\n );\n }\n}\n","import { AbstractRunner } from \"../runner/abstract.runner\";\nimport { AbstractCollection } from \"./abstract.collection\";\nimport { SchematicOption } from \"./schematic.option\";\n\nexport interface Schematic {\n name: string;\n alias: string;\n description: string;\n}\n\nexport class NanoforgeCollection extends AbstractCollection {\n private static schematics: Schematic[] = [\n {\n name: \"application\",\n alias: \"application\",\n description: \"Generate a new application\",\n },\n {\n name: \"configuration\",\n alias: \"config\",\n description: \"Generate a CLI configuration file\",\n },\n {\n name: \"part-base\",\n alias: \"base\",\n description: \"Generate a NanoForge Part Base\",\n },\n {\n name: \"part-main\",\n alias: \"main\",\n description: \"Generate a NanoForge Part Main file\",\n },\n ];\n\n constructor(runner: AbstractRunner, cwd?: string) {\n super(\"@nanoforge-dev/schematics\", runner, cwd);\n }\n\n public override async execute(\n name: string,\n options: SchematicOption[],\n flags?: string[],\n failSpinner?: () => void,\n ) {\n const schematic: string = this.validate(name);\n await super.execute(schematic, options, flags, failSpinner);\n }\n\n public getSchematics(): Schematic[] {\n return NanoforgeCollection.schematics;\n }\n\n private validate(name: string) {\n const schematic = NanoforgeCollection.schematics.find(\n (s) => s.name === name || s.alias === name,\n );\n\n if (schematic === undefined || schematic === null) {\n throw new Error(\n `Invalid schematic \"${name}\". Please, ensure that \"${name}\" exists in this collection.`,\n );\n }\n return schematic.name;\n }\n}\n","import { Runner, RunnerFactory } from \"../runner\";\nimport { SchematicRunner } from \"../runner/runners/schematic.runner\";\nimport { AbstractCollection } from \"./abstract.collection\";\nimport { Collection } from \"./collection\";\nimport { NanoforgeCollection } from \"./nanoforge.collection\";\n\nexport class CollectionFactory {\n public static create(collection: Collection | string, directory: string): AbstractCollection {\n const schematicRunner = RunnerFactory.create(Runner.SCHEMATIC) as SchematicRunner;\n\n if (collection === Collection.NANOFORGE) {\n return new NanoforgeCollection(schematicRunner, directory);\n } else {\n return new NanoforgeCollection(schematicRunner, directory);\n }\n }\n}\n","export const toKebabCase = (str: string): string => {\n return str\n .replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, \"$1-$2\")\n .replace(/[\\s_]+/g, \"-\")\n .toLowerCase();\n};\n","import { toKebabCase } from \"@utils/formatting\";\n\nexport class SchematicOption {\n constructor(\n private name: string,\n private value: boolean | string | Array<SchematicOption>,\n ) {}\n\n get normalizedName() {\n return toKebabCase(this.name);\n }\n\n public toCommandString(prefix?: string): string[] {\n const normalizedName = `${prefix ? `${prefix}.` : \"\"}${this.normalizedName}`;\n if (typeof this.value === \"string\") {\n if (this.name === \"name\") {\n return [`--${normalizedName}=${this.format()}`];\n } else if (this.name === \"version\" || this.name === \"path\") {\n return [`--${normalizedName}=${this.value}`];\n } else {\n return [`--${normalizedName}=\"${this.value}\"`];\n }\n } else if (typeof this.value === \"boolean\") {\n const str = normalizedName;\n return this.value ? [`--${str}`] : [`--no-${str}`];\n } else if (Array.isArray(this.value)) {\n return this.value.reduce(\n (old: string[], option: SchematicOption) => [\n ...old,\n ...option.toCommandString(normalizedName),\n ],\n [],\n );\n } else {\n return [`--${normalizedName}=${this.value}`];\n }\n }\n\n private format() {\n return toKebabCase(this.value as string)\n .split(\"\")\n .reduce((content, char) => {\n if (char === \"(\" || char === \")\" || char === \"[\" || char === \"]\") {\n return `${content}\\\\${char}`;\n }\n return `${content}${char}`;\n }, \"\");\n }\n}\n","import ora from \"ora\";\n\nexport const getSpinner = (message: string) =>\n ora({\n text: message,\n });\n","import { AbstractCollection, SchematicOption } from \"@lib/schematics\";\nimport { Messages } from \"@lib/ui\";\n\nimport { getSpinner } from \"~/action/common/spinner\";\n\nexport const executeSchematic = async (\n name: string,\n collection: AbstractCollection,\n schematicName: string,\n options: object,\n) => {\n const spinner = getSpinner(Messages.SCHEMATIC_IN_PROGRESS(name));\n spinner.start();\n await collection.execute(schematicName, mapSchematicOptions(options), undefined, () =>\n spinner.fail(Messages.SCHEMATIC_FAILED(name)),\n );\n spinner.succeed(Messages.SCHEMATIC_SUCCESS(name));\n};\n\nexport const mapSchematicOptions = (inputs: object): SchematicOption[] => {\n return Object.entries(inputs).reduce((old, [key, value]) => {\n if (value === undefined) return old;\n return [\n ...old,\n new SchematicOption(key, typeof value === \"object\" ? mapSchematicOptions(value) : value),\n ];\n }, [] as SchematicOption[]);\n};\n","import * as ansis from \"ansis\";\nimport * as process from \"node:process\";\n\nimport { Input, getDirectoryInput, getInstallNamesInputOrAsk } from \"@lib/input\";\nimport { PackageManager, PackageManagerFactory } from \"@lib/package-manager\";\nimport { Messages } from \"@lib/ui\";\n\nimport { AbstractAction } from \"../abstract.action\";\n\nexport class InstallAction extends AbstractAction {\n public async handle(args: Input, options: Input) {\n console.info(Messages.INSTALL_START);\n console.info();\n\n try {\n const names = await getInstallNamesInputOrAsk(args);\n const directory = getDirectoryInput(options);\n\n await installPackages(names, directory);\n\n process.exit(0);\n } catch (e) {\n console.error(e);\n process.exit(1);\n }\n }\n}\n\nconst installPackages = async (names: string[], directory: string) => {\n const packageManagerName = PackageManager.BUN;\n\n try {\n const packageManager = PackageManagerFactory.create(packageManagerName);\n await packageManager.addProduction(directory, names);\n } catch (error: any) {\n if (error && error.message) {\n console.error(ansis.red(error.message));\n }\n }\n};\n","import { getBooleanInputWithDefault } from \"../../base-inputs\";\nimport { Input } from \"../../input.type\";\n\nexport const getNewInitFunctionsWithDefault = (inputs: Input) => {\n return getBooleanInputWithDefault(inputs, \"initFunctions\", false);\n};\n","import { askSelect } from \"@lib/question\";\nimport { Messages } from \"@lib/ui\";\n\nimport { getInputOrAsk } from \"../../ask-inputs\";\nimport { getStringInput } from \"../../base-inputs\";\nimport { Input } from \"../../input.type\";\n\nconst getLanguageInput = (inputs: Input) => {\n return getStringInput(inputs, \"language\");\n};\n\nexport const getNewLanguageInputOrAsk = (inputs: Input) => {\n return getInputOrAsk(getLanguageInput(inputs), () =>\n askSelect<\"ts\" | \"js\">(Messages.NEW_LANGUAGE_QUESTION, [{ value: \"ts\" }, { value: \"js\" }], {\n default: \"ts\",\n }),\n );\n};\n","import { askInput } from \"@lib/question\";\nimport { Messages } from \"@lib/ui\";\n\nimport { getInputOrAsk } from \"../../ask-inputs\";\nimport { getStringInput } from \"../../base-inputs\";\nimport { Input } from \"../../input.type\";\n\nconst getNameInput = (inputs: Input) => {\n return getStringInput(inputs, \"name\");\n};\n\nexport const getNewNameInputOrAsk = (inputs: Input) => {\n return getInputOrAsk(getNameInput(inputs), () =>\n askInput(Messages.NEW_NAME_QUESTION, {\n required: true,\n default: \"nanoforge-app\",\n }),\n );\n};\n","import { askSelect } from \"@lib/question\";\nimport { Messages } from \"@lib/ui\";\n\nimport { getInputOrAsk } from \"../../ask-inputs\";\nimport { getStringInput } from \"../../base-inputs\";\nimport { Input } from \"../../input.type\";\n\nconst getPackageManagerInput = (inputs: Input) => {\n return getStringInput(inputs, \"packageManager\");\n};\n\nexport const getNewPackageManagerInputOrAsk = (inputs: Input) => {\n return getInputOrAsk(getPackageManagerInput(inputs), () =>\n askSelect<\"npm\" | \"yarn\" | \"pnpm\" | \"bun\">(\n Messages.NEW_PACKAGE_MANAGER_QUESTION,\n [{ value: \"npm\" }, { value: \"yarn\" }, { value: \"pnpm\" }, { value: \"bun\" }],\n {\n default: \"npm\",\n },\n ),\n );\n};\n","import { getStringInput } from \"../../base-inputs\";\nimport { Input } from \"../../input.type\";\n\nexport const getNewPathInput = (inputs: Input) => {\n return getStringInput(inputs, \"path\");\n};\n","import { askConfirm } from \"@lib/question\";\nimport { Messages } from \"@lib/ui\";\n\nimport { getInputOrAsk } from \"../../ask-inputs\";\nimport { getBooleanInput } from \"../../base-inputs\";\nimport { Input } from \"../../input.type\";\n\nconst getNewServerInput = (inputs: Input) => {\n return getBooleanInput(inputs, \"server\");\n};\n\nexport const getNewServerOrAsk = (inputs: Input) => {\n return getInputOrAsk(getNewServerInput(inputs), () =>\n askConfirm(Messages.NEW_SERVER_QUESTION, { default: false }),\n );\n};\n","import { askConfirm } from \"@lib/question\";\nimport { Messages } from \"@lib/ui\";\n\nimport { getInputOrAsk } from \"../../ask-inputs\";\nimport { getBooleanInput } from \"../../base-inputs\";\nimport { Input } from \"../../input.type\";\n\nconst getNewSkipInstallInput = (inputs: Input) => {\n return getBooleanInput(inputs, \"skipInstall\");\n};\n\nexport const getNewSkipInstallOrAsk = (inputs: Input) => {\n return getInputOrAsk(getNewSkipInstallInput(inputs), () =>\n askConfirm(Messages.NEW_SKIP_INSTALL_QUESTION, { default: false }),\n );\n};\n","import { askConfirm } from \"@lib/question\";\nimport { Messages } from \"@lib/ui\";\n\nimport { getInputOrAsk } from \"../../ask-inputs\";\nimport { getBooleanInput } from \"../../base-inputs\";\nimport { Input } from \"../../input.type\";\n\nconst getNewStrictInput = (inputs: Input) => {\n return getBooleanInput(inputs, \"strict\");\n};\n\nexport const getNewStrictOrAsk = (inputs: Input) => {\n return getInputOrAsk(getNewStrictInput(inputs), () =>\n askConfirm(Messages.NEW_STRICT_QUESTION, { default: true }),\n );\n};\n","import { Input, getDirectoryInput } from \"@lib/input\";\nimport { getNewInitFunctionsWithDefault } from \"@lib/input/inputs/new/init-functions.input\";\nimport { getNewLanguageInputOrAsk } from \"@lib/input/inputs/new/language.input\";\nimport { getNewNameInputOrAsk } from \"@lib/input/inputs/new/name.input\";\nimport { getNewPackageManagerInputOrAsk } from \"@lib/input/inputs/new/package-manager.input\";\nimport { getNewPathInput } from \"@lib/input/inputs/new/path.input\";\nimport { getNewServerOrAsk } from \"@lib/input/inputs/new/server.input\";\nimport { getNewSkipInstallOrAsk } from \"@lib/input/inputs/new/skip-install.input\";\nimport { getNewStrictOrAsk } from \"@lib/input/inputs/new/strict.input\";\nimport { AbstractCollection, Collection, CollectionFactory } from \"@lib/schematics\";\nimport { Messages } from \"@lib/ui\";\n\nimport { AbstractAction } from \"../abstract.action\";\nimport { executeSchematic } from \"../common/schematics\";\n\ninterface NewOptions {\n name: string;\n directory?: string;\n packageManager: string;\n language: string;\n strict: boolean;\n server: boolean;\n initFunctions: boolean;\n skipInstall: boolean;\n}\n\nexport class NewAction extends AbstractAction {\n public async handle(_args: Input, options: Input) {\n console.info(Messages.NEW_START);\n\n try {\n const directory = getDirectoryInput(options);\n\n const values = await getSchemaValues(options);\n\n await generateApplicationFiles(values, directory);\n\n console.info();\n console.info(Messages.NEW_SUCCESS);\n process.exit(0);\n } catch {\n console.error(Messages.NEW_FAILED);\n process.exit(1);\n }\n }\n}\n\nconst getSchemaValues = async (inputs: Input): Promise<NewOptions> => {\n return {\n name: await getNewNameInputOrAsk(inputs),\n directory: getNewPathInput(inputs),\n packageManager: await getNewPackageManagerInputOrAsk(inputs),\n language: await getNewLanguageInputOrAsk(inputs),\n strict: await getNewStrictOrAsk(inputs),\n server: await getNewServerOrAsk(inputs),\n initFunctions: getNewInitFunctionsWithDefault(inputs),\n skipInstall: await getNewSkipInstallOrAsk(inputs),\n };\n};\n\nconst generateApplicationFiles = async (values: NewOptions, directory: string) => {\n console.info();\n const collection: AbstractCollection = CollectionFactory.create(Collection.NANOFORGE, directory);\n\n console.info();\n console.info(Messages.SCHEMATICS_START);\n console.info();\n\n await executeSchematic(\"Application\", collection, \"application\", {\n name: values.name,\n directory: values.directory,\n packageManager: values.packageManager,\n language: values.language,\n strict: values.strict,\n server: values.server,\n });\n await executeSchematic(\"Configuration\", collection, \"configuration\", {\n name: values.name,\n directory: values.directory,\n server: values.server,\n });\n await executeSchematic(\"Base Client\", collection, \"part-base\", {\n name: values.name,\n part: \"client\",\n directory: values.directory,\n language: values.language,\n initFunctions: values.initFunctions,\n });\n await executeSchematic(\"Client main file\", collection, \"part-main\", {\n name: values.name,\n part: \"client\",\n directory: values.directory,\n language: values.language,\n initFunctions: values.initFunctions,\n });\n\n if (values.server) {\n await executeSchematic(\"Base server\", collection, \"part-base\", {\n name: values.name,\n part: \"server\",\n directory: values.directory,\n language: values.language,\n initFunctions: values.initFunctions,\n });\n await executeSchematic(\"Server main file\", collection, \"part-main\", {\n name: values.name,\n part: \"server\",\n directory: values.directory,\n language: values.language,\n initFunctions: values.initFunctions,\n });\n }\n};\n","import * as ansis from \"ansis\";\nimport * as console from \"node:console\";\nimport { join } from \"path\";\n\nimport { Input, getDirectoryInput, getStringInputWithDefault } from \"@lib/input\";\nimport { PackageManager, PackageManagerFactory } from \"@lib/package-manager\";\nimport { Messages } from \"@lib/ui\";\n\nimport { getCwd, getModulePath } from \"@utils/path\";\n\nimport { getConfig } from \"~/action/common/config\";\n\nimport { AbstractAction } from \"../abstract.action\";\n\nexport class StartAction extends AbstractAction {\n public async handle(_args: Input, options: Input) {\n console.info(Messages.RUN_START);\n console.info();\n\n try {\n const directory = getDirectoryInput(options);\n const config = await getConfig(options, directory);\n\n const clientDir = config.client.runtime.dir;\n const serverDir = config.server.runtime.dir;\n\n const clientPort = getStringInputWithDefault(options, \"clientPort\", config.client.port);\n\n await Promise.all([\n config.server.enable ? this.startServer(directory, serverDir) : undefined,\n this.startClient(clientPort, directory, clientDir),\n ]);\n process.exit(0);\n } catch (e) {\n console.error(e);\n process.exit(1);\n }\n }\n\n private async startClient(port: string, directory: string, gameDir: string): Promise<void> {\n const path = getModulePath(\"@nanoforge-dev/loader-client/package.json\", true);\n\n return runPart(\"Client\", path, {\n PORT: port,\n GAME_DIR: getCwd(join(directory, gameDir)),\n });\n }\n\n private startServer(directory: string, gameDir: string): Promise<void> {\n const path = getModulePath(\"@nanoforge-dev/loader-server/package.json\", true);\n return runPart(\"Server\", path, {\n GAME_DIR: getCwd(join(directory, gameDir)),\n });\n }\n}\n\nconst runPart = async (\n part: string,\n directory: string,\n env?: Record<string, string>,\n flags?: string[],\n) => {\n const packageManagerName = PackageManager.BUN;\n\n try {\n const packageManager = PackageManagerFactory.create(packageManagerName);\n await packageManager.run(part, directory, \"start\", env, flags, true);\n } catch (error: any) {\n if (error && error.message) {\n console.error(ansis.red(error.message));\n }\n }\n};\n","import { Command } from \"commander\";\n\nimport { AbstractAction } from \"~/action/abstract.action\";\n\nexport abstract class AbstractCommand {\n constructor(protected action: AbstractAction) {}\n\n public abstract load(program: Command): void;\n}\n","import { Command } from \"commander\";\n\nimport { Input } from \"@lib/input\";\n\nimport { AbstractCommand } from \"../abstract.command\";\n\ninterface BuildOptions {\n directory?: string;\n config?: string;\n clientOutDir?: string;\n serverOutDir?: string;\n}\n\nexport class BuildCommand extends AbstractCommand {\n public load(program: Command) {\n program\n .command(\"build\")\n .description(\"build your game\")\n .option(\"-d, --directory [directory]\", \"specify the directory of your project\")\n .option(\"-c, --config [config]\", \"path to the config file\", \"nanoforge.config.json\")\n .option(\"--client-outDir [clientDirectory]\", \"specify the output directory of the client\")\n .option(\"--server-outDir [serverDirectory]\", \"specify the output directory of the server\")\n .action(async (rawOptions: BuildOptions) => {\n const options: Input = new Map();\n options.set(\"directory\", { value: rawOptions.directory });\n options.set(\"config\", { value: rawOptions.config });\n options.set(\"clientDirectory\", { value: rawOptions.clientOutDir });\n options.set(\"serverDirectory\", { value: rawOptions.serverOutDir });\n\n const args: Input = new Map();\n\n await this.action.handle(args, options);\n });\n }\n}\n","import { Command } from \"commander\";\n\nimport { Input } from \"@lib/input\";\n\nimport { AbstractCommand } from \"../abstract.command\";\n\ninterface GenerateOptions {\n directory?: string;\n config?: string;\n}\n\nexport class GenerateCommand extends AbstractCommand {\n public load(program: Command) {\n program\n .command(\"generate\")\n .description(\"generate nanoforge files from config\")\n .option(\"-d, --directory [directory]\", \"specify the directory of your project\")\n .option(\"-c, --config [config]\", \"path to the config file\", \"nanoforge.config.json\")\n .action(async (rawOptions: GenerateOptions) => {\n const options: Input = new Map();\n options.set(\"directory\", { value: rawOptions.directory });\n options.set(\"config\", { value: rawOptions.config });\n\n const args: Input = new Map();\n\n await this.action.handle(args, options);\n });\n }\n}\n","import { Command } from \"commander\";\n\nimport { Input } from \"@lib/input\";\n\nimport { AbstractCommand } from \"../abstract.command\";\n\ninterface InstallOptions {\n directory?: string;\n}\n\nexport class InstallCommand extends AbstractCommand {\n public load(program: Command) {\n program\n .command(\"install [names...]\")\n .alias(\"add\")\n .description(\"add NanoForge library to your project\")\n .option(\"-d, --directory [directory]\", \"specify the directory of your project\")\n .action(async (names: string[], rawOptions: InstallOptions) => {\n const options: Input = new Map();\n options.set(\"directory\", { value: rawOptions.directory });\n\n const args: Input = new Map();\n args.set(\"names\", { value: names.length ? names : undefined });\n\n await this.action.handle(args, options);\n });\n }\n}\n","import { Command } from \"commander\";\n\nimport { Input } from \"@lib/input\";\n\nimport { AbstractCommand } from \"../abstract.command\";\n\ninterface NewOptions {\n directory?: string;\n name?: string;\n path?: string;\n packageManager?: string;\n language?: string;\n strict?: boolean;\n server?: boolean;\n initFunctions?: boolean;\n skipInstall?: boolean;\n}\n\nexport class NewCommand extends AbstractCommand {\n public load(program: Command) {\n program\n .command(\"new\")\n .description(\"create a new nanoforge project\")\n .option(\"-d, --directory [directory]\", \"specify the directory of your project\")\n .option(\"--name [name]\", \"specify the name of your project\")\n .option(\"--path [path]\", \"specify the path of your project\")\n .option(\"--package-manager [packageManager]\", \"specify the package manager of your project\")\n .option(\"--language [language]\", \"specify the language of your project\")\n .option(\"--strict\", \"use strict mode\")\n .option(\"--no-strict\", \"do not use strict mode\")\n .option(\"--server\", \"create a server\")\n .option(\"--no-server\", \"do not create a server\")\n .option(\"--init-functions\", \"initialize functions\")\n .option(\"--no-init-functions\", \"do not initialize functions\")\n .option(\"--skip-install\", \"skip installing dependencies\")\n .option(\"--no-skip-install\", \"do not skip installing dependencies\")\n .action(async (rawOptions: NewOptions) => {\n const options: Input = new Map();\n options.set(\"directory\", { value: rawOptions.directory });\n options.set(\"name\", { value: rawOptions.name });\n options.set(\"path\", { value: rawOptions.path });\n options.set(\"packageManager\", { value: rawOptions.packageManager });\n options.set(\"language\", { value: rawOptions.language });\n options.set(\"strict\", { value: rawOptions.strict });\n options.set(\"server\", { value: rawOptions.server });\n options.set(\"initFunctions\", { value: rawOptions.initFunctions });\n options.set(\"skipInstall\", { value: rawOptions.skipInstall });\n\n const args: Input = new Map();\n\n await this.action.handle(args, options);\n });\n }\n}\n","import { Command } from \"commander\";\n\nimport { Input } from \"@lib/input\";\n\nimport { AbstractCommand } from \"../abstract.command\";\n\ninterface StartOptions {\n directory?: string;\n config?: string;\n clientPort?: string;\n gameExposurePort?: string;\n serverPort?: string;\n}\n\nexport class StartCommand extends AbstractCommand {\n public load(program: Command) {\n program\n .command(\"start\")\n .description(\"start your game\")\n .option(\"-d, --directory [directory]\", \"specify the directory of your project\")\n .option(\"-c, --config [config]\", \"path to the config file\", \"nanoforge.config.json\")\n .option(\n \"-p, --client-port [clientPort]\",\n \"specify the port of the loader (the website to load the game)\",\n )\n .option(\"--game-exposure-port [gameExposurePort]\", \"specify the port of the game exposure\")\n .option(\"--server-port [serverPort]\", \"specify the port of the server\")\n .action(async (rawOptions: StartOptions) => {\n const options: Input = new Map();\n options.set(\"directory\", { value: rawOptions.directory });\n options.set(\"config\", { value: rawOptions.config });\n options.set(\"clientPort\", { value: rawOptions.clientPort });\n options.set(\"gameExposurePort\", {\n value: rawOptions.gameExposurePort,\n });\n options.set(\"serverPort\", { value: rawOptions.serverPort });\n\n const args: Input = new Map();\n\n await this.action.handle(args, options);\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAAA,SAAS,OAAAA,YAAW;;;ACApB,SAAS,aAAa;;;ACAtB,SAAS,WAAW;AAEb,IAAM,SAAS;AAAA,EACpB,OAAO,IAAI,OAAO;AAAA,EAClB,QAAQ,IAAI,QAAQ;AAAA,EACpB,MAAM,IAAI,MAAM;AAAA,EAChB,cAAc,IAAI,cAAc;AAAA,EAChC,QAAQ,IAAI,iBAAiB;AAAA,EAC7B,YAAY,IAAI,gBAAgB;AAAA,EAChC,KAAK,IAAI,SAAS;AAAA,EAClB,SAAS,IAAI,aAAa;AAAA,EAC1B,QAAQ,IAAI,YAAY;AAAA,EACxB,QAAQ,IAAI,QAAQ;AAAA,EACpB,OAAO,IAAI,WAAW;AAAA,EACtB,cAAc,IAAI,cAAc;AAAA,EAChC,aAAa,IAAI,aAAa;AAAA,EAC9B,UAAU,IAAI,UAAU;AAAA,EACxB,MAAM,IAAI,MAAM;AAAA,EAChB,MAAM,IAAI,MAAM;AAAA,EAChB,MAAM,IAAI,YAAY;AACxB;;;ADhBO,IAAM,WAAW;AAAA,EACtB,aAAa;AAAA,EACb,wBAAwB,wBAAC,SAAiB,YAAY,IAAI,OAAlC;AAAA,EACxB,eAAe;AAAA,EACf,eAAe,GAAG,OAAO,MAAM;AAAA,EAC/B,mBAAmB,wBAAC,MAAc,yBAChC,GAAG,OAAO,MAAM,cAAc,IAAI;AAAA,uFAAmG,oBAAoB,+CADxI;AAAA,EAEnB,cAAc,GAAG,OAAO,MAAM;AAAA,EAC9B,eAAe;AAAA,EACf,wBAAwB;AAAA,EACxB,WAAW;AAAA,EACX,aAAa,GAAG,OAAO,MAAM;AAAA,EAC7B,YAAY,GAAG,OAAO,MAAM;AAAA,EAC5B,mBAAmB;AAAA,EACnB,8BAA8B;AAAA,EAC9B,uBAAuB;AAAA,EACvB,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,2BAA2B;AAAA,EAC3B,kBAAkB;AAAA,EAClB,uBAAuB,wBAAC,SAAiB,uBAAuB,IAAI,OAA7C;AAAA,EACvB,mBAAmB,wBAAC,SAClB,GAAG,OAAO,MAAM,eAAe,IAAI,4BADlB;AAAA,EAEnB,kBAAkB,wBAAC,SACjB,GAAG,OAAO,MAAM,eAAe,IAAI,wDADnB;AAAA,EAElB,0CAA0C,+BAA+B,OAAO,MAAM;AAAA,EACtF,sCAAsC;AAAA,EACtC,sCAAsC,wBAAC,UACrC,QACI,GAAG,OAAO,MAAM,uCAAuC,MAAM,IAAI,CAAC,SAAS,MAAM,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,OAClG,GAAG,OAAO,MAAM,uCAHgB;AAAA,EAItC,qCAAqC,wBAAC,yBACpC,GAAG,OAAO,MAAM;AAAA,uFAA0H,oBAAoB,+CAD3H;AAAA,EAErC,WAAW;AAAA,EACX,sBAAsB,wBAAC,SAAiB,WAAW,IAAI,OAAjC;AAAA,EACtB,kBAAkB,wBAAC,SAAiB,GAAG,OAAO,MAAM,YAAY,IAAI,gBAAlD;AAAA,EAClB,iBAAiB,wBAAC,SAAiB,GAAG,OAAO,MAAM,YAAY,IAAI,aAAlD;AAAA,EACjB,wBAAwB,wBAAC,YAAoB;AAAA,6BAAgC,OAAO,IAA5D;AAC1B;;;AE1CA,SAAS,aAAa;AAEf,IAAM,WAAW;AAAA,EACtB,MAAM,MAAM,IAAI,KAAK,GAAG,EAAE,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,QAAQ;AAAA,EACpD,OAAO,MAAM,KAAK,GAAG,EAAE,EAAE,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,SAAS;AACtD;;;ACLA,YAAY,WAAW;AACvB,YAAYC,cAAa;;;ACClB,IAAM,iBAAiB,wBAACC,QAAc,UAAsC;AACjF,QAAM,QAAQA,OAAM,IAAI,KAAK,GAAG;AAChC,MAAI,UAAU,OAAW,QAAO;AAChC,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,QAAM,IAAI,MAAM,oBAAoB,KAAK,EAAE;AAC7C,GAL8B;AAOvB,IAAM,4BAA4B,wBACvCA,QACA,OACA,iBACW;AACX,SAAO,eAAeA,QAAO,KAAK,KAAK;AACzC,GANyC;AAQlC,IAAM,kBAAkB,wBAACA,QAAc,UAAuC;AACnF,QAAM,QAAQA,OAAM,IAAI,KAAK,GAAG;AAChC,MAAI,UAAU,OAAW,QAAO;AAChC,MAAI,OAAO,UAAU,UAAW,QAAO;AACvC,QAAM,IAAI,MAAM,oBAAoB,KAAK,EAAE;AAC7C,GAL+B;AAOxB,IAAM,6BAA6B,wBACxCA,QACA,OACA,iBACY;AACZ,SAAO,gBAAgBA,QAAO,KAAK,KAAK;AAC1C,GAN0C;AAQnC,IAAM,gBAAgB,wBAACA,QAAc,UAAwC;AAClF,QAAM,QAAQA,OAAM,IAAI,KAAK,GAAG;AAChC,MAAI,UAAU,OAAW,QAAO;AAChC,MAAI,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO;AAC9D,QAAM,IAAI,MAAM,oBAAoB,KAAK,EAAE;AAC7C,GAL6B;;;AChCtB,IAAM,gBAAgB,8BAC3B,WACA,OACA,iBACe;AACf,MAAI,cAAc,OAAW,QAAO;AACpC,QAAM,MAAM,MAAM,MAAM;AACxB,MAAI,QAAQ,OAAW,QAAO;AAC9B,MAAI,iBAAiB,OAAW,QAAO;AACvC,QAAM,IAAI,MAAM,mBAAmB;AACrC,GAV6B;;;ACKtB,SAAS,kBAAkB,QAAe,cAAc,MAA0B;AACvF,MAAI,YAAa,QAAO,0BAA0B,QAAQ,aAAa,GAAG;AAC1E,SAAO,eAAe,QAAQ,WAAW;AAC3C;AAHgB;;;ACFT,IAAM,iBAAiB,wBAAC,WAA0B;AACvD,SAAO,0BAA0B,QAAQ,UAAU,GAAG;AACxD,GAF8B;;;ACH9B,SAAS,eAAe;;;ACAjB,IAAM,cAAc,wBAAC,QAAe;AACzC,MAAI,IAAI,SAAS,mBAAmB;AAClC,YAAQ,KAAK,CAAC;AAAA,EAChB,OAAO;AACL,UAAM;AAAA,EACR;AACF,GAN2B;;;ADQpB,IAAM,aAAa,8BACxB,UACA,gBAC6B;AAC7B,QAAM,UAA0B;AAAA,IAC9B,SAAS;AAAA,IACT,GAAI,eAAe,CAAC;AAAA,EACtB;AACA,SAAO,MAAM,QAAQ;AAAA,IACnB,SAAS;AAAA,IACT,SAAS,QAAQ;AAAA,EACnB,CAAC,EAAE,MAAM,WAAW;AACtB,GAZ0B;;;AER1B,SAAS,aAAa;AAgBf,IAAM,WAAW,8BACtB,UACA,gBAC4B;AAC5B,QAAM,UAAwB;AAAA,IAC5B,UAAU;AAAA,IACV,GAAI,eAAe,CAAC;AAAA,EACtB;AACA,SAAO,MAAM,MAAM;AAAA,IACjB,SAAS;AAAA,IACT,UAAU,QAAQ;AAAA,IAClB,SAAS,QAAQ;AAAA,EACnB,CAAC,EAAE,MAAM,WAAW;AACtB,GAbwB;AAejB,IAAM,gBAAgB,8BAC3B,UACA,gBAC8B;AAC9B,QAAM,UAA6B;AAAA,IACjC,UAAU;AAAA,IACV,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,GAAI,eAAe,CAAC;AAAA,EACtB;AACA,QAAM,OACJ,MAAM,MAAM;AAAA,IACV,SAAS;AAAA,IACT,UAAU,QAAQ;AAAA,IAClB,SAAS,QAAQ;AAAA,EACnB,CAAC,EAAE,MAAM,WAAW,GACpB,MAAM,QAAQ,KAAK;AACrB,SAAO,QAAQ,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,MAAM,IAAI;AACxD,GAlB6B;;;AC/B7B,SAAS,cAAc;;;ACAvB,SAAS,UAAU,cAAc;AAqC1B,IAAM,YAAY,8BACvB,UACA,SACA,gBACuB;AACvB,QAAM,UAA4B;AAAA,IAChC,MAAM;AAAA,IACN,GAAI,eAAe,CAAC;AAAA,EACtB;AACA,SAAO,MAAM,OAAO;AAAA,IAClB,SAAS;AAAA,IACT;AAAA,IACA,MAAM,QAAQ;AAAA,IACd,SAAS,QAAQ;AAAA,EACnB,CAAC,EAAE,MAAM,WAAW;AACtB,GAfyB;;;AC9BzB,IAAM,gBAAgB,wBAAC,WAAkB;AACvC,SAAO,cAAc,QAAQ,OAAO;AACtC,GAFsB;AAIf,IAAM,4BAA4B,wBAAC,WAAkB;AAC1D,SAAO;AAAA,IAAc,cAAc,MAAM;AAAA,IAAG,MAC1C,cAAc,SAAS,wBAAwB,EAAE,UAAU,KAAK,CAAC;AAAA,EACnE;AACF,GAJyC;;;ACXzC,SAAS,cAAc;;;ACAvB,SAAS,WAAW;AACpB,SAAqC,aAAa;AAClD,YAAYC,cAAa;AASlB,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YACY,QACA,OAAiB,CAAC,GAC5B;AAFU;AACA;AAAA,EACT;AAAA,EAfL,OAW4B;AAAA;AAAA;AAAA,EAM1B,MAAa,IACX,MACA,UAAU,OACVC,OAAsB,aAAI,GAC1BC,MACA,WACA,aACwB;AACxB,UAAM,UAAwB;AAAA,MAC5B,KAAAD;AAAA,MACA,OAAO,UAAU,SAAS;AAAA,MAC1B,OAAO;AAAA,MACP,KAAK,EAAE,GAAW,cAAK,GAAGC,KAAI;AAAA,IAChC;AACA,WAAO,IAAI,QAAuB,CAAC,SAAS,WAAW;AACrD,YAAM,QAAsB;AAAA,QAC1B,GAAG,KAAK,MAAM,IAAI,CAAC,GAAG,KAAK,MAAM,GAAG,IAAI,EAAE,KAAK,GAAG,CAAC;AAAA,QACnD;AAAA,MACF;AAEA,YAAM,MAAgB,CAAC;AACvB,YAAM,QAAQ;AAAA,QACZ;AAAA,QACA,WAAW,aAAa,CAAC,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE,QAAQ,WAAW,EAAE,CAAC;AAAA,MACnF;AACA,YAAM,QAAQ;AAAA,QACZ;AAAA,QACA,WAAW,aAAa,CAAC,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE,QAAQ,WAAW,EAAE,CAAC;AAAA,MACnF;AAEA,YAAM,GAAG,SAAS,CAAC,SAAS;AAC1B,YAAI,SAAS,GAAG;AACd,kBAAQ,WAAW,IAAI,SAAS,IAAI,KAAK,IAAI,IAAI,IAAI;AAAA,QACvD,OAAO;AACL,cAAI,YAAa,aAAY;AAC7B,kBAAQ;AAAA,YACN,IAAI,SAAS,uBAAuB,CAAC,KAAK,QAAQ,GAAG,KAAK,MAAM,GAAG,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC;AAAA,UACrF;AACA,cAAI,IAAI,QAAQ;AACd,oBAAQ,MAAM;AACd,oBAAQ,MAAM,IAAI,KAAK,IAAI,CAAC;AAC5B,oBAAQ,MAAM;AAAA,UAChB;AACA,iBAAO;AAAA,QACT;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEO,eAAe,MAAwB;AAC5C,UAAM,cAAwB,CAAC,GAAG,KAAK,MAAM,GAAG,IAAI;AACpD,WAAO,GAAG,KAAK,MAAM,IAAI,YAAY,KAAK,GAAG,CAAC;AAAA,EAChD;AACF;;;ACpEO,IAAM,YAAN,cAAwB,eAAe;AAAA,EAF9C,OAE8C;AAAA;AAAA;AAAA,EAC5C,cAAc;AACZ,UAAM,KAAK;AAAA,EACb;AACF;;;ACNA,SAAS,YAAY;AAEd,IAAM,SAAS,wBAAC,cAAsB;AAC3C,SAAO,UAAU,WAAW,GAAG,IAAI,YAAY,KAAK,QAAQ,IAAI,GAAG,SAAS;AAC9E,GAFsB;AAIf,IAAM,gBAAgB,wBAAC,MAAc,aAAa,UAAU;AACjE,QAAM,OAAO,YAAY,QAAQ,IAAI,EAAE,QAAQ,cAAc,EAAE;AAC/D,MAAI,WAAY,QAAO,KAAK,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG;AAC5D,SAAO;AACT,GAJ6B;;;ACFtB,IAAM,kBAAN,MAAM,yBAAwB,eAAe;AAAA,EAJpD,OAIoD;AAAA;AAAA;AAAA,EAClD,OAAc,iBAAiB;AAC7B,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,OAAc,8BAAsC;AAClD,QAAI;AACF,aAAO,cAAc,kDAAkD;AAAA,IACzE,SAAS,GAAG;AACV,cAAQ,MAAM,CAAC;AACf,YAAM,IAAI,MAAM,8CAA8C;AAAA,IAChE;AAAA,EACF;AAAA,EAEA,cAAc;AACZ,UAAM,QAAQ,CAAC,IAAI,iBAAgB,4BAA4B,CAAC,GAAG,CAAC;AAAA,EACtE;AACF;;;AJfO,IAAM,gBAAN,MAAoB;AAAA,EAN3B,OAM2B;AAAA;AAAA;AAAA,EACzB,OAAc,OAAO,QAAgB;AACnC,YAAQ,QAAQ;AAAA,MACd;AACE,eAAO,IAAI,UAAU;AAAA,MACvB;AACE,eAAO,IAAI,gBAAgB;AAAA,MAE7B;AACE,gBAAQ,KAAK,oCAAoC,MAAM,EAAE;AACzD,cAAM,MAAM,uBAAuB,MAAM,EAAE;AAAA,IAC/C;AAAA,EACF;AACF;;;AKnBA,SAAS,MAAM,SAAAC,QAAO,OAAAC,MAAK,UAAAC,eAAc;AACzC,OAAO,SAAkB;AASzB,IAAM,UAAU,wBAAC,YACf,IAAI;AAAA,EACF,MAAM;AACR,CAAC,GAHa;AAKhB,IAAM,eAAe,wBAAC,YAAiB,MAAM,QAAQ,KAAK,GAArC;AAEd,IAAe,yBAAf,MAAsC;AAAA,EAC3C,YAAsB,QAAwB;AAAxB;AAAA,EAAyB;AAAA,EAlBjD,OAiB6C;AAAA;AAAA;AAAA,EAG3C,MAAa,QAAQ,WAAmB;AACtC,UAAM,UAAU,QAAQ,SAAS,wCAAwC;AACzE,YAAQ,MAAM;AACd,QAAI;AACF,YAAM,cAAc,CAAC,KAAK,IAAI,SAAS,KAAK,IAAI,UAAU;AAC1D,YAAM,UAAU;AAChB,YAAM,KAAK,OAAO;AAAA,QAAI;AAAA,QAAa;AAAA,QAAS,OAAO,SAAS;AAAA,QAAG;AAAA,QAAW;AAAA,QAAW,MACnF,QAAQ,KAAK;AAAA,MACf;AACA,cAAQ,QAAQ;AAChB,WAAK,oBAAoB;AAAA,IAC3B,QAAQ;AACN,YAAM,cAAc,CAAC,KAAK,IAAI,OAAO;AACrC,YAAM,eAAe,KAAK,OAAO,eAAe,WAAW;AAC3D,WAAK,oBAAoB,YAAY;AAAA,IACvC;AAAA,EACF;AAAA,EAEO,UAA2B;AAChC,UAAM,mBAAmB,CAAC,WAAW;AACrC,UAAM,UAAU;AAChB,WAAO,KAAK,OAAO,IAAI,kBAAkB,OAAO;AAAA,EAClD;AAAA,EAEO,cAAc,WAAmB,cAA0C;AAChF,UAAM,UAAU,CAAC,KAAK,IAAI,KAAK,KAAK,IAAI,QAAQ;AAChD,WAAO,KAAK,IAAI,SAAS,WAAW,YAAY;AAAA,EAClD;AAAA,EAEO,eAAe,WAAmB,cAA0C;AACjF,UAAM,UAAU,CAAC,KAAK,IAAI,KAAK,KAAK,IAAI,WAAW;AACnD,WAAO,KAAK,IAAI,SAAS,WAAW,YAAY;AAAA,EAClD;AAAA,EAEA,MAAM,MACJ,MACA,WACA,OACA,QACA,OACkB;AAClB,QAAI,CAAC,KAAK,IAAI,MAAO,OAAM,IAAI,MAAM,mBAAmB,KAAK,IAAI,4BAA4B;AAE7F,UAAM,UAAU,QAAQ,SAAS,uBAAuB,IAAI,CAAC;AAC7D,YAAQ,MAAM;AACd,QAAI;AACF,YAAM,cAAc;AAAA,QAClB,KAAK,IAAI;AAAA,QACT,KAAK,IAAI;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAI,SAAS,CAAC;AAAA,MAChB;AACA,YAAM,UAAU;AAChB,YAAM,KAAK,OAAO;AAAA,QAChB;AAAA,QACA;AAAA,QACA,OAAO,SAAS;AAAA,QAChB;AAAA,QACA;AAAA,QACA,aAAa,OAAO;AAAA,MACtB;AACA,cAAQ,QAAQ;AAChB,aAAO;AAAA,IACT,QAAQ;AACN,YAAM,cAAc,CAAC,KAAK,IAAI,OAAO;AACrC,YAAM,eAAe,KAAK,OAAO,eAAe,WAAW;AAC3D,cAAQ,MAAMC,KAAI,SAAS,kBAAkB,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC;AACvE,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,IACJ,MACA,WACA,MACAC,OAA8B,CAAC,GAC/B,QAAkB,CAAC,GACnB,SAAS,OACS;AAClB,QAAI,CAAC,KAAK,IAAI,IAAK,OAAM,IAAI,MAAM,mBAAmB,KAAK,IAAI,2BAA2B;AAE1F,QAAI;AACF,cAAQ,KAAK,SAAS,qBAAqB,IAAI,CAAC;AAChD,YAAM,cAAc,CAAC,GAAG,OAAO,KAAK,IAAI,GAAG;AAC3C,UAAI,OAAQ,aAAY,KAAK,KAAK,IAAI,UAAU;AAChD,kBAAY,KAAK,IAAI;AACrB,YAAM,KAAK,OAAO,IAAI,aAAa,MAAM,OAAO,SAAS,GAAGA,MAAK;AAAA,QAC/D,UAAU,KAAK,YAAY,IAAI;AAAA,QAC/B,UAAU,KAAK,YAAY,IAAI;AAAA,MACjC,CAAC;AACD,cAAQ,KAAK,SAAS,iBAAiB,IAAI,CAAC;AAC5C,aAAO;AAAA,IACT,QAAQ;AACN,cAAQ,MAAMD,KAAI,SAAS,gBAAgB,IAAI,CAAC,CAAC;AACjD,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAc,IAAI,MAAgB,WAAmB,cAAwB;AAC3E,QAAI,CAAC,aAAa,QAAQ;AACxB,cAAQ,KAAK;AACb,cAAQ,KAAK,SAAS,oCAAoC;AAC1D,cAAQ,KAAK;AACb,aAAO;AAAA,IACT;AAEA,UAAM,mBAAmB,CAAC,GAAG,MAAM,GAAG,YAAY;AAElD,UAAM,UAAU,QAAQ,SAAS,wCAAwC;AACzE,YAAQ,MAAM;AAEd,QAAI;AACF,YAAM,UAAU;AAChB,YAAM,KAAK,OAAO;AAAA,QAChB;AAAA,QACA;AAAA,QACA,OAAO,SAAS;AAAA,QAChB;AAAA,QACA;AAAA,QACA,aAAa,OAAO;AAAA,MACtB;AAEA,cAAQ,QAAQ;AAChB,WAAK,oBAAoB,YAAY;AACrC,aAAO;AAAA,IACT,QAAQ;AACN,cAAQ,KAAK;AACb,YAAM,eAAe,KAAK,OAAO,eAAe,gBAAgB;AAChE,WAAK,oBAAoB,YAAY;AACrC,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,oBAAoB,cAAyB;AACnD,YAAQ,KAAK;AACb,YAAQ,KAAK,SAAS,qCAAqC,YAAY,CAAC;AACxE,YAAQ,KAAK;AAAA,EACf;AAAA,EAEQ,oBAAoB,SAAiB;AAC3C,YAAQ,MAAMA,KAAI,SAAS,oCAAoC,KAAK,OAAO,CAAC,CAAC,CAAC;AAAA,EAChF;AAAA,EAEQ,cAAc,wBAAC,SAAiB,CAAC,UAAkB;AACzD,UACG,SAAS,EACT,QAAQ,YAAY,IAAI,EACxB,QAAQ,cAAc,EAAE,EACxB,MAAM,IAAI,EACV,QAAQ,CAAC,SAAS;AACjB,YAAM,OAAOE,QAAO,KAAI,oBAAI,KAAK,GAAE,YAAY,CAAC,GAAG;AACnD,YAAM,SAASC,OAAM,IAAI,IAAI,UAAU;AACvC,cAAQ,KAAK,GAAG,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE;AAAA,IAC1C,CAAC;AAAA,EACL,GAXsB;AAAA,EAad,cAAc,wBAAC,SAAiB,CAAC,UAAuB;AAC9D,UACG,SAAS,EACT,QAAQ,YAAY,IAAI,EACxB,QAAQ,cAAc,EAAE,EACxB,MAAM,IAAI,EACV,QAAQ,CAAC,SAAS;AACjB,YAAM,OAAOD,QAAO,KAAI,oBAAI,KAAK,GAAE,YAAY,CAAC,GAAG;AACnD,YAAM,SAASF,KAAI,IAAI,IAAI,WAAW;AACtC,cAAQ,MAAM,GAAG,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE;AAAA,IAC3C,CAAC;AAAA,EACL,GAXsB;AAgBxB;;;AC5LO,IAAM,oBAAN,cAAgC,uBAAuB;AAAA,EAN9D,OAM8D;AAAA;AAAA;AAAA,EAC5D,cAAc;AACZ,UAAM,cAAc,kBAAiB,CAAc;AAAA,EACrD;AAAA,EAEA,IAAW,OAAO;AAChB,2BAA0B,YAAY;AAAA,EACxC;AAAA,EAEA,IAAI,MAA8B;AAChC,WAAO;AAAA,MACL,SAAS;AAAA,MACT,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,KAAK;AAAA,MACL,UAAU;AAAA,MACV,aAAa;AAAA,MACb,YAAY;AAAA,IACd;AAAA,EACF;AACF;;;ACxBO,IAAM,wBAAN,MAA4B;AAAA,EAJnC,OAImC;AAAA;AAAA;AAAA,EACjC,OAAc,OAAO,MAAuD;AAC1E,YAAQ,MAAM;AAAA,MACZ;AACE,eAAO,IAAI,kBAAkB;AAAA,MAC/B;AACE,cAAM,IAAI,MAAM,mBAAmB,IAAI,kBAAkB;AAAA,IAC7D;AAAA,EACF;AACF;;;ACbA,SAAS,QAAQ,YAAY;AAC7B,SAAS,WAAW,QAAQ,YAAY,QAAQ,UAAU,sBAAsB;AAEzE,IAAM,cAAN,MAAkB;AAAA,EAHzB,OAGyB;AAAA;AAAA;AAAA,EAIvB;AAAA,EAKA;AACF;AANE;AAAA,EAHC,OAAO;AAAA,EACP,SAAS;AAAA,EACT,WAAW;AAAA,GAHD,YAIX;AAKA;AAAA,EAHC,OAAO;AAAA,EACP,SAAS;AAAA,EACT,WAAW;AAAA,GARD,YASX;AAGK,IAAM,YAAN,MAAgB;AAAA,EAfvB,OAeuB;AAAA;AAAA;AAAA,EAIrB;AACF;AADE;AAAA,EAHC,OAAO;AAAA,EACP,SAAS;AAAA,EACT,WAAW;AAAA,GAHD,UAIX;AAGK,IAAM,eAAN,MAAmB;AAAA,EAtB1B,OAsB0B;AAAA;AAAA;AAAA,EAGxB;AAAA,EAIA;AAAA,EAKA;AAAA,EAKA;AACF;AAfE;AAAA,EAFC,OAAO;AAAA,EACP,OAAO;AAAA,GAFG,aAGX;AAIA;AAAA,EAFC,OAAO;AAAA,EACP,OAAO;AAAA,GANG,aAOX;AAKA;AAAA,EAHC,OAAO;AAAA,EACP,KAAK,MAAM,WAAW;AAAA,EACtB,eAAe;AAAA,GAXL,aAYX;AAKA;AAAA,EAHC,OAAO;AAAA,EACP,KAAK,MAAM,SAAS;AAAA,EACpB,eAAe;AAAA,GAhBL,aAiBX;AAGK,IAAM,eAAN,MAAmB;AAAA,EA1C1B,OA0C0B;AAAA;AAAA;AAAA,EAGxB;AAAA,EAIA;AAAA,EAKA;AAAA,EAKA;AACF;AAfE;AAAA,EAFC,OAAO;AAAA,EACP,UAAU;AAAA,GAFA,aAGX;AAIA;AAAA,EAFC,OAAO;AAAA,EACP,OAAO;AAAA,GANG,aAOX;AAKA;AAAA,EAHC,OAAO;AAAA,EACP,KAAK,MAAM,WAAW;AAAA,EACtB,eAAe;AAAA,GAXL,aAYX;AAKA;AAAA,EAHC,OAAO;AAAA,EACP,KAAK,MAAM,SAAS;AAAA,EACpB,eAAe;AAAA,GAhBL,aAiBX;AAGK,IAAM,SAAN,MAAa;AAAA,EA9DpB,OA8DoB;AAAA;AAAA;AAAA,EAIlB;AAAA,EAIA;AAAA,EAIA;AAAA,EAKA;AAAA,EAKA;AACF;AAnBE;AAAA,EAHC,OAAO;AAAA,EACP,SAAS;AAAA,EACT,WAAW;AAAA,GAHD,OAIX;AAIA;AAAA,EAFC,OAAO;AAAA,EACP,OAAO,CAAC,MAAM,IAAI,CAAC;AAAA,GAPT,OAQX;AAIA;AAAA,EAFC,OAAO;AAAA,EACP,UAAU;AAAA,GAXA,OAYX;AAKA;AAAA,EAHC,OAAO;AAAA,EACP,KAAK,MAAM,YAAY;AAAA,EACvB,eAAe;AAAA,GAhBL,OAiBX;AAKA;AAAA,EAHC,OAAO;AAAA,EACP,KAAK,MAAM,YAAY;AAAA,EACvB,eAAe;AAAA,GArBL,OAsBX;;;ACpFF,SAAS,uBAAuB;AAChC,SAAS,gBAAgB;AACzB,SAAS,YAAY,oBAAoB;AACzC,SAAS,QAAAI,aAAY;;;ACHd,IAAM,WAAW,wBAAC,SAAc;AACrC,SAAO,QAAQ,OAAO,SAAS,YAAY,CAAC,MAAM,QAAQ,IAAI;AAChE,GAFwB;AAIjB,IAAM,YAAY,wBAAC,WAAgB,YAAkC;AAC1E,MAAI,CAAC,QAAQ,OAAQ,QAAO;AAC5B,QAAM,SAAS,QAAQ,MAAM;AAE7B,MAAI,SAAS,MAAM,KAAK,SAAS,MAAM,GAAG;AACxC,eAAW,OAAO,QAAQ;AACxB,UAAI,SAAS,OAAO,GAAG,CAAC,GAAG;AACzB,YAAI,CAAC,OAAO,GAAG,EAAG,QAAO,OAAO,QAAQ,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;AACrD,kBAAU,OAAO,GAAG,GAAG,OAAO,GAAG,CAAC;AAAA,MACpC,OAAO;AACL,eAAO,OAAO,QAAQ,EAAE,CAAC,GAAG,GAAG,OAAO,GAAG,EAAE,CAAC;AAAA,MAC9C;AAAA,IACF;AAAA,EACF;AAEA,SAAO,UAAU,QAAQ,GAAG,OAAO;AACrC,GAhByB;;;ACFlB,IAAM,kBAA0B;AAAA,EACrC,MAAM;AAAA,EACN,UAAU;AAAA,EACV,eAAe;AAAA,EACf,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,kBAAkB;AAAA,IAClB,OAAO;AAAA,MACL,WAAW;AAAA,MACX,QAAQ;AAAA,IACV;AAAA,IACA,SAAS;AAAA,MACP,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,MACL,WAAW;AAAA,MACX,QAAQ;AAAA,IACV;AAAA,IACA,SAAS;AAAA,MACP,KAAK;AAAA,IACP;AAAA,EACF;AACF;;;AFlBA,IAAI;AAEJ,IAAM,gBAAgB,wBAAC,WAAmB,SAAkB;AAC1D,MAAI,MAAM;AACR,WAAOC,MAAK,WAAW,IAAI;AAAA,EAC7B,OAAO;AACL,eAAW,KAAK,CAAC,uBAAuB,GAAG;AACzC,YAAM,OAAOA,MAAK,WAAW,CAAC;AAC9B,UAAI,WAAW,IAAI,EAAG,QAAO;AAAA,IAC/B;AACA,UAAM,IAAI,MAAM,uBAAuB,IAAI,EAAE;AAAA,EAC/C;AACF,GAVsB;AAYf,IAAM,aAAa,8BAAO,WAAmB,SAAmC;AACrF,MAAI,OAAQ,QAAO;AAEnB,MAAI;AAEJ,QAAM,OAAO,cAAc,WAAW,IAAI;AAC1C,MAAI,CAAC,KAAM,OAAM,IAAI,MAAM,sBAAsB;AACjD,MAAI;AACF,cAAU,UAAU,iBAAiB,KAAK,MAAM,aAAa,MAAM,OAAO,CAAC,CAAC;AAAA,EAC9E,QAAQ;AACN,cAAU;AAAA,EACZ;AACA,MAAI,CAAC,QAAS,OAAM,IAAI,MAAM,kCAAkC,IAAI,EAAE;AAEtE,QAAM,OAAO,gBAAgB,QAAQ,SAAS;AAAA,IAC5C,yBAAyB;AAAA,EAC3B,CAAC;AACD,QAAM,SAAS,MAAM,SAAS,IAAI;AAClC,MAAI,OAAO,SAAS;AAClB,UAAM,IAAI,MAAM;AAAA,EAAqB,OAAO,SAAS,EAAE,QAAQ,MAAM,IAAI,CAAC,EAAE;AAE9E,WAAS;AACT,SAAO;AACT,GAvB0B;;;AGrBnB,IAAM,YAAY,wBAAC,QAAe,QAAiC;AACxE,SAAO,WAAW,KAAK,eAAe,MAAM,CAAC;AAC/C,GAFyB;;;ACDlB,IAAe,iBAAf,MAA8B;AAAA,EAFrC,OAEqC;AAAA;AAAA;AAErC;;;AxBcO,IAAM,cAAN,cAA0B,eAAe;AAAA,EAlBhD,OAkBgD;AAAA;AAAA;AAAA,EAC9C,MAAa,OAAO,OAAc,SAAgB;AAChD,YAAQ,KAAK,SAAS,WAAW;AACjC,YAAQ,KAAK;AAEb,QAAI;AACF,YAAM,YAAY,kBAAkB,OAAO;AAC3C,YAAMC,UAAS,MAAM,UAAU,SAAS,SAAS;AAEjD,YAAM,SAAS;AAAA,QACbA,QAAO,OAAO;AAAA,QACd,QAAQ,IAAI,iBAAiB,GAAG;AAAA,QAChC;AAAA,MACF;AACA,UAAI,MAAM,MAAM,UAAU,UAAU,QAAQ,SAAS;AAErD,UAAIA,QAAO,OAAO,QAAQ;AACxB,cAAM,SAAS;AAAA,UACbA,QAAO,OAAO;AAAA,UACd,QAAQ,IAAI,iBAAiB,GAAG;AAAA,UAChC;AAAA,QACF;AACA,cAAO,MAAM,UAAU,UAAU,QAAQ,SAAS,IAAK,MAAM;AAAA,MAC/D;AAEA,cAAQ,KAAK;AACb,UAAI,CAAC,IAAK,SAAQ,KAAK,SAAS,YAAY;AAAA,UACvC,SAAQ,KAAK,SAAS,aAAa;AAExC,MAAQ,cAAK,CAAC;AAAA,IAChB,SAAS,GAAG;AACV,cAAQ,MAAM,CAAC;AACf,MAAQ,cAAK,CAAC;AAAA,IAChB;AAAA,EACF;AACF;AAEA,IAAM,UAAU,wBACdA,SACA,iBACA,WACc;AACd,SAAO;AAAA,IACL,OAAOA,QAAO;AAAA,IACd,QAAQ,mBAAmBA,QAAO;AAAA,IAClC;AAAA,EACF;AACF,GAVgB;AAYhB,IAAM,YAAY,8BAAO,MAAc,MAAiB,cAAsB;AAC5E,QAAM;AAEN,MAAI;AACF,UAAM,iBAAiB,sBAAsB,OAAO,kBAAkB;AACtE,WAAO,MAAM,eAAe,MAAM,MAAM,WAAW,KAAK,OAAO,KAAK,QAAQ;AAAA,MAC1E;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAK,WAAW,WAAW,YAAY;AAAA,IACzC,CAAC;AAAA,EACH,SAASC,QAAY;AACnB,QAAIA,UAASA,OAAM,SAAS;AAC1B,cAAQ,MAAY,UAAIA,OAAM,OAAO,CAAC;AAAA,IACxC;AACA,WAAO;AAAA,EACT;AACF,GAjBkB;;;AyBnElB,YAAYC,cAAa;;;ACMlB,IAAe,qBAAf,MAAkC;AAAA,EAC7B,YACE,YACA,QACAC,MACV;AAHU;AACA;AACA,eAAAA;AAAA,EACT;AAAA,EAXL,OAMyC;AAAA;AAAA;AAAA,EAOvC,MAAa,QACX,MACA,SACA,OACA,aACA;AACA,UAAM,UAAU,KAAK,iBAAiB,MAAM,SAAS,KAAK;AAC1D,UAAM,KAAK,OAAO;AAAA,MAChB;AAAA,MACA;AAAA,MACA,KAAK,MAAM,OAAO,KAAK,GAAG,IAAI;AAAA,MAC9B;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAIQ,iBACN,MACA,SACA,QAAkB,CAAC,GACT;AACV,WAAO,CAAC,GAAG,KAAK,UAAU,IAAI,IAAI,IAAI,GAAG,OAAO,GAAG,KAAK,aAAa,OAAO,CAAC;AAAA,EAC/E;AAAA,EAEQ,aAAa,SAAsC;AACzD,WAAO,QAAQ;AAAA,MACb,CAAC,KAAe,WAA4B,CAAC,GAAG,KAAK,GAAG,OAAO,gBAAgB,CAAC;AAAA,MAChF,CAAC;AAAA,IACH;AAAA,EACF;AACF;;;ACpCO,IAAM,sBAAN,MAAM,6BAA4B,mBAAmB;AAAA,EAV5D,OAU4D;AAAA;AAAA;AAAA,EAC1D,OAAe,aAA0B;AAAA,IACvC;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EAEA,YAAY,QAAwBC,MAAc;AAChD,UAAM,6BAA6B,QAAQA,IAAG;AAAA,EAChD;AAAA,EAEA,MAAsB,QACpB,MACA,SACA,OACA,aACA;AACA,UAAM,YAAoB,KAAK,SAAS,IAAI;AAC5C,UAAM,MAAM,QAAQ,WAAW,SAAS,OAAO,WAAW;AAAA,EAC5D;AAAA,EAEO,gBAA6B;AAClC,WAAO,qBAAoB;AAAA,EAC7B;AAAA,EAEQ,SAAS,MAAc;AAC7B,UAAM,YAAY,qBAAoB,WAAW;AAAA,MAC/C,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,UAAU;AAAA,IACxC;AAEA,QAAI,cAAc,UAAa,cAAc,MAAM;AACjD,YAAM,IAAI;AAAA,QACR,sBAAsB,IAAI,2BAA2B,IAAI;AAAA,MAC3D;AAAA,IACF;AACA,WAAO,UAAU;AAAA,EACnB;AACF;;;AC1DO,IAAM,oBAAN,MAAwB;AAAA,EAN/B,OAM+B;AAAA;AAAA;AAAA,EAC7B,OAAc,OAAO,YAAiC,WAAuC;AAC3F,UAAM,kBAAkB,cAAc,wBAAuB;AAE7D,QAAI,4DAAqC;AACvC,aAAO,IAAI,oBAAoB,iBAAiB,SAAS;AAAA,IAC3D,OAAO;AACL,aAAO,IAAI,oBAAoB,iBAAiB,SAAS;AAAA,IAC3D;AAAA,EACF;AACF;;;AChBO,IAAM,cAAc,wBAAC,QAAwB;AAClD,SAAO,IACJ,QAAQ,gCAAgC,OAAO,EAC/C,QAAQ,WAAW,GAAG,EACtB,YAAY;AACjB,GAL2B;;;ACEpB,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YACU,MACA,OACR;AAFQ;AACA;AAAA,EACP;AAAA,EANL,OAE6B;AAAA;AAAA;AAAA,EAM3B,IAAI,iBAAiB;AACnB,WAAO,YAAY,KAAK,IAAI;AAAA,EAC9B;AAAA,EAEO,gBAAgB,QAA2B;AAChD,UAAM,iBAAiB,GAAG,SAAS,GAAG,MAAM,MAAM,EAAE,GAAG,KAAK,cAAc;AAC1E,QAAI,OAAO,KAAK,UAAU,UAAU;AAClC,UAAI,KAAK,SAAS,QAAQ;AACxB,eAAO,CAAC,KAAK,cAAc,IAAI,KAAK,OAAO,CAAC,EAAE;AAAA,MAChD,WAAW,KAAK,SAAS,aAAa,KAAK,SAAS,QAAQ;AAC1D,eAAO,CAAC,KAAK,cAAc,IAAI,KAAK,KAAK,EAAE;AAAA,MAC7C,OAAO;AACL,eAAO,CAAC,KAAK,cAAc,KAAK,KAAK,KAAK,GAAG;AAAA,MAC/C;AAAA,IACF,WAAW,OAAO,KAAK,UAAU,WAAW;AAC1C,YAAM,MAAM;AACZ,aAAO,KAAK,QAAQ,CAAC,KAAK,GAAG,EAAE,IAAI,CAAC,QAAQ,GAAG,EAAE;AAAA,IACnD,WAAW,MAAM,QAAQ,KAAK,KAAK,GAAG;AACpC,aAAO,KAAK,MAAM;AAAA,QAChB,CAAC,KAAe,WAA4B;AAAA,UAC1C,GAAG;AAAA,UACH,GAAG,OAAO,gBAAgB,cAAc;AAAA,QAC1C;AAAA,QACA,CAAC;AAAA,MACH;AAAA,IACF,OAAO;AACL,aAAO,CAAC,KAAK,cAAc,IAAI,KAAK,KAAK,EAAE;AAAA,IAC7C;AAAA,EACF;AAAA,EAEQ,SAAS;AACf,WAAO,YAAY,KAAK,KAAe,EACpC,MAAM,EAAE,EACR,OAAO,CAAC,SAAS,SAAS;AACzB,UAAI,SAAS,OAAO,SAAS,OAAO,SAAS,OAAO,SAAS,KAAK;AAChE,eAAO,GAAG,OAAO,KAAK,IAAI;AAAA,MAC5B;AACA,aAAO,GAAG,OAAO,GAAG,IAAI;AAAA,IAC1B,GAAG,EAAE;AAAA,EACT;AACF;;;AChDA,OAAOC,UAAS;AAET,IAAM,aAAa,wBAAC,YACzBC,KAAI;AAAA,EACF,MAAM;AACR,CAAC,GAHuB;;;ACGnB,IAAM,mBAAmB,8BAC9B,MACA,YACA,eACA,YACG;AACH,QAAM,UAAU,WAAW,SAAS,sBAAsB,IAAI,CAAC;AAC/D,UAAQ,MAAM;AACd,QAAM,WAAW;AAAA,IAAQ;AAAA,IAAe,oBAAoB,OAAO;AAAA,IAAG;AAAA,IAAW,MAC/E,QAAQ,KAAK,SAAS,iBAAiB,IAAI,CAAC;AAAA,EAC9C;AACA,UAAQ,QAAQ,SAAS,kBAAkB,IAAI,CAAC;AAClD,GAZgC;AAczB,IAAM,sBAAsB,wBAAC,WAAsC;AACxE,SAAO,OAAO,QAAQ,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM;AAC1D,QAAI,UAAU,OAAW,QAAO;AAChC,WAAO;AAAA,MACL,GAAG;AAAA,MACH,IAAI,gBAAgB,KAAK,OAAO,UAAU,WAAW,oBAAoB,KAAK,IAAI,KAAK;AAAA,IACzF;AAAA,EACF,GAAG,CAAC,CAAsB;AAC5B,GARmC;;;APC5B,IAAM,iBAAN,cAA6B,eAAe;AAAA,EApBnD,OAoBmD;AAAA;AAAA;AAAA,EACjD,MAAa,OAAO,OAAc,SAAgB;AAChD,IAAQ,cAAK,SAAS,SAAS;AAE/B,QAAI;AACF,YAAM,YAAY,kBAAkB,OAAO;AAE3C,YAAMC,UAAS,MAAM,UAAU,SAAS,SAAS;AAEjD,YAAM,SAAS,MAAM,gBAAgBA,OAAM;AAE3C,YAAM,cAAc,QAAQ,SAAS;AAErC,MAAQ,cAAK;AACb,MAAQ,cAAK,SAAS,WAAW;AACjC,cAAQ,KAAK,CAAC;AAAA,IAChB,SAAS,GAAG;AACV,MAAQ,eAAM,SAAS,UAAU;AACjC,MAAQ,eAAM,CAAC;AACf,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AACF;AAEA,IAAM,kBAAkB,8BAAOA,YAA6C;AAC1E,SAAO;AAAA,IACL,MAAMA,QAAO;AAAA,IACb,WAAW;AAAA,IACX,UAAUA,QAAO;AAAA,IACjB,QAAQA,QAAO,OAAO;AAAA,IACtB,eAAeA,QAAO;AAAA,EACxB;AACF,GARwB;AAUxB,IAAM,gBAAgB,8BAAO,QAAyB,cAAsB;AAC1E,EAAQ,cAAK;AACb,QAAM,aAAiC,kBAAkB,oDAA6B,SAAS;AAE/F,EAAQ,cAAK;AACb,EAAQ,cAAK,SAAS,gBAAgB;AACtC,EAAQ,cAAK;AAEb,QAAM,iBAAiB,oBAAoB,YAAY,aAAa;AAAA,IAClE,MAAM,OAAO;AAAA,IACb,MAAM;AAAA,IACN,WAAW,OAAO;AAAA,IAClB,UAAU,OAAO;AAAA,IACjB,eAAe,OAAO;AAAA,EACxB,CAAC;AAED,MAAI,OAAO,QAAQ;AACjB,UAAM,iBAAiB,oBAAoB,YAAY,aAAa;AAAA,MAClE,MAAM,OAAO;AAAA,MACb,MAAM;AAAA,MACN,WAAW,OAAO;AAAA,MAClB,UAAU,OAAO;AAAA,MACjB,eAAe,OAAO;AAAA,IACxB,CAAC;AAAA,EACH;AACF,GAzBsB;;;AQtDtB,YAAYC,YAAW;AACvB,YAAYC,cAAa;AAQlB,IAAM,gBAAN,cAA4B,eAAe;AAAA,EATlD,OASkD;AAAA;AAAA;AAAA,EAChD,MAAa,OAAO,MAAa,SAAgB;AAC/C,YAAQ,KAAK,SAAS,aAAa;AACnC,YAAQ,KAAK;AAEb,QAAI;AACF,YAAM,QAAQ,MAAM,0BAA0B,IAAI;AAClD,YAAM,YAAY,kBAAkB,OAAO;AAE3C,YAAM,gBAAgB,OAAO,SAAS;AAEtC,MAAQ,cAAK,CAAC;AAAA,IAChB,SAAS,GAAG;AACV,cAAQ,MAAM,CAAC;AACf,MAAQ,cAAK,CAAC;AAAA,IAChB;AAAA,EACF;AACF;AAEA,IAAM,kBAAkB,8BAAO,OAAiB,cAAsB;AACpE,QAAM;AAEN,MAAI;AACF,UAAM,iBAAiB,sBAAsB,OAAO,kBAAkB;AACtE,UAAM,eAAe,cAAc,WAAW,KAAK;AAAA,EACrD,SAASC,QAAY;AACnB,QAAIA,UAASA,OAAM,SAAS;AAC1B,cAAQ,MAAY,WAAIA,OAAM,OAAO,CAAC;AAAA,IACxC;AAAA,EACF;AACF,GAXwB;;;ACzBjB,IAAM,iCAAiC,wBAAC,WAAkB;AAC/D,SAAO,2BAA2B,QAAQ,iBAAiB,KAAK;AAClE,GAF8C;;;ACI9C,IAAM,mBAAmB,wBAAC,WAAkB;AAC1C,SAAO,eAAe,QAAQ,UAAU;AAC1C,GAFyB;AAIlB,IAAM,2BAA2B,wBAAC,WAAkB;AACzD,SAAO;AAAA,IAAc,iBAAiB,MAAM;AAAA,IAAG,MAC7C,UAAuB,SAAS,uBAAuB,CAAC,EAAE,OAAO,KAAK,GAAG,EAAE,OAAO,KAAK,CAAC,GAAG;AAAA,MACzF,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF,GANwC;;;ACJxC,IAAM,eAAe,wBAAC,WAAkB;AACtC,SAAO,eAAe,QAAQ,MAAM;AACtC,GAFqB;AAId,IAAM,uBAAuB,wBAAC,WAAkB;AACrD,SAAO;AAAA,IAAc,aAAa,MAAM;AAAA,IAAG,MACzC,SAAS,SAAS,mBAAmB;AAAA,MACnC,UAAU;AAAA,MACV,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF,GAPoC;;;ACJpC,IAAM,yBAAyB,wBAAC,WAAkB;AAChD,SAAO,eAAe,QAAQ,gBAAgB;AAChD,GAF+B;AAIxB,IAAM,iCAAiC,wBAAC,WAAkB;AAC/D,SAAO;AAAA,IAAc,uBAAuB,MAAM;AAAA,IAAG,MACnD;AAAA,MACE,SAAS;AAAA,MACT,CAAC,EAAE,OAAO,MAAM,GAAG,EAAE,OAAO,OAAO,GAAG,EAAE,OAAO,OAAO,GAAG,EAAE,OAAO,MAAM,CAAC;AAAA,MACzE;AAAA,QACE,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF,GAV8C;;;ACRvC,IAAM,kBAAkB,wBAAC,WAAkB;AAChD,SAAO,eAAe,QAAQ,MAAM;AACtC,GAF+B;;;ACI/B,IAAM,oBAAoB,wBAAC,WAAkB;AAC3C,SAAO,gBAAgB,QAAQ,QAAQ;AACzC,GAF0B;AAInB,IAAM,oBAAoB,wBAAC,WAAkB;AAClD,SAAO;AAAA,IAAc,kBAAkB,MAAM;AAAA,IAAG,MAC9C,WAAW,SAAS,qBAAqB,EAAE,SAAS,MAAM,CAAC;AAAA,EAC7D;AACF,GAJiC;;;ACJjC,IAAM,yBAAyB,wBAAC,WAAkB;AAChD,SAAO,gBAAgB,QAAQ,aAAa;AAC9C,GAF+B;AAIxB,IAAM,yBAAyB,wBAAC,WAAkB;AACvD,SAAO;AAAA,IAAc,uBAAuB,MAAM;AAAA,IAAG,MACnD,WAAW,SAAS,2BAA2B,EAAE,SAAS,MAAM,CAAC;AAAA,EACnE;AACF,GAJsC;;;ACJtC,IAAM,oBAAoB,wBAAC,WAAkB;AAC3C,SAAO,gBAAgB,QAAQ,QAAQ;AACzC,GAF0B;AAInB,IAAM,oBAAoB,wBAAC,WAAkB;AAClD,SAAO;AAAA,IAAc,kBAAkB,MAAM;AAAA,IAAG,MAC9C,WAAW,SAAS,qBAAqB,EAAE,SAAS,KAAK,CAAC;AAAA,EAC5D;AACF,GAJiC;;;ACe1B,IAAM,YAAN,cAAwB,eAAe;AAAA,EA1B9C,OA0B8C;AAAA;AAAA;AAAA,EAC5C,MAAa,OAAO,OAAc,SAAgB;AAChD,YAAQ,KAAK,SAAS,SAAS;AAE/B,QAAI;AACF,YAAM,YAAY,kBAAkB,OAAO;AAE3C,YAAM,SAAS,MAAMC,iBAAgB,OAAO;AAE5C,YAAM,yBAAyB,QAAQ,SAAS;AAEhD,cAAQ,KAAK;AACb,cAAQ,KAAK,SAAS,WAAW;AACjC,cAAQ,KAAK,CAAC;AAAA,IAChB,QAAQ;AACN,cAAQ,MAAM,SAAS,UAAU;AACjC,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AACF;AAEA,IAAMA,mBAAkB,8BAAO,WAAuC;AACpE,SAAO;AAAA,IACL,MAAM,MAAM,qBAAqB,MAAM;AAAA,IACvC,WAAW,gBAAgB,MAAM;AAAA,IACjC,gBAAgB,MAAM,+BAA+B,MAAM;AAAA,IAC3D,UAAU,MAAM,yBAAyB,MAAM;AAAA,IAC/C,QAAQ,MAAM,kBAAkB,MAAM;AAAA,IACtC,QAAQ,MAAM,kBAAkB,MAAM;AAAA,IACtC,eAAe,+BAA+B,MAAM;AAAA,IACpD,aAAa,MAAM,uBAAuB,MAAM;AAAA,EAClD;AACF,GAXwB;AAaxB,IAAM,2BAA2B,8BAAO,QAAoB,cAAsB;AAChF,UAAQ,KAAK;AACb,QAAM,aAAiC,kBAAkB,oDAA6B,SAAS;AAE/F,UAAQ,KAAK;AACb,UAAQ,KAAK,SAAS,gBAAgB;AACtC,UAAQ,KAAK;AAEb,QAAM,iBAAiB,eAAe,YAAY,eAAe;AAAA,IAC/D,MAAM,OAAO;AAAA,IACb,WAAW,OAAO;AAAA,IAClB,gBAAgB,OAAO;AAAA,IACvB,UAAU,OAAO;AAAA,IACjB,QAAQ,OAAO;AAAA,IACf,QAAQ,OAAO;AAAA,EACjB,CAAC;AACD,QAAM,iBAAiB,iBAAiB,YAAY,iBAAiB;AAAA,IACnE,MAAM,OAAO;AAAA,IACb,WAAW,OAAO;AAAA,IAClB,QAAQ,OAAO;AAAA,EACjB,CAAC;AACD,QAAM,iBAAiB,eAAe,YAAY,aAAa;AAAA,IAC7D,MAAM,OAAO;AAAA,IACb,MAAM;AAAA,IACN,WAAW,OAAO;AAAA,IAClB,UAAU,OAAO;AAAA,IACjB,eAAe,OAAO;AAAA,EACxB,CAAC;AACD,QAAM,iBAAiB,oBAAoB,YAAY,aAAa;AAAA,IAClE,MAAM,OAAO;AAAA,IACb,MAAM;AAAA,IACN,WAAW,OAAO;AAAA,IAClB,UAAU,OAAO;AAAA,IACjB,eAAe,OAAO;AAAA,EACxB,CAAC;AAED,MAAI,OAAO,QAAQ;AACjB,UAAM,iBAAiB,eAAe,YAAY,aAAa;AAAA,MAC7D,MAAM,OAAO;AAAA,MACb,MAAM;AAAA,MACN,WAAW,OAAO;AAAA,MAClB,UAAU,OAAO;AAAA,MACjB,eAAe,OAAO;AAAA,IACxB,CAAC;AACD,UAAM,iBAAiB,oBAAoB,YAAY,aAAa;AAAA,MAClE,MAAM,OAAO;AAAA,MACb,MAAM;AAAA,MACN,WAAW,OAAO;AAAA,MAClB,UAAU,OAAO;AAAA,MACjB,eAAe,OAAO;AAAA,IACxB,CAAC;AAAA,EACH;AACF,GApDiC;;;AC5DjC,YAAYC,YAAW;AACvB,YAAYC,cAAa;AACzB,SAAS,QAAAC,aAAY;AAYd,IAAM,cAAN,cAA0B,eAAe;AAAA,EAdhD,OAcgD;AAAA;AAAA;AAAA,EAC9C,MAAa,OAAO,OAAc,SAAgB;AAChD,IAAQ,cAAK,SAAS,SAAS;AAC/B,IAAQ,cAAK;AAEb,QAAI;AACF,YAAM,YAAY,kBAAkB,OAAO;AAC3C,YAAMC,UAAS,MAAM,UAAU,SAAS,SAAS;AAEjD,YAAM,YAAYA,QAAO,OAAO,QAAQ;AACxC,YAAM,YAAYA,QAAO,OAAO,QAAQ;AAExC,YAAM,aAAa,0BAA0B,SAAS,cAAcA,QAAO,OAAO,IAAI;AAEtF,YAAM,QAAQ,IAAI;AAAA,QAChBA,QAAO,OAAO,SAAS,KAAK,YAAY,WAAW,SAAS,IAAI;AAAA,QAChE,KAAK,YAAY,YAAY,WAAW,SAAS;AAAA,MACnD,CAAC;AACD,cAAQ,KAAK,CAAC;AAAA,IAChB,SAAS,GAAG;AACV,MAAQ,eAAM,CAAC;AACf,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AAAA,EAEA,MAAc,YAAY,MAAc,WAAmB,SAAgC;AACzF,UAAM,OAAO,cAAc,6CAA6C,IAAI;AAE5E,WAAO,QAAQ,UAAU,MAAM;AAAA,MAC7B,MAAM;AAAA,MACN,UAAU,OAAOC,MAAK,WAAW,OAAO,CAAC;AAAA,IAC3C,CAAC;AAAA,EACH;AAAA,EAEQ,YAAY,WAAmB,SAAgC;AACrE,UAAM,OAAO,cAAc,6CAA6C,IAAI;AAC5E,WAAO,QAAQ,UAAU,MAAM;AAAA,MAC7B,UAAU,OAAOA,MAAK,WAAW,OAAO,CAAC;AAAA,IAC3C,CAAC;AAAA,EACH;AACF;AAEA,IAAM,UAAU,8BACd,MACA,WACAC,MACA,UACG;AACH,QAAM;AAEN,MAAI;AACF,UAAM,iBAAiB,sBAAsB,OAAO,kBAAkB;AACtE,UAAM,eAAe,IAAI,MAAM,WAAW,SAASA,MAAK,OAAO,IAAI;AAAA,EACrE,SAASC,QAAY;AACnB,QAAIA,UAASA,OAAM,SAAS;AAC1B,MAAQ,eAAY,WAAIA,OAAM,OAAO,CAAC;AAAA,IACxC;AAAA,EACF;AACF,GAhBgB;;;ACpDT,IAAe,kBAAf,MAA+B;AAAA,EACpC,YAAsB,QAAwB;AAAxB;AAAA,EAAyB;AAAA,EALjD,OAIsC;AAAA;AAAA;AAItC;;;ACKO,IAAM,eAAN,cAA2B,gBAAgB;AAAA,EAblD,OAakD;AAAA;AAAA;AAAA,EACzC,KAAK,SAAkB;AAC5B,YACG,QAAQ,OAAO,EACf,YAAY,iBAAiB,EAC7B,OAAO,+BAA+B,uCAAuC,EAC7E,OAAO,yBAAyB,2BAA2B,uBAAuB,EAClF,OAAO,qCAAqC,4CAA4C,EACxF,OAAO,qCAAqC,4CAA4C,EACxF,OAAO,OAAO,eAA6B;AAC1C,YAAM,UAAiB,oBAAI,IAAI;AAC/B,cAAQ,IAAI,aAAa,EAAE,OAAO,WAAW,UAAU,CAAC;AACxD,cAAQ,IAAI,UAAU,EAAE,OAAO,WAAW,OAAO,CAAC;AAClD,cAAQ,IAAI,mBAAmB,EAAE,OAAO,WAAW,aAAa,CAAC;AACjE,cAAQ,IAAI,mBAAmB,EAAE,OAAO,WAAW,aAAa,CAAC;AAEjE,YAAM,OAAc,oBAAI,IAAI;AAE5B,YAAM,KAAK,OAAO,OAAO,MAAM,OAAO;AAAA,IACxC,CAAC;AAAA,EACL;AACF;;;ACvBO,IAAM,kBAAN,cAA8B,gBAAgB;AAAA,EAXrD,OAWqD;AAAA;AAAA;AAAA,EAC5C,KAAK,SAAkB;AAC5B,YACG,QAAQ,UAAU,EAClB,YAAY,sCAAsC,EAClD,OAAO,+BAA+B,uCAAuC,EAC7E,OAAO,yBAAyB,2BAA2B,uBAAuB,EAClF,OAAO,OAAO,eAAgC;AAC7C,YAAM,UAAiB,oBAAI,IAAI;AAC/B,cAAQ,IAAI,aAAa,EAAE,OAAO,WAAW,UAAU,CAAC;AACxD,cAAQ,IAAI,UAAU,EAAE,OAAO,WAAW,OAAO,CAAC;AAElD,YAAM,OAAc,oBAAI,IAAI;AAE5B,YAAM,KAAK,OAAO,OAAO,MAAM,OAAO;AAAA,IACxC,CAAC;AAAA,EACL;AACF;;;AClBO,IAAM,iBAAN,cAA6B,gBAAgB;AAAA,EAVpD,OAUoD;AAAA;AAAA;AAAA,EAC3C,KAAK,SAAkB;AAC5B,YACG,QAAQ,oBAAoB,EAC5B,MAAM,KAAK,EACX,YAAY,uCAAuC,EACnD,OAAO,+BAA+B,uCAAuC,EAC7E,OAAO,OAAO,OAAiB,eAA+B;AAC7D,YAAM,UAAiB,oBAAI,IAAI;AAC/B,cAAQ,IAAI,aAAa,EAAE,OAAO,WAAW,UAAU,CAAC;AAExD,YAAM,OAAc,oBAAI,IAAI;AAC5B,WAAK,IAAI,SAAS,EAAE,OAAO,MAAM,SAAS,QAAQ,OAAU,CAAC;AAE7D,YAAM,KAAK,OAAO,OAAO,MAAM,OAAO;AAAA,IACxC,CAAC;AAAA,EACL;AACF;;;ACTO,IAAM,aAAN,cAAyB,gBAAgB;AAAA,EAlBhD,OAkBgD;AAAA;AAAA;AAAA,EACvC,KAAK,SAAkB;AAC5B,YACG,QAAQ,KAAK,EACb,YAAY,gCAAgC,EAC5C,OAAO,+BAA+B,uCAAuC,EAC7E,OAAO,iBAAiB,kCAAkC,EAC1D,OAAO,iBAAiB,kCAAkC,EAC1D,OAAO,sCAAsC,6CAA6C,EAC1F,OAAO,yBAAyB,sCAAsC,EACtE,OAAO,YAAY,iBAAiB,EACpC,OAAO,eAAe,wBAAwB,EAC9C,OAAO,YAAY,iBAAiB,EACpC,OAAO,eAAe,wBAAwB,EAC9C,OAAO,oBAAoB,sBAAsB,EACjD,OAAO,uBAAuB,6BAA6B,EAC3D,OAAO,kBAAkB,8BAA8B,EACvD,OAAO,qBAAqB,qCAAqC,EACjE,OAAO,OAAO,eAA2B;AACxC,YAAM,UAAiB,oBAAI,IAAI;AAC/B,cAAQ,IAAI,aAAa,EAAE,OAAO,WAAW,UAAU,CAAC;AACxD,cAAQ,IAAI,QAAQ,EAAE,OAAO,WAAW,KAAK,CAAC;AAC9C,cAAQ,IAAI,QAAQ,EAAE,OAAO,WAAW,KAAK,CAAC;AAC9C,cAAQ,IAAI,kBAAkB,EAAE,OAAO,WAAW,eAAe,CAAC;AAClE,cAAQ,IAAI,YAAY,EAAE,OAAO,WAAW,SAAS,CAAC;AACtD,cAAQ,IAAI,UAAU,EAAE,OAAO,WAAW,OAAO,CAAC;AAClD,cAAQ,IAAI,UAAU,EAAE,OAAO,WAAW,OAAO,CAAC;AAClD,cAAQ,IAAI,iBAAiB,EAAE,OAAO,WAAW,cAAc,CAAC;AAChE,cAAQ,IAAI,eAAe,EAAE,OAAO,WAAW,YAAY,CAAC;AAE5D,YAAM,OAAc,oBAAI,IAAI;AAE5B,YAAM,KAAK,OAAO,OAAO,MAAM,OAAO;AAAA,IACxC,CAAC;AAAA,EACL;AACF;;;ACvCO,IAAM,eAAN,cAA2B,gBAAgB;AAAA,EAdlD,OAckD;AAAA;AAAA;AAAA,EACzC,KAAK,SAAkB;AAC5B,YACG,QAAQ,OAAO,EACf,YAAY,iBAAiB,EAC7B,OAAO,+BAA+B,uCAAuC,EAC7E,OAAO,yBAAyB,2BAA2B,uBAAuB,EAClF;AAAA,MACC;AAAA,MACA;AAAA,IACF,EACC,OAAO,2CAA2C,uCAAuC,EACzF,OAAO,8BAA8B,gCAAgC,EACrE,OAAO,OAAO,eAA6B;AAC1C,YAAM,UAAiB,oBAAI,IAAI;AAC/B,cAAQ,IAAI,aAAa,EAAE,OAAO,WAAW,UAAU,CAAC;AACxD,cAAQ,IAAI,UAAU,EAAE,OAAO,WAAW,OAAO,CAAC;AAClD,cAAQ,IAAI,cAAc,EAAE,OAAO,WAAW,WAAW,CAAC;AAC1D,cAAQ,IAAI,oBAAoB;AAAA,QAC9B,OAAO,WAAW;AAAA,MACpB,CAAC;AACD,cAAQ,IAAI,cAAc,EAAE,OAAO,WAAW,WAAW,CAAC;AAE1D,YAAM,OAAc,oBAAI,IAAI;AAE5B,YAAM,KAAK,OAAO,OAAO,MAAM,OAAO;AAAA,IACxC,CAAC;AAAA,EACL;AACF;;;ArD7BO,IAAM,gBAAN,MAAoB;AAAA,EAb3B,OAa2B;AAAA;AAAA;AAAA,EACzB,aAAoB,KAAK,SAAiC;AACxD,QAAI,aAAa,IAAI,YAAY,CAAC,EAAE,KAAK,OAAO;AAChD,QAAI,gBAAgB,IAAI,eAAe,CAAC,EAAE,KAAK,OAAO;AACtD,QAAI,eAAe,IAAI,cAAc,CAAC,EAAE,KAAK,OAAO;AACpD,QAAI,WAAW,IAAI,UAAU,CAAC,EAAE,KAAK,OAAO;AAC5C,QAAI,aAAa,IAAI,YAAY,CAAC,EAAE,KAAK,OAAO;AAChD,SAAK,qBAAqB,OAAO;AAAA,EACnC;AAAA,EAEA,OAAe,qBAAqB,SAAkB;AACpD,YAAQ,GAAG,aAAa,MAAM;AAC5B,cAAQ,MAAM;AAAA,EAAK,SAAS,KAAK,qBAAqBC,QAAO,IAAI,QAAQ,KAAK,KAAK,GAAG,CAAC;AACvF,cAAQ,IAAI,OAAOA,YAAW;AAAA,CAAsC;AACpE,cAAQ,KAAK,CAAC;AAAA,IAChB,CAAC;AAAA,EACH;AACF;","names":["red","process","input","process","cwd","env","green","red","yellow","red","env","yellow","green","join","join","config","error","console","cwd","cwd","ora","ora","config","ansis","process","error","getSchemaValues","ansis","console","join","config","join","env","error","red"]}
|