@nanoforge-dev/cli 1.1.1 → 1.2.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/dist/command.loader.js +800 -846
- package/dist/command.loader.js.map +1 -1
- package/dist/nf.js +803 -849
- package/package.json +3 -3
|
@@ -1 +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/input/inputs/watch.input.ts","../src/lib/input/inputs/dev/generate.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/package-manager/package-manager.factory.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/local-bun.runner.ts","../src/lib/runner/runners/npm.runner.ts","../src/lib/runner/runners/pnpm.runner.ts","../src/lib/runner/runners/schematic.runner.ts","../src/lib/runner/runners/yarn.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-managers/local-bun.package-manager.ts","../src/lib/package-manager/package-managers/npm.package-manager.ts","../src/lib/package-manager/package-managers/pnpm.package-manager.ts","../src/lib/package-manager/package-managers/yarn.package-manager.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/dev.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/schematics.ts","../src/action/common/spinner.ts","../src/action/actions/install.action.ts","../src/action/actions/new.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/start.action.ts","../src/command/abstract.command.ts","../src/command/commands/build.command.ts","../src/command/commands/dev.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 { type Command } from \"commander\";\n\nimport { Prefixes } from \"@lib/ui\";\n\nimport {\n BuildAction,\n DevAction,\n GenerateAction,\n InstallAction,\n NewAction,\n StartAction,\n} from \"~/action\";\n\nimport { BuildCommand } from \"./commands/build.command\";\nimport { DevCommand } from \"./commands/dev.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 DevCommand(new DevAction()).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_WATCH_START: \"Start watching mode\",\n BUILD_PART_IN_PROGRESS: (part: string) => `Building ${part}`,\n BUILD_PART_WATCH_IN_PROGRESS: (part: string) => `${part} updated. Rebuilding`,\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 GENERATE_START: \"NanoForge Generate\",\n GENERATE_WATCH_START: \"Start watching mode\",\n GENERATE_SUCCESS: `${Emojis.ROCKET} Generate succeeded !`,\n GENERATE_FAILED: `${Emojis.SCREAM} Generate failed !`,\n DEV_START: \"NanoForge Dev mode\",\n DEV_SUCCESS: \"Dev mode ended\",\n DEV_FAILED: `${Emojis.SCREAM} Dev failed !`,\n SCHEMATICS_START: \"Schematics execution\",\n SCHEMATIC_IN_PROGRESS: (name: string) => `Executing schematic ${name}...`,\n SCHEMATIC_WATCH_IN_PROGRESS: (name: string) => `Update watched. 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 { watch } from \"chokidar\";\nimport * as console from \"node:console\";\nimport { dirname, join } from \"path\";\n\nimport { type BuildConfig } from \"@lib/config\";\nimport { type Input, getDirectoryInput } from \"@lib/input\";\nimport { getWatchInput } from \"@lib/input\";\nimport { PackageManager, PackageManagerFactory } from \"@lib/package-manager\";\nimport { Messages } from \"@lib/ui\";\n\nimport { getCwd } from \"@utils/path\";\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 const watch = getWatchInput(options);\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, { watch });\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, { watch })) ? res : false;\n }\n\n console.info();\n\n if (watch) {\n console.info(Messages.BUILD_WATCH_START);\n console.info();\n return;\n }\n\n if (!res) {\n console.info(Messages.BUILD_FAILED);\n process.exit(1);\n }\n console.info(Messages.BUILD_SUCCESS);\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 (\n name: string,\n part: BuildPart,\n directory: string,\n options?: { watch?: boolean },\n) => {\n const packageManagerName = PackageManager.LOCAL_BUN;\n\n const packageManager = PackageManagerFactory.create(packageManagerName);\n\n const build = async (watch = false) => {\n try {\n return await packageManager.build(\n name,\n directory,\n part.entry,\n part.output,\n [\n \"--asset-naming\",\n \"[name].[ext]\",\n \"--target\",\n part.target === \"client\" ? \"browser\" : \"node\",\n ],\n watch,\n );\n } catch (error: any) {\n if (error && error.message) {\n console.error(ansis.red(error.message));\n }\n return false;\n }\n };\n\n if (options?.watch)\n watch(dirname(join(getCwd(directory), part.entry))).on(\"change\", () => build(true));\n\n return await build();\n};\n","import { type 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 { type 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 { type Input } from \"../input.type\";\n\nexport const getConfigInput = (inputs: Input): string => {\n return getStringInputWithDefault(inputs, \"config\", \".\");\n};\n","import { getBooleanInputWithDefault } from \"../base-inputs\";\nimport { type Input } from \"../input.type\";\n\nexport const getWatchInput = (inputs: Input): boolean => {\n return getBooleanInputWithDefault(inputs, \"watch\", false);\n};\n","import { getBooleanInputWithDefault } from \"../../base-inputs\";\nimport { type Input } from \"../../input.type\";\n\nexport const getDevGenerateInput = (inputs: Input): boolean => {\n return getBooleanInputWithDefault(inputs, \"generate\", false);\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 extends string = 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)) as T;\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 { type 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 fs from \"fs\";\nimport { resolve } from \"path\";\n\nimport { type AbstractPackageManager } from \"./abstract.package-manager\";\nimport { PackageManager } from \"./package-manager\";\nimport { BunPackageManager } from \"./package-managers/bun.package-manager\";\nimport { LocalBunPackageManager } from \"./package-managers/local-bun.package-manager\";\nimport { NpmPackageManager } from \"./package-managers/npm.package-manager\";\nimport { PnpmPackageManager } from \"./package-managers/pnpm.package-manager\";\nimport { YarnPackageManager } from \"./package-managers/yarn.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 case PackageManager.LOCAL_BUN:\n return new LocalBunPackageManager();\n case PackageManager.NPM:\n return new NpmPackageManager();\n case PackageManager.PNPM:\n return new PnpmPackageManager();\n case PackageManager.YARN:\n return new YarnPackageManager();\n default:\n throw new Error(`Package manager ${name} is not managed.`);\n }\n }\n\n public static async find(directory: string = \".\"): Promise<AbstractPackageManager> {\n const DEFAULT_PACKAGE_MANAGER = PackageManager.NPM;\n\n try {\n const files = await fs.promises.readdir(resolve(directory));\n\n if (files.includes(\"bun.lock\")) {\n return this.create(PackageManager.BUN);\n }\n\n if (files.includes(\"package-lock.json\")) {\n return this.create(PackageManager.NPM);\n }\n\n if (files.includes(\"pnpm-lock.yaml\")) {\n return this.create(PackageManager.PNPM);\n }\n\n if (files.includes(\"yarn.lock\")) {\n return this.create(PackageManager.YARN);\n }\n\n return this.create(DEFAULT_PACKAGE_MANAGER);\n } catch {\n return this.create(DEFAULT_PACKAGE_MANAGER);\n }\n }\n}\n","import { yellow } from \"ansis\";\n\nimport { Runner } from \"./runner\";\nimport { BunRunner } from \"./runners/bun.runner\";\nimport { LocalBunRunner } from \"./runners/local-bun.runner\";\nimport { NpmRunner } from \"./runners/npm.runner\";\nimport { PnpmRunner } from \"./runners/pnpm.runner\";\nimport { SchematicRunner } from \"./runners/schematic.runner\";\nimport { YarnRunner } from \"./runners/yarn.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.LOCAL_BUN:\n return new LocalBunRunner();\n case Runner.NPM:\n return new NpmRunner();\n case Runner.PNPM:\n return new PnpmRunner();\n case Runner.SCHEMATIC:\n return new SchematicRunner();\n case Runner.YARN:\n return new YarnRunner();\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 { type ChildProcess, type 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 fs from \"fs\";\nimport { join, resolve } from \"path\";\n\nexport const getCwd = (directory: string) => {\n return resolve(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\nexport const resolveCLINodeBinaryPath = (name: string) => {\n let base = join(getModulePath(\".\", true), \"..\");\n while (base.length >= 1) {\n const path = join(base, \"node_modules\", \".bin\", name);\n try {\n fs.accessSync(path);\n return path;\n } catch {\n base = join(base, \"..\");\n }\n }\n throw new Error(\"Could not find module path\");\n};\n","import { resolveCLINodeBinaryPath } from \"@utils/path\";\n\nimport { AbstractRunner } from \"../abstract.runner\";\n\nexport class LocalBunRunner extends AbstractRunner {\n constructor() {\n super(resolveCLINodeBinaryPath(\"bun\"));\n }\n}\n","import { AbstractRunner } from \"../abstract.runner\";\n\nexport class NpmRunner extends AbstractRunner {\n constructor() {\n super(\"npm\");\n }\n}\n","import { AbstractRunner } from \"../abstract.runner\";\n\nexport class PnpmRunner extends AbstractRunner {\n constructor() {\n super(\"pnpm\");\n }\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 { AbstractRunner } from \"../abstract.runner\";\n\nexport class YarnRunner extends AbstractRunner {\n constructor() {\n super(\"yarn\");\n }\n}\n","import { bold, green, red, yellow } from \"ansis\";\nimport ora, { type Ora } from \"ora\";\n\nimport { type AbstractRunner } from \"@lib/runner/abstract.runner\";\nimport { Messages } from \"@lib/ui\";\n\nimport { getCwd } from \"@utils/path\";\n\nimport { type 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 watch?: boolean,\n ): Promise<boolean> {\n if (!this.cli.build) throw new Error(`Package manager ${this.name} does not support building`);\n\n const spinner = SPINNER(\n (watch ? Messages.BUILD_PART_WATCH_IN_PROGRESS : Messages.BUILD_PART_IN_PROGRESS)(name),\n );\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 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 async runDev(\n directory: string,\n command: string,\n env: Record<string, string> = {},\n flags: string[] = [],\n collect = true,\n ): Promise<boolean> {\n try {\n const commandArgs = [this.cli.exec, command, ...flags];\n await this.runner.run(commandArgs, collect, getCwd(directory), env);\n return true;\n } catch {\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 { type BunRunner, Runner, RunnerFactory } from \"@lib/runner\";\n\nimport { AbstractPackageManager } from \"../abstract.package-manager\";\nimport { PackageManager } from \"../package-manager\";\nimport { type 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 exec: \"exec\",\n run: \"run\",\n saveFlag: \"--save\",\n saveDevFlag: \"--dev\",\n silentFlag: \"--silent\",\n };\n }\n}\n","import { type LocalBunRunner, Runner, RunnerFactory } from \"@lib/runner\";\n\nimport { AbstractPackageManager } from \"../abstract.package-manager\";\nimport { PackageManager } from \"../package-manager\";\nimport { type PackageManagerCommands } from \"../package-manager-commands\";\n\nexport class LocalBunPackageManager extends AbstractPackageManager {\n constructor() {\n super(RunnerFactory.create(Runner.LOCAL_BUN) as LocalBunRunner);\n }\n\n public get name() {\n return PackageManager.LOCAL_BUN.toUpperCase();\n }\n\n get cli(): PackageManagerCommands {\n return {\n install: \"install\",\n add: \"add\",\n update: \"update\",\n remove: \"remove\",\n exec: \"exec\",\n run: \"run\",\n build: \"build\",\n runFile: \"run\",\n saveFlag: \"--save\",\n saveDevFlag: \"--dev\",\n silentFlag: \"--silent\",\n };\n }\n}\n","import { type NpmRunner, Runner, RunnerFactory } from \"@lib/runner\";\n\nimport { AbstractPackageManager } from \"../abstract.package-manager\";\nimport { PackageManager } from \"../package-manager\";\nimport { type PackageManagerCommands } from \"../package-manager-commands\";\n\nexport class NpmPackageManager extends AbstractPackageManager {\n constructor() {\n super(RunnerFactory.create(Runner.NPM) as NpmRunner);\n }\n\n public get name() {\n return PackageManager.NPM.toUpperCase();\n }\n\n get cli(): PackageManagerCommands {\n return {\n install: \"install\",\n add: \"install\",\n update: \"update\",\n remove: \"uninstall\",\n exec: \"exec\",\n run: \"run\",\n saveFlag: \"--save\",\n saveDevFlag: \"--save-dev\",\n silentFlag: \"--silent\",\n };\n }\n}\n","import { type PnpmRunner, Runner, RunnerFactory } from \"@lib/runner\";\n\nimport { AbstractPackageManager } from \"../abstract.package-manager\";\nimport { PackageManager } from \"../package-manager\";\nimport { type PackageManagerCommands } from \"../package-manager-commands\";\n\nexport class PnpmPackageManager extends AbstractPackageManager {\n constructor() {\n super(RunnerFactory.create(Runner.PNPM) as PnpmRunner);\n }\n\n public get name() {\n return PackageManager.PNPM.toUpperCase();\n }\n\n get cli(): PackageManagerCommands {\n return {\n install: \"install\",\n add: \"add\",\n update: \"update\",\n remove: \"remove\",\n exec: \"exec\",\n run: \"run\",\n saveFlag: \"-P\",\n saveDevFlag: \"-D\",\n silentFlag: \"--silent\",\n };\n }\n}\n","import { Runner, RunnerFactory, type YarnRunner } from \"@lib/runner\";\n\nimport { AbstractPackageManager } from \"../abstract.package-manager\";\nimport { PackageManager } from \"../package-manager\";\nimport { type PackageManagerCommands } from \"../package-manager-commands\";\n\nexport class YarnPackageManager extends AbstractPackageManager {\n constructor() {\n super(RunnerFactory.create(Runner.YARN) as YarnRunner);\n }\n\n public get name() {\n return PackageManager.YARN.toUpperCase();\n }\n\n get cli(): PackageManagerCommands {\n return {\n install: \"install\",\n add: \"add\",\n update: \"update\",\n remove: \"remove\",\n exec: \"exec\",\n run: \"run\",\n saveFlag: \"\",\n saveDevFlag: \"-D\",\n silentFlag: \"--silent\",\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 { type 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 { type Config, loadConfig } from \"@lib/config\";\nimport { type Input, getConfigInput } from \"@lib/input\";\n\nexport const getConfig = (inputs: Input, dir: string): Promise<Config> => {\n return loadConfig(dir, getConfigInput(inputs));\n};\n","import { type 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 ansis from \"ansis\";\n\nimport { type Input, getDevGenerateInput, getDirectoryInput } from \"@lib/input\";\nimport { PackageManagerFactory } from \"@lib/package-manager\";\nimport { Messages } from \"@lib/ui\";\n\nimport { AbstractAction } from \"../abstract.action\";\n\nexport class DevAction extends AbstractAction {\n public async handle(_args: Input, options: Input) {\n console.info(Messages.DEV_START);\n console.info();\n\n try {\n const directory = getDirectoryInput(options);\n const generate = getDevGenerateInput(options);\n\n await Promise.all([\n generate ? runAction(\"generate\", [], directory, false) : undefined,\n runAction(\"build\", [], directory, false),\n runAction(\"start\", [], directory, true),\n ]);\n\n console.info(Messages.DEV_SUCCESS);\n process.exit(0);\n } catch (e) {\n console.error(Messages.DEV_FAILED);\n console.error(e);\n process.exit(1);\n }\n }\n}\n\nconst runAction = async (\n command: string,\n params: string[],\n directory: string,\n stdout: boolean = false,\n) => {\n try {\n const packageManager = await PackageManagerFactory.find(directory);\n await packageManager.runDev(directory, \"nf\", {}, [command, ...params, \"--watch\"], !stdout);\n } catch (error: any) {\n if (error && error.message) {\n console.error(ansis.red(error.message));\n }\n }\n};\n","import * as console from \"node:console\";\nimport { join } from \"path\";\n\nimport { type Config } from \"@lib/config\";\nimport { type Input, getDirectoryInput, getWatchInput } from \"@lib/input\";\nimport { type AbstractCollection, Collection, CollectionFactory } from \"@lib/schematics\";\nimport { Messages } from \"@lib/ui\";\n\nimport { getCwd } from \"@utils/path\";\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.GENERATE_START);\n console.info();\n\n try {\n const directory = getDirectoryInput(options);\n\n const config = await getConfig(options, directory);\n const watch = getWatchInput(options);\n\n const values = await getSchemaValues(config);\n\n await generateFiles(values, directory, watch);\n\n console.info();\n\n if (watch) {\n console.info(Messages.GENERATE_WATCH_START);\n console.info();\n return;\n }\n\n console.info(Messages.GENERATE_SUCCESS);\n process.exit(0);\n } catch (e) {\n console.error(Messages.GENERATE_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, watch?: boolean) => {\n const collection: AbstractCollection = CollectionFactory.create(Collection.NANOFORGE, directory);\n\n console.info(Messages.SCHEMATICS_START);\n console.info();\n\n await executeSchematic(\n \"Client main file\",\n collection,\n \"part-main\",\n {\n name: values.name,\n part: \"client\",\n directory: values.directory,\n language: values.language,\n initFunctions: values.initFunctions,\n },\n watch ? join(getCwd(directory), values.directory, \".nanoforge\", \"client.save.json\") : undefined,\n );\n\n if (values.server) {\n await executeSchematic(\n \"Server main file\",\n collection,\n \"part-main\",\n {\n name: values.name,\n part: \"server\",\n directory: values.directory,\n language: values.language,\n initFunctions: values.initFunctions,\n },\n join(getCwd(directory), values.directory, \".nanoforge\", \"server.save.json\"),\n );\n }\n};\n","import { getCwd } from \"@utils/path\";\n\nimport { type AbstractRunner } from \"../runner/abstract.runner\";\nimport { type Schematic } from \"./nanoforge.collection\";\nimport { type 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 { type AbstractRunner } from \"../runner/abstract.runner\";\nimport { AbstractCollection } from \"./abstract.collection\";\nimport { type 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 { type SchematicRunner } from \"../runner/runners/schematic.runner\";\nimport { type 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}=true`] : [`--${str}=false`];\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 { watch } from \"chokidar\";\n\nimport { type 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 fileToWatch?: string,\n) => {\n const execute = async (watch: boolean = false) => {\n const spinner = getSpinner(\n (watch ? Messages.SCHEMATIC_WATCH_IN_PROGRESS : Messages.SCHEMATIC_IN_PROGRESS)(name),\n );\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\n if (fileToWatch) watch(fileToWatch).on(\"change\", () => execute(true));\n\n return await execute();\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 ora from \"ora\";\n\nexport const getSpinner = (message: string) =>\n ora({\n text: message,\n });\n","import * as ansis from \"ansis\";\nimport * as process from \"node:process\";\n\nimport { type Input, getDirectoryInput, getInstallNamesInputOrAsk } from \"@lib/input\";\nimport { 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 try {\n const packageManager = await PackageManagerFactory.find(directory);\n const res = await packageManager.addProduction(directory, names);\n if (!res) process.exit(1);\n } catch (error: any) {\n if (error && error.message) {\n console.error(ansis.red(error.message));\n }\n process.exit(1);\n }\n};\n","import * as ansis from \"ansis\";\nimport console from \"node:console\";\nimport * as process from \"node:process\";\n\nimport { type 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 { PackageManagerFactory } from \"@lib/package-manager\";\nimport { type 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 if (!values.skipInstall) await runInstall(directory, values.packageManager);\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\nconst runInstall = async (directory: string, pkgManagerName: string) => {\n try {\n const packageManager = PackageManagerFactory.create(pkgManagerName);\n await packageManager.install(directory);\n } catch (error: any) {\n if (error && error.message) {\n console.error(ansis.red(error.message));\n }\n process.exit(1);\n }\n};\n","import { getBooleanInputWithDefault } from \"../../base-inputs\";\nimport { type 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 { type 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 { type 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 { type 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 { type 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 { type 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 { type 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 { type 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 * as ansis from \"ansis\";\nimport * as console from \"node:console\";\nimport * as process from \"node:process\";\nimport { join } from \"path\";\n\nimport {\n type Input,\n getDirectoryInput,\n getStringInput,\n getStringInputWithDefault,\n getWatchInput,\n} from \"@lib/input\";\nimport { 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 const cert = getStringInput(options, \"cert\");\n const key = getStringInput(options, \"key\");\n\n const watch = getWatchInput(options);\n\n await Promise.all([\n config.server.enable ? this.startServer(directory, serverDir, watch) : undefined,\n this.startClient(\n clientPort,\n directory,\n clientDir,\n {\n watch,\n serverGameDir: config.server.enable ? serverDir : undefined,\n },\n cert,\n key,\n ),\n ]);\n process.exit(0);\n } catch (e) {\n console.error(e);\n process.exit(1);\n }\n }\n\n private async startClient(\n port: string,\n directory: string,\n gameDir: string,\n options?: {\n watch?: boolean;\n serverGameDir?: string;\n },\n cert?: string,\n key?: string,\n ): Promise<void> {\n const path = getModulePath(\"@nanoforge-dev/loader-client/package.json\", true);\n\n const params: any = {\n PORT: port,\n GAME_DIR: getCwd(join(directory, gameDir)),\n CERT: cert ? join(getCwd(directory), cert) : undefined,\n KEY: key ? join(getCwd(directory), key) : undefined,\n };\n if (options?.watch) {\n params[\"WATCH\"] = \"true\";\n if (options?.serverGameDir) {\n params[\"WATCH_SERVER_GAME_DIR\"] = getCwd(join(directory, options.serverGameDir));\n }\n }\n\n return runPart(\"Client\", path, params);\n }\n\n private startServer(directory: string, gameDir: string, watch: boolean): Promise<void> {\n const path = getModulePath(\"@nanoforge-dev/loader-server/package.json\", true);\n\n const params: any = {\n GAME_DIR: getCwd(join(directory, gameDir)),\n };\n if (watch) params[\"WATCH\"] = \"true\";\n\n return runPart(\"Server\", path, params);\n }\n}\n\nconst runPart = async (\n part: string,\n directory: string,\n env?: Record<string, string>,\n flags?: string[],\n) => {\n try {\n const packageManager = await PackageManagerFactory.find(directory);\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 { type Command } from \"commander\";\n\nimport { type 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 { type Command } from \"commander\";\n\nimport { type 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 watch?: boolean;\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 .option(\"--watch\", \"build app in watching mode\", false)\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 options.set(\"watch\", { value: rawOptions.watch });\n\n const args: Input = new Map();\n\n await this.action.handle(args, options);\n });\n }\n}\n","import { type Command } from \"commander\";\n\nimport { type Input } from \"@lib/input\";\n\nimport { AbstractCommand } from \"../abstract.command\";\n\ninterface DevOptions {\n directory?: string;\n config?: string;\n generate?: boolean;\n}\n\nexport class DevCommand extends AbstractCommand {\n public load(program: Command) {\n program\n .command(\"dev\")\n .description(\"run your game in dev mode\")\n .option(\"-d, --directory [directory]\", \"specify the directory of your project\")\n .option(\"--generate\", \"generate app from config\", false)\n .action(async (rawOptions: DevOptions) => {\n const options: Input = new Map();\n options.set(\"directory\", { value: rawOptions.directory });\n options.set(\"config\", { value: rawOptions.config });\n options.set(\"generate\", { value: rawOptions.generate });\n\n const args: Input = new Map();\n\n await this.action.handle(args, options);\n });\n }\n}\n","import { type Command } from \"commander\";\n\nimport { type Input } from \"@lib/input\";\n\nimport { AbstractCommand } from \"../abstract.command\";\n\ninterface GenerateOptions {\n directory?: string;\n config?: string;\n watch?: boolean;\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 .option(\"--watch\", \"generate app in watching mode\", false)\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 options.set(\"watch\", { value: rawOptions.watch });\n\n const args: Input = new Map();\n\n await this.action.handle(args, options);\n });\n }\n}\n","import { type Command } from \"commander\";\n\nimport { type 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 { type Command } from \"commander\";\n\nimport { type 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 { type Command } from \"commander\";\n\nimport { type 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 watch?: boolean;\n cert?: string;\n key?: 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 .option(\"--watch\", \"run app in watching mode\", false)\n .option(\"--cert [cert]\", \"path to the SSL certificate for HTTPS\")\n .option(\"--key [key]\", \"path to the SSL key for HTTPS\")\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 options.set(\"watch\", { value: rawOptions.watch });\n options.set(\"cert\", { value: rawOptions.cert });\n options.set(\"key\", { value: rawOptions.key });\n\n const args: Input = new Map();\n\n await this.action.handle(args, options);\n });\n }\n}\n"],"mappings":"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","names":["red","console","join","input","fs","resolve","process","cwd","env","resolve","green","red","yellow","watch","red","env","yellow","green","fs","resolve","join","join","config","watch","error","join","ansis","error","console","join","cwd","cwd","watch","ora","ora","watch","config","watch","join","ansis","process","error","ansis","console","process","console","getSchemaValues","error","ansis","console","process","join","config","watch","join","env","error","red"]}
|
|
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/lib/ui/spinner.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/input/inputs/watch.input.ts","../src/lib/input/inputs/dev/generate.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/package-manager/package-manager.ts","../src/lib/runner/process-logger.ts","../src/lib/utils/path.ts","../src/lib/package-manager/package-manager.factory.ts","../src/lib/runner/runner.ts","../src/lib/runner/runner.factory.ts","../src/lib/package-manager/package-manager-configs.ts","../src/lib/utils/run-safe.ts","../src/lib/config/config.type.ts","../src/lib/config/config-loader.ts","../src/lib/constants.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/dev.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/schematics.ts","../src/action/actions/install.action.ts","../src/action/actions/new.action.ts","../src/lib/input/inputs/new/docker.input.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/start.action.ts","../src/command/abstract.command.ts","../src/command/commands/build.command.ts","../src/command/commands/dev.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 { type Command } from \"commander\";\n\nimport { Prefixes } from \"@lib/ui\";\n\nimport {\n BuildAction,\n DevAction,\n GenerateAction,\n InstallAction,\n NewAction,\n StartAction,\n} from \"~/action\";\n\nimport { BuildCommand } from \"./commands/build.command\";\nimport { DevCommand } from \"./commands/dev.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 DevCommand(new DevAction()).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\nconst success = (text: string) => `${Emojis.ROCKET} ${text}`;\nconst failure = (text: string) => `${Emojis.SCREAM} ${text}`;\n\nexport const Messages = {\n // --- Build ---\n BUILD_START: \"NanoForge Build\",\n BUILD_SUCCESS: success(\"Build succeeded!\"),\n BUILD_FAILED: failure(\"Build failed!\"),\n BUILD_WATCH_START: \"Watching for changes...\",\n BUILD_PART_IN_PROGRESS: (part: string) => `Building ${part}`,\n BUILD_PART_WATCH_IN_PROGRESS: (part: string) => `${part} updated, rebuilding`,\n BUILD_PART_FAILED: (part: string, command: string) =>\n failure(`Build of ${part} failed!\\nTry running manually: ${command}`),\n\n // --- Install ---\n INSTALL_START: \"NanoForge Installation\",\n INSTALL_SUCCESS: success(\"Installation completed!\"),\n INSTALL_FAILED: failure(\"Installation failed!\"),\n INSTALL_NAMES_QUESTION: \"Which libraries do you want to install?\",\n\n // --- New Project ---\n NEW_START: \"NanoForge Project Creation\",\n NEW_SUCCESS: success(\"Project successfully created!\"),\n NEW_FAILED: failure(\"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 strict type checking?\",\n NEW_SERVER_QUESTION: \"Do you want to generate a server for multiplayer?\",\n NEW_SKIP_INSTALL_QUESTION: \"Do you want to skip dependency installation?\",\n NEW_DOCKER_QUESTION: \"Do you want to add a Dockerfile for containerization?\",\n\n // --- Generate ---\n GENERATE_START: \"NanoForge Generate\",\n GENERATE_SUCCESS: success(\"Generation succeeded!\"),\n GENERATE_FAILED: failure(\"Generation failed!\"),\n GENERATE_WATCH_START: \"Watching for changes...\",\n\n // --- Dev ---\n DEV_START: \"NanoForge Dev Mode\",\n DEV_SUCCESS: \"Dev mode ended\",\n DEV_FAILED: failure(\"Dev mode failed!\"),\n\n // --- Start ---\n START_START: \"NanoForge Start\",\n START_SUCCESS: success(\"Start completed!\"),\n START_FAILED: failure(\"Start failed!\"),\n START_PART_IN_PROGRESS: (part: string) => `Starting ${part}...`,\n START_PART_SUCCESS: (part: string) => success(`${part} terminated.`),\n START_PART_FAILED: (part: string) => failure(`${part} failed!`),\n\n // --- Schematics ---\n SCHEMATICS_START: \"Running schematics\",\n SCHEMATIC_IN_PROGRESS: (name: string) => `Generating ${name}...`,\n SCHEMATIC_WATCH_IN_PROGRESS: (name: string) => `Change detected, regenerating ${name}...`,\n SCHEMATIC_SUCCESS: (name: string) => success(`${name} generated successfully!`),\n SCHEMATIC_FAILED: (name: string) => failure(`${name} generation failed.`),\n\n // --- Package Manager ---\n PACKAGE_MANAGER_INSTALLATION_IN_PROGRESS: `Installing dependencies... ${Emojis.COFFEE}`,\n PACKAGE_MANAGER_INSTALLATION_NOTHING: \"Nothing to install.\",\n PACKAGE_MANAGER_INSTALLATION_SUCCEED: (names?: string[]) =>\n names\n ? success(`Packages installed: ${names.map((n) => green(n)).join(\", \")}`)\n : success(\"Packages installed!\"),\n PACKAGE_MANAGER_INSTALLATION_FAILED: (command: string) =>\n failure(`Package installation failed!\\nTry running manually: ${command}`),\n\n // --- Runner ---\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 ora from \"ora\";\n\nexport const getSpinner = (message: string) => ora({ text: message });\n","import { watch } from \"chokidar\";\nimport { dirname, join } from \"node:path\";\n\nimport { type BuildConfig, type Config } from \"@lib/config\";\nimport { type Input, getDirectoryInput, getStringInput, getWatchInput } from \"@lib/input\";\nimport { PackageManagerFactory, PackageManagerName } from \"@lib/package-manager\";\nimport { Messages } from \"@lib/ui\";\n\nimport { getCwd } from \"@utils/path\";\nimport { runSafe } from \"@utils/run-safe\";\n\nimport { getConfig } from \"~/action/common/config\";\n\nimport { AbstractAction, type HandleResult } from \"../abstract.action\";\n\ninterface BuildTarget {\n name: string;\n entry: string;\n output: string;\n platform: \"browser\" | \"node\";\n}\n\nexport class BuildAction extends AbstractAction {\n protected startMessage = Messages.BUILD_START;\n protected successMessage = Messages.BUILD_SUCCESS;\n protected failureMessage = Messages.BUILD_FAILED;\n\n public async handle(_args: Input, options: Input): Promise<HandleResult> {\n const directory = getDirectoryInput(options);\n const config = await getConfig(options, directory);\n const isWatch = getWatchInput(options);\n\n const targets = this.resolveTargets(config, options);\n const results = await this.buildAll(targets, directory, isWatch);\n\n if (isWatch) {\n return this.enterWatchMode();\n }\n\n return { success: results.every(Boolean) };\n }\n\n private resolveTargets(config: Config, options: Input): BuildTarget[] {\n const targets: BuildTarget[] = [\n this.createTarget(\n \"Client\",\n config.client.build,\n \"browser\",\n getStringInput(options, \"clientDirectory\"),\n ),\n ];\n\n if (config.server.enable) {\n targets.push(\n this.createTarget(\n \"Server\",\n config.server.build,\n \"node\",\n getStringInput(options, \"serverDirectory\"),\n ),\n );\n }\n\n return targets;\n }\n\n private createTarget(\n name: string,\n config: BuildConfig,\n platform: \"browser\" | \"node\",\n outDirOverride?: string,\n ): BuildTarget {\n return {\n name,\n entry: config.entryFile,\n output: outDirOverride || config.outDir,\n platform,\n };\n }\n\n private async buildAll(\n targets: BuildTarget[],\n directory: string,\n isWatch: boolean,\n ): Promise<boolean[]> {\n const results: boolean[] = [];\n for (const target of targets) {\n const result = await this.buildTarget(target, directory, isWatch);\n results.push(result);\n }\n return results;\n }\n\n private async buildTarget(\n target: BuildTarget,\n directory: string,\n isWatch: boolean,\n ): Promise<boolean> {\n const packageManager = PackageManagerFactory.create(PackageManagerName.LOCAL_BUN);\n\n const executeBuild = (rebuild = false) =>\n runSafe(\n () =>\n packageManager.build(\n target.name,\n directory,\n target.entry,\n target.output,\n [\"--asset-naming\", \"[name].[ext]\", \"--target\", target.platform],\n rebuild,\n ),\n false,\n );\n\n if (isWatch) {\n this.watchDirectory(directory, target.entry, () => executeBuild(true));\n }\n\n const result = await executeBuild();\n return result !== false;\n }\n\n private watchDirectory(directory: string, entry: string, onChange: () => void): void {\n const watchPath = dirname(join(getCwd(directory), entry));\n watch(watchPath).on(\"change\", onChange);\n }\n\n private enterWatchMode(): HandleResult {\n console.info();\n console.info(Messages.BUILD_WATCH_START);\n console.info();\n return { keepAlive: true };\n }\n}\n","import { type 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 { type 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 { type Input } from \"../input.type\";\n\nexport const getConfigInput = (inputs: Input): string => {\n return getStringInputWithDefault(inputs, \"config\", \".\");\n};\n","import { getBooleanInputWithDefault } from \"../base-inputs\";\nimport { type Input } from \"../input.type\";\n\nexport const getWatchInput = (inputs: Input): boolean => {\n return getBooleanInputWithDefault(inputs, \"watch\", false);\n};\n","import { getBooleanInputWithDefault } from \"../../base-inputs\";\nimport { type Input } from \"../../input.type\";\n\nexport const getDevGenerateInput = (inputs: Input): boolean => {\n return getBooleanInputWithDefault(inputs, \"generate\", false);\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","import { red } from \"ansis\";\n\nexport const getErrorMessage = (error: unknown): string | undefined => {\n if (error instanceof Error) return error.message;\n if (typeof error === \"string\") return error;\n return undefined;\n};\n\nexport const handleActionError = (context: string, error: unknown): never => {\n console.error();\n console.error(red(context));\n const msg = getErrorMessage(error);\n if (msg) console.error(msg);\n process.exit(1);\n};\n\nexport const promptError = (err: Error): never => {\n if (err.name === \"ExitPromptError\") {\n process.exit(1);\n }\n throw err;\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 extends string = 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)) as T;\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 { type 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 { bold, red } from \"ansis\";\nimport { type Ora } from \"ora\";\n\nimport { createStderrLogger, createStdoutLogger } from \"@lib/runner/process-logger\";\nimport { type RunOptions, type Runner } from \"@lib/runner/runner\";\nimport { Messages } from \"@lib/ui\";\nimport { getSpinner } from \"@lib/ui/spinner\";\n\nimport { getCwd } from \"@utils/path\";\n\nimport { type PackageManagerCommands } from \"./package-manager-commands\";\n\ninterface SpinnerTaskResult<T> {\n success: boolean;\n value?: T;\n}\n\nexport class PackageManager {\n constructor(\n public readonly name: string,\n private readonly commands: PackageManagerCommands,\n private readonly runner: Runner,\n ) {}\n\n public async install(directory: string): Promise<boolean> {\n const args = [this.commands.install, this.commands.silentFlag];\n\n const result = await this.withSpinner(\n Messages.PACKAGE_MANAGER_INSTALLATION_IN_PROGRESS,\n async (spinner) => {\n await this.exec(args, directory, { onFail: () => spinner.fail() });\n this.logSuccess(Messages.PACKAGE_MANAGER_INSTALLATION_SUCCEED());\n },\n () => this.logFailure(this.formatFailCommand([this.commands.install])),\n );\n\n return result.success;\n }\n\n public async addProduction(directory: string, dependencies: string[]): Promise<boolean> {\n return this.addDependencies(this.commands.saveFlag, directory, dependencies);\n }\n\n public async addDevelopment(directory: string, dependencies: string[]): Promise<boolean> {\n return this.addDependencies(this.commands.saveDevFlag, directory, dependencies);\n }\n\n public async build(\n name: string,\n directory: string,\n entry: string,\n output: string,\n flags: string[] = [],\n watch = false,\n ): Promise<boolean> {\n this.assertSupports(\"build\");\n\n const message = watch\n ? Messages.BUILD_PART_WATCH_IN_PROGRESS(name)\n : Messages.BUILD_PART_IN_PROGRESS(name);\n\n const args = [\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.commands.build!,\n this.commands.silentFlag,\n entry,\n \"--outdir\",\n output,\n ...flags,\n ];\n\n const result = await this.withSpinner(\n message,\n async (spinner) => {\n await this.exec(args, directory, { onFail: () => spinner.fail() });\n },\n () => this.logBuildFailure(name),\n );\n\n return result.success;\n }\n\n public async run(\n name: string,\n directory: string,\n script: string,\n env: Record<string, string> = {},\n flags: string[] = [],\n silent = false,\n ): Promise<boolean> {\n console.info(Messages.START_PART_IN_PROGRESS(name));\n\n try {\n const args = this.buildRunArgs(script, flags, silent);\n await this.exec(args, directory, {\n env,\n listeners: {\n onStdout: createStdoutLogger(name),\n onStderr: createStderrLogger(name),\n },\n });\n console.info(Messages.START_PART_SUCCESS(name));\n return true;\n } catch {\n console.error(red(Messages.START_PART_FAILED(name)));\n return false;\n }\n }\n\n public async runDev(\n directory: string,\n command: string,\n env: Record<string, string> = {},\n flags: string[] = [],\n collect = true,\n ): Promise<boolean> {\n try {\n await this.exec([this.commands.run, command, ...flags], directory, { collect, env });\n return true;\n } catch {\n return false;\n }\n }\n\n private async withSpinner<T>(\n message: string,\n task: (spinner: Ora) => Promise<T>,\n onError?: () => void,\n ): Promise<SpinnerTaskResult<T>> {\n const spinner = getSpinner(message);\n spinner.start();\n\n try {\n const value = await task(spinner);\n spinner.succeed();\n return { success: true, value };\n } catch {\n spinner.fail();\n if (onError) onError();\n return { success: false };\n }\n }\n\n private async addDependencies(\n saveFlag: string,\n directory: string,\n dependencies: string[],\n ): Promise<boolean> {\n if (!dependencies.length) {\n this.logEmpty(Messages.PACKAGE_MANAGER_INSTALLATION_NOTHING);\n return true;\n }\n\n const args = [this.commands.add, saveFlag, ...dependencies];\n\n const result = await this.withSpinner(\n Messages.PACKAGE_MANAGER_INSTALLATION_IN_PROGRESS,\n async (spinner) => {\n await this.exec(args, directory, { onFail: () => spinner.fail() });\n this.logSuccess(Messages.PACKAGE_MANAGER_INSTALLATION_SUCCEED(dependencies));\n },\n () => this.logFailure(this.formatFailCommand(args)),\n );\n\n return result.success;\n }\n\n private assertSupports(feature: keyof PackageManagerCommands): void {\n if (!this.commands[feature]) {\n throw new Error(`Package manager \"${this.name}\" does not support \"${feature}\"`);\n }\n }\n\n private buildRunArgs(script: string, flags: string[], silent: boolean): string[] {\n const args = [...flags, this.commands.run];\n if (silent) args.push(this.commands.silentFlag);\n args.push(script);\n return args;\n }\n\n private exec(\n args: string[],\n directory: string,\n options: {\n collect?: boolean;\n env?: Record<string, string>;\n listeners?: RunOptions[\"listeners\"];\n onFail?: () => void;\n } = {},\n ): Promise<string | null> {\n return this.runner.run(args, {\n collect: options.collect ?? true,\n cwd: getCwd(directory),\n env: options.env,\n listeners: options.listeners,\n onFail: options.onFail,\n });\n }\n\n private formatFailCommand(args: string[]): string {\n return this.runner.fullCommand(args);\n }\n\n private logSuccess(message: string): void {\n console.info();\n console.info(message);\n console.info();\n }\n\n private logFailure(command: string): void {\n console.error(red(Messages.PACKAGE_MANAGER_INSTALLATION_FAILED(bold(command))));\n }\n\n private logBuildFailure(name: string): void {\n const command = this.formatFailCommand([this.commands.install]);\n console.error(red(Messages.BUILD_PART_FAILED(name, bold(command))));\n }\n\n private logEmpty(message: string): void {\n console.info();\n console.info(message);\n console.info();\n }\n}\n","import { green, red, yellow } from \"ansis\";\n\nconst formatLines = (chunk: string | ArrayBuffer): string[] => {\n return chunk\n .toString()\n .replace(/\\r\\n|\\n/g, \"\\n\")\n .replace(/^\\n+|\\n+$/g, \"\")\n .split(\"\\n\");\n};\n\nconst timestamp = (): string => yellow(`[${new Date().toISOString()}]`);\n\nexport const createStdoutLogger = (name: string) => (chunk: string) => {\n const prefix = green(`(${name}) INFO -`);\n for (const line of formatLines(chunk)) {\n console.info(`${timestamp()} ${prefix} ${line}`);\n }\n};\n\nexport const createStderrLogger = (name: string) => (chunk: string) => {\n const prefix = red(`(${name}) ERROR -`);\n for (const line of formatLines(chunk)) {\n console.error(`${timestamp()} ${prefix} ${line}`);\n }\n};\n","import fs from \"fs\";\nimport { join, resolve } from \"path\";\n\nexport const getCwd = (directory: string) => {\n return resolve(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\nexport const resolveCLINodeBinaryPath = (name: string) => {\n let base = join(getModulePath(\".\", true), \"..\");\n while (base.length >= 1) {\n const path = join(base, \"node_modules\", \".bin\", name);\n try {\n fs.accessSync(path);\n return path;\n } catch {\n base = join(base, \"..\");\n }\n }\n throw new Error(\"Could not find module path\");\n};\n","import fs from \"fs\";\nimport { resolve } from \"path\";\n\nimport { RunnerFactory } from \"@lib/runner\";\n\nimport { PackageManager } from \"./package-manager\";\nimport { PM_CONFIGS } from \"./package-manager-configs\";\nimport { PackageManagerName } from \"./package-manager-name\";\n\nconst LOCK_FILE_MAP: Record<string, PackageManagerName> = {\n \"bun.lock\": PackageManagerName.BUN,\n \"package-lock.json\": PackageManagerName.NPM,\n \"pnpm-lock.yaml\": PackageManagerName.PNPM,\n \"yarn.lock\": PackageManagerName.YARN,\n};\n\nexport class PackageManagerFactory {\n public static create(name: PackageManagerName | string): PackageManager {\n const config = PM_CONFIGS[name as PackageManagerName];\n if (!config) {\n throw new Error(`Package manager ${name} is not managed.`);\n }\n\n const runner = this.createRunner(name as PackageManagerName, config.binary);\n return new PackageManager(name, config.commands, runner);\n }\n\n public static async find(directory = \".\"): Promise<PackageManager> {\n const detected = await this.detectFromLockFile(directory);\n return this.create(detected);\n }\n\n private static createRunner(name: PackageManagerName, binary: string) {\n if (name === PackageManagerName.LOCAL_BUN) {\n return RunnerFactory.createLocal(\"bun\");\n }\n return RunnerFactory.create(binary);\n }\n\n private static async detectFromLockFile(directory: string): Promise<PackageManagerName> {\n try {\n const files = await fs.promises.readdir(resolve(directory));\n for (const [lockFile, pmName] of Object.entries(LOCK_FILE_MAP)) {\n if (files.includes(lockFile)) return pmName;\n }\n } catch {\n // directory unreadable, fall through to default\n }\n return PackageManagerName.NPM;\n }\n}\n","import { red } from \"ansis\";\nimport { type ChildProcess, type SpawnOptions, spawn } from \"child_process\";\nimport * as process from \"node:process\";\n\nexport interface RunOptions {\n collect?: boolean;\n cwd?: string;\n env?: Record<string, string>;\n listeners?: RunnerListeners;\n onFail?: () => void;\n}\n\nexport interface RunnerListeners {\n onStdout?: (chunk: string) => void;\n onStderr?: (chunk: string) => void;\n}\n\nexport class Runner {\n constructor(\n private readonly binary: string,\n private readonly baseArgs: string[] = [],\n ) {}\n\n public async run(args: string[], options: RunOptions = {}): Promise<string | null> {\n const { collect = false, cwd = process.cwd(), env, listeners, onFail } = options;\n const spawnOpts = this.buildSpawnOptions(collect, cwd, env);\n const fullArgs = [...this.baseArgs, ...args];\n\n return new Promise<string | null>((resolve, reject) => {\n const child = spawn(`${this.binary} ${fullArgs.join(\" \")}`, spawnOpts);\n const output = this.attachOutputHandlers(child, listeners);\n\n child.on(\"close\", (code) => {\n if (code === 0) {\n resolve(this.formatOutput(output, collect));\n } else {\n this.handleFailure(output, fullArgs, onFail);\n reject(this.createError(fullArgs, code));\n }\n });\n });\n }\n\n public fullCommand(args: string[]): string {\n return [this.binary, ...this.baseArgs, ...args].join(\" \");\n }\n\n private buildSpawnOptions(\n collect: boolean,\n cwd: string,\n env?: Record<string, string>,\n ): SpawnOptions {\n return {\n cwd,\n stdio: collect ? \"pipe\" : \"inherit\",\n shell: true,\n env: { ...process.env, ...env },\n };\n }\n\n private attachOutputHandlers(child: ChildProcess, listeners?: RunnerListeners): string[] {\n const output: string[] = [];\n const defaultHandler = (data: Buffer) => output.push(data.toString().replace(/\\r\\n|\\n/, \"\"));\n\n child.stdout?.on(\"data\", listeners?.onStdout ?? defaultHandler);\n child.stderr?.on(\"data\", listeners?.onStderr ?? defaultHandler);\n\n return output;\n }\n\n private formatOutput(output: string[], collect: boolean): string | null {\n return collect && output.length ? output.join(\"\\n\") : null;\n }\n\n private handleFailure(output: string[], args: string[], onFail?: () => void): void {\n if (onFail) onFail();\n this.logFailedCommand(args);\n this.logCapturedOutput(output);\n }\n\n private logFailedCommand(args: string[]): void {\n console.error(red(`\\nFailed to execute command: ${this.binary} ${args.join(\" \")}`));\n }\n\n private logCapturedOutput(output: string[]): void {\n if (output.length) {\n console.error();\n console.error(output.join(\"\\n\"));\n console.error();\n }\n }\n\n private createError(args: string[], code: number | null): Error {\n return new Error(`Command \"${this.binary} ${args.join(\" \")}\" exited with code ${code}`);\n }\n}\n","import { getModulePath, resolveCLINodeBinaryPath } from \"@utils/path\";\n\nimport { Runner } from \"./runner\";\n\nexport class RunnerFactory {\n public static create(binary: string, args?: string[]): Runner {\n return new Runner(binary, args);\n }\n\n public static createLocal(binary: string, args?: string[]): Runner {\n return new Runner(resolveCLINodeBinaryPath(binary), args);\n }\n\n public static createSchematic(): Runner {\n const binaryPath = this.resolveSchematicBinary();\n return new Runner(\"node\", [`\"${binaryPath}\"`]);\n }\n\n private static resolveSchematicBinary(): string {\n try {\n return getModulePath(\"@angular-devkit/schematics-cli/bin/schematics.js\");\n } catch {\n throw new Error(\"'schematics' binary path could not be found!\");\n }\n }\n}\n","import { type PackageManagerCommands } from \"./package-manager-commands\";\nimport { PackageManagerName } from \"./package-manager-name\";\n\nexport const PM_CONFIGS: Record<\n PackageManagerName,\n { binary: string; commands: PackageManagerCommands }\n> = {\n [PackageManagerName.BUN]: {\n binary: \"bun\",\n commands: {\n install: \"install\",\n add: \"add\",\n update: \"update\",\n remove: \"remove\",\n exec: \"exec\",\n run: \"run\",\n saveFlag: \"--save\",\n saveDevFlag: \"--dev\",\n silentFlag: \"--silent\",\n },\n },\n [PackageManagerName.LOCAL_BUN]: {\n binary: \"bun\",\n commands: {\n install: \"install\",\n add: \"add\",\n update: \"update\",\n remove: \"remove\",\n exec: \"exec\",\n run: \"run\",\n build: \"build\",\n runFile: \"run\",\n saveFlag: \"--save\",\n saveDevFlag: \"--dev\",\n silentFlag: \"--silent\",\n },\n },\n [PackageManagerName.NPM]: {\n binary: \"npm\",\n commands: {\n install: \"install\",\n add: \"install\",\n update: \"update\",\n remove: \"uninstall\",\n exec: \"exec\",\n run: \"run\",\n saveFlag: \"--save\",\n saveDevFlag: \"--save-dev\",\n silentFlag: \"--silent\",\n },\n },\n [PackageManagerName.PNPM]: {\n binary: \"pnpm\",\n commands: {\n install: \"install\",\n add: \"add\",\n update: \"update\",\n remove: \"remove\",\n exec: \"exec\",\n run: \"run\",\n saveFlag: \"-P\",\n saveDevFlag: \"-D\",\n silentFlag: \"--silent\",\n },\n },\n [PackageManagerName.YARN]: {\n binary: \"yarn\",\n commands: {\n install: \"install\",\n add: \"add\",\n update: \"update\",\n remove: \"remove\",\n exec: \"exec\",\n run: \"run\",\n saveFlag: \"\",\n saveDevFlag: \"-D\",\n silentFlag: \"--silent\",\n },\n },\n};\n","import { red } from \"ansis\";\n\nimport { getErrorMessage } from \"@utils/errors\";\n\nexport const runSafe = async <T>(fn: () => Promise<T>, fallback?: T): Promise<T | undefined> => {\n try {\n return await fn();\n } catch (error: unknown) {\n const msg = getErrorMessage(error);\n if (msg) console.error(red(msg));\n return fallback;\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 \"node:path\";\n\nimport { CONFIG_FILE_NAME } from \"@lib/constants\";\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 [CONFIG_FILE_NAME]) {\n const path = join(directory, n);\n if (existsSync(path)) return path;\n }\n throw new Error(`No config file found in directory: ${directory}`);\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 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 CONFIG_FILE_NAME = \"nanoforge.config.json\";\nexport const DEFAULT_DIRECTORY = \".\";\nexport const NANOFORGE_DIR = \".nanoforge\";\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 { type 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 { type Config, loadConfig } from \"@lib/config\";\nimport { type Input, getConfigInput } from \"@lib/input\";\n\nexport const getConfig = (inputs: Input, dir: string): Promise<Config> => {\n return loadConfig(dir, getConfigInput(inputs));\n};\n","import { type Input } from \"@lib/input\";\nimport { Prefixes } from \"@lib/ui\";\n\nimport { handleActionError } from \"@utils/errors\";\n\nexport interface HandleResult {\n success?: boolean;\n keepAlive?: boolean;\n}\n\nexport abstract class AbstractAction {\n protected abstract startMessage: string;\n protected abstract successMessage: string;\n protected abstract failureMessage: string;\n\n public abstract handle(\n args?: Input,\n options?: Input,\n extraFlags?: string[],\n ): Promise<HandleResult>;\n\n public async run(args?: Input, options?: Input, extraFlags?: string[]): Promise<void> {\n this.logStart();\n\n try {\n const result = await this.handle(args, options, extraFlags);\n this.resolveResult(result);\n } catch (error: unknown) {\n handleActionError(this.failureMessage, error);\n }\n }\n\n private logStart(): void {\n console.info();\n console.info(`${Prefixes.INFO} ${this.startMessage}`);\n console.info();\n }\n\n private resolveResult(result: HandleResult): void {\n const success = result?.success !== false;\n const keepAlive = result?.keepAlive === true;\n\n if (keepAlive) return;\n\n console.info();\n\n if (!success) {\n if (this.failureMessage) console.error(this.failureMessage);\n process.exit(1);\n }\n\n if (this.successMessage) console.info(this.successMessage);\n process.exit(0);\n }\n}\n","import { type Input, getDevGenerateInput, getDirectoryInput } from \"@lib/input\";\nimport { PackageManagerFactory } from \"@lib/package-manager\";\nimport { Messages } from \"@lib/ui\";\n\nimport { runSafe } from \"@utils/run-safe\";\n\nimport { AbstractAction, type HandleResult } from \"../abstract.action\";\n\nexport class DevAction extends AbstractAction {\n protected startMessage = Messages.DEV_START;\n protected successMessage = Messages.DEV_SUCCESS;\n protected failureMessage = Messages.DEV_FAILED;\n\n public async handle(_args: Input, options: Input): Promise<HandleResult> {\n const directory = getDirectoryInput(options);\n const generate = getDevGenerateInput(options);\n\n const tasks = this.buildTaskList(directory, generate);\n await Promise.all(tasks);\n\n return { keepAlive: true };\n }\n\n private buildTaskList(directory: string, generate: boolean): Promise<void>[] {\n const tasks: Promise<void>[] = [];\n\n if (generate) {\n tasks.push(this.runSubCommand(\"generate\", directory, { silent: true }));\n }\n\n tasks.push(this.runSubCommand(\"build\", directory, { silent: true }));\n tasks.push(this.runSubCommand(\"start\", directory, { silent: false }));\n\n return tasks;\n }\n\n private async runSubCommand(\n command: string,\n directory: string,\n options: { silent: boolean },\n ): Promise<void> {\n await runSafe(async () => {\n const packageManager = await PackageManagerFactory.find(directory);\n await packageManager.runDev(directory, \"nf\", {}, [command, \"--watch\"], options.silent);\n });\n }\n}\n","import { join } from \"node:path\";\n\nimport { type Config } from \"@lib/config\";\nimport { NANOFORGE_DIR } from \"@lib/constants\";\nimport { type Input, getDirectoryInput, getWatchInput } from \"@lib/input\";\nimport { Collection, CollectionFactory } from \"@lib/schematics\";\nimport { Messages } from \"@lib/ui\";\n\nimport { getCwd } from \"@utils/path\";\n\nimport { getConfig } from \"~/action/common/config\";\n\nimport { AbstractAction, type HandleResult } from \"../abstract.action\";\nimport { executeSchematic } from \"../common/schematics\";\n\ninterface GenerateValues {\n name: string;\n directory: string;\n language: string;\n server: boolean;\n initFunctions: boolean;\n}\n\nexport class GenerateAction extends AbstractAction {\n protected startMessage = Messages.GENERATE_START;\n protected successMessage = Messages.GENERATE_SUCCESS;\n protected failureMessage = Messages.GENERATE_FAILED;\n\n public async handle(_args: Input, options: Input): Promise<HandleResult> {\n const directory = getDirectoryInput(options);\n const config = await getConfig(options, directory);\n const isWatch = getWatchInput(options);\n\n const values = this.extractValues(config);\n await this.generateParts(values, directory, isWatch);\n\n if (isWatch) {\n return this.enterWatchMode();\n }\n\n return {};\n }\n\n private extractValues(config: Config): GenerateValues {\n return {\n name: config.name,\n directory: \".\",\n language: config.language,\n server: config.server.enable,\n initFunctions: config.initFunctions,\n };\n }\n\n private async generateParts(\n values: GenerateValues,\n directory: string,\n watch: boolean,\n ): Promise<void> {\n const collection = CollectionFactory.create(Collection.NANOFORGE, directory);\n const baseOptions = this.baseSchematicOptions(values);\n\n await executeSchematic(\n \"Client main file\",\n collection,\n \"part-main\",\n { ...baseOptions, part: \"client\" },\n watch ? this.watchPath(directory, values.directory, \"client\") : undefined,\n );\n\n if (values.server) {\n await executeSchematic(\n \"Server main file\",\n collection,\n \"part-main\",\n { ...baseOptions, part: \"server\" },\n this.watchPath(directory, values.directory, \"server\"),\n );\n }\n }\n\n private baseSchematicOptions(values: GenerateValues) {\n return {\n name: values.name,\n directory: values.directory,\n language: values.language,\n initFunctions: values.initFunctions,\n };\n }\n\n private watchPath(directory: string, subDir: string, part: string): string {\n return join(getCwd(directory), subDir, NANOFORGE_DIR, `${part}.save.json`);\n }\n\n private enterWatchMode(): HandleResult {\n console.info();\n console.info(Messages.GENERATE_WATCH_START);\n console.info();\n return { keepAlive: true };\n }\n}\n","import { type Runner } from \"@lib/runner/runner\";\n\nimport { getCwd } from \"@utils/path\";\n\nimport { type Schematic } from \"./nanoforge.collection\";\nimport { type SchematicOption } from \"./schematic.option\";\n\nexport abstract class AbstractCollection {\n protected constructor(\n protected collection: string,\n protected runner: Runner,\n protected cwd?: string,\n ) {}\n\n public async execute(\n name: string,\n options: SchematicOption[],\n flags?: string[],\n onFail?: () => void,\n ): Promise<void> {\n const command = this.buildCommandLine(name, options, flags);\n await this.runner.run(command, {\n collect: true,\n cwd: this.cwd ? getCwd(this.cwd) : undefined,\n onFail,\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.serializeOptions(options)];\n }\n\n private serializeOptions(options: SchematicOption[]): string[] {\n return options.flatMap((option) => option.toCommandString());\n }\n}\n","import { type Runner } from \"@lib/runner/runner\";\n\nimport { AbstractCollection } from \"./abstract.collection\";\nimport { type 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 name: \"docker\",\n alias: \"docker\",\n description: \"Generate a Dockerfile for the application\",\n },\n ];\n\n constructor(runner: Runner, 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 { RunnerFactory } from \"@lib/runner\";\n\nimport { type 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.createSchematic();\n\n if (collection === Collection.NANOFORGE) {\n return new NanoforgeCollection(schematicRunner, directory);\n }\n throw new Error(`Unknown collection: ${collection}`);\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}=true`] : [`--${str}=false`];\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 { watch } from \"chokidar\";\n\nimport { type AbstractCollection, SchematicOption } from \"@lib/schematics\";\nimport { Messages } from \"@lib/ui\";\nimport { getSpinner } from \"@lib/ui/spinner\";\n\nexport const executeSchematic = async (\n name: string,\n collection: AbstractCollection,\n schematicName: string,\n options: object,\n fileToWatch?: string,\n): Promise<void> => {\n const execute = async (isRebuild = false) => {\n const message = isRebuild\n ? Messages.SCHEMATIC_WATCH_IN_PROGRESS(name)\n : Messages.SCHEMATIC_IN_PROGRESS(name);\n const spinner = getSpinner(message);\n spinner.start();\n\n await collection.execute(schematicName, mapSchematicOptions(options), undefined, () =>\n spinner.fail(Messages.SCHEMATIC_FAILED(name)),\n );\n\n spinner.succeed(Messages.SCHEMATIC_SUCCESS(name));\n };\n\n if (fileToWatch) {\n watch(fileToWatch).on(\"change\", () => execute(true));\n }\n\n await execute();\n};\n\nexport const mapSchematicOptions = (inputs: object): SchematicOption[] => {\n return Object.entries(inputs).reduce((acc: SchematicOption[], [key, value]) => {\n if (value === undefined) return acc;\n\n const mapped =\n typeof value === \"object\"\n ? new SchematicOption(key, mapSchematicOptions(value))\n : new SchematicOption(key, value);\n\n acc.push(mapped);\n return acc;\n }, []);\n};\n","import { type Input, getDirectoryInput, getInstallNamesInputOrAsk } from \"@lib/input\";\nimport { PackageManagerFactory } from \"@lib/package-manager\";\nimport { Messages } from \"@lib/ui\";\n\nimport { AbstractAction, type HandleResult } from \"../abstract.action\";\n\nexport class InstallAction extends AbstractAction {\n protected startMessage = Messages.INSTALL_START;\n protected successMessage = Messages.INSTALL_SUCCESS;\n protected failureMessage = Messages.INSTALL_FAILED;\n\n public async handle(args: Input, options: Input): Promise<HandleResult> {\n const names = await getInstallNamesInputOrAsk(args);\n const directory = getDirectoryInput(options);\n\n const packageManager = await PackageManagerFactory.find(directory);\n const success = await packageManager.addProduction(directory, names);\n\n return { success };\n }\n}\n","import { join } from \"node:path\";\n\nimport { type Input, getDirectoryInput } from \"@lib/input\";\nimport { getDockerOrAsk } from \"@lib/input/inputs/new/docker.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 { PackageManagerFactory } from \"@lib/package-manager\";\nimport { Collection, CollectionFactory } from \"@lib/schematics\";\nimport { Messages } from \"@lib/ui\";\n\nimport { AbstractAction, type HandleResult } from \"../abstract.action\";\nimport { executeSchematic } from \"../common/schematics\";\n\ninterface NewValues {\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 docker: boolean;\n}\n\nexport class NewAction extends AbstractAction {\n protected startMessage = Messages.NEW_START;\n protected successMessage = Messages.NEW_SUCCESS;\n protected failureMessage = Messages.NEW_FAILED;\n\n public async handle(_args: Input, options: Input): Promise<HandleResult> {\n const directory = getDirectoryInput(options);\n const values = await this.collectValues(options);\n\n await this.scaffold(values, directory);\n\n let res = true;\n\n if (!values.skipInstall) {\n res = await this.installDependencies(values.packageManager, join(directory, values.name));\n }\n\n return { success: res };\n }\n\n private async collectValues(inputs: Input): Promise<NewValues> {\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 docker: await getDockerOrAsk(inputs),\n };\n }\n\n private async scaffold(values: NewValues, directory: string): Promise<void> {\n const collection = CollectionFactory.create(Collection.NANOFORGE, directory);\n\n console.info(Messages.SCHEMATICS_START);\n console.info();\n\n await this.generateApplication(collection, values);\n await this.generateConfiguration(collection, values);\n await this.generateClientParts(collection, values);\n await this.generateDocker(collection, values);\n\n if (values.server) {\n await this.generateServerParts(collection, values);\n }\n }\n\n private generateApplication(\n collection: ReturnType<typeof CollectionFactory.create>,\n values: NewValues,\n ) {\n return 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 }\n\n private generateConfiguration(\n collection: ReturnType<typeof CollectionFactory.create>,\n values: NewValues,\n ) {\n return executeSchematic(\"Configuration\", collection, \"configuration\", {\n name: values.name,\n directory: values.directory,\n server: values.server,\n });\n }\n\n private async generateClientParts(\n collection: ReturnType<typeof CollectionFactory.create>,\n values: NewValues,\n ) {\n const partOptions = this.partOptions(values, \"client\");\n\n await executeSchematic(\"Client base\", collection, \"part-base\", {\n ...partOptions,\n server: values.server,\n });\n await executeSchematic(\"Client main file\", collection, \"part-main\", partOptions);\n }\n\n private async generateServerParts(\n collection: ReturnType<typeof CollectionFactory.create>,\n values: NewValues,\n ) {\n const partOptions = this.partOptions(values, \"server\");\n\n await executeSchematic(\"Server base\", collection, \"part-base\", {\n ...partOptions,\n server: values.server,\n });\n await executeSchematic(\"Server main file\", collection, \"part-main\", partOptions);\n }\n\n private async generateDocker(\n collection: ReturnType<typeof CollectionFactory.create>,\n values: NewValues,\n ) {\n await executeSchematic(\"Docker\", collection, \"docker\", {\n name: values.name,\n directory: values.directory,\n packageManager: values.packageManager,\n });\n }\n\n private partOptions(values: NewValues, part: \"client\" | \"server\") {\n return {\n name: values.name,\n part,\n directory: values.directory,\n language: values.language,\n initFunctions: values.initFunctions,\n };\n }\n\n private async installDependencies(\n packageManagerName: string,\n directory: string,\n ): Promise<boolean> {\n const packageManager = PackageManagerFactory.create(packageManagerName);\n return await packageManager.install(directory);\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 { type Input } from \"../../input.type\";\n\nconst getDockerInput = (inputs: Input) => {\n return getBooleanInput(inputs, \"docker\");\n};\n\nexport const getDockerOrAsk = (inputs: Input) => {\n return getInputOrAsk(getDockerInput(inputs), () =>\n askConfirm(Messages.NEW_DOCKER_QUESTION, { default: true }),\n );\n};\n","import { getBooleanInputWithDefault } from \"../../base-inputs\";\nimport { type 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 { type 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 { type 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 { type 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 { type 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 { type 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 { type 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 { type 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 { join } from \"path\";\n\nimport { type Config } from \"@lib/config\";\nimport {\n type Input,\n getDirectoryInput,\n getStringInput,\n getStringInputWithDefault,\n getWatchInput,\n} from \"@lib/input\";\nimport { PackageManagerFactory } from \"@lib/package-manager\";\nimport { Messages } from \"@lib/ui\";\n\nimport { getCwd, getModulePath } from \"@utils/path\";\nimport { runSafe } from \"@utils/run-safe\";\n\nimport { getConfig } from \"~/action/common/config\";\n\nimport { AbstractAction, type HandleResult } from \"../abstract.action\";\n\ninterface PortOptions {\n clientPort: string;\n gameExposurePort?: string;\n serverPort?: string;\n}\n\ninterface SSLOptions {\n cert: string;\n key: string;\n}\n\nexport class StartAction extends AbstractAction {\n protected startMessage = Messages.START_START;\n protected successMessage = Messages.START_SUCCESS;\n protected failureMessage = Messages.START_FAILED;\n\n public async handle(_args: Input, options: Input): Promise<HandleResult> {\n const directory = getDirectoryInput(options);\n const config = await getConfig(options, directory);\n const watch = getWatchInput(options);\n const ports = this.resolvePorts(options, config);\n const ssl = this.resolveSSL(options);\n\n const tasks = this.buildStartTasks(config, directory, watch, ports, ssl);\n await Promise.all(tasks);\n\n return { keepAlive: true };\n }\n\n private resolvePorts(options: Input, config: Config): PortOptions {\n return {\n clientPort: getStringInputWithDefault(options, \"clientPort\", config.client.port),\n gameExposurePort: getStringInput(options, \"gameExposurePort\"),\n serverPort: getStringInput(options, \"serverPort\"),\n };\n }\n\n private resolveSSL(options: Input): SSLOptions | undefined {\n const cert = getStringInput(options, \"cert\");\n const key = getStringInput(options, \"key\");\n\n if (!cert && !key) return undefined;\n\n if (!cert) throw new Error(\"No cert entered for SSL. Please enter a key with --cert.\");\n if (!key) throw new Error(\"No key entered for SSL. Please enter a key with --key.\");\n\n return {\n cert,\n key,\n };\n }\n\n private buildStartTasks(\n config: Config,\n directory: string,\n watch: boolean,\n ports: PortOptions,\n ssl?: SSLOptions,\n ): Promise<void>[] {\n const tasks: Promise<void>[] = [];\n\n if (config.server.enable) {\n tasks.push(this.startServer(directory, config.server.runtime.dir, watch, ports.serverPort));\n }\n\n tasks.push(this.startClient(directory, config, watch, ports, ssl));\n\n return tasks;\n }\n\n private async startClient(\n directory: string,\n config: Config,\n watch: boolean,\n ports: PortOptions,\n ssl?: SSLOptions,\n ): Promise<void> {\n const loaderPath = getModulePath(\"@nanoforge-dev/loader-client/package.json\", true);\n const gameDir = config.client.runtime.dir;\n\n const env = this.buildClientEnv(directory, gameDir, watch, config, ports, ssl);\n await this.runLoader(\"Client\", loaderPath, env);\n }\n\n private buildClientEnv(\n directory: string,\n gameDir: string,\n watch: boolean,\n config: Config,\n ports: PortOptions,\n ssl?: SSLOptions,\n ): Record<string, string> {\n const env: Record<string, string> = {\n PORT: ports.clientPort,\n GAME_DIR: getCwd(join(directory, gameDir)),\n };\n\n if (ports.gameExposurePort) {\n env[\"GAME_EXPOSURE_PORT\"] = ports.gameExposurePort;\n }\n\n if (watch) {\n env[\"WATCH\"] = \"true\";\n if (config.server.enable) {\n env[\"WATCH_SERVER_GAME_DIR\"] = getCwd(join(directory, config.server.runtime.dir));\n }\n }\n\n if (ssl) {\n env[\"CERT\"] = ssl.cert;\n env[\"KEY\"] = ssl.key;\n }\n\n return env;\n }\n\n private async startServer(\n directory: string,\n gameDir: string,\n watch: boolean,\n port?: string,\n ): Promise<void> {\n const loaderPath = getModulePath(\"@nanoforge-dev/loader-server/package.json\", true);\n\n const env: Record<string, string> = {\n GAME_DIR: getCwd(join(directory, gameDir)),\n };\n if (port) env[\"PORT\"] = port;\n if (watch) env[\"WATCH\"] = \"true\";\n\n await this.runLoader(\"Server\", loaderPath, env);\n }\n\n private async runLoader(\n name: string,\n directory: string,\n env: Record<string, string>,\n ): Promise<void> {\n await runSafe(async () => {\n const packageManager = await PackageManagerFactory.find(directory);\n await packageManager.run(name, directory, \"start\", env, [], true);\n });\n }\n}\n","import { type Command } from \"commander\";\n\nimport { type Input, type InputValue } from \"@lib/input\";\n\nimport { type 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 protected static mapToInput(mapping: Record<string, InputValue[\"value\"]>): Input {\n const input: Input = new Map();\n for (const [key, value] of Object.entries(mapping)) {\n input.set(key, { value });\n }\n return input;\n }\n}\n","import { type Command } from \"commander\";\n\nimport { CONFIG_FILE_NAME } from \"@lib/constants\";\n\nimport { AbstractCommand } from \"../abstract.command\";\n\ninterface BuildOptions {\n directory?: string;\n config?: string;\n clientOutDir?: string;\n serverOutDir?: string;\n watch?: boolean;\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\", CONFIG_FILE_NAME)\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 .option(\"--watch\", \"build app in watching mode\", false)\n .action(async (rawOptions: BuildOptions) => {\n const options = AbstractCommand.mapToInput({\n directory: rawOptions.directory,\n config: rawOptions.config,\n clientDirectory: rawOptions.clientOutDir,\n serverDirectory: rawOptions.serverOutDir,\n watch: rawOptions.watch,\n });\n\n await this.action.run(new Map(), options);\n });\n }\n}\n","import { type Command } from \"commander\";\n\nimport { CONFIG_FILE_NAME } from \"@lib/constants\";\n\nimport { AbstractCommand } from \"../abstract.command\";\n\ninterface DevOptions {\n directory?: string;\n config?: string;\n generate?: boolean;\n}\n\nexport class DevCommand extends AbstractCommand {\n public load(program: Command) {\n program\n .command(\"dev\")\n .description(\"run your game in dev mode\")\n .option(\"-d, --directory [directory]\", \"specify the directory of your project\")\n .option(\"-c, --config [config]\", \"path to the config file\", CONFIG_FILE_NAME)\n .option(\"--generate\", \"generate app from config\", false)\n .action(async (rawOptions: DevOptions) => {\n const options = AbstractCommand.mapToInput({\n directory: rawOptions.directory,\n config: rawOptions.config,\n generate: rawOptions.generate,\n });\n\n await this.action.run(new Map(), options);\n });\n }\n}\n","import { type Command } from \"commander\";\n\nimport { CONFIG_FILE_NAME } from \"@lib/constants\";\n\nimport { AbstractCommand } from \"../abstract.command\";\n\ninterface GenerateOptions {\n directory?: string;\n config?: string;\n watch?: boolean;\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\", CONFIG_FILE_NAME)\n .option(\"--watch\", \"generate app in watching mode\", false)\n .action(async (rawOptions: GenerateOptions) => {\n const options = AbstractCommand.mapToInput({\n directory: rawOptions.directory,\n config: rawOptions.config,\n watch: rawOptions.watch,\n });\n\n await this.action.run(new Map(), options);\n });\n }\n}\n","import { type Command } from \"commander\";\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 = AbstractCommand.mapToInput({\n directory: rawOptions.directory,\n });\n const args = AbstractCommand.mapToInput({\n names: names.length ? names : undefined,\n });\n\n await this.action.run(args, options);\n });\n }\n}\n","import { type Command } from \"commander\";\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 docker?: 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 .option(\"--docker\", \"generate docker files\")\n .option(\"--no-docker\", \"do not generate docker files\")\n .action(async (rawOptions: NewOptions) => {\n const options = AbstractCommand.mapToInput({\n directory: rawOptions.directory,\n name: rawOptions.name,\n path: rawOptions.path,\n packageManager: rawOptions.packageManager,\n language: rawOptions.language,\n strict: rawOptions.strict,\n server: rawOptions.server,\n initFunctions: rawOptions.initFunctions,\n skipInstall: rawOptions.skipInstall,\n docker: rawOptions.docker,\n });\n\n await this.action.run(new Map(), options);\n });\n }\n}\n","import { type Command } from \"commander\";\n\nimport { CONFIG_FILE_NAME } from \"@lib/constants\";\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 watch?: boolean;\n cert?: string;\n key?: 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\", CONFIG_FILE_NAME)\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 .option(\"--watch\", \"run app in watching mode\", false)\n .option(\"--cert [cert]\", \"path to the SSL certificate for HTTPS\")\n .option(\"--key [key]\", \"path to the SSL key for HTTPS\")\n .action(async (rawOptions: StartOptions) => {\n const options = AbstractCommand.mapToInput({\n directory: rawOptions.directory,\n config: rawOptions.config,\n clientPort: rawOptions.clientPort,\n gameExposurePort: rawOptions.gameExposurePort,\n serverPort: rawOptions.serverPort,\n watch: rawOptions.watch,\n cert: rawOptions.cert,\n key: rawOptions.key,\n });\n\n await this.action.run(new Map(), options);\n });\n }\n}\n"],"mappings":"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","names":["red","join","input","red","green","red","green","red","watch","env","red","fs","resolve","red","process","cwd","env","resolve","red","config","fs","resolve","red","red","join","join","success","config","join","join","cwd","cwd","watch","watch","config","watch","join","success","join","join","join","config","watch","env","join","input","red"]}
|