@nanoforge-dev/schematics 2.1.3 → 2.1.4-beta.af6c1e0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +15 -46
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -1
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -15
- package/dist/index.js.map +1 -1
- package/dist/libs/application/application.factory.d.ts +6 -13
- package/dist/libs/application/application.factory.d.ts.map +1 -0
- package/dist/libs/application/application.factory.js +49 -68
- package/dist/libs/application/application.factory.js.map +1 -1
- package/dist/libs/component/component.factory.d.ts +6 -6
- package/dist/libs/component/component.factory.d.ts.map +1 -0
- package/dist/libs/component/component.factory.js +32 -47
- package/dist/libs/component/component.factory.js.map +1 -1
- package/dist/libs/configuration/configuration.factory.d.ts +6 -7
- package/dist/libs/configuration/configuration.factory.d.ts.map +1 -0
- package/dist/libs/configuration/configuration.factory.js +91 -133
- package/dist/libs/configuration/configuration.factory.js.map +1 -1
- package/dist/libs/docker/docker.factory.d.ts +6 -4
- package/dist/libs/docker/docker.factory.d.ts.map +1 -0
- package/dist/libs/docker/docker.factory.js +17 -36
- package/dist/libs/docker/docker.factory.js.map +1 -1
- package/dist/libs/part-base/part-base.factory.d.ts +6 -7
- package/dist/libs/part-base/part-base.factory.d.ts.map +1 -0
- package/dist/libs/part-base/part-base.factory.js +30 -41
- package/dist/libs/part-base/part-base.factory.js.map +1 -1
- package/dist/libs/part-main/part-main.factory.d.ts +6 -9
- package/dist/libs/part-main/part-main.factory.d.ts.map +1 -0
- package/dist/libs/part-main/part-main.factory.js +225 -260
- package/dist/libs/part-main/part-main.factory.js.map +1 -1
- package/dist/libs/system/system.factory.d.ts +6 -6
- package/dist/libs/system/system.factory.d.ts.map +1 -0
- package/dist/libs/system/system.factory.js +32 -50
- package/dist/libs/system/system.factory.js.map +1 -1
- package/package.json +18 -18
|
@@ -1,266 +1,231 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
// src/libs/part-main/part-main.factory.ts
|
|
5
|
-
import { join as join3, normalize, strings } from "@angular-devkit/core";
|
|
6
|
-
import {
|
|
7
|
-
apply,
|
|
8
|
-
asSource,
|
|
9
|
-
mergeWith,
|
|
10
|
-
move,
|
|
11
|
-
template
|
|
12
|
-
} from "@angular-devkit/schematics";
|
|
1
|
+
import { join, normalize, strings } from "@angular-devkit/core";
|
|
2
|
+
import { apply, asSource, mergeWith, move, template } from "@angular-devkit/schematics";
|
|
13
3
|
import * as fs from "fs";
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
var joinRelative = /* @__PURE__ */ __name((...paths) => {
|
|
21
|
-
const path = join(...paths);
|
|
22
|
-
return path.startsWith("./") || path.startsWith("../") ? path : `./${path}`;
|
|
23
|
-
}, "joinRelative");
|
|
24
|
-
|
|
25
|
-
// src/utils/main/const.ts
|
|
26
|
-
var LIBS_FUNCTIONS_NAME = {
|
|
27
|
-
["asset-manager" /* ASSET_MANAGER */]: "useAssetManager",
|
|
28
|
-
["component-system" /* COMPONENT_SYSTEM */]: "useComponentSystem",
|
|
29
|
-
["graphics" /* GRAPHICS */]: "useGraphics",
|
|
30
|
-
["input" /* INPUT */]: "useInput",
|
|
31
|
-
["network" /* NETWORK */]: "useNetwork",
|
|
32
|
-
["sound" /* SOUND */]: "useSound"
|
|
4
|
+
import { join as join$1 } from "path";
|
|
5
|
+
//#endregion
|
|
6
|
+
//#region src/utils/path.ts
|
|
7
|
+
const joinRelative = (...paths) => {
|
|
8
|
+
const path = join$1(...paths);
|
|
9
|
+
return path.startsWith("./") || path.startsWith("../") ? path : `./${path}`;
|
|
33
10
|
};
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
11
|
+
//#endregion
|
|
12
|
+
//#region src/utils/main/const.ts
|
|
13
|
+
const LIBS_FUNCTIONS_NAME = {
|
|
14
|
+
["asset-manager"]: "useAssetManager",
|
|
15
|
+
["component-system"]: "useComponentSystem",
|
|
16
|
+
["graphics"]: "useGraphics",
|
|
17
|
+
["input"]: "useInput",
|
|
18
|
+
["network"]: "useNetwork",
|
|
19
|
+
["sound"]: "useSound"
|
|
20
|
+
};
|
|
21
|
+
//#endregion
|
|
22
|
+
//#region src/utils/main/main-utils.ts
|
|
23
|
+
const getStringParam = (value) => {
|
|
24
|
+
if (typeof value === "string") return `"${value}"`;
|
|
25
|
+
if (typeof value === "number") return value.toString();
|
|
26
|
+
if (typeof value === "boolean") return value ? "true" : "false";
|
|
27
|
+
if (typeof value === "object") return JSON.stringify(value);
|
|
28
|
+
return "undefined";
|
|
29
|
+
};
|
|
30
|
+
//#endregion
|
|
31
|
+
//#region src/utils/main/main.generator.ts
|
|
45
32
|
var MainGenerator = class {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
writeLine(text, indentation = true) {
|
|
198
|
-
const line = `${" ".repeat(indentation ? this.indentation * 2 : 0)}${text}
|
|
199
|
-
`;
|
|
200
|
-
this.buffer += line;
|
|
201
|
-
}
|
|
202
|
-
endSection() {
|
|
203
|
-
this.writeLine("");
|
|
204
|
-
}
|
|
33
|
+
buffer = "";
|
|
34
|
+
indentation = 0;
|
|
35
|
+
editor;
|
|
36
|
+
pathToRoot;
|
|
37
|
+
constructor(editor = false, pathToRoot = "") {
|
|
38
|
+
this.editor = editor;
|
|
39
|
+
this.pathToRoot = pathToRoot;
|
|
40
|
+
}
|
|
41
|
+
toString() {
|
|
42
|
+
return this.buffer;
|
|
43
|
+
}
|
|
44
|
+
generateBaseImports(hasTypes) {
|
|
45
|
+
if (this.editor) if (hasTypes) this.writeLine(`import { type IEditorRunOptions, NanoforgeFactory } from "@nanoforge-dev/core-editor";`);
|
|
46
|
+
else this.writeLine(`import { NanoforgeFactory } from "@nanoforge-dev/core-editor";`);
|
|
47
|
+
else {
|
|
48
|
+
if (hasTypes) this.writeLine(`import { type IRunOptions } from "@nanoforge-dev/common";`);
|
|
49
|
+
this.writeLine(`import { NanoforgeFactory } from "@nanoforge-dev/core";`);
|
|
50
|
+
}
|
|
51
|
+
this.endSection();
|
|
52
|
+
return this;
|
|
53
|
+
}
|
|
54
|
+
generateLibsImports(libs) {
|
|
55
|
+
return this.generateImports(libs, false);
|
|
56
|
+
}
|
|
57
|
+
generateComponentsImports(libs) {
|
|
58
|
+
return this.generateImports(libs, true);
|
|
59
|
+
}
|
|
60
|
+
generateSystemsImports(libs) {
|
|
61
|
+
return this.generateImports(libs, true);
|
|
62
|
+
}
|
|
63
|
+
generateMainFunction(hasTypes, cb) {
|
|
64
|
+
if (this.editor) this.writeLine(`export async function main(options${hasTypes ? ": IEditorRunOptions" : ""}) {`);
|
|
65
|
+
else this.writeLine(`export async function main(options${hasTypes ? ": IRunOptions" : ""}) {`);
|
|
66
|
+
this.indentation += 1;
|
|
67
|
+
cb(this);
|
|
68
|
+
this.indentation -= 1;
|
|
69
|
+
this.writeLine("}");
|
|
70
|
+
return this;
|
|
71
|
+
}
|
|
72
|
+
generateApp(isServer) {
|
|
73
|
+
this.writeLine(`const app = NanoforgeFactory.create${isServer ? "Server" : "Client"}();`);
|
|
74
|
+
this.endSection();
|
|
75
|
+
return this;
|
|
76
|
+
}
|
|
77
|
+
generateAppInit() {
|
|
78
|
+
this.writeLine(`await app.init(options);`);
|
|
79
|
+
this.endSection();
|
|
80
|
+
return this;
|
|
81
|
+
}
|
|
82
|
+
generateAppRun(hasInitFunctions) {
|
|
83
|
+
this.writeLine(`await app.run();`);
|
|
84
|
+
if (hasInitFunctions) this.endSection();
|
|
85
|
+
return this;
|
|
86
|
+
}
|
|
87
|
+
generateLibsInstances(libs) {
|
|
88
|
+
libs.forEach(({ id, name }) => this.writeLine(`const ${id} = new ${name}();`));
|
|
89
|
+
this.endSection();
|
|
90
|
+
return this;
|
|
91
|
+
}
|
|
92
|
+
generateLibsInit(libs) {
|
|
93
|
+
libs.forEach(({ id, type }) => this.writeLine(this.getInitFunction(id, type)));
|
|
94
|
+
this.endSection();
|
|
95
|
+
return this;
|
|
96
|
+
}
|
|
97
|
+
generateRegistry(libs) {
|
|
98
|
+
const libName = libs.find((lib) => lib.type === "component-system")?.id ?? "ecsLibrary";
|
|
99
|
+
this.writeLine(`const registry = ${libName}.registry;`);
|
|
100
|
+
this.endSection();
|
|
101
|
+
return this;
|
|
102
|
+
}
|
|
103
|
+
generateEntities(components, entities) {
|
|
104
|
+
entities.forEach((entity, index) => this.generateEntity(components, entity, index));
|
|
105
|
+
return this;
|
|
106
|
+
}
|
|
107
|
+
generateSystems(systems) {
|
|
108
|
+
systems.forEach(({ name }) => this.writeLine(`registry.addSystem(${name});`));
|
|
109
|
+
this.endSection();
|
|
110
|
+
return this;
|
|
111
|
+
}
|
|
112
|
+
generateInitFunctionIfNeeded(needed, func) {
|
|
113
|
+
if (needed) return this.generateInitFunction(func);
|
|
114
|
+
return this;
|
|
115
|
+
}
|
|
116
|
+
generateInitFunctionsImportsIfNeeded(needed) {
|
|
117
|
+
if (!needed) return this;
|
|
118
|
+
return this.generateImports([
|
|
119
|
+
{
|
|
120
|
+
name: "afterInit",
|
|
121
|
+
path: "./init/after-init"
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
name: "afterRegistryInit",
|
|
125
|
+
path: "./init/after-registry-init"
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
name: "afterRun",
|
|
129
|
+
path: "./init/after-run"
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
name: "beforeInit",
|
|
133
|
+
path: "./init/before-init"
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
name: "beforeRegistryInit",
|
|
137
|
+
path: "./init/before-registry-init"
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
name: "beforeRun",
|
|
141
|
+
path: "./init/before-run"
|
|
142
|
+
}
|
|
143
|
+
], true);
|
|
144
|
+
}
|
|
145
|
+
generateInitFunction(func) {
|
|
146
|
+
const params = ["app"];
|
|
147
|
+
if (["beforeRegistryInit", "afterRegistryInit"].includes(func)) params.push("registry");
|
|
148
|
+
this.writeLine(`await ${func}(${params.join(", ")});`);
|
|
149
|
+
if (func !== "afterRun") this.endSection();
|
|
150
|
+
return this;
|
|
151
|
+
}
|
|
152
|
+
generateImports(els, relative) {
|
|
153
|
+
els.sort((a, b) => a.path.localeCompare(b.path)).forEach(({ name, path }) => this.writeLine(`import { ${name} } from "${relative ? joinRelative(this.pathToRoot, path) : path}";`));
|
|
154
|
+
this.endSection();
|
|
155
|
+
return this;
|
|
156
|
+
}
|
|
157
|
+
generateEntity(components, entity, entityIndex) {
|
|
158
|
+
this.writeLine(`const ${entity.id} = registry.spawnEntity();`);
|
|
159
|
+
Object.entries(entity.components).forEach(([componentName, rawParams]) => {
|
|
160
|
+
const originalsParams = components.find(({ name }) => name === componentName)?.paramsNames;
|
|
161
|
+
if (!originalsParams) throw new Error("Missing component in entity or inexistent saved component");
|
|
162
|
+
const params = !this.editor ? Object.values(originalsParams).map((ogParam) => {
|
|
163
|
+
return getStringParam(rawParams[ogParam]);
|
|
164
|
+
}) : Object.values(originalsParams).map((ogParam) => {
|
|
165
|
+
return `options.editor.save.entities[${entityIndex}].components["${componentName}"]["${ogParam}"]`;
|
|
166
|
+
});
|
|
167
|
+
this.writeLine(`registry.addComponent(${entity.id}, new ${componentName}(${params.join(", ")}));`);
|
|
168
|
+
});
|
|
169
|
+
if (this.editor) this.writeLine(`registry.addComponent(${entity.id}, { name: "__RESERVED_entityId", entityId: "${entity.id}" });`);
|
|
170
|
+
this.endSection();
|
|
171
|
+
}
|
|
172
|
+
getInitFunction(name, type) {
|
|
173
|
+
const baseName = LIBS_FUNCTIONS_NAME[type];
|
|
174
|
+
if (baseName) return `app.${baseName}(${name});`;
|
|
175
|
+
return `app.use(Symbol("${type}"), ${name});`;
|
|
176
|
+
}
|
|
177
|
+
writeLine(text, indentation = true) {
|
|
178
|
+
const line = `${" ".repeat(indentation ? this.indentation * 2 : 0)}${text}\n`;
|
|
179
|
+
this.buffer += line;
|
|
180
|
+
}
|
|
181
|
+
endSection() {
|
|
182
|
+
this.writeLine("");
|
|
183
|
+
}
|
|
205
184
|
};
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
...options
|
|
233
|
-
}),
|
|
234
|
-
move(normalize(path))
|
|
235
|
-
];
|
|
236
|
-
return apply(asSource(writeMain(schema, path)), rules);
|
|
237
|
-
}, "generate");
|
|
238
|
-
var getMainPath = /* @__PURE__ */ __name((schema) => {
|
|
239
|
-
if (schema.outFile) return schema.outFile;
|
|
240
|
-
if (schema.editor)
|
|
241
|
-
return join3(".nanoforge/editor", schema.part, `main.${schema.language}`);
|
|
242
|
-
return join3(schema.part, `main.${schema.language}`);
|
|
243
|
-
}, "getMainPath");
|
|
244
|
-
var writeMain = /* @__PURE__ */ __name((schema, path) => {
|
|
245
|
-
return (tree) => {
|
|
246
|
-
const save = getSave(path, schema.part, schema.saveFile);
|
|
247
|
-
const resPath = getMainPath(schema);
|
|
248
|
-
const content = generateMain(schema, save);
|
|
249
|
-
fs.rmSync(join3(path, resPath), { force: true });
|
|
250
|
-
tree.create(resPath, content);
|
|
251
|
-
return tree;
|
|
252
|
-
};
|
|
253
|
-
}, "writeMain");
|
|
254
|
-
var getSave = /* @__PURE__ */ __name((path, part, saveFile) => {
|
|
255
|
-
return JSON.parse(
|
|
256
|
-
fs.readFileSync(saveFile ?? join3(path, `.nanoforge/${part}.save.json`), "utf-8")
|
|
257
|
-
);
|
|
258
|
-
}, "getSave");
|
|
259
|
-
var main = /* @__PURE__ */ __name((schema) => {
|
|
260
|
-
const options = transform(schema);
|
|
261
|
-
return mergeWith(generate(options, schema.directory, schema));
|
|
262
|
-
}, "main");
|
|
263
|
-
export {
|
|
264
|
-
main
|
|
185
|
+
//#endregion
|
|
186
|
+
//#region src/utils/main/main-functions.ts
|
|
187
|
+
const generateMain = (options, save) => {
|
|
188
|
+
const isServer = options.part === "server";
|
|
189
|
+
const hasTypes = options.language === "ts";
|
|
190
|
+
const initFunctions = options.initFunctions;
|
|
191
|
+
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) => {
|
|
192
|
+
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");
|
|
193
|
+
}).toString();
|
|
194
|
+
};
|
|
195
|
+
//#endregion
|
|
196
|
+
//#region src/libs/part-main/part-main.factory.ts
|
|
197
|
+
const transform = (schema) => {
|
|
198
|
+
return {};
|
|
199
|
+
};
|
|
200
|
+
const generate = (options, path, schema) => {
|
|
201
|
+
const rules = [template({
|
|
202
|
+
...strings,
|
|
203
|
+
...options
|
|
204
|
+
}), move(normalize(path))];
|
|
205
|
+
return apply(asSource(writeMain(schema, path)), rules);
|
|
206
|
+
};
|
|
207
|
+
const getMainPath = (schema) => {
|
|
208
|
+
if (schema.outFile) return schema.outFile;
|
|
209
|
+
if (schema.editor) return join(".nanoforge/editor", schema.part, `main.${schema.language}`);
|
|
210
|
+
return join(schema.part, `main.${schema.language}`);
|
|
265
211
|
};
|
|
212
|
+
const writeMain = (schema, path) => {
|
|
213
|
+
return (tree) => {
|
|
214
|
+
const save = getSave(path, schema.part, schema.saveFile);
|
|
215
|
+
const resPath = getMainPath(schema);
|
|
216
|
+
const content = generateMain(schema, save);
|
|
217
|
+
fs.rmSync(join(path, resPath), { force: true });
|
|
218
|
+
tree.create(resPath, content);
|
|
219
|
+
return tree;
|
|
220
|
+
};
|
|
221
|
+
};
|
|
222
|
+
const getSave = (path, part, saveFile) => {
|
|
223
|
+
return JSON.parse(fs.readFileSync(saveFile ?? join(path, `.nanoforge/${part}.save.json`), "utf-8"));
|
|
224
|
+
};
|
|
225
|
+
const main = (schema) => {
|
|
226
|
+
return mergeWith(generate(transform(schema), schema.directory, schema));
|
|
227
|
+
};
|
|
228
|
+
//#endregion
|
|
229
|
+
export { main };
|
|
230
|
+
|
|
266
231
|
//# sourceMappingURL=part-main.factory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/libs/part-main/part-main.factory.ts","../../../src/utils/main/main-functions.ts","../../../src/utils/path.ts","../../../src/utils/main/const.ts","../../../src/utils/main/main-utils.ts","../../../src/utils/main/main.generator.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 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 } 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 const save = getSave(path, schema.part, schema.saveFile);\n\n const resPath = getMainPath(schema);\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\nexport const main = (schema: PartMainSchema): Rule => {\n const options = transform(schema);\n\n return mergeWith(generate(options, schema.directory, schema));\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 { 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","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 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"],"mappings":"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","names":["join","join","join","join"]}
|
|
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 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 } 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 const save = getSave(path, schema.part, schema.saveFile);\n\n const resPath = getMainPath(schema);\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\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,27 +1,27 @@
|
|
|
1
|
-
import { Rule } from
|
|
1
|
+
import { Rule } from "@angular-devkit/schematics";
|
|
2
2
|
|
|
3
|
+
//#region src/libs/system/system.schema.d.ts
|
|
3
4
|
interface SystemSchema {
|
|
4
5
|
/**
|
|
5
6
|
* System destination directory
|
|
6
7
|
*/
|
|
7
8
|
name: string;
|
|
8
|
-
|
|
9
9
|
/**
|
|
10
10
|
* System destination directory
|
|
11
11
|
*/
|
|
12
12
|
directory: string;
|
|
13
|
-
|
|
14
13
|
/**
|
|
15
14
|
* The part of the application to generate
|
|
16
15
|
*/
|
|
17
16
|
part: "client" | "server";
|
|
18
|
-
|
|
19
17
|
/**
|
|
20
18
|
* NanoForge Application language
|
|
21
19
|
*/
|
|
22
20
|
language: "js" | "ts";
|
|
23
21
|
}
|
|
24
|
-
|
|
22
|
+
//#endregion
|
|
23
|
+
//#region src/libs/system/system.factory.d.ts
|
|
25
24
|
declare const main: (schema: SystemSchema) => Rule;
|
|
26
|
-
|
|
25
|
+
//#endregion
|
|
27
26
|
export { main };
|
|
27
|
+
//# sourceMappingURL=system.factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system.factory.d.ts","names":["name","directory","part","language"],"sources":["../../../src/libs/system/system.schema.d.ts","../../../src/libs/system/system.factory.ts"],"mappings":";;;UAAiB,YAAA;;;AAAjB;EAIEA,IAAAA;EAJ2B;;;EAS3BC,SAAAA;EAUQ;AAAA;;EALRC,IAAAA;ECsBF;;;EDjBEC,QAAAA;AAAAA;;;cCiBW,IAAA,GAAQ,MAAA,EAAQ,YAAA,KAAe,IAI3C"}
|