@nanoforge-dev/schematics 1.2.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/index.cjs +2 -34
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.d.cts +1 -26
  4. package/dist/index.d.ts +1 -26
  5. package/dist/index.js +1 -30
  6. package/dist/index.js.map +1 -1
  7. package/dist/libs/application/application.factory.d.ts +5 -0
  8. package/dist/libs/application/application.factory.js +6 -3
  9. package/dist/libs/application/application.factory.js.map +1 -1
  10. package/dist/libs/application/files/js/package.json.template +2 -1
  11. package/dist/libs/application/files/ts/package.json.template +2 -1
  12. package/dist/libs/application/schema.json +6 -5
  13. package/dist/libs/configuration/configuration.factory.d.ts +8 -3
  14. package/dist/libs/configuration/configuration.factory.js +32 -49
  15. package/dist/libs/configuration/configuration.factory.js.map +1 -1
  16. package/dist/libs/configuration/schema.json +9 -8
  17. package/dist/libs/docker/docker.factory.d.ts +2 -7
  18. package/dist/libs/docker/docker.factory.js +2 -24
  19. package/dist/libs/docker/docker.factory.js.map +1 -1
  20. package/dist/libs/docker/files/.dockerignore +1 -1
  21. package/dist/libs/docker/files/Dockerfile +10 -24
  22. package/dist/libs/docker/schema.json +4 -13
  23. package/dist/libs/part-base/part-base.factory.d.ts +5 -10
  24. package/dist/libs/part-base/part-base.factory.js +6 -34
  25. package/dist/libs/part-base/part-base.factory.js.map +1 -1
  26. package/dist/libs/part-base/schema.json +4 -12
  27. package/dist/libs/part-main/part-main.factory.d.ts +14 -9
  28. package/dist/libs/part-main/part-main.factory.js +83 -61
  29. package/dist/libs/part-main/part-main.factory.js.map +1 -1
  30. package/dist/libs/part-main/schema.json +13 -12
  31. package/package.json +1 -1
package/dist/index.cjs CHANGED
@@ -22,19 +22,13 @@ var index_exports = {};
22
22
  __export(index_exports, {
23
23
  DEFAULT_APP_NAME: () => DEFAULT_APP_NAME,
24
24
  DEFAULT_AUTHOR: () => DEFAULT_AUTHOR,
25
- DEFAULT_CONFIG: () => DEFAULT_CONFIG,
26
25
  DEFAULT_DESCRIPTION: () => DEFAULT_DESCRIPTION,
27
26
  DEFAULT_LANGUAGE: () => DEFAULT_LANGUAGE,
28
27
  DEFAULT_PACKAGE_MANAGER: () => DEFAULT_PACKAGE_MANAGER,
29
- DEFAULT_SERVER_CONFIG: () => DEFAULT_SERVER_CONFIG,
30
- DEFAULT_VERSION: () => DEFAULT_VERSION,
31
- test: () => test
28
+ DEFAULT_VERSION: () => DEFAULT_VERSION
32
29
  });
33
30
  module.exports = __toCommonJS(index_exports);
34
31
 
35
- // src/utils/index.ts
36
- var test = 0;
37
-
38
32
  // src/defaults.ts
39
33
  var DEFAULT_APP_NAME = "nanoforge-app";
40
34
  var DEFAULT_VERSION = "0.0.0";
@@ -42,39 +36,13 @@ var DEFAULT_AUTHOR = "";
42
36
  var DEFAULT_DESCRIPTION = "";
43
37
  var DEFAULT_LANGUAGE = "ts";
44
38
  var DEFAULT_PACKAGE_MANAGER = "npm";
45
- var DEFAULT_CONFIG = {
46
- client: {
47
- build: {
48
- entryFile: "client/main.ts",
49
- outDir: ".nanoforge/client"
50
- },
51
- runtime: {
52
- dir: ".nanoforge/client"
53
- }
54
- }
55
- };
56
- var DEFAULT_SERVER_CONFIG = {
57
- server: {
58
- enable: true,
59
- build: {
60
- entryFile: "server/main.ts",
61
- outDir: ".nanoforge/server"
62
- },
63
- runtime: {
64
- dir: ".nanoforge/server"
65
- }
66
- }
67
- };
68
39
  // Annotate the CommonJS export names for ESM import in node:
69
40
  0 && (module.exports = {
70
41
  DEFAULT_APP_NAME,
71
42
  DEFAULT_AUTHOR,
72
- DEFAULT_CONFIG,
73
43
  DEFAULT_DESCRIPTION,
74
44
  DEFAULT_LANGUAGE,
75
45
  DEFAULT_PACKAGE_MANAGER,
76
- DEFAULT_SERVER_CONFIG,
77
- DEFAULT_VERSION,
78
- test
46
+ DEFAULT_VERSION
79
47
  });
80
48
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/utils/index.ts","../src/defaults.ts"],"sourcesContent":["export * from \"./utils\";\nexport * from \"./defaults\";\n","export const test = 0;\n","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\";\nexport const DEFAULT_CONFIG = {\n client: {\n build: {\n entryFile: \"client/main.ts\",\n outDir: \".nanoforge/client\",\n },\n runtime: {\n dir: \".nanoforge/client\",\n },\n },\n};\nexport const DEFAULT_SERVER_CONFIG = {\n server: {\n enable: true,\n build: {\n entryFile: \"server/main.ts\",\n outDir: \".nanoforge/server\",\n },\n runtime: {\n dir: \".nanoforge/server\",\n },\n },\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAM,OAAO;;;ACAb,IAAM,mBAAmB;AACzB,IAAM,kBAAkB;AACxB,IAAM,iBAAiB;AACvB,IAAM,sBAAsB;AAC5B,IAAM,mBAAmB;AACzB,IAAM,0BAA0B;AAChC,IAAM,iBAAiB;AAAA,EAC5B,QAAQ;AAAA,IACN,OAAO;AAAA,MACL,WAAW;AAAA,MACX,QAAQ;AAAA,IACV;AAAA,IACA,SAAS;AAAA,MACP,KAAK;AAAA,IACP;AAAA,EACF;AACF;AACO,IAAM,wBAAwB;AAAA,EACnC,QAAQ;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,MACL,WAAW;AAAA,MACX,QAAQ;AAAA,IACV;AAAA,IACA,SAAS;AAAA,MACP,KAAK;AAAA,IACP;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/defaults.ts"],"sourcesContent":["export * from \"./defaults\";\n","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"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAM,mBAAmB;AACzB,IAAM,kBAAkB;AACxB,IAAM,iBAAiB;AACvB,IAAM,sBAAsB;AAC5B,IAAM,mBAAmB;AACzB,IAAM,0BAA0B;","names":[]}
package/dist/index.d.cts CHANGED
@@ -1,33 +1,8 @@
1
- declare const test = 0;
2
-
3
1
  declare const DEFAULT_APP_NAME = "nanoforge-app";
4
2
  declare const DEFAULT_VERSION = "0.0.0";
5
3
  declare const DEFAULT_AUTHOR = "";
6
4
  declare const DEFAULT_DESCRIPTION = "";
7
5
  declare const DEFAULT_LANGUAGE = "ts";
8
6
  declare const DEFAULT_PACKAGE_MANAGER = "npm";
9
- declare const DEFAULT_CONFIG: {
10
- client: {
11
- build: {
12
- entryFile: string;
13
- outDir: string;
14
- };
15
- runtime: {
16
- dir: string;
17
- };
18
- };
19
- };
20
- declare const DEFAULT_SERVER_CONFIG: {
21
- server: {
22
- enable: boolean;
23
- build: {
24
- entryFile: string;
25
- outDir: string;
26
- };
27
- runtime: {
28
- dir: string;
29
- };
30
- };
31
- };
32
7
 
33
- export { DEFAULT_APP_NAME, DEFAULT_AUTHOR, DEFAULT_CONFIG, DEFAULT_DESCRIPTION, DEFAULT_LANGUAGE, DEFAULT_PACKAGE_MANAGER, DEFAULT_SERVER_CONFIG, DEFAULT_VERSION, test };
8
+ export { DEFAULT_APP_NAME, DEFAULT_AUTHOR, DEFAULT_DESCRIPTION, DEFAULT_LANGUAGE, DEFAULT_PACKAGE_MANAGER, DEFAULT_VERSION };
package/dist/index.d.ts CHANGED
@@ -1,33 +1,8 @@
1
- declare const test = 0;
2
-
3
1
  declare const DEFAULT_APP_NAME = "nanoforge-app";
4
2
  declare const DEFAULT_VERSION = "0.0.0";
5
3
  declare const DEFAULT_AUTHOR = "";
6
4
  declare const DEFAULT_DESCRIPTION = "";
7
5
  declare const DEFAULT_LANGUAGE = "ts";
8
6
  declare const DEFAULT_PACKAGE_MANAGER = "npm";
9
- declare const DEFAULT_CONFIG: {
10
- client: {
11
- build: {
12
- entryFile: string;
13
- outDir: string;
14
- };
15
- runtime: {
16
- dir: string;
17
- };
18
- };
19
- };
20
- declare const DEFAULT_SERVER_CONFIG: {
21
- server: {
22
- enable: boolean;
23
- build: {
24
- entryFile: string;
25
- outDir: string;
26
- };
27
- runtime: {
28
- dir: string;
29
- };
30
- };
31
- };
32
7
 
33
- export { DEFAULT_APP_NAME, DEFAULT_AUTHOR, DEFAULT_CONFIG, DEFAULT_DESCRIPTION, DEFAULT_LANGUAGE, DEFAULT_PACKAGE_MANAGER, DEFAULT_SERVER_CONFIG, DEFAULT_VERSION, test };
8
+ export { DEFAULT_APP_NAME, DEFAULT_AUTHOR, DEFAULT_DESCRIPTION, DEFAULT_LANGUAGE, DEFAULT_PACKAGE_MANAGER, DEFAULT_VERSION };
package/dist/index.js CHANGED
@@ -1,6 +1,3 @@
1
- // src/utils/index.ts
2
- var test = 0;
3
-
4
1
  // src/defaults.ts
5
2
  var DEFAULT_APP_NAME = "nanoforge-app";
6
3
  var DEFAULT_VERSION = "0.0.0";
@@ -8,38 +5,12 @@ var DEFAULT_AUTHOR = "";
8
5
  var DEFAULT_DESCRIPTION = "";
9
6
  var DEFAULT_LANGUAGE = "ts";
10
7
  var DEFAULT_PACKAGE_MANAGER = "npm";
11
- var DEFAULT_CONFIG = {
12
- client: {
13
- build: {
14
- entryFile: "client/main.ts",
15
- outDir: ".nanoforge/client"
16
- },
17
- runtime: {
18
- dir: ".nanoforge/client"
19
- }
20
- }
21
- };
22
- var DEFAULT_SERVER_CONFIG = {
23
- server: {
24
- enable: true,
25
- build: {
26
- entryFile: "server/main.ts",
27
- outDir: ".nanoforge/server"
28
- },
29
- runtime: {
30
- dir: ".nanoforge/server"
31
- }
32
- }
33
- };
34
8
  export {
35
9
  DEFAULT_APP_NAME,
36
10
  DEFAULT_AUTHOR,
37
- DEFAULT_CONFIG,
38
11
  DEFAULT_DESCRIPTION,
39
12
  DEFAULT_LANGUAGE,
40
13
  DEFAULT_PACKAGE_MANAGER,
41
- DEFAULT_SERVER_CONFIG,
42
- DEFAULT_VERSION,
43
- test
14
+ DEFAULT_VERSION
44
15
  };
45
16
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/index.ts","../src/defaults.ts"],"sourcesContent":["export const test = 0;\n","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\";\nexport const DEFAULT_CONFIG = {\n client: {\n build: {\n entryFile: \"client/main.ts\",\n outDir: \".nanoforge/client\",\n },\n runtime: {\n dir: \".nanoforge/client\",\n },\n },\n};\nexport const DEFAULT_SERVER_CONFIG = {\n server: {\n enable: true,\n build: {\n entryFile: \"server/main.ts\",\n outDir: \".nanoforge/server\",\n },\n runtime: {\n dir: \".nanoforge/server\",\n },\n },\n};\n"],"mappings":";AAAO,IAAM,OAAO;;;ACAb,IAAM,mBAAmB;AACzB,IAAM,kBAAkB;AACxB,IAAM,iBAAiB;AACvB,IAAM,sBAAsB;AAC5B,IAAM,mBAAmB;AACzB,IAAM,0BAA0B;AAChC,IAAM,iBAAiB;AAAA,EAC5B,QAAQ;AAAA,IACN,OAAO;AAAA,MACL,WAAW;AAAA,MACX,QAAQ;AAAA,IACV;AAAA,IACA,SAAS;AAAA,MACP,KAAK;AAAA,IACP;AAAA,EACF;AACF;AACO,IAAM,wBAAwB;AAAA,EACnC,QAAQ;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,MACL,WAAW;AAAA,MACX,QAAQ;AAAA,IACV;AAAA,IACA,SAAS;AAAA,MACP,KAAK;AAAA,IACP;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/defaults.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"],"mappings":";AAAO,IAAM,mBAAmB;AACzB,IAAM,kBAAkB;AACxB,IAAM,iBAAiB;AACvB,IAAM,sBAAsB;AAC5B,IAAM,mBAAmB;AACzB,IAAM,0BAA0B;","names":[]}
@@ -50,6 +50,11 @@ interface ApplicationSchema {
50
50
  * Configure a server for the application
51
51
  */
52
52
  server?: boolean;
53
+
54
+ /**
55
+ * Add editor dependencies
56
+ */
57
+ editor: boolean;
53
58
  }
54
59
 
55
60
  declare const main: (schema: ApplicationSchema) => Rule;
@@ -5,9 +5,10 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
5
5
  import { join, normalize, strings } from "@angular-devkit/core";
6
6
  import {
7
7
  apply,
8
- applyTemplates,
9
8
  mergeWith,
10
9
  move,
10
+ renameTemplateFiles,
11
+ template,
11
12
  url
12
13
  } from "@angular-devkit/schematics";
13
14
  import { firstValueFrom } from "rxjs";
@@ -50,15 +51,17 @@ var transform = /* @__PURE__ */ __name((schema) => {
50
51
  strict: schema.strict ?? true,
51
52
  lint: schema.lint ?? true,
52
53
  packageManager: schema.packageManager ?? DEFAULT_PACKAGE_MANAGER,
53
- server: schema.server ?? false
54
+ server: schema.server ?? false,
55
+ editor: schema.editor ?? false
54
56
  };
55
57
  }, "transform");
56
58
  var generate = /* @__PURE__ */ __name((options, path) => {
57
59
  return apply(url(join("./files", options.language)), [
58
- applyTemplates({
60
+ template({
59
61
  ...strings,
60
62
  ...options
61
63
  }),
64
+ renameTemplateFiles(),
62
65
  move(normalize(path))
63
66
  ]);
64
67
  }, "generate");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/libs/application/application.factory.ts","../../../src/utils/formatting.ts","../../../src/utils/name.ts","../../../src/defaults.ts"],"sourcesContent":["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 applyTemplates,\n mergeWith,\n move,\n url,\n} from \"@angular-devkit/schematics\";\nimport { firstValueFrom } from \"rxjs\";\n\nimport { toKebabCase } from \"@utils/formatting\";\nimport { resolvePackageName } from \"@utils/name\";\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 const name = resolvePackageName(toKebabCase(schema.name?.toString() ?? DEFAULT_APP_NAME));\n\n return {\n 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 };\n};\n\nconst generate = (options: ApplicationOptions, path: string): Source => {\n return apply(url(join(\"./files\" as Path, options.language)), [\n applyTemplates({\n ...strings,\n ...options,\n }),\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 if (!options.lint) {\n const basePath = join(\"/\" as Path, path);\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 return tree;\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 { basename, parse } from \"path\";\n\nexport const resolvePackageName = (path: string): string => {\n const { base: baseFilename, dir: dirname } = parse(path);\n if (baseFilename === \".\") {\n return basename(process.cwd());\n }\n if (dirname.match(/^@[^\\s]/)) {\n return `${dirname}/${baseFilename}`;\n }\n return baseFilename;\n};\n","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\";\nexport const DEFAULT_CONFIG = {\n client: {\n build: {\n entryFile: \"client/main.ts\",\n outDir: \".nanoforge/client\",\n },\n runtime: {\n dir: \".nanoforge/client\",\n },\n },\n};\nexport const DEFAULT_SERVER_CONFIG = {\n server: {\n enable: true,\n build: {\n entryFile: \"server/main.ts\",\n outDir: \".nanoforge/server\",\n },\n runtime: {\n dir: \".nanoforge/server\",\n },\n },\n};\n"],"mappings":";;;;AAAA,SAAoB,MAAM,WAAW,eAAe;AACpD;AAAA,EAKE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,sBAAsB;;;ACZxB,IAAM,cAAc,wBAAC,QAAwB;AAClD,SAAO,IACJ,QAAQ,gCAAgC,OAAO,EAC/C,QAAQ,WAAW,GAAG,EACtB,YAAY;AACjB,GAL2B;;;ACA3B,SAAS,UAAU,aAAa;AAEzB,IAAM,qBAAqB,wBAAC,SAAyB;AAC1D,QAAM,EAAE,MAAM,cAAc,KAAK,QAAQ,IAAI,MAAM,IAAI;AACvD,MAAI,iBAAiB,KAAK;AACxB,WAAO,SAAS,QAAQ,IAAI,CAAC;AAAA,EAC/B;AACA,MAAI,QAAQ,MAAM,SAAS,GAAG;AAC5B,WAAO,GAAG,OAAO,IAAI,YAAY;AAAA,EACnC;AACA,SAAO;AACT,GATkC;;;ACF3B,IAAM,mBAAmB;AACzB,IAAM,kBAAkB;AACxB,IAAM,iBAAiB;AACvB,IAAM,sBAAsB;AAC5B,IAAM,mBAAmB;AACzB,IAAM,0BAA0B;;;AHwBvC,IAAM,YAAY,wBAAC,WAAkD;AACnE,QAAM,OAAO,mBAAmB,YAAY,OAAO,MAAM,SAAS,KAAK,gBAAgB,CAAC;AAExF,SAAO;AAAA,IACL;AAAA,IACA,SAAS,OAAO,WAAW;AAAA,IAC3B,QAAQ,OAAO,UAAU;AAAA,IACzB,aAAa,OAAO,eAAe;AAAA,IACnC,UAAU,OAAO,YAAY;AAAA,IAC7B,QAAQ,OAAO,UAAU;AAAA,IACzB,MAAM,OAAO,QAAQ;AAAA,IACrB,gBAAgB,OAAO,kBAAkB;AAAA,IACzC,QAAQ,OAAO,UAAU;AAAA,EAC3B;AACF,GAdkB;AAgBlB,IAAM,WAAW,wBAAC,SAA6B,SAAyB;AACtE,SAAO,MAAM,IAAI,KAAK,WAAmB,QAAQ,QAAQ,CAAC,GAAG;AAAA,IAC3D,eAAe;AAAA,MACb,GAAG;AAAA,MACH,GAAG;AAAA,IACL,CAAC;AAAA,IACD,KAAK,UAAU,IAAI,CAAC;AAAA,EACtB,CAAC;AACH,GARiB;AAUV,IAAM,OAAO,wBAAC,WAAoC;AACvD,QAAM,UAAU,UAAU,MAAM;AAChC,QAAM,OAAO,OAAO,aAAa,QAAQ;AAEzC,SAAO,OAAO,UAAgB,YAA8B;AAC1D,QAAI,OAAO,MAAM,UAAU,SAAS,SAAS,IAAI,CAAC,EAAE,UAAU,OAAO;AACrE,QAAI,CAAC,KAAM,QAAO;AAClB,QAAI,EAAE,YAAY,OAAO;AACvB,UAAI,OAAO,SAAS,WAAY,QAAO;AACvC,aAAO,MAAM,eAAe,IAAI;AAAA,IAClC;AAEA,QAAI,CAAC,QAAQ,MAAM;AACjB,YAAM,WAAW,KAAK,KAAa,IAAI;AACvC,WAAK,OAAO,KAAK,UAAU,kBAAkB,CAAC;AAC9C,WAAK,OAAO,KAAK,UAAU,oBAAoB,CAAC;AAChD,WAAK,OAAO,KAAK,UAAU,iBAAiB,CAAC;AAC7C,UAAI,QAAQ,aAAa,KAAM,MAAK,OAAO,KAAK,UAAU,eAAe,CAAC;AAAA,IAC5E;AAEA,WAAO;AAAA,EACT;AACF,GAtBoB;","names":[]}
1
+ {"version":3,"sources":["../../../src/libs/application/application.factory.ts","../../../src/utils/formatting.ts","../../../src/utils/name.ts","../../../src/defaults.ts"],"sourcesContent":["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 { toKebabCase } from \"@utils/formatting\";\nimport { resolvePackageName } from \"@utils/name\";\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 const name = resolvePackageName(toKebabCase(schema.name?.toString() ?? DEFAULT_APP_NAME));\n\n return {\n 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 };\n};\n\nconst generate = (options: ApplicationOptions, path: string): Source => {\n return apply(url(join(\"./files\" as Path, options.language)), [\n template({\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 if (!options.lint) {\n const basePath = join(\"/\" as Path, path);\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 return tree;\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 { basename, parse } from \"path\";\n\nexport const resolvePackageName = (path: string): string => {\n const { base: baseFilename, dir: dirname } = parse(path);\n if (baseFilename === \".\") {\n return basename(process.cwd());\n }\n if (dirname.match(/^@[^\\s]/)) {\n return `${dirname}/${baseFilename}`;\n }\n return baseFilename;\n};\n","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"],"mappings":";;;;AAAA,SAAoB,MAAM,WAAW,eAAe;AACpD;AAAA,EAKE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,sBAAsB;;;ACbxB,IAAM,cAAc,wBAAC,QAAwB;AAClD,SAAO,IACJ,QAAQ,gCAAgC,OAAO,EAC/C,QAAQ,WAAW,GAAG,EACtB,YAAY;AACjB,GAL2B;;;ACA3B,SAAS,UAAU,aAAa;AAEzB,IAAM,qBAAqB,wBAAC,SAAyB;AAC1D,QAAM,EAAE,MAAM,cAAc,KAAK,QAAQ,IAAI,MAAM,IAAI;AACvD,MAAI,iBAAiB,KAAK;AACxB,WAAO,SAAS,QAAQ,IAAI,CAAC;AAAA,EAC/B;AACA,MAAI,QAAQ,MAAM,SAAS,GAAG;AAC5B,WAAO,GAAG,OAAO,IAAI,YAAY;AAAA,EACnC;AACA,SAAO;AACT,GATkC;;;ACF3B,IAAM,mBAAmB;AACzB,IAAM,kBAAkB;AACxB,IAAM,iBAAiB;AACvB,IAAM,sBAAsB;AAC5B,IAAM,mBAAmB;AACzB,IAAM,0BAA0B;;;AHyBvC,IAAM,YAAY,wBAAC,WAAkD;AACnE,QAAM,OAAO,mBAAmB,YAAY,OAAO,MAAM,SAAS,KAAK,gBAAgB,CAAC;AAExF,SAAO;AAAA,IACL;AAAA,IACA,SAAS,OAAO,WAAW;AAAA,IAC3B,QAAQ,OAAO,UAAU;AAAA,IACzB,aAAa,OAAO,eAAe;AAAA,IACnC,UAAU,OAAO,YAAY;AAAA,IAC7B,QAAQ,OAAO,UAAU;AAAA,IACzB,MAAM,OAAO,QAAQ;AAAA,IACrB,gBAAgB,OAAO,kBAAkB;AAAA,IACzC,QAAQ,OAAO,UAAU;AAAA,IACzB,QAAQ,OAAO,UAAU;AAAA,EAC3B;AACF,GAfkB;AAiBlB,IAAM,WAAW,wBAAC,SAA6B,SAAyB;AACtE,SAAO,MAAM,IAAI,KAAK,WAAmB,QAAQ,QAAQ,CAAC,GAAG;AAAA,IAC3D,SAAS;AAAA,MACP,GAAG;AAAA,MACH,GAAG;AAAA,IACL,CAAC;AAAA,IACD,oBAAoB;AAAA,IACpB,KAAK,UAAU,IAAI,CAAC;AAAA,EACtB,CAAC;AACH,GATiB;AAWV,IAAM,OAAO,wBAAC,WAAoC;AACvD,QAAM,UAAU,UAAU,MAAM;AAChC,QAAM,OAAO,OAAO,aAAa,QAAQ;AAEzC,SAAO,OAAO,UAAgB,YAA8B;AAC1D,QAAI,OAAO,MAAM,UAAU,SAAS,SAAS,IAAI,CAAC,EAAE,UAAU,OAAO;AACrE,QAAI,CAAC,KAAM,QAAO;AAClB,QAAI,EAAE,YAAY,OAAO;AACvB,UAAI,OAAO,SAAS,WAAY,QAAO;AACvC,aAAO,MAAM,eAAe,IAAI;AAAA,IAClC;AAEA,QAAI,CAAC,QAAQ,MAAM;AACjB,YAAM,WAAW,KAAK,KAAa,IAAI;AACvC,WAAK,OAAO,KAAK,UAAU,kBAAkB,CAAC;AAC9C,WAAK,OAAO,KAAK,UAAU,oBAAoB,CAAC;AAChD,WAAK,OAAO,KAAK,UAAU,iBAAiB,CAAC;AAC7C,UAAI,QAAQ,aAAa,KAAM,MAAK,OAAO,KAAK,UAAU,eAAe,CAAC;AAAA,IAC5E;AAEA,WAAO;AAAA,EACT;AACF,GAtBoB;","names":[]}
@@ -15,7 +15,8 @@
15
15
  "@nanoforge-dev/cli": "latest",
16
16
  "@nanoforge-dev/common": "^1",
17
17
  "@nanoforge-dev/config": "^1",
18
- "@nanoforge-dev/core": "^1",
18
+ "@nanoforge-dev/core": "^1",<% if (editor) { %>
19
+ "@nanoforge-dev/core-editor": "^1",<% } %>
19
20
  "@nanoforge-dev/ecs-client": "^1",<% if (server) { %>
20
21
  "@nanoforge-dev/ecs-server": "^1",<% } %>
21
22
  "@nanoforge-dev/graphics-2d": "^1",
@@ -15,7 +15,8 @@
15
15
  "@nanoforge-dev/cli": "latest",
16
16
  "@nanoforge-dev/common": "^1",
17
17
  "@nanoforge-dev/config": "^1",
18
- "@nanoforge-dev/core": "^1",
18
+ "@nanoforge-dev/core": "^1",<% if (editor) { %>
19
+ "@nanoforge-dev/core-editor": "^1",<% } %>
19
20
  "@nanoforge-dev/ecs-client": "^1",<% if (server) { %>
20
21
  "@nanoforge-dev/ecs-server": "^1",<% } %>
21
22
  "@nanoforge-dev/graphics-2d": "^1",
@@ -7,11 +7,7 @@
7
7
  "name": {
8
8
  "type": "string",
9
9
  "description": "The name of the application",
10
- "$default": {
11
- "$source": "argv",
12
- "index": 0
13
- },
14
- "x-prompt": "What name would you like to use for the new project ?"
10
+ "default": "nanoforge-app"
15
11
  },
16
12
  "version": {
17
13
  "type": "string",
@@ -58,6 +54,11 @@
58
54
  "type": "boolean",
59
55
  "description": "Configure a server for the application",
60
56
  "default": false
57
+ },
58
+ "editor": {
59
+ "type": "boolean",
60
+ "description": "Add editor dependencies",
61
+ "default": false
61
62
  }
62
63
  },
63
64
  "required": ["name"]
@@ -9,17 +9,22 @@ interface ConfigurationSchema {
9
9
  /**
10
10
  * NanoForge application destination directory
11
11
  */
12
- directory?: string;
12
+ directory: string;
13
13
 
14
14
  /**
15
15
  * Configure a server for the application
16
16
  */
17
- server?: boolean;
17
+ server: boolean;
18
18
 
19
19
  /**
20
20
  * NanoForge Application language
21
21
  */
22
- language?: "js" | "ts";
22
+ language: "js" | "ts";
23
+
24
+ /**
25
+ * Add init functions to the application
26
+ */
27
+ initFunctions: boolean;
23
28
  }
24
29
 
25
30
  declare const main: (schema: ConfigurationSchema) => Rule;
@@ -33,31 +33,6 @@ var deepMerge = /* @__PURE__ */ __name((target, ...sources) => {
33
33
  return deepMerge(target, ...sources);
34
34
  }, "deepMerge");
35
35
 
36
- // src/defaults.ts
37
- var DEFAULT_CONFIG = {
38
- client: {
39
- build: {
40
- entryFile: "client/main.ts",
41
- outDir: ".nanoforge/client"
42
- },
43
- runtime: {
44
- dir: ".nanoforge/client"
45
- }
46
- }
47
- };
48
- var DEFAULT_SERVER_CONFIG = {
49
- server: {
50
- enable: true,
51
- build: {
52
- entryFile: "server/main.ts",
53
- outDir: ".nanoforge/server"
54
- },
55
- runtime: {
56
- dir: ".nanoforge/server"
57
- }
58
- }
59
- };
60
-
61
36
  // src/utils/config/config.declarator.ts
62
37
  var ConfigDeclarator = class {
63
38
  static {
@@ -65,17 +40,7 @@ var ConfigDeclarator = class {
65
40
  }
66
41
  declare(baseContent, options) {
67
42
  const content = JSON.parse(baseContent);
68
- const hasServer = content.server?.enable ?? options.server?.enable ?? false;
69
- return JSON.stringify(
70
- deepMerge(
71
- DEFAULT_CONFIG,
72
- hasServer ? DEFAULT_SERVER_CONFIG : void 0,
73
- baseContent,
74
- options
75
- ),
76
- null,
77
- 2
78
- );
43
+ return JSON.stringify(deepMerge(content, options), null, 2);
79
44
  }
80
45
  };
81
46
 
@@ -111,17 +76,8 @@ var ConfigFinder = class {
111
76
 
112
77
  // src/libs/configuration/configuration.factory.ts
113
78
  var transform = /* @__PURE__ */ __name((schema) => {
114
- const res = {
115
- server: {
116
- enable: schema.server ?? false
117
- }
118
- };
119
- if (schema.language === "js") {
120
- res["client"] = { build: { entryFile: "client/main.js" } };
121
- if (schema.server && "server" in res && res.server)
122
- res.server["build"] = { entryFile: "server/main.js" };
123
- }
124
- return res;
79
+ void schema;
80
+ return {};
125
81
  }, "transform");
126
82
  var generate = /* @__PURE__ */ __name((options, path) => {
127
83
  return apply(url(join2("./files")), [
@@ -143,11 +99,38 @@ var addConfiguration = /* @__PURE__ */ __name((options, path) => {
143
99
  return tree;
144
100
  };
145
101
  }, "addConfiguration");
102
+ var getConfig = /* @__PURE__ */ __name((schema) => {
103
+ const res = {
104
+ name: schema.name,
105
+ language: schema.language,
106
+ initFunctions: schema.initFunctions,
107
+ client: {
108
+ enable: true
109
+ },
110
+ server: {
111
+ enable: schema.server ?? false
112
+ }
113
+ };
114
+ if (schema.language === "js") {
115
+ if ("client" in res && res.client) {
116
+ res.client["build"] = { entry: "client/main.js" };
117
+ res.client["editor"] = { entry: ".nanoforge/editor/client/main.js" };
118
+ }
119
+ if (schema.server && "server" in res && res.server) {
120
+ res.server["build"] = { entry: "server/main.js" };
121
+ res.server["editor"] = { entry: ".nanoforge/editor/client/main.js" };
122
+ }
123
+ }
124
+ return res;
125
+ }, "getConfig");
146
126
  var main = /* @__PURE__ */ __name((schema) => {
147
127
  const options = transform(schema);
148
- const directory = schema.directory ?? schema.name;
128
+ const directory = schema.directory;
149
129
  return branchAndMerge(
150
- chain([mergeWith(generate(options, directory)), addConfiguration(options, directory)])
130
+ chain([
131
+ mergeWith(generate(options, directory)),
132
+ addConfiguration(getConfig(schema), directory)
133
+ ])
151
134
  );
152
135
  }, "main");
153
136
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/libs/configuration/configuration.factory.ts","../../../src/utils/object.ts","../../../src/defaults.ts","../../../src/utils/config/config.declarator.ts","../../../src/utils/config/config.finder.ts"],"sourcesContent":["import { type Path, join, normalize, strings } from \"@angular-devkit/core\";\nimport {\n type Rule,\n type Source,\n type Tree,\n apply,\n branchAndMerge,\n chain,\n mergeWith,\n move,\n template,\n url,\n} from \"@angular-devkit/schematics\";\n\nimport { ConfigDeclarator } from \"@utils/config/config.declarator\";\nimport { ConfigFinder } from \"@utils/config/config.finder\";\n\nimport { type ConfigurationOptions } from \"./configuration.options\";\nimport { type ConfigurationSchema } from \"./configuration.schema\";\n\nconst transform = (schema: ConfigurationSchema): ConfigurationOptions => {\n const res: ConfigurationOptions = {\n server: {\n enable: schema.server ?? false,\n },\n };\n\n if (schema.language === \"js\") {\n res[\"client\"] = { build: { entryFile: \"client/main.js\" } };\n if (schema.server && \"server\" in res && res.server)\n res.server[\"build\"] = { entryFile: \"server/main.js\" };\n }\n\n return res;\n};\n\nconst generate = (options: ConfigurationOptions, path: string): Source => {\n return apply(url(join(\"./files\" as Path)), [\n template({\n ...strings,\n ...options,\n }),\n move(normalize(path)),\n ]);\n};\n\nconst addConfiguration = (options: ConfigurationOptions, path: Path) => {\n return (tree: Tree) => {\n const config = new ConfigFinder(tree).find(path);\n if (!config) return tree;\n\n const content = tree.read(config)?.toString();\n const declarator = new ConfigDeclarator();\n\n if (!content) return tree;\n\n tree.overwrite(config, declarator.declare(content, options));\n return tree;\n };\n};\n\nexport const main = (schema: ConfigurationSchema): Rule => {\n const options = transform(schema);\n const directory = schema.directory ?? schema.name;\n\n return branchAndMerge(\n chain([mergeWith(generate(options, directory)), addConfiguration(options, directory as Path)]),\n );\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","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\";\nexport const DEFAULT_CONFIG = {\n client: {\n build: {\n entryFile: \"client/main.ts\",\n outDir: \".nanoforge/client\",\n },\n runtime: {\n dir: \".nanoforge/client\",\n },\n },\n};\nexport const DEFAULT_SERVER_CONFIG = {\n server: {\n enable: true,\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 } from \"@utils/config/config.type\";\nimport { deepMerge } from \"@utils/object\";\nimport { type DeepPartial } from \"@utils/types\";\n\nimport { DEFAULT_CONFIG, DEFAULT_SERVER_CONFIG } from \"~/defaults\";\n\nexport class ConfigDeclarator {\n public declare(baseContent: string, options: DeepPartial<Config>): string {\n const content = JSON.parse(baseContent);\n const hasServer = content.server?.enable ?? options.server?.enable ?? false;\n return JSON.stringify(\n deepMerge(\n DEFAULT_CONFIG,\n hasServer ? DEFAULT_SERVER_CONFIG : undefined,\n baseContent,\n options,\n ),\n null,\n 2,\n );\n }\n}\n","import { type Path, join } from \"@angular-devkit/core\";\nimport { type DirEntry, type Tree } from \"@angular-devkit/schematics\";\n\nexport interface FindOptions {\n path: Path;\n}\n\nexport class ConfigFinder {\n constructor(private tree: Tree) {}\n\n public find(path: Path): Path | null {\n const dir = this.tree.getDir(path);\n return this.findIn(dir);\n }\n\n /**\n * Recursively searches for the module file in the given directory.\n *\n * @param directory - The directory to search in.\n * @returns The path to the module file, or null if not found.\n */\n private findIn(directory: DirEntry | null): Path | null {\n if (!directory) {\n return null;\n }\n const moduleFilename = directory.subfiles.find((filename) =>\n /^nanoforge.config.json$/.test(filename),\n );\n return moduleFilename !== undefined\n ? join(directory.path, moduleFilename.valueOf())\n : this.findIn(directory.parent);\n }\n}\n"],"mappings":"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","names":["join","join"]}
1
+ {"version":3,"sources":["../../../src/libs/configuration/configuration.factory.ts","../../../src/utils/object.ts","../../../src/utils/config/config.declarator.ts","../../../src/utils/config/config.finder.ts"],"sourcesContent":["import { type Path, join, normalize, strings } from \"@angular-devkit/core\";\nimport {\n type Rule,\n type Source,\n type Tree,\n apply,\n branchAndMerge,\n chain,\n mergeWith,\n move,\n template,\n url,\n} from \"@angular-devkit/schematics\";\n\nimport { ConfigDeclarator } from \"@utils/config/config.declarator\";\nimport { ConfigFinder } from \"@utils/config/config.finder\";\nimport { type Config } from \"@utils/config/config.type\";\nimport { type DeepPartial } from \"@utils/types\";\n\nimport { type ConfigurationOptions } from \"./configuration.options\";\nimport { type ConfigurationSchema } from \"./configuration.schema\";\n\nconst transform = (schema: ConfigurationSchema): ConfigurationOptions => {\n void schema;\n\n return {};\n};\n\nconst generate = (options: ConfigurationOptions, path: string): Source => {\n return apply(url(join(\"./files\" as Path)), [\n template({\n ...strings,\n ...options,\n }),\n move(normalize(path)),\n ]);\n};\n\nconst addConfiguration = (options: DeepPartial<Config>, path: Path) => {\n return (tree: Tree) => {\n const config = new ConfigFinder(tree).find(path);\n if (!config) return tree;\n\n const content = tree.read(config)?.toString();\n const declarator = new ConfigDeclarator();\n\n if (!content) return tree;\n\n tree.overwrite(config, declarator.declare(content, options));\n return tree;\n };\n};\n\nconst getConfig = (schema: ConfigurationSchema): DeepPartial<Config> => {\n const res: DeepPartial<Config> = {\n name: schema.name,\n language: schema.language,\n initFunctions: schema.initFunctions,\n client: {\n enable: true,\n },\n server: {\n enable: schema.server ?? false,\n },\n };\n\n if (schema.language === \"js\") {\n if (\"client\" in res && res.client) {\n res.client[\"build\"] = { entry: \"client/main.js\" };\n res.client[\"editor\"] = { entry: \".nanoforge/editor/client/main.js\" };\n }\n if (schema.server && \"server\" in res && res.server) {\n res.server[\"build\"] = { entry: \"server/main.js\" };\n res.server[\"editor\"] = { entry: \".nanoforge/editor/client/main.js\" };\n }\n }\n\n return res;\n};\n\nexport const main = (schema: ConfigurationSchema): Rule => {\n const options = transform(schema);\n const directory = schema.directory;\n\n return branchAndMerge(\n chain([\n mergeWith(generate(options, directory)),\n addConfiguration(getConfig(schema), directory as Path),\n ]),\n );\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 \"@utils/config/config.type\";\nimport { deepMerge } from \"@utils/object\";\nimport { type DeepPartial } from \"@utils/types\";\n\nexport class ConfigDeclarator {\n public declare(baseContent: string, options: DeepPartial<Config>): string {\n const content = JSON.parse(baseContent);\n return JSON.stringify(deepMerge(content, options), null, 2);\n }\n}\n","import { type Path, join } from \"@angular-devkit/core\";\nimport { type DirEntry, type Tree } from \"@angular-devkit/schematics\";\n\nexport interface FindOptions {\n path: Path;\n}\n\nexport class ConfigFinder {\n constructor(private tree: Tree) {}\n\n public find(path: Path): Path | null {\n const dir = this.tree.getDir(path);\n return this.findIn(dir);\n }\n\n /**\n * Recursively searches for the module file in the given directory.\n *\n * @param directory - The directory to search in.\n * @returns The path to the module file, or null if not found.\n */\n private findIn(directory: DirEntry | null): Path | null {\n if (!directory) {\n return null;\n }\n const moduleFilename = directory.subfiles.find((filename) =>\n /^nanoforge.config.json$/.test(filename),\n );\n return moduleFilename !== undefined\n ? join(directory.path, moduleFilename.valueOf())\n : this.findIn(directory.parent);\n }\n}\n"],"mappings":";;;;AAAA,SAAoB,QAAAA,OAAM,WAAW,eAAe;AACpD;AAAA,EAIE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACZA,IAAM,WAAW,wBAAC,SAAc;AACrC,SAAO,QAAQ,OAAO,SAAS,YAAY,CAAC,MAAM,QAAQ,IAAI;AAChE,GAFwB;AAIjB,IAAM,YAAY,wBAAC,WAAgB,YAAkC;AAC1E,MAAI,CAAC,QAAQ,OAAQ,QAAO;AAC5B,QAAM,SAAS,QAAQ,MAAM;AAE7B,MAAI,SAAS,MAAM,KAAK,SAAS,MAAM,GAAG;AACxC,eAAW,OAAO,QAAQ;AACxB,UAAI,SAAS,OAAO,GAAG,CAAC,GAAG;AACzB,YAAI,CAAC,OAAO,GAAG,EAAG,QAAO,OAAO,QAAQ,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;AACrD,kBAAU,OAAO,GAAG,GAAG,OAAO,GAAG,CAAC;AAAA,MACpC,OAAO;AACL,eAAO,OAAO,QAAQ,EAAE,CAAC,GAAG,GAAG,OAAO,GAAG,EAAE,CAAC;AAAA,MAC9C;AAAA,IACF;AAAA,EACF;AAEA,SAAO,UAAU,QAAQ,GAAG,OAAO;AACrC,GAhByB;;;ACAlB,IAAM,mBAAN,MAAuB;AAAA,EAJ9B,OAI8B;AAAA;AAAA;AAAA,EACrB,QAAQ,aAAqB,SAAsC;AACxE,UAAM,UAAU,KAAK,MAAM,WAAW;AACtC,WAAO,KAAK,UAAU,UAAU,SAAS,OAAO,GAAG,MAAM,CAAC;AAAA,EAC5D;AACF;;;ACTA,SAAoB,YAAY;AAOzB,IAAM,eAAN,MAAmB;AAAA,EACxB,YAAoB,MAAY;AAAZ;AAAA,EAAa;AAAA,EARnC,OAO0B;AAAA;AAAA;AAAA,EAGjB,KAAK,MAAyB;AACnC,UAAM,MAAM,KAAK,KAAK,OAAO,IAAI;AACjC,WAAO,KAAK,OAAO,GAAG;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,OAAO,WAAyC;AACtD,QAAI,CAAC,WAAW;AACd,aAAO;AAAA,IACT;AACA,UAAM,iBAAiB,UAAU,SAAS;AAAA,MAAK,CAAC,aAC9C,0BAA0B,KAAK,QAAQ;AAAA,IACzC;AACA,WAAO,mBAAmB,SACtB,KAAK,UAAU,MAAM,eAAe,QAAQ,CAAC,IAC7C,KAAK,OAAO,UAAU,MAAM;AAAA,EAClC;AACF;;;AHVA,IAAM,YAAY,wBAAC,WAAsD;AACvE,OAAK;AAEL,SAAO,CAAC;AACV,GAJkB;AAMlB,IAAM,WAAW,wBAAC,SAA+B,SAAyB;AACxE,SAAO,MAAM,IAAIC,MAAK,SAAiB,CAAC,GAAG;AAAA,IACzC,SAAS;AAAA,MACP,GAAG;AAAA,MACH,GAAG;AAAA,IACL,CAAC;AAAA,IACD,KAAK,UAAU,IAAI,CAAC;AAAA,EACtB,CAAC;AACH,GARiB;AAUjB,IAAM,mBAAmB,wBAAC,SAA8B,SAAe;AACrE,SAAO,CAAC,SAAe;AACrB,UAAM,SAAS,IAAI,aAAa,IAAI,EAAE,KAAK,IAAI;AAC/C,QAAI,CAAC,OAAQ,QAAO;AAEpB,UAAM,UAAU,KAAK,KAAK,MAAM,GAAG,SAAS;AAC5C,UAAM,aAAa,IAAI,iBAAiB;AAExC,QAAI,CAAC,QAAS,QAAO;AAErB,SAAK,UAAU,QAAQ,WAAW,QAAQ,SAAS,OAAO,CAAC;AAC3D,WAAO;AAAA,EACT;AACF,GAbyB;AAezB,IAAM,YAAY,wBAAC,WAAqD;AACtE,QAAM,MAA2B;AAAA,IAC/B,MAAM,OAAO;AAAA,IACb,UAAU,OAAO;AAAA,IACjB,eAAe,OAAO;AAAA,IACtB,QAAQ;AAAA,MACN,QAAQ;AAAA,IACV;AAAA,IACA,QAAQ;AAAA,MACN,QAAQ,OAAO,UAAU;AAAA,IAC3B;AAAA,EACF;AAEA,MAAI,OAAO,aAAa,MAAM;AAC5B,QAAI,YAAY,OAAO,IAAI,QAAQ;AACjC,UAAI,OAAO,OAAO,IAAI,EAAE,OAAO,iBAAiB;AAChD,UAAI,OAAO,QAAQ,IAAI,EAAE,OAAO,mCAAmC;AAAA,IACrE;AACA,QAAI,OAAO,UAAU,YAAY,OAAO,IAAI,QAAQ;AAClD,UAAI,OAAO,OAAO,IAAI,EAAE,OAAO,iBAAiB;AAChD,UAAI,OAAO,QAAQ,IAAI,EAAE,OAAO,mCAAmC;AAAA,IACrE;AAAA,EACF;AAEA,SAAO;AACT,GAzBkB;AA2BX,IAAM,OAAO,wBAAC,WAAsC;AACzD,QAAM,UAAU,UAAU,MAAM;AAChC,QAAM,YAAY,OAAO;AAEzB,SAAO;AAAA,IACL,MAAM;AAAA,MACJ,UAAU,SAAS,SAAS,SAAS,CAAC;AAAA,MACtC,iBAAiB,UAAU,MAAM,GAAG,SAAiB;AAAA,IACvD,CAAC;AAAA,EACH;AACF,GAVoB;","names":["join","join"]}
@@ -7,15 +7,12 @@
7
7
  "name": {
8
8
  "type": "string",
9
9
  "description": "The name of the application",
10
- "$default": {
11
- "$source": "argv",
12
- "index": 0
13
- },
14
- "x-prompt": "What name would you like to use for the new project ?"
10
+ "default": "nanoforge-app"
15
11
  },
16
12
  "directory": {
17
13
  "type": "string",
18
- "description": "NanoForge application destination directory"
14
+ "description": "NanoForge application destination directory",
15
+ "default": "."
19
16
  },
20
17
  "server": {
21
18
  "type": "boolean",
@@ -27,7 +24,11 @@
27
24
  "enum": ["ts", "js"],
28
25
  "description": "NanoForge application language",
29
26
  "default": "ts"
27
+ },
28
+ "initFunctions": {
29
+ "type": "boolean",
30
+ "description": "Add init functions to the main application",
31
+ "default": false
30
32
  }
31
- },
32
- "required": ["name"]
33
+ }
33
34
  }
@@ -2,19 +2,14 @@ import { Rule } from '@angular-devkit/schematics';
2
2
 
3
3
  interface DockerSchema {
4
4
  /**
5
- * NanoForge application name
5
+ * Target directory for generated Docker files
6
6
  */
7
- name: string;
7
+ directory: string;
8
8
 
9
9
  /**
10
10
  * NanoForge application package manager
11
11
  */
12
12
  packageManager: "npm" | "yarn" | "pnpm" | "bun";
13
-
14
- /**
15
- * Target directory for generated Docker files
16
- */
17
- directory?: string;
18
13
  }
19
14
 
20
15
  declare const main: (schema: DockerSchema) => Rule;
@@ -11,35 +11,13 @@ import {
11
11
  url
12
12
  } from "@angular-devkit/schematics";
13
13
 
14
- // src/utils/formatting.ts
15
- var toKebabCase = /* @__PURE__ */ __name((str) => {
16
- return str.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, "$1-$2").replace(/[\s_]+/g, "-").toLowerCase();
17
- }, "toKebabCase");
18
-
19
- // src/utils/name.ts
20
- import { basename, parse } from "path";
21
- var resolvePackageName = /* @__PURE__ */ __name((path) => {
22
- const { base: baseFilename, dir: dirname } = parse(path);
23
- if (baseFilename === ".") {
24
- return basename(process.cwd());
25
- }
26
- if (dirname.match(/^@[^\s]/)) {
27
- return `${dirname}/${baseFilename}`;
28
- }
29
- return baseFilename;
30
- }, "resolvePackageName");
31
-
32
14
  // src/defaults.ts
33
- var DEFAULT_APP_NAME = "nanoforge-app";
34
15
  var DEFAULT_PACKAGE_MANAGER = "npm";
35
16
 
36
17
  // src/libs/docker/docker.factory.ts
37
18
  var transform = /* @__PURE__ */ __name((schema) => {
38
- const name = resolvePackageName(toKebabCase(schema.name?.toString() ?? DEFAULT_APP_NAME));
39
19
  return {
40
- name,
41
- packageManager: schema.packageManager ?? DEFAULT_PACKAGE_MANAGER,
42
- directory: schema.directory
20
+ packageManager: schema.packageManager ?? DEFAULT_PACKAGE_MANAGER
43
21
  };
44
22
  }, "transform");
45
23
  var generate = /* @__PURE__ */ __name((options, path) => {
@@ -53,7 +31,7 @@ var generate = /* @__PURE__ */ __name((options, path) => {
53
31
  }, "generate");
54
32
  var main = /* @__PURE__ */ __name((schema) => {
55
33
  const options = transform(schema);
56
- return mergeWith(generate(options, schema.directory ?? options.name));
34
+ return mergeWith(generate(options, schema.directory));
57
35
  }, "main");
58
36
  export {
59
37
  main
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/libs/docker/docker.factory.ts","../../../src/utils/formatting.ts","../../../src/utils/name.ts","../../../src/defaults.ts"],"sourcesContent":["import { type Path, normalize, strings } from \"@angular-devkit/core\";\nimport {\n type Rule,\n type Source,\n apply,\n mergeWith,\n move,\n template,\n url,\n} from \"@angular-devkit/schematics\";\n\nimport { toKebabCase } from \"@utils/formatting\";\nimport { resolvePackageName } from \"@utils/name\";\n\nimport { DEFAULT_APP_NAME, DEFAULT_PACKAGE_MANAGER } from \"~/defaults\";\n\nimport { type DockerOptions } from \"./docker.options\";\nimport { type DockerSchema } from \"./docker.schema\";\n\nconst transform = (schema: DockerSchema): DockerOptions => {\n const name = resolvePackageName(toKebabCase(schema.name?.toString() ?? DEFAULT_APP_NAME));\n\n return {\n name,\n packageManager: schema.packageManager ?? DEFAULT_PACKAGE_MANAGER,\n directory: schema.directory,\n };\n};\n\nconst generate = (options: DockerOptions, path: string): Source => {\n return apply(url(\"./files\" as Path), [\n template({\n ...strings,\n ...options,\n }),\n move(normalize(path)),\n ]);\n};\n\nexport const main = (schema: DockerSchema): Rule => {\n const options = transform(schema);\n return mergeWith(generate(options, schema.directory ?? options.name));\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 { basename, parse } from \"path\";\n\nexport const resolvePackageName = (path: string): string => {\n const { base: baseFilename, dir: dirname } = parse(path);\n if (baseFilename === \".\") {\n return basename(process.cwd());\n }\n if (dirname.match(/^@[^\\s]/)) {\n return `${dirname}/${baseFilename}`;\n }\n return baseFilename;\n};\n","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\";\nexport const DEFAULT_CONFIG = {\n client: {\n build: {\n entryFile: \"client/main.ts\",\n outDir: \".nanoforge/client\",\n },\n runtime: {\n dir: \".nanoforge/client\",\n },\n },\n};\nexport const DEFAULT_SERVER_CONFIG = {\n server: {\n enable: true,\n build: {\n entryFile: \"server/main.ts\",\n outDir: \".nanoforge/server\",\n },\n runtime: {\n dir: \".nanoforge/server\",\n },\n },\n};\n"],"mappings":";;;;AAAA,SAAoB,WAAW,eAAe;AAC9C;AAAA,EAGE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACTA,IAAM,cAAc,wBAAC,QAAwB;AAClD,SAAO,IACJ,QAAQ,gCAAgC,OAAO,EAC/C,QAAQ,WAAW,GAAG,EACtB,YAAY;AACjB,GAL2B;;;ACA3B,SAAS,UAAU,aAAa;AAEzB,IAAM,qBAAqB,wBAAC,SAAyB;AAC1D,QAAM,EAAE,MAAM,cAAc,KAAK,QAAQ,IAAI,MAAM,IAAI;AACvD,MAAI,iBAAiB,KAAK;AACxB,WAAO,SAAS,QAAQ,IAAI,CAAC;AAAA,EAC/B;AACA,MAAI,QAAQ,MAAM,SAAS,GAAG;AAC5B,WAAO,GAAG,OAAO,IAAI,YAAY;AAAA,EACnC;AACA,SAAO;AACT,GATkC;;;ACF3B,IAAM,mBAAmB;AAKzB,IAAM,0BAA0B;;;AHcvC,IAAM,YAAY,wBAAC,WAAwC;AACzD,QAAM,OAAO,mBAAmB,YAAY,OAAO,MAAM,SAAS,KAAK,gBAAgB,CAAC;AAExF,SAAO;AAAA,IACL;AAAA,IACA,gBAAgB,OAAO,kBAAkB;AAAA,IACzC,WAAW,OAAO;AAAA,EACpB;AACF,GARkB;AAUlB,IAAM,WAAW,wBAAC,SAAwB,SAAyB;AACjE,SAAO,MAAM,IAAI,SAAiB,GAAG;AAAA,IACnC,SAAS;AAAA,MACP,GAAG;AAAA,MACH,GAAG;AAAA,IACL,CAAC;AAAA,IACD,KAAK,UAAU,IAAI,CAAC;AAAA,EACtB,CAAC;AACH,GARiB;AAUV,IAAM,OAAO,wBAAC,WAA+B;AAClD,QAAM,UAAU,UAAU,MAAM;AAChC,SAAO,UAAU,SAAS,SAAS,OAAO,aAAa,QAAQ,IAAI,CAAC;AACtE,GAHoB;","names":[]}
1
+ {"version":3,"sources":["../../../src/libs/docker/docker.factory.ts","../../../src/defaults.ts"],"sourcesContent":["import { type Path, normalize, strings } from \"@angular-devkit/core\";\nimport {\n type Rule,\n type Source,\n apply,\n mergeWith,\n move,\n template,\n url,\n} from \"@angular-devkit/schematics\";\n\nimport { DEFAULT_PACKAGE_MANAGER } from \"~/defaults\";\n\nimport { type DockerOptions } from \"./docker.options\";\nimport { type DockerSchema } from \"./docker.schema\";\n\nconst transform = (schema: DockerSchema): DockerOptions => {\n return {\n packageManager: schema.packageManager ?? DEFAULT_PACKAGE_MANAGER,\n };\n};\n\nconst generate = (options: DockerOptions, path: string): Source => {\n return apply(url(\"./files\" as Path), [\n template({\n ...strings,\n ...options,\n }),\n move(normalize(path)),\n ]);\n};\n\nexport const main = (schema: DockerSchema): Rule => {\n const options = transform(schema);\n return mergeWith(generate(options, schema.directory));\n};\n","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"],"mappings":";;;;AAAA,SAAoB,WAAW,eAAe;AAC9C;AAAA,EAGE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACJA,IAAM,0BAA0B;;;ADWvC,IAAM,YAAY,wBAAC,WAAwC;AACzD,SAAO;AAAA,IACL,gBAAgB,OAAO,kBAAkB;AAAA,EAC3C;AACF,GAJkB;AAMlB,IAAM,WAAW,wBAAC,SAAwB,SAAyB;AACjE,SAAO,MAAM,IAAI,SAAiB,GAAG;AAAA,IACnC,SAAS;AAAA,MACP,GAAG;AAAA,MACH,GAAG;AAAA,IACL,CAAC;AAAA,IACD,KAAK,UAAU,IAAI,CAAC;AAAA,EACtB,CAAC;AACH,GARiB;AAUV,IAAM,OAAO,wBAAC,WAA+B;AAClD,QAAM,UAAU,UAAU,MAAM;AAChC,SAAO,UAAU,SAAS,SAAS,OAAO,SAAS,CAAC;AACtD,GAHoB;","names":[]}
@@ -1 +1 @@
1
- node_modules
1
+ node_modules/