@nanoforge-dev/schematics 2.2.0 → 2.2.1
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.
|
@@ -150,7 +150,7 @@ var MainGenerator = class {
|
|
|
150
150
|
return this;
|
|
151
151
|
}
|
|
152
152
|
generateImports(els, relative) {
|
|
153
|
-
els.sort((a, b) => a.path.localeCompare(b.path)).forEach(({ name, path }) => {
|
|
153
|
+
[...els].sort((a, b) => a.path.localeCompare(b.path)).forEach(({ name, path }) => {
|
|
154
154
|
path = path.replace(/\.(?:ts|js)$/, "");
|
|
155
155
|
this.writeLine(`import { ${name} } from "${relative ? joinRelative(this.pathToRoot, path) : path}";`);
|
|
156
156
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"part-main.factory.js","names":["join","join"],"sources":["../../../src/utils/main/enums.ts","../../../src/utils/path.ts","../../../src/utils/main/save.type.ts","../../../src/utils/main/const.ts","../../../src/utils/main/main-utils.ts","../../../src/utils/main/main.generator.ts","../../../src/utils/main/main-functions.ts","../../../src/libs/part-main/part-main.factory.ts"],"sourcesContent":["export enum InitFunctionEnum {\n BEFORE_INIT = \"beforeInit\",\n AFTER_INIT = \"afterInit\",\n BEFORE_REGISTRY_INIT = \"beforeRegistryInit\",\n AFTER_REGISTRY_INIT = \"afterRegistryInit\",\n BEFORE_RUN = \"beforeRun\",\n AFTER_RUN = \"afterRun\",\n}\n","import { join } from \"path\";\n\nexport const joinRelative = (...paths: [string, ...string[]]): string => {\n const path = join(...paths);\n return path.startsWith(\"./\") || path.startsWith(\"../\") ? path : `./${path}`;\n};\n","export enum SaveLibraryTypeEnum {\n COMPONENT_SYSTEM = \"component-system\",\n GRAPHICS = \"graphics\",\n ASSET_MANAGER = \"asset-manager\",\n NETWORK = \"network\",\n INPUT = \"input\",\n SOUND = \"sound\",\n}\n\nexport interface SaveLibrary {\n id: string;\n type: SaveLibraryTypeEnum | string;\n name: string;\n path: string;\n}\n\nexport interface SaveComponent {\n name: string;\n path: string;\n paramsNames: string[];\n}\n\nexport interface SaveSystem {\n name: string;\n path: string;\n}\n\nexport interface SaveEntity {\n id: string;\n components: Record<string, Record<string, any>>;\n}\n\nexport interface Save {\n libraries: SaveLibrary[];\n components: SaveComponent[];\n systems: SaveSystem[];\n entities: SaveEntity[];\n}\n","import { SaveLibraryTypeEnum } from \"@utils/main/save.type\";\n\nexport const LIBS_FUNCTIONS_NAME: Record<SaveLibraryTypeEnum | string, string> = {\n [SaveLibraryTypeEnum.ASSET_MANAGER]: \"useAssetManager\",\n [SaveLibraryTypeEnum.COMPONENT_SYSTEM]: \"useComponentSystem\",\n [SaveLibraryTypeEnum.GRAPHICS]: \"useGraphics\",\n [SaveLibraryTypeEnum.INPUT]: \"useInput\",\n [SaveLibraryTypeEnum.NETWORK]: \"useNetwork\",\n [SaveLibraryTypeEnum.SOUND]: \"useSound\",\n};\n","export const getStringParam = (value: any): string => {\n if (typeof value === \"string\") return `\"${value}\"`;\n if (typeof value === \"number\") return value.toString();\n if (typeof value === \"boolean\") return value ? \"true\" : \"false\";\n if (typeof value === \"object\") return JSON.stringify(value);\n return \"undefined\";\n};\n","import { joinRelative } from \"@utils/path\";\n\nimport { LIBS_FUNCTIONS_NAME } from \"./const\";\nimport { InitFunctionEnum } from \"./enums\";\nimport { getStringParam } from \"./main-utils\";\nimport {\n type SaveComponent,\n type SaveEntity,\n type SaveLibrary,\n SaveLibraryTypeEnum,\n type SaveSystem,\n} from \"./save.type\";\n\nexport class MainGenerator {\n private buffer = \"\";\n private indentation = 0;\n private readonly editor: boolean;\n private readonly pathToRoot: string;\n\n constructor(editor: boolean = false, pathToRoot: string = \"\") {\n this.editor = editor;\n this.pathToRoot = pathToRoot;\n }\n\n toString(): string {\n return this.buffer;\n }\n\n generateBaseImports(hasTypes: boolean): MainGenerator {\n if (this.editor) {\n if (hasTypes)\n this.writeLine(\n `import { type IEditorRunOptions, NanoforgeFactory } from \"@nanoforge-dev/core-editor\";`,\n );\n else this.writeLine(`import { NanoforgeFactory } from \"@nanoforge-dev/core-editor\";`);\n } else {\n if (hasTypes) this.writeLine(`import { type IRunOptions } from \"@nanoforge-dev/common\";`);\n this.writeLine(`import { NanoforgeFactory } from \"@nanoforge-dev/core\";`);\n }\n\n this.endSection();\n return this;\n }\n\n generateLibsImports(libs: SaveLibrary[]): MainGenerator {\n return this.generateImports(libs, false);\n }\n\n generateComponentsImports(libs: SaveComponent[]): MainGenerator {\n return this.generateImports(libs, true);\n }\n\n generateSystemsImports(libs: SaveSystem[]): MainGenerator {\n return this.generateImports(libs, true);\n }\n\n generateMainFunction(hasTypes: boolean, cb: (generator: MainGenerator) => void): MainGenerator {\n if (this.editor)\n this.writeLine(\n `export async function main(options${hasTypes ? \": IEditorRunOptions\" : \"\"}) {`,\n );\n else this.writeLine(`export async function main(options${hasTypes ? \": IRunOptions\" : \"\"}) {`);\n this.indentation += 1;\n cb(this);\n this.indentation -= 1;\n this.writeLine(\"}\");\n return this;\n }\n\n generateApp(isServer: boolean): MainGenerator {\n this.writeLine(`const app = NanoforgeFactory.create${isServer ? \"Server\" : \"Client\"}();`);\n this.endSection();\n return this;\n }\n\n generateAppInit(): MainGenerator {\n this.writeLine(`await app.init(options);`);\n this.endSection();\n return this;\n }\n\n generateAppRun(hasInitFunctions: boolean): MainGenerator {\n this.writeLine(`await app.run();`);\n if (hasInitFunctions) this.endSection();\n return this;\n }\n\n generateLibsInstances(libs: SaveLibrary[]): MainGenerator {\n libs.forEach(({ id, name }) => this.writeLine(`const ${id} = new ${name}();`));\n this.endSection();\n return this;\n }\n\n generateLibsInit(libs: SaveLibrary[]): MainGenerator {\n libs.forEach(({ id, type }) => this.writeLine(this.getInitFunction(id, type)));\n this.endSection();\n return this;\n }\n\n generateRegistry(libs: SaveLibrary[]): MainGenerator {\n const libName =\n libs.find((lib) => lib.type === SaveLibraryTypeEnum.COMPONENT_SYSTEM)?.id ?? \"ecsLibrary\";\n this.writeLine(`const registry = ${libName}.registry;`);\n this.endSection();\n return this;\n }\n\n generateEntities(\n libs: SaveLibrary[],\n components: SaveComponent[],\n entities: SaveEntity[],\n ): MainGenerator {\n entities.forEach((entity, index) => this.generateEntity(libs, components, entity, index));\n return this;\n }\n\n generateSystems(systems: SaveSystem[]): MainGenerator {\n systems.forEach(({ name }) => this.writeLine(`registry.addSystem(${name});`));\n this.endSection();\n return this;\n }\n\n generateInitFunctionIfNeeded(needed: boolean, func: InitFunctionEnum): MainGenerator {\n if (needed) return this.generateInitFunction(func);\n return this;\n }\n\n generateInitFunctionsImportsIfNeeded(needed: boolean): MainGenerator {\n if (!needed) return this;\n return this.generateImports(\n [\n { name: \"afterInit\", path: \"./init/after-init\" },\n { name: \"afterRegistryInit\", path: \"./init/after-registry-init\" },\n { name: \"afterRun\", path: \"./init/after-run\" },\n { name: \"beforeInit\", path: \"./init/before-init\" },\n { name: \"beforeRegistryInit\", path: \"./init/before-registry-init\" },\n { name: \"beforeRun\", path: \"./init/before-run\" },\n ],\n true,\n );\n }\n\n private generateInitFunction(func: InitFunctionEnum): MainGenerator {\n const params = [\"app\"];\n if (\n [InitFunctionEnum.BEFORE_REGISTRY_INIT, InitFunctionEnum.AFTER_REGISTRY_INIT].includes(func)\n )\n params.push(\"registry\");\n this.writeLine(`await ${func}(${params.join(\", \")});`);\n if (func !== InitFunctionEnum.AFTER_RUN) this.endSection();\n return this;\n }\n\n private generateImports(els: { name: string; path: string }[], relative: boolean): MainGenerator {\n els\n .sort((a, b) => a.path.localeCompare(b.path))\n .forEach(({ name, path }) => {\n path = path.replace(/\\.(?:ts|js)$/, \"\");\n this.writeLine(\n `import { ${name} } from \"${relative ? joinRelative(this.pathToRoot, path) : path}\";`,\n );\n });\n this.endSection();\n return this;\n }\n\n private generateEntity(\n libs: SaveLibrary[],\n components: SaveComponent[],\n entity: SaveEntity,\n entityIndex: number,\n ): void {\n this.writeLine(`const ${entity.id} = registry.spawnEntity();`);\n Object.entries(entity.components).forEach(([componentName, rawParams]) => {\n const originalsParams = components.find(({ name }) => name === componentName)?.paramsNames;\n if (!originalsParams)\n throw new Error(\"Missing component in entity or inexistent saved component\");\n const params: string[] = originalsParams.map((ogParam) => {\n let isAsset = false;\n if (ogParam.startsWith(\"__RESERVED_ASSET_\")) {\n isAsset = true;\n ogParam = ogParam.replace(\"__RESERVED_ASSET_\", \"\");\n }\n\n const param = this.editor\n ? `options.editor.save.entities[${entityIndex}].components[\"${componentName}\"][\"${ogParam}\"]`\n : getStringParam(rawParams[ogParam]);\n if (isAsset) return this.getAssetParam(param, libs);\n return param;\n });\n this.writeLine(\n `registry.addComponent(${entity.id}, new ${componentName}(${params.join(\", \")}));`,\n );\n });\n if (this.editor) {\n this.writeLine(\n `registry.addComponent(${entity.id}, { name: \"__RESERVED_entityId\", entityId: \"${entity.id}\" });`,\n );\n }\n this.endSection();\n }\n\n private getAssetParam(param: string, libs: SaveLibrary[]): string {\n const libName =\n libs.find((lib) => lib.type === SaveLibraryTypeEnum.ASSET_MANAGER)?.id ??\n \"assetManagerLibrary\";\n return `${libName}.getAsset(${param})`;\n }\n\n private getInitFunction(name: string, type: SaveLibraryTypeEnum | string): string {\n const baseName = LIBS_FUNCTIONS_NAME[type];\n if (baseName) return `app.${baseName}(${name});`;\n return `app.use(Symbol(\"${type}\"), ${name});`;\n }\n\n private writeLine(text: string, indentation = true): void {\n const line = `${\" \".repeat(indentation ? this.indentation * 2 : 0)}${text}\\n`;\n this.buffer += line;\n }\n\n private endSection(): void {\n this.writeLine(\"\");\n }\n}\n","import { join } from \"path\";\n\nimport { InitFunctionEnum } from \"@utils/main/enums\";\n\nimport { MainGenerator } from \"./main.generator\";\nimport { type Save } from \"./save.type\";\n\nexport interface MainOptions {\n part: \"client\" | \"server\";\n language: \"js\" | \"ts\";\n initFunctions: boolean;\n editor: boolean;\n outFile?: string;\n}\n\nexport const generateMain = (options: MainOptions, save: Save) => {\n const isServer = options.part === \"server\";\n const hasTypes = options.language === \"ts\";\n const initFunctions = options.initFunctions;\n\n return (\n !options.editor\n ? new MainGenerator()\n : new MainGenerator(\n true,\n join(\n \"../\".repeat(options.outFile ? options.outFile.split(\"/\").length - 1 : 3),\n options.part,\n ),\n )\n )\n .generateBaseImports(hasTypes)\n .generateLibsImports(save.libraries)\n .generateInitFunctionsImportsIfNeeded(initFunctions)\n .generateComponentsImports(save.components)\n .generateSystemsImports(save.systems)\n\n .generateMainFunction(hasTypes, (generator) => {\n generator\n .generateApp(isServer)\n\n .generateLibsInstances(save.libraries)\n .generateLibsInit(save.libraries)\n\n .generateInitFunctionIfNeeded(initFunctions, InitFunctionEnum.BEFORE_INIT)\n .generateAppInit()\n .generateInitFunctionIfNeeded(initFunctions, InitFunctionEnum.AFTER_INIT)\n\n .generateRegistry(save.libraries)\n\n .generateInitFunctionIfNeeded(initFunctions, InitFunctionEnum.BEFORE_REGISTRY_INIT)\n .generateEntities(save.libraries, save.components, save.entities)\n .generateSystems(save.systems)\n .generateInitFunctionIfNeeded(initFunctions, InitFunctionEnum.AFTER_REGISTRY_INIT)\n\n .generateInitFunctionIfNeeded(initFunctions, InitFunctionEnum.BEFORE_RUN)\n .generateAppRun(initFunctions)\n .generateInitFunctionIfNeeded(initFunctions, InitFunctionEnum.AFTER_RUN);\n })\n .toString();\n};\n","import { type Path, join, normalize, strings } from \"@angular-devkit/core\";\nimport {\n type Rule,\n type Source,\n type Tree,\n apply,\n asSource,\n mergeWith,\n move,\n template,\n} from \"@angular-devkit/schematics\";\nimport * as fs from \"fs\";\n\nimport { generateMain } from \"@utils/main/main-functions\";\nimport { type Save, SaveLibraryTypeEnum } from \"@utils/main/save.type\";\n\nimport { type PartMainOptions } from \"./part-main.options\";\nimport { type PartMainSchema } from \"./part-main.schema\";\n\nconst transform = (schema: PartMainSchema): PartMainOptions => {\n void schema;\n\n return {};\n};\n\nconst generate = (options: PartMainOptions, path: string, schema: PartMainSchema): Source => {\n const rules = [\n template({\n ...strings,\n ...options,\n }),\n move(normalize(path)),\n ];\n\n return apply(asSource(writeMain(schema, path)), rules);\n};\n\nconst getMainPath = (schema: PartMainSchema): string => {\n if (schema.outFile) return schema.outFile;\n if (schema.editor)\n return join(\".nanoforge/editor\" as Path, schema.part, `main.${schema.language}`);\n return join(schema.part as Path, `main.${schema.language}`);\n};\n\nconst writeMain = (schema: PartMainSchema, path: string) => {\n return (tree: Tree) => {\n let save = getSave(path, schema.part, schema.saveFile);\n\n const resPath = getMainPath(schema);\n\n if (schema.editor) {\n save = getEditorSave(save);\n }\n\n const content = generateMain(schema, save);\n fs.rmSync(join(path as Path, resPath), { force: true });\n tree.create(resPath, content);\n return tree;\n };\n};\n\nconst getSave = (path: string, part: \"client\" | \"server\", saveFile?: string): Save => {\n return JSON.parse(\n fs.readFileSync(saveFile ?? join(path as Path, `.nanoforge/${part}.save.json`), \"utf-8\"),\n ) as Save;\n};\n\nconst getEditorSave = (save: Save): Save => {\n if (save.libraries.some((lib) => lib.type === SaveLibraryTypeEnum.GRAPHICS))\n save.libraries.push({\n id: \"graphicsEditorLibrary\",\n type: \"graphics-editor\",\n name: \"Graphics2DEditorLibrary\",\n path: \"@nanoforge-dev/graphics-2d-editor\",\n });\n\n return save;\n};\n\nexport const main = (schema: PartMainSchema): Rule => {\n const options = transform(schema);\n\n return mergeWith(generate(options, schema.directory, schema));\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"part-main.factory.js","names":["join","join"],"sources":["../../../src/utils/main/enums.ts","../../../src/utils/path.ts","../../../src/utils/main/save.type.ts","../../../src/utils/main/const.ts","../../../src/utils/main/main-utils.ts","../../../src/utils/main/main.generator.ts","../../../src/utils/main/main-functions.ts","../../../src/libs/part-main/part-main.factory.ts"],"sourcesContent":["export enum InitFunctionEnum {\n BEFORE_INIT = \"beforeInit\",\n AFTER_INIT = \"afterInit\",\n BEFORE_REGISTRY_INIT = \"beforeRegistryInit\",\n AFTER_REGISTRY_INIT = \"afterRegistryInit\",\n BEFORE_RUN = \"beforeRun\",\n AFTER_RUN = \"afterRun\",\n}\n","import { join } from \"path\";\n\nexport const joinRelative = (...paths: [string, ...string[]]): string => {\n const path = join(...paths);\n return path.startsWith(\"./\") || path.startsWith(\"../\") ? path : `./${path}`;\n};\n","export enum SaveLibraryTypeEnum {\n COMPONENT_SYSTEM = \"component-system\",\n GRAPHICS = \"graphics\",\n ASSET_MANAGER = \"asset-manager\",\n NETWORK = \"network\",\n INPUT = \"input\",\n SOUND = \"sound\",\n}\n\nexport interface SaveLibrary {\n id: string;\n type: SaveLibraryTypeEnum | string;\n name: string;\n path: string;\n}\n\nexport interface SaveComponent {\n name: string;\n path: string;\n paramsNames: string[];\n}\n\nexport interface SaveSystem {\n name: string;\n path: string;\n}\n\nexport interface SaveEntity {\n id: string;\n components: Record<string, Record<string, any>>;\n}\n\nexport interface Save {\n libraries: SaveLibrary[];\n components: SaveComponent[];\n systems: SaveSystem[];\n entities: SaveEntity[];\n}\n","import { SaveLibraryTypeEnum } from \"@utils/main/save.type\";\n\nexport const LIBS_FUNCTIONS_NAME: Record<SaveLibraryTypeEnum | string, string> = {\n [SaveLibraryTypeEnum.ASSET_MANAGER]: \"useAssetManager\",\n [SaveLibraryTypeEnum.COMPONENT_SYSTEM]: \"useComponentSystem\",\n [SaveLibraryTypeEnum.GRAPHICS]: \"useGraphics\",\n [SaveLibraryTypeEnum.INPUT]: \"useInput\",\n [SaveLibraryTypeEnum.NETWORK]: \"useNetwork\",\n [SaveLibraryTypeEnum.SOUND]: \"useSound\",\n};\n","export const getStringParam = (value: any): string => {\n if (typeof value === \"string\") return `\"${value}\"`;\n if (typeof value === \"number\") return value.toString();\n if (typeof value === \"boolean\") return value ? \"true\" : \"false\";\n if (typeof value === \"object\") return JSON.stringify(value);\n return \"undefined\";\n};\n","import { joinRelative } from \"@utils/path\";\n\nimport { LIBS_FUNCTIONS_NAME } from \"./const\";\nimport { InitFunctionEnum } from \"./enums\";\nimport { getStringParam } from \"./main-utils\";\nimport {\n type SaveComponent,\n type SaveEntity,\n type SaveLibrary,\n SaveLibraryTypeEnum,\n type SaveSystem,\n} from \"./save.type\";\n\nexport class MainGenerator {\n private buffer = \"\";\n private indentation = 0;\n private readonly editor: boolean;\n private readonly pathToRoot: string;\n\n constructor(editor: boolean = false, pathToRoot: string = \"\") {\n this.editor = editor;\n this.pathToRoot = pathToRoot;\n }\n\n toString(): string {\n return this.buffer;\n }\n\n generateBaseImports(hasTypes: boolean): MainGenerator {\n if (this.editor) {\n if (hasTypes)\n this.writeLine(\n `import { type IEditorRunOptions, NanoforgeFactory } from \"@nanoforge-dev/core-editor\";`,\n );\n else this.writeLine(`import { NanoforgeFactory } from \"@nanoforge-dev/core-editor\";`);\n } else {\n if (hasTypes) this.writeLine(`import { type IRunOptions } from \"@nanoforge-dev/common\";`);\n this.writeLine(`import { NanoforgeFactory } from \"@nanoforge-dev/core\";`);\n }\n\n this.endSection();\n return this;\n }\n\n generateLibsImports(libs: SaveLibrary[]): MainGenerator {\n return this.generateImports(libs, false);\n }\n\n generateComponentsImports(libs: SaveComponent[]): MainGenerator {\n return this.generateImports(libs, true);\n }\n\n generateSystemsImports(libs: SaveSystem[]): MainGenerator {\n return this.generateImports(libs, true);\n }\n\n generateMainFunction(hasTypes: boolean, cb: (generator: MainGenerator) => void): MainGenerator {\n if (this.editor)\n this.writeLine(\n `export async function main(options${hasTypes ? \": IEditorRunOptions\" : \"\"}) {`,\n );\n else this.writeLine(`export async function main(options${hasTypes ? \": IRunOptions\" : \"\"}) {`);\n this.indentation += 1;\n cb(this);\n this.indentation -= 1;\n this.writeLine(\"}\");\n return this;\n }\n\n generateApp(isServer: boolean): MainGenerator {\n this.writeLine(`const app = NanoforgeFactory.create${isServer ? \"Server\" : \"Client\"}();`);\n this.endSection();\n return this;\n }\n\n generateAppInit(): MainGenerator {\n this.writeLine(`await app.init(options);`);\n this.endSection();\n return this;\n }\n\n generateAppRun(hasInitFunctions: boolean): MainGenerator {\n this.writeLine(`await app.run();`);\n if (hasInitFunctions) this.endSection();\n return this;\n }\n\n generateLibsInstances(libs: SaveLibrary[]): MainGenerator {\n libs.forEach(({ id, name }) => this.writeLine(`const ${id} = new ${name}();`));\n this.endSection();\n return this;\n }\n\n generateLibsInit(libs: SaveLibrary[]): MainGenerator {\n libs.forEach(({ id, type }) => this.writeLine(this.getInitFunction(id, type)));\n this.endSection();\n return this;\n }\n\n generateRegistry(libs: SaveLibrary[]): MainGenerator {\n const libName =\n libs.find((lib) => lib.type === SaveLibraryTypeEnum.COMPONENT_SYSTEM)?.id ?? \"ecsLibrary\";\n this.writeLine(`const registry = ${libName}.registry;`);\n this.endSection();\n return this;\n }\n\n generateEntities(\n libs: SaveLibrary[],\n components: SaveComponent[],\n entities: SaveEntity[],\n ): MainGenerator {\n entities.forEach((entity, index) => this.generateEntity(libs, components, entity, index));\n return this;\n }\n\n generateSystems(systems: SaveSystem[]): MainGenerator {\n systems.forEach(({ name }) => this.writeLine(`registry.addSystem(${name});`));\n this.endSection();\n return this;\n }\n\n generateInitFunctionIfNeeded(needed: boolean, func: InitFunctionEnum): MainGenerator {\n if (needed) return this.generateInitFunction(func);\n return this;\n }\n\n generateInitFunctionsImportsIfNeeded(needed: boolean): MainGenerator {\n if (!needed) return this;\n return this.generateImports(\n [\n { name: \"afterInit\", path: \"./init/after-init\" },\n { name: \"afterRegistryInit\", path: \"./init/after-registry-init\" },\n { name: \"afterRun\", path: \"./init/after-run\" },\n { name: \"beforeInit\", path: \"./init/before-init\" },\n { name: \"beforeRegistryInit\", path: \"./init/before-registry-init\" },\n { name: \"beforeRun\", path: \"./init/before-run\" },\n ],\n true,\n );\n }\n\n private generateInitFunction(func: InitFunctionEnum): MainGenerator {\n const params = [\"app\"];\n if (\n [InitFunctionEnum.BEFORE_REGISTRY_INIT, InitFunctionEnum.AFTER_REGISTRY_INIT].includes(func)\n )\n params.push(\"registry\");\n this.writeLine(`await ${func}(${params.join(\", \")});`);\n if (func !== InitFunctionEnum.AFTER_RUN) this.endSection();\n return this;\n }\n\n private generateImports(els: { name: string; path: string }[], relative: boolean): MainGenerator {\n [...els]\n .sort((a, b) => a.path.localeCompare(b.path))\n .forEach(({ name, path }) => {\n path = path.replace(/\\.(?:ts|js)$/, \"\");\n this.writeLine(\n `import { ${name} } from \"${relative ? joinRelative(this.pathToRoot, path) : path}\";`,\n );\n });\n this.endSection();\n return this;\n }\n\n private generateEntity(\n libs: SaveLibrary[],\n components: SaveComponent[],\n entity: SaveEntity,\n entityIndex: number,\n ): void {\n this.writeLine(`const ${entity.id} = registry.spawnEntity();`);\n Object.entries(entity.components).forEach(([componentName, rawParams]) => {\n const originalsParams = components.find(({ name }) => name === componentName)?.paramsNames;\n if (!originalsParams)\n throw new Error(\"Missing component in entity or inexistent saved component\");\n const params: string[] = originalsParams.map((ogParam) => {\n let isAsset = false;\n if (ogParam.startsWith(\"__RESERVED_ASSET_\")) {\n isAsset = true;\n ogParam = ogParam.replace(\"__RESERVED_ASSET_\", \"\");\n }\n\n const param = this.editor\n ? `options.editor.save.entities[${entityIndex}].components[\"${componentName}\"][\"${ogParam}\"]`\n : getStringParam(rawParams[ogParam]);\n if (isAsset) return this.getAssetParam(param, libs);\n return param;\n });\n this.writeLine(\n `registry.addComponent(${entity.id}, new ${componentName}(${params.join(\", \")}));`,\n );\n });\n if (this.editor) {\n this.writeLine(\n `registry.addComponent(${entity.id}, { name: \"__RESERVED_entityId\", entityId: \"${entity.id}\" });`,\n );\n }\n this.endSection();\n }\n\n private getAssetParam(param: string, libs: SaveLibrary[]): string {\n const libName =\n libs.find((lib) => lib.type === SaveLibraryTypeEnum.ASSET_MANAGER)?.id ??\n \"assetManagerLibrary\";\n return `${libName}.getAsset(${param})`;\n }\n\n private getInitFunction(name: string, type: SaveLibraryTypeEnum | string): string {\n const baseName = LIBS_FUNCTIONS_NAME[type];\n if (baseName) return `app.${baseName}(${name});`;\n return `app.use(Symbol(\"${type}\"), ${name});`;\n }\n\n private writeLine(text: string, indentation = true): void {\n const line = `${\" \".repeat(indentation ? this.indentation * 2 : 0)}${text}\\n`;\n this.buffer += line;\n }\n\n private endSection(): void {\n this.writeLine(\"\");\n }\n}\n","import { join } from \"path\";\n\nimport { InitFunctionEnum } from \"@utils/main/enums\";\n\nimport { MainGenerator } from \"./main.generator\";\nimport { type Save } from \"./save.type\";\n\nexport interface MainOptions {\n part: \"client\" | \"server\";\n language: \"js\" | \"ts\";\n initFunctions: boolean;\n editor: boolean;\n outFile?: string;\n}\n\nexport const generateMain = (options: MainOptions, save: Save) => {\n const isServer = options.part === \"server\";\n const hasTypes = options.language === \"ts\";\n const initFunctions = options.initFunctions;\n\n return (\n !options.editor\n ? new MainGenerator()\n : new MainGenerator(\n true,\n join(\n \"../\".repeat(options.outFile ? options.outFile.split(\"/\").length - 1 : 3),\n options.part,\n ),\n )\n )\n .generateBaseImports(hasTypes)\n .generateLibsImports(save.libraries)\n .generateInitFunctionsImportsIfNeeded(initFunctions)\n .generateComponentsImports(save.components)\n .generateSystemsImports(save.systems)\n\n .generateMainFunction(hasTypes, (generator) => {\n generator\n .generateApp(isServer)\n\n .generateLibsInstances(save.libraries)\n .generateLibsInit(save.libraries)\n\n .generateInitFunctionIfNeeded(initFunctions, InitFunctionEnum.BEFORE_INIT)\n .generateAppInit()\n .generateInitFunctionIfNeeded(initFunctions, InitFunctionEnum.AFTER_INIT)\n\n .generateRegistry(save.libraries)\n\n .generateInitFunctionIfNeeded(initFunctions, InitFunctionEnum.BEFORE_REGISTRY_INIT)\n .generateEntities(save.libraries, save.components, save.entities)\n .generateSystems(save.systems)\n .generateInitFunctionIfNeeded(initFunctions, InitFunctionEnum.AFTER_REGISTRY_INIT)\n\n .generateInitFunctionIfNeeded(initFunctions, InitFunctionEnum.BEFORE_RUN)\n .generateAppRun(initFunctions)\n .generateInitFunctionIfNeeded(initFunctions, InitFunctionEnum.AFTER_RUN);\n })\n .toString();\n};\n","import { type Path, join, normalize, strings } from \"@angular-devkit/core\";\nimport {\n type Rule,\n type Source,\n type Tree,\n apply,\n asSource,\n mergeWith,\n move,\n template,\n} from \"@angular-devkit/schematics\";\nimport * as fs from \"fs\";\n\nimport { generateMain } from \"@utils/main/main-functions\";\nimport { type Save, SaveLibraryTypeEnum } from \"@utils/main/save.type\";\n\nimport { type PartMainOptions } from \"./part-main.options\";\nimport { type PartMainSchema } from \"./part-main.schema\";\n\nconst transform = (schema: PartMainSchema): PartMainOptions => {\n void schema;\n\n return {};\n};\n\nconst generate = (options: PartMainOptions, path: string, schema: PartMainSchema): Source => {\n const rules = [\n template({\n ...strings,\n ...options,\n }),\n move(normalize(path)),\n ];\n\n return apply(asSource(writeMain(schema, path)), rules);\n};\n\nconst getMainPath = (schema: PartMainSchema): string => {\n if (schema.outFile) return schema.outFile;\n if (schema.editor)\n return join(\".nanoforge/editor\" as Path, schema.part, `main.${schema.language}`);\n return join(schema.part as Path, `main.${schema.language}`);\n};\n\nconst writeMain = (schema: PartMainSchema, path: string) => {\n return (tree: Tree) => {\n let save = getSave(path, schema.part, schema.saveFile);\n\n const resPath = getMainPath(schema);\n\n if (schema.editor) {\n save = getEditorSave(save);\n }\n\n const content = generateMain(schema, save);\n fs.rmSync(join(path as Path, resPath), { force: true });\n tree.create(resPath, content);\n return tree;\n };\n};\n\nconst getSave = (path: string, part: \"client\" | \"server\", saveFile?: string): Save => {\n return JSON.parse(\n fs.readFileSync(saveFile ?? join(path as Path, `.nanoforge/${part}.save.json`), \"utf-8\"),\n ) as Save;\n};\n\nconst getEditorSave = (save: Save): Save => {\n if (save.libraries.some((lib) => lib.type === SaveLibraryTypeEnum.GRAPHICS))\n save.libraries.push({\n id: \"graphicsEditorLibrary\",\n type: \"graphics-editor\",\n name: \"Graphics2DEditorLibrary\",\n path: \"@nanoforge-dev/graphics-2d-editor\",\n });\n\n return save;\n};\n\nexport const main = (schema: PartMainSchema): Rule => {\n const options = transform(schema);\n\n return mergeWith(generate(options, schema.directory, schema));\n};\n"],"mappings":"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"}
|