@nanoforge-dev/schematics 2.1.5-beta.6bb4b4c → 2.1.5-beta.89059f7

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.
@@ -1 +1 @@
1
- {"version":3,"file":"application.factory.d.ts","names":["name","version","author","description","directory","language","strict","lint","packageManager","server","editor","initFunctions"],"sources":["../../../src/libs/application/application.schema.d.ts","../../../src/libs/application/application.factory.ts"],"mappings":";;;UAAiB,iBAAA;;;AAAjB;EAIEA,IAAAA;EAJgC;;;EAShCC,OAAAA;EAeAG;;;EAVAF,MAAAA;EAmCAO;;;EA9BAN,WAAAA;;;;EAKAC,SAAAA;;;;EAKAC,QAAAA;ECyDD;AAAA;;EDpDCC,MAAAA;;;;EAKAC,IAAAA;;;;EAKAC,cAAAA;;;;EAKAC,MAAAA;;;;EAKAC,MAAAA;;;;EAKAC,aAAAA;AAAAA;;;cCJW,IAAA,GAAQ,MAAA,EAAQ,iBAAA,KAAoB,IA+BhD"}
1
+ {"version":3,"file":"application.factory.d.ts","names":["name","version","author","description","directory","language","strict","lint","packageManager","server","editor","initFunctions"],"sources":["../../../src/libs/application/application.schema.d.ts","../../../src/libs/application/application.factory.ts"],"mappings":";;;UAAiB,iBAAA;;;AAAjB;EAIEA,IAAAA;EAJgC;;;EAShCC,OAAAA;EAeAG;;;EAVAF,MAAAA;EAmCAO;;;EA9BAN,WAAAA;;;;EAKAC,SAAAA;;;;EAKAC,QAAAA;ECqDD;AAAA;;EDhDCC,MAAAA;;;;EAKAC,IAAAA;;;;EAKAC,cAAAA;;;;EAKAC,MAAAA;;;;EAKAC,MAAAA;;;;EAKAC,aAAAA;AAAAA;;;cCJW,IAAA,GAAQ,MAAA,EAAQ,iBAAA,KAAoB,IA2BhD"}
@@ -47,7 +47,6 @@ const main = (schema) => {
47
47
  if (options.language === "js") tree.delete(join(basePath, "jsconfig.json"));
48
48
  }
49
49
  if (!options.server) tree.delete(join(basePath, ".env"));
50
- if (options.packageManager !== "pnpm") tree.delete(join(basePath, "pnpm-workspace.yaml"));
51
50
  return tree;
52
51
  };
53
52
  };
@@ -1 +1 @@
1
- {"version":3,"file":"application.factory.js","names":[],"sources":["../../../src/defaults.ts","../../../src/libs/application/application.factory.ts"],"sourcesContent":["export const DEFAULT_APP_NAME = \"nanoforge-app\";\nexport const DEFAULT_VERSION = \"0.0.0\";\nexport const DEFAULT_AUTHOR = \"\";\nexport const DEFAULT_DESCRIPTION = \"\";\nexport const DEFAULT_LANGUAGE = \"ts\";\nexport const DEFAULT_PACKAGE_MANAGER = \"npm\";\n","import { type Path, join, normalize, strings } from \"@angular-devkit/core\";\nimport {\n type Rule,\n type SchematicContext,\n type Source,\n type Tree,\n apply,\n mergeWith,\n move,\n renameTemplateFiles,\n template,\n url,\n} from \"@angular-devkit/schematics\";\nimport { firstValueFrom } from \"rxjs\";\n\nimport {\n DEFAULT_APP_NAME,\n DEFAULT_AUTHOR,\n DEFAULT_DESCRIPTION,\n DEFAULT_LANGUAGE,\n DEFAULT_PACKAGE_MANAGER,\n DEFAULT_VERSION,\n} from \"~/defaults\";\n\nimport { type ApplicationOptions } from \"./application.options\";\nimport { type ApplicationSchema } from \"./application.schema\";\n\nconst transform = (schema: ApplicationSchema): ApplicationOptions => {\n return {\n name: schema.name ?? DEFAULT_APP_NAME,\n version: schema.version ?? DEFAULT_VERSION,\n author: schema.author ?? DEFAULT_AUTHOR,\n description: schema.description ?? DEFAULT_DESCRIPTION,\n language: schema.language ?? DEFAULT_LANGUAGE,\n strict: schema.strict ?? true,\n lint: schema.lint ?? true,\n packageManager: schema.packageManager ?? DEFAULT_PACKAGE_MANAGER,\n server: schema.server ?? false,\n editor: schema.editor ?? false,\n initFunctions: schema.initFunctions ?? false,\n };\n};\n\nconst generate = (options: ApplicationOptions, path: string): Source => {\n return apply(url(join(\"./files\" as Path, options.language)), [\n template({\n dot: \".\",\n ...strings,\n ...options,\n }),\n renameTemplateFiles(),\n move(normalize(path)),\n ]);\n};\n\nexport const main = (schema: ApplicationSchema): Rule => {\n const options = transform(schema);\n const path = schema.directory ?? options.name;\n\n return async (baseTree: Tree, context: SchematicContext) => {\n let tree = await mergeWith(generate(options, path))(baseTree, context);\n if (!tree) return tree;\n if (!(\"delete\" in tree)) {\n if (typeof tree === \"function\") return tree;\n tree = await firstValueFrom(tree);\n }\n\n const basePath = join(\"/\" as Path, path);\n\n if (!options.lint) {\n tree.delete(join(basePath, \"eslint.config.js\"));\n tree.delete(join(basePath, \"prettier.config.js\"));\n tree.delete(join(basePath, \".prettierignore\"));\n if (options.language === \"js\") tree.delete(join(basePath, \"jsconfig.json\"));\n }\n\n if (!options.server) {\n tree.delete(join(basePath, \".env\"));\n }\n\n if (options.packageManager !== \"pnpm\") {\n tree.delete(join(basePath, \"pnpm-workspace.yaml\"));\n }\n\n return tree;\n };\n};\n"],"mappings":";;;;;AC2BA,MAAM,aAAa,WAAkD;CACnE,OAAO;EACL,MAAM,OAAO,QAAA;EACb,SAAS,OAAO,WAAA;EAChB,QAAQ,OAAO,UAAA;EACf,aAAa,OAAO,eAAA;EACpB,UAAU,OAAO,YAAA;EACjB,QAAQ,OAAO,UAAU;EACzB,MAAM,OAAO,QAAQ;EACrB,gBAAgB,OAAO,kBAAA;EACvB,QAAQ,OAAO,UAAU;EACzB,QAAQ,OAAO,UAAU;EACzB,eAAe,OAAO,iBAAiB;CACzC;AACF;AAEA,MAAM,YAAY,SAA6B,SAAyB;CACtE,OAAO,MAAM,IAAI,KAAK,WAAmB,QAAQ,QAAQ,CAAC,GAAG;EAC3D,SAAS;GACP,KAAK;GACL,GAAG;GACH,GAAG;EACL,CAAC;EACD,oBAAoB;EACpB,KAAK,UAAU,IAAI,CAAC;CACtB,CAAC;AACH;AAEA,MAAa,QAAQ,WAAoC;CACvD,MAAM,UAAU,UAAU,MAAM;CAChC,MAAM,OAAO,OAAO,aAAa,QAAQ;CAEzC,OAAO,OAAO,UAAgB,YAA8B;EAC1D,IAAI,OAAO,MAAM,UAAU,SAAS,SAAS,IAAI,CAAC,CAAC,CAAC,UAAU,OAAO;EACrE,IAAI,CAAC,MAAM,OAAO;EAClB,IAAI,EAAE,YAAY,OAAO;GACvB,IAAI,OAAO,SAAS,YAAY,OAAO;GACvC,OAAO,MAAM,eAAe,IAAI;EAClC;EAEA,MAAM,WAAW,KAAK,KAAa,IAAI;EAEvC,IAAI,CAAC,QAAQ,MAAM;GACjB,KAAK,OAAO,KAAK,UAAU,kBAAkB,CAAC;GAC9C,KAAK,OAAO,KAAK,UAAU,oBAAoB,CAAC;GAChD,KAAK,OAAO,KAAK,UAAU,iBAAiB,CAAC;GAC7C,IAAI,QAAQ,aAAa,MAAM,KAAK,OAAO,KAAK,UAAU,eAAe,CAAC;EAC5E;EAEA,IAAI,CAAC,QAAQ,QACX,KAAK,OAAO,KAAK,UAAU,MAAM,CAAC;EAGpC,IAAI,QAAQ,mBAAmB,QAC7B,KAAK,OAAO,KAAK,UAAU,qBAAqB,CAAC;EAGnD,OAAO;CACT;AACF"}
1
+ {"version":3,"file":"application.factory.js","names":[],"sources":["../../../src/defaults.ts","../../../src/libs/application/application.factory.ts"],"sourcesContent":["export const DEFAULT_APP_NAME = \"nanoforge-app\";\nexport const DEFAULT_VERSION = \"0.0.0\";\nexport const DEFAULT_AUTHOR = \"\";\nexport const DEFAULT_DESCRIPTION = \"\";\nexport const DEFAULT_LANGUAGE = \"ts\";\nexport const DEFAULT_PACKAGE_MANAGER = \"npm\";\n","import { type Path, join, normalize, strings } from \"@angular-devkit/core\";\nimport {\n type Rule,\n type SchematicContext,\n type Source,\n type Tree,\n apply,\n mergeWith,\n move,\n renameTemplateFiles,\n template,\n url,\n} from \"@angular-devkit/schematics\";\nimport { firstValueFrom } from \"rxjs\";\n\nimport {\n DEFAULT_APP_NAME,\n DEFAULT_AUTHOR,\n DEFAULT_DESCRIPTION,\n DEFAULT_LANGUAGE,\n DEFAULT_PACKAGE_MANAGER,\n DEFAULT_VERSION,\n} from \"~/defaults\";\n\nimport { type ApplicationOptions } from \"./application.options\";\nimport { type ApplicationSchema } from \"./application.schema\";\n\nconst transform = (schema: ApplicationSchema): ApplicationOptions => {\n return {\n name: schema.name ?? DEFAULT_APP_NAME,\n version: schema.version ?? DEFAULT_VERSION,\n author: schema.author ?? DEFAULT_AUTHOR,\n description: schema.description ?? DEFAULT_DESCRIPTION,\n language: schema.language ?? DEFAULT_LANGUAGE,\n strict: schema.strict ?? true,\n lint: schema.lint ?? true,\n packageManager: schema.packageManager ?? DEFAULT_PACKAGE_MANAGER,\n server: schema.server ?? false,\n editor: schema.editor ?? false,\n initFunctions: schema.initFunctions ?? false,\n };\n};\n\nconst generate = (options: ApplicationOptions, path: string): Source => {\n return apply(url(join(\"./files\" as Path, options.language)), [\n template({\n dot: \".\",\n ...strings,\n ...options,\n }),\n renameTemplateFiles(),\n move(normalize(path)),\n ]);\n};\n\nexport const main = (schema: ApplicationSchema): Rule => {\n const options = transform(schema);\n const path = schema.directory ?? options.name;\n\n return async (baseTree: Tree, context: SchematicContext) => {\n let tree = await mergeWith(generate(options, path))(baseTree, context);\n if (!tree) return tree;\n if (!(\"delete\" in tree)) {\n if (typeof tree === \"function\") return tree;\n tree = await firstValueFrom(tree);\n }\n\n const basePath = join(\"/\" as Path, path);\n\n if (!options.lint) {\n tree.delete(join(basePath, \"eslint.config.js\"));\n tree.delete(join(basePath, \"prettier.config.js\"));\n tree.delete(join(basePath, \".prettierignore\"));\n if (options.language === \"js\") tree.delete(join(basePath, \"jsconfig.json\"));\n }\n\n if (!options.server) {\n tree.delete(join(basePath, \".env\"));\n }\n\n return tree;\n };\n};\n"],"mappings":";;;;;AC2BA,MAAM,aAAa,WAAkD;CACnE,OAAO;EACL,MAAM,OAAO,QAAA;EACb,SAAS,OAAO,WAAA;EAChB,QAAQ,OAAO,UAAA;EACf,aAAa,OAAO,eAAA;EACpB,UAAU,OAAO,YAAA;EACjB,QAAQ,OAAO,UAAU;EACzB,MAAM,OAAO,QAAQ;EACrB,gBAAgB,OAAO,kBAAA;EACvB,QAAQ,OAAO,UAAU;EACzB,QAAQ,OAAO,UAAU;EACzB,eAAe,OAAO,iBAAiB;CACzC;AACF;AAEA,MAAM,YAAY,SAA6B,SAAyB;CACtE,OAAO,MAAM,IAAI,KAAK,WAAmB,QAAQ,QAAQ,CAAC,GAAG;EAC3D,SAAS;GACP,KAAK;GACL,GAAG;GACH,GAAG;EACL,CAAC;EACD,oBAAoB;EACpB,KAAK,UAAU,IAAI,CAAC;CACtB,CAAC;AACH;AAEA,MAAa,QAAQ,WAAoC;CACvD,MAAM,UAAU,UAAU,MAAM;CAChC,MAAM,OAAO,OAAO,aAAa,QAAQ;CAEzC,OAAO,OAAO,UAAgB,YAA8B;EAC1D,IAAI,OAAO,MAAM,UAAU,SAAS,SAAS,IAAI,CAAC,CAAC,CAAC,UAAU,OAAO;EACrE,IAAI,CAAC,MAAM,OAAO;EAClB,IAAI,EAAE,YAAY,OAAO;GACvB,IAAI,OAAO,SAAS,YAAY,OAAO;GACvC,OAAO,MAAM,eAAe,IAAI;EAClC;EAEA,MAAM,WAAW,KAAK,KAAa,IAAI;EAEvC,IAAI,CAAC,QAAQ,MAAM;GACjB,KAAK,OAAO,KAAK,UAAU,kBAAkB,CAAC;GAC9C,KAAK,OAAO,KAAK,UAAU,oBAAoB,CAAC;GAChD,KAAK,OAAO,KAAK,UAAU,iBAAiB,CAAC;GAC7C,IAAI,QAAQ,aAAa,MAAM,KAAK,OAAO,KAAK,UAAU,eAAe,CAAC;EAC5E;EAEA,IAAI,CAAC,QAAQ,QACX,KAAK,OAAO,KAAK,UAAU,MAAM,CAAC;EAGpC,OAAO;CACT;AACF"}
@@ -100,8 +100,8 @@ var MainGenerator = class {
100
100
  this.endSection();
101
101
  return this;
102
102
  }
103
- generateEntities(libs, components, entities) {
104
- entities.forEach((entity, index) => this.generateEntity(libs, components, entity, index));
103
+ generateEntities(components, entities) {
104
+ entities.forEach((entity, index) => this.generateEntity(components, entity, index));
105
105
  return this;
106
106
  }
107
107
  generateSystems(systems) {
@@ -157,29 +157,21 @@ var MainGenerator = class {
157
157
  this.endSection();
158
158
  return this;
159
159
  }
160
- generateEntity(libs, components, entity, entityIndex) {
160
+ generateEntity(components, entity, entityIndex) {
161
161
  this.writeLine(`const ${entity.id} = registry.spawnEntity();`);
162
162
  Object.entries(entity.components).forEach(([componentName, rawParams]) => {
163
163
  const originalsParams = components.find(({ name }) => name === componentName)?.paramsNames;
164
164
  if (!originalsParams) throw new Error("Missing component in entity or inexistent saved component");
165
- const params = originalsParams.map((ogParam) => {
166
- let isAsset = false;
167
- if (ogParam.startsWith("__RESERVED_ASSET_")) {
168
- isAsset = true;
169
- ogParam = ogParam.replace("__RESERVED_ASSET_", "");
170
- }
171
- const param = this.editor ? `options.editor.save.entities[${entityIndex}].components["${componentName}"]["${ogParam}"]` : getStringParam(rawParams[ogParam]);
172
- if (isAsset) return this.getAssetParam(param, libs);
173
- return param;
165
+ const params = !this.editor ? Object.values(originalsParams).map((ogParam) => {
166
+ return getStringParam(rawParams[ogParam]);
167
+ }) : Object.values(originalsParams).map((ogParam) => {
168
+ return `options.editor.save.entities[${entityIndex}].components["${componentName}"]["${ogParam}"]`;
174
169
  });
175
170
  this.writeLine(`registry.addComponent(${entity.id}, new ${componentName}(${params.join(", ")}));`);
176
171
  });
177
172
  if (this.editor) this.writeLine(`registry.addComponent(${entity.id}, { name: "__RESERVED_entityId", entityId: "${entity.id}" });`);
178
173
  this.endSection();
179
174
  }
180
- getAssetParam(param, libs) {
181
- return `${libs.find((lib) => lib.type === "asset-manager")?.id ?? "assetManagerLibrary"}.getAsset(${param})`;
182
- }
183
175
  getInitFunction(name, type) {
184
176
  const baseName = LIBS_FUNCTIONS_NAME[type];
185
177
  if (baseName) return `app.${baseName}(${name});`;
@@ -200,7 +192,7 @@ const generateMain = (options, save) => {
200
192
  const hasTypes = options.language === "ts";
201
193
  const initFunctions = options.initFunctions;
202
194
  return (!options.editor ? new MainGenerator() : new MainGenerator(true, join$1("../".repeat(options.outFile ? options.outFile.split("/").length - 1 : 3), options.part))).generateBaseImports(hasTypes).generateLibsImports(save.libraries).generateInitFunctionsImportsIfNeeded(initFunctions).generateComponentsImports(save.components).generateSystemsImports(save.systems).generateMainFunction(hasTypes, (generator) => {
203
- generator.generateApp(isServer).generateLibsInstances(save.libraries).generateLibsInit(save.libraries).generateInitFunctionIfNeeded(initFunctions, "beforeInit").generateAppInit().generateInitFunctionIfNeeded(initFunctions, "afterInit").generateRegistry(save.libraries).generateInitFunctionIfNeeded(initFunctions, "beforeRegistryInit").generateEntities(save.libraries, save.components, save.entities).generateSystems(save.systems).generateInitFunctionIfNeeded(initFunctions, "afterRegistryInit").generateInitFunctionIfNeeded(initFunctions, "beforeRun").generateAppRun(initFunctions).generateInitFunctionIfNeeded(initFunctions, "afterRun");
195
+ generator.generateApp(isServer).generateLibsInstances(save.libraries).generateLibsInit(save.libraries).generateInitFunctionIfNeeded(initFunctions, "beforeInit").generateAppInit().generateInitFunctionIfNeeded(initFunctions, "afterInit").generateRegistry(save.libraries).generateInitFunctionIfNeeded(initFunctions, "beforeRegistryInit").generateEntities(save.components, save.entities).generateSystems(save.systems).generateInitFunctionIfNeeded(initFunctions, "afterRegistryInit").generateInitFunctionIfNeeded(initFunctions, "beforeRun").generateAppRun(initFunctions).generateInitFunctionIfNeeded(initFunctions, "afterRun");
204
196
  }).toString();
205
197
  };
206
198
  //#endregion
@@ -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(components: SaveComponent[], entities: SaveEntity[]): MainGenerator {\n entities.forEach((entity, index) => this.generateEntity(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 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[] = !this.editor\n ? Object.values(originalsParams).map((ogParam) => {\n return getStringParam(rawParams[ogParam]);\n })\n : Object.values(originalsParams).map((ogParam) => {\n return `options.editor.save.entities[${entityIndex}].components[\"${componentName}\"][\"${ogParam}\"]`;\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 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.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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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "@nanoforge-dev/schematics",
4
- "version": "2.1.5-beta.6bb4b4c",
4
+ "version": "2.1.5-beta.89059f7",
5
5
  "description": "NanoForge Schematics",
6
6
  "keywords": [
7
7
  "nanoforge",
@@ -1,3 +0,0 @@
1
- allowBuilds:
2
- bun: true<% if (server) { %>
3
- wrtc: true<% } %>
@@ -1,3 +0,0 @@
1
- allowBuilds:
2
- bun: true<% if (server) { %>
3
- wrtc: true<% } %>