@sculptor/cli 0.2.4 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +140 -419
- package/bin/sc.js +0 -0
- package/dist/agents.d.ts +2 -0
- package/dist/agents.js +100 -0
- package/dist/agents.js.map +1 -0
- package/dist/cli.js +212 -19
- package/dist/cli.js.map +1 -1
- package/dist/diagnostics.d.ts +16 -0
- package/dist/diagnostics.js +275 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/package-commands.d.ts +24 -0
- package/dist/package-commands.js +299 -0
- package/dist/package-commands.js.map +1 -0
- package/dist/package-registry.d.ts +37 -0
- package/dist/package-registry.js +477 -0
- package/dist/package-registry.js.map +1 -0
- package/dist/scaffold.d.ts +3 -1
- package/dist/scaffold.js +39 -0
- package/dist/scaffold.js.map +1 -1
- package/package.json +5 -4
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export type PackageFileType = "controller" | "service" | "repository" | "middleware" | "module" | "dto" | "route" | "type";
|
|
2
|
+
export interface PackageFileRecord {
|
|
3
|
+
type: PackageFileType;
|
|
4
|
+
path: string;
|
|
5
|
+
}
|
|
6
|
+
export interface PackageRecord {
|
|
7
|
+
name: string;
|
|
8
|
+
path: string;
|
|
9
|
+
index: string;
|
|
10
|
+
files: PackageFileRecord[];
|
|
11
|
+
}
|
|
12
|
+
export interface PackageRegistryArtifact {
|
|
13
|
+
packages: Record<string, PackageRecord>;
|
|
14
|
+
files: PackageFileRecord[];
|
|
15
|
+
}
|
|
16
|
+
export interface PackageScanResult {
|
|
17
|
+
packages: PackageRecord[];
|
|
18
|
+
files: PackageFileRecord[];
|
|
19
|
+
}
|
|
20
|
+
export declare const PACKAGE_REGISTRY_FILE = "sculptor.packages.json";
|
|
21
|
+
export declare const getPackageRegistryPath: (rootDir: string) => string;
|
|
22
|
+
export declare const loadPackageRegistry: (rootDir: string) => PackageRegistryArtifact;
|
|
23
|
+
export declare const savePackageRegistry: (rootDir: string, registry: PackageRegistryArtifact) => void;
|
|
24
|
+
export declare const scanPackageRegistry: (rootDir: string) => PackageScanResult;
|
|
25
|
+
export declare const scanPackageIndexes: (rootDir: string) => PackageRecord[];
|
|
26
|
+
export declare const syncPackageRegistry: (rootDir: string) => PackageRegistryArtifact;
|
|
27
|
+
export declare const renderPackageIndex: (record: PackageRecord) => string;
|
|
28
|
+
export declare const inferPackageNameFromPath: (packagePath: string) => string;
|
|
29
|
+
export declare const inferPackagePath: (rootDir: string, packageName: string, explicitPath?: string) => string;
|
|
30
|
+
export declare const inferPackageIndexPath: (packagePath: string) => string;
|
|
31
|
+
export declare const buildPackageRecord: (rootDir: string, packageName: string, explicitPath?: string) => PackageRecord;
|
|
32
|
+
export declare const readPackageSource: (filePath: string) => string;
|
|
33
|
+
export declare const upsertFileIntoRegistry: (registry: PackageRegistryArtifact, filePath: string) => PackageRegistryArtifact;
|
|
34
|
+
export declare const removeFileFromRegistry: (registry: PackageRegistryArtifact, filePath: string) => PackageRegistryArtifact;
|
|
35
|
+
export declare const getOwningPackage: (registry: PackageRegistryArtifact, filePath: string) => PackageRecord | undefined;
|
|
36
|
+
export declare const renderPackageIndexForRecord: (record: PackageRecord) => string;
|
|
37
|
+
export declare const updatePackageIndexForRecord: (filePath: string, record: PackageRecord) => void;
|
|
@@ -0,0 +1,477 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import ts from "typescript";
|
|
4
|
+
import { loadConfig } from "@sculptor/config";
|
|
5
|
+
export const PACKAGE_REGISTRY_FILE = "sculptor.packages.json";
|
|
6
|
+
const isPlainObject = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
7
|
+
const toPascalCase = (value) => value
|
|
8
|
+
.split(/[^a-zA-Z0-9]+/)
|
|
9
|
+
.filter(Boolean)
|
|
10
|
+
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
11
|
+
.join("");
|
|
12
|
+
const toCamelCase = (value) => {
|
|
13
|
+
const pascal = toPascalCase(value);
|
|
14
|
+
return pascal.charAt(0).toLowerCase() + pascal.slice(1);
|
|
15
|
+
};
|
|
16
|
+
const normalizeRelativePath = (value) => value.replace(/\\/g, "/").replace(/^\/+/, "").replace(/\/+$/, "");
|
|
17
|
+
const readJson = (filePath) => {
|
|
18
|
+
if (!fs.existsSync(filePath)) {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
const raw = fs.readFileSync(filePath, "utf8");
|
|
22
|
+
if (!raw.trim()) {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
return JSON.parse(raw);
|
|
26
|
+
};
|
|
27
|
+
const writeJson = (filePath, value) => {
|
|
28
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
29
|
+
fs.writeFileSync(filePath, `${JSON.stringify(value, null, 2)}\n`, "utf8");
|
|
30
|
+
};
|
|
31
|
+
const getSrcRoot = (rootDir) => String(loadConfig(rootDir).framework.project?.srcRoot ?? "src");
|
|
32
|
+
const isLocalModule = (specifier) => specifier.startsWith(".") || specifier.startsWith("/");
|
|
33
|
+
const toTsPath = (specifier) => {
|
|
34
|
+
if (!specifier.endsWith(".js") && !specifier.endsWith(".ts")) {
|
|
35
|
+
return specifier;
|
|
36
|
+
}
|
|
37
|
+
return specifier.replace(/\.js$/, ".ts");
|
|
38
|
+
};
|
|
39
|
+
const inferFileType = (filePath) => {
|
|
40
|
+
if (filePath.endsWith(".controller.ts")) {
|
|
41
|
+
return "controller";
|
|
42
|
+
}
|
|
43
|
+
if (filePath.endsWith(".service.ts")) {
|
|
44
|
+
return "service";
|
|
45
|
+
}
|
|
46
|
+
if (filePath.endsWith(".repository.ts")) {
|
|
47
|
+
return "repository";
|
|
48
|
+
}
|
|
49
|
+
if (filePath.endsWith(".middleware.ts")) {
|
|
50
|
+
return "middleware";
|
|
51
|
+
}
|
|
52
|
+
if (filePath.endsWith(".module.ts")) {
|
|
53
|
+
return "module";
|
|
54
|
+
}
|
|
55
|
+
if (filePath.endsWith(".route.ts") || filePath.endsWith(".route.handler.ts")) {
|
|
56
|
+
return "route";
|
|
57
|
+
}
|
|
58
|
+
if (filePath.endsWith(".dto.ts")) {
|
|
59
|
+
return "dto";
|
|
60
|
+
}
|
|
61
|
+
return "type";
|
|
62
|
+
};
|
|
63
|
+
const inferSymbolFromFile = (filePath) => {
|
|
64
|
+
const base = path.posix.basename(filePath).replace(/\.ts$/, "");
|
|
65
|
+
if (base.endsWith(".route.handler")) {
|
|
66
|
+
return `${toCamelCase(base.replace(/\.route\.handler$/, ""))}Handler`;
|
|
67
|
+
}
|
|
68
|
+
if (base.endsWith(".route")) {
|
|
69
|
+
return toCamelCase(base.replace(/\.route$/, ""));
|
|
70
|
+
}
|
|
71
|
+
if (base.endsWith(".middleware")) {
|
|
72
|
+
return `${toCamelCase(base.replace(/\.middleware$/, ""))}Middleware`;
|
|
73
|
+
}
|
|
74
|
+
if (base.endsWith(".service")) {
|
|
75
|
+
return `${toPascalCase(base.replace(/\.service$/, ""))}Service`;
|
|
76
|
+
}
|
|
77
|
+
if (base.endsWith(".repository")) {
|
|
78
|
+
return `${toPascalCase(base.replace(/\.repository$/, ""))}Repository`;
|
|
79
|
+
}
|
|
80
|
+
if (base.endsWith(".controller")) {
|
|
81
|
+
return `${toPascalCase(base.replace(/\.controller$/, ""))}Controller`;
|
|
82
|
+
}
|
|
83
|
+
if (base.endsWith(".module")) {
|
|
84
|
+
return `${toPascalCase(base.replace(/\.module$/, ""))}Module`;
|
|
85
|
+
}
|
|
86
|
+
if (base.endsWith(".dto")) {
|
|
87
|
+
return `${toPascalCase(base.replace(/\.dto$/, ""))}Dto`;
|
|
88
|
+
}
|
|
89
|
+
if (base.endsWith(".types")) {
|
|
90
|
+
return `${toPascalCase(base.replace(/\.types$/, ""))}Types`;
|
|
91
|
+
}
|
|
92
|
+
return `${toPascalCase(base)}Type`;
|
|
93
|
+
};
|
|
94
|
+
const collectTsFiles = (dir, rootDir = dir) => {
|
|
95
|
+
if (!fs.existsSync(dir)) {
|
|
96
|
+
return [];
|
|
97
|
+
}
|
|
98
|
+
const files = [];
|
|
99
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
100
|
+
const fullPath = path.join(dir, entry.name);
|
|
101
|
+
if (entry.isDirectory()) {
|
|
102
|
+
files.push(...collectTsFiles(fullPath, rootDir));
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (!entry.isFile() || !entry.name.endsWith(".ts")) {
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
files.push(normalizeRelativePath(path.relative(rootDir, fullPath)));
|
|
109
|
+
}
|
|
110
|
+
return files;
|
|
111
|
+
};
|
|
112
|
+
const fileBelongsToPackage = (packagePath, filePath) => {
|
|
113
|
+
const normalizedPackagePath = normalizeRelativePath(packagePath);
|
|
114
|
+
const normalizedFilePath = normalizeRelativePath(filePath);
|
|
115
|
+
return normalizedFilePath.startsWith(`${normalizedPackagePath}/`) && normalizedFilePath !== `${normalizedPackagePath}/index.ts`;
|
|
116
|
+
};
|
|
117
|
+
const getDecorators = (node) => ts.canHaveDecorators(node) ? ts.getDecorators(node) ?? [] : [];
|
|
118
|
+
const getPackageDecorator = (node) => {
|
|
119
|
+
for (const decorator of getDecorators(node)) {
|
|
120
|
+
const expression = decorator.expression;
|
|
121
|
+
if (!ts.isCallExpression(expression)) {
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
const callee = expression.expression;
|
|
125
|
+
if (ts.isIdentifier(callee) && callee.text === "Package") {
|
|
126
|
+
return expression;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return undefined;
|
|
130
|
+
};
|
|
131
|
+
const parsePackageMetadata = (rootDir, filePath) => {
|
|
132
|
+
const sourceText = fs.readFileSync(filePath, "utf8");
|
|
133
|
+
const sourceFile = ts.createSourceFile(filePath, sourceText, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
134
|
+
const classes = sourceFile.statements.filter(ts.isClassDeclaration);
|
|
135
|
+
const decoratedClass = classes.find((node) => getPackageDecorator(node));
|
|
136
|
+
if (!decoratedClass) {
|
|
137
|
+
return undefined;
|
|
138
|
+
}
|
|
139
|
+
const decorator = getPackageDecorator(decoratedClass);
|
|
140
|
+
const argument = decorator?.arguments[0];
|
|
141
|
+
if (!argument || !ts.isObjectLiteralExpression(argument)) {
|
|
142
|
+
throw new Error(`Malformed @Package() metadata in ${filePath}.`);
|
|
143
|
+
}
|
|
144
|
+
const values = new Map();
|
|
145
|
+
for (const property of argument.properties) {
|
|
146
|
+
if (!ts.isPropertyAssignment(property)) {
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
const name = ts.isIdentifier(property.name) ? property.name.text : property.name.getText(sourceFile);
|
|
150
|
+
values.set(name, property.initializer);
|
|
151
|
+
}
|
|
152
|
+
const getString = (key, fallback = "") => {
|
|
153
|
+
const value = values.get(key);
|
|
154
|
+
if (!value || !ts.isStringLiteralLike(value)) {
|
|
155
|
+
return fallback;
|
|
156
|
+
}
|
|
157
|
+
return value.text;
|
|
158
|
+
};
|
|
159
|
+
const name = getString("name", decoratedClass.name?.text ?? "");
|
|
160
|
+
const packagePath = getString("path", "");
|
|
161
|
+
if (!name || !packagePath) {
|
|
162
|
+
throw new Error(`Malformed @Package() metadata in ${filePath}.`);
|
|
163
|
+
}
|
|
164
|
+
return {
|
|
165
|
+
name,
|
|
166
|
+
path: packagePath,
|
|
167
|
+
index: normalizeRelativePath(path.relative(rootDir, filePath))
|
|
168
|
+
};
|
|
169
|
+
};
|
|
170
|
+
export const getPackageRegistryPath = (rootDir) => path.join(rootDir, PACKAGE_REGISTRY_FILE);
|
|
171
|
+
export const loadPackageRegistry = (rootDir) => {
|
|
172
|
+
const filePath = getPackageRegistryPath(rootDir);
|
|
173
|
+
const data = readJson(filePath);
|
|
174
|
+
if (!data) {
|
|
175
|
+
return { packages: {}, files: [] };
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
packages: data.packages ?? {},
|
|
179
|
+
files: data.files ?? []
|
|
180
|
+
};
|
|
181
|
+
};
|
|
182
|
+
export const savePackageRegistry = (rootDir, registry) => {
|
|
183
|
+
writeJson(getPackageRegistryPath(rootDir), registry);
|
|
184
|
+
};
|
|
185
|
+
export const scanPackageRegistry = (rootDir) => {
|
|
186
|
+
const srcRoot = getSrcRoot(rootDir);
|
|
187
|
+
const sourceRoot = path.join(rootDir, srcRoot);
|
|
188
|
+
const packages = [];
|
|
189
|
+
const visit = (dir) => {
|
|
190
|
+
if (!fs.existsSync(dir)) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
194
|
+
const fullPath = path.join(dir, entry.name);
|
|
195
|
+
if (entry.isDirectory()) {
|
|
196
|
+
visit(fullPath);
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
if (!entry.isFile() || entry.name !== "index.ts") {
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
const packageMeta = parsePackageMetadata(rootDir, fullPath);
|
|
203
|
+
if (!packageMeta) {
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
packages.push({
|
|
207
|
+
...packageMeta,
|
|
208
|
+
files: []
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
visit(sourceRoot);
|
|
213
|
+
const allTsFiles = collectTsFiles(sourceRoot, rootDir);
|
|
214
|
+
const ownedFiles = new Set();
|
|
215
|
+
for (const file of allTsFiles) {
|
|
216
|
+
if (file === PACKAGE_REGISTRY_FILE || file.endsWith(".d.ts") || file.endsWith("index.ts")) {
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
const owner = [...packages]
|
|
220
|
+
.filter((pkg) => fileBelongsToPackage(pkg.path, file))
|
|
221
|
+
.sort((left, right) => right.path.length - left.path.length)[0];
|
|
222
|
+
const nextFile = {
|
|
223
|
+
type: inferFileType(file),
|
|
224
|
+
path: file
|
|
225
|
+
};
|
|
226
|
+
if (owner) {
|
|
227
|
+
owner.files.push(nextFile);
|
|
228
|
+
ownedFiles.add(file);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
const unpackaged = [];
|
|
232
|
+
for (const file of allTsFiles) {
|
|
233
|
+
if (file === PACKAGE_REGISTRY_FILE || file.endsWith(".d.ts") || file.endsWith("index.ts")) {
|
|
234
|
+
continue;
|
|
235
|
+
}
|
|
236
|
+
if (ownedFiles.has(file)) {
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
unpackaged.push({
|
|
240
|
+
type: inferFileType(file),
|
|
241
|
+
path: file
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
return {
|
|
245
|
+
packages: packages
|
|
246
|
+
.map((pkg) => ({ ...pkg, files: pkg.files.sort((left, right) => left.path.localeCompare(right.path)) }))
|
|
247
|
+
.sort((left, right) => left.name.localeCompare(right.name)),
|
|
248
|
+
files: unpackaged.sort((left, right) => left.path.localeCompare(right.path))
|
|
249
|
+
};
|
|
250
|
+
};
|
|
251
|
+
export const scanPackageIndexes = (rootDir) => scanPackageRegistry(rootDir).packages;
|
|
252
|
+
export const syncPackageRegistry = (rootDir) => {
|
|
253
|
+
const scanned = scanPackageRegistry(rootDir);
|
|
254
|
+
const registry = {
|
|
255
|
+
packages: Object.fromEntries(scanned.packages.map((pkg) => [pkg.name, pkg])),
|
|
256
|
+
files: scanned.files
|
|
257
|
+
};
|
|
258
|
+
savePackageRegistry(rootDir, registry);
|
|
259
|
+
return registry;
|
|
260
|
+
};
|
|
261
|
+
const derivePackageIndexView = (record) => {
|
|
262
|
+
const ownedFiles = record.files.filter((file) => file.path !== record.index);
|
|
263
|
+
const controllerFiles = ownedFiles.filter((file) => file.path.endsWith(".controller.ts"));
|
|
264
|
+
const serviceFiles = ownedFiles.filter((file) => file.path.endsWith(".service.ts"));
|
|
265
|
+
const repositoryFiles = ownedFiles.filter((file) => file.path.endsWith(".repository.ts"));
|
|
266
|
+
const middlewareFiles = ownedFiles.filter((file) => file.path.endsWith(".middleware.ts"));
|
|
267
|
+
const routeFiles = ownedFiles.filter((file) => file.path.endsWith(".route.ts"));
|
|
268
|
+
const routeHandlerFiles = ownedFiles.filter((file) => file.path.endsWith(".route.handler.ts"));
|
|
269
|
+
const dtoFiles = ownedFiles.filter((file) => file.path.endsWith(".dto.ts"));
|
|
270
|
+
const typeFiles = ownedFiles.filter((file) => file.path.endsWith(".types.ts") || file.path.endsWith(".type.ts"));
|
|
271
|
+
const importableFiles = [
|
|
272
|
+
...controllerFiles,
|
|
273
|
+
...serviceFiles,
|
|
274
|
+
...repositoryFiles,
|
|
275
|
+
...middlewareFiles,
|
|
276
|
+
...routeFiles,
|
|
277
|
+
...dtoFiles
|
|
278
|
+
];
|
|
279
|
+
const exportFiles = [
|
|
280
|
+
...controllerFiles,
|
|
281
|
+
...serviceFiles,
|
|
282
|
+
...repositoryFiles,
|
|
283
|
+
...middlewareFiles,
|
|
284
|
+
...routeFiles,
|
|
285
|
+
...routeHandlerFiles,
|
|
286
|
+
...dtoFiles
|
|
287
|
+
];
|
|
288
|
+
const packageExportFiles = [
|
|
289
|
+
...serviceFiles,
|
|
290
|
+
...repositoryFiles,
|
|
291
|
+
...middlewareFiles,
|
|
292
|
+
...dtoFiles
|
|
293
|
+
];
|
|
294
|
+
const renderArray = (values) => values.length === 0 ? "[]" : `[\n${values.map((value) => ` ${value}`).join(",\n")}\n ]`;
|
|
295
|
+
const imports = importableFiles
|
|
296
|
+
.map((file) => {
|
|
297
|
+
const symbol = inferSymbolFromFile(file.path);
|
|
298
|
+
const relative = normalizeRelativePath(path.posix.relative(record.path, file.path)).replace(/\.ts$/, ".js");
|
|
299
|
+
return `import { ${symbol} } from "./${relative}";`;
|
|
300
|
+
})
|
|
301
|
+
.join("\n");
|
|
302
|
+
const exports = [...exportFiles, ...typeFiles]
|
|
303
|
+
.map((file) => {
|
|
304
|
+
const relative = normalizeRelativePath(path.posix.relative(record.path, file.path)).replace(/\.ts$/, ".js");
|
|
305
|
+
if (file.path.endsWith(".types.ts") || file.path.endsWith(".type.ts")) {
|
|
306
|
+
return `export type { ${inferSymbolFromFile(file.path)} } from "./${relative}";`;
|
|
307
|
+
}
|
|
308
|
+
return `export * from "./${relative}";`;
|
|
309
|
+
})
|
|
310
|
+
.join("\n");
|
|
311
|
+
const packageBlock = `@Package({
|
|
312
|
+
name: "${record.name}",
|
|
313
|
+
path: "${record.path}",
|
|
314
|
+
imports: [],
|
|
315
|
+
exports: ${renderArray(packageExportFiles.map((file) => inferSymbolFromFile(file.path)))},
|
|
316
|
+
controllers: ${renderArray(controllerFiles.map((file) => inferSymbolFromFile(file.path)))},
|
|
317
|
+
services: ${renderArray(serviceFiles.map((file) => inferSymbolFromFile(file.path)))},
|
|
318
|
+
repositories: ${renderArray(repositoryFiles.map((file) => inferSymbolFromFile(file.path)))},
|
|
319
|
+
middlewares: ${renderArray(middlewareFiles.map((file) => inferSymbolFromFile(file.path)))},
|
|
320
|
+
routes: ${renderArray(routeFiles.map((file) => inferSymbolFromFile(file.path)))}
|
|
321
|
+
})
|
|
322
|
+
export class ${toPascalCase(record.name)}Package {}`;
|
|
323
|
+
return { imports, exports, packageBlock };
|
|
324
|
+
};
|
|
325
|
+
export const renderPackageIndex = (record) => {
|
|
326
|
+
const sections = derivePackageIndexView(record);
|
|
327
|
+
return `/**\n * @generated true\n */\nimport { Package } from "@sculptor/core";\n\n// [sculptor:imports:start]\n${sections.imports}\n// [sculptor:imports:end]\n\n// [sculptor:exports:start]\n${sections.exports}\n// [sculptor:exports:end]\n\n// [sculptor:package:start]\n${sections.packageBlock}\n// [sculptor:package:end]\n`;
|
|
328
|
+
};
|
|
329
|
+
export const inferPackageNameFromPath = (packagePath) => normalizeRelativePath(path.posix.basename(packagePath));
|
|
330
|
+
export const inferPackagePath = (rootDir, packageName, explicitPath) => {
|
|
331
|
+
const srcRoot = getSrcRoot(rootDir);
|
|
332
|
+
const packageFolder = normalizeRelativePath(packageName);
|
|
333
|
+
if (explicitPath) {
|
|
334
|
+
return normalizeRelativePath(path.posix.join(normalizeRelativePath(explicitPath), packageFolder));
|
|
335
|
+
}
|
|
336
|
+
return normalizeRelativePath(path.posix.join(srcRoot, packageFolder));
|
|
337
|
+
};
|
|
338
|
+
export const inferPackageIndexPath = (packagePath) => normalizeRelativePath(path.posix.join(packagePath, "index.ts"));
|
|
339
|
+
export const buildPackageRecord = (rootDir, packageName, explicitPath) => {
|
|
340
|
+
const packagePath = inferPackagePath(rootDir, packageName, explicitPath);
|
|
341
|
+
const index = inferPackageIndexPath(packagePath);
|
|
342
|
+
const normalizedPackageName = normalizeRelativePath(packageName);
|
|
343
|
+
const files = [
|
|
344
|
+
{ type: "controller", path: normalizeRelativePath(path.posix.join(packagePath, `${normalizedPackageName}.controller.ts`)) },
|
|
345
|
+
{ type: "service", path: normalizeRelativePath(path.posix.join(packagePath, `${normalizedPackageName}.service.ts`)) },
|
|
346
|
+
{ type: "repository", path: normalizeRelativePath(path.posix.join(packagePath, `${normalizedPackageName}.repository.ts`)) },
|
|
347
|
+
{ type: "dto", path: normalizeRelativePath(path.posix.join(packagePath, `${normalizedPackageName}.dto.ts`)) },
|
|
348
|
+
{ type: "type", path: normalizeRelativePath(path.posix.join(packagePath, `${normalizedPackageName}.types.ts`)) }
|
|
349
|
+
];
|
|
350
|
+
return {
|
|
351
|
+
name: normalizedPackageName,
|
|
352
|
+
path: packagePath,
|
|
353
|
+
index,
|
|
354
|
+
files,
|
|
355
|
+
};
|
|
356
|
+
};
|
|
357
|
+
export const readPackageSource = (filePath) => {
|
|
358
|
+
const sourceText = fs.readFileSync(filePath, "utf8");
|
|
359
|
+
return sourceText;
|
|
360
|
+
};
|
|
361
|
+
const isFileOwnedByPackage = (record, filePath) => {
|
|
362
|
+
const normalized = normalizeRelativePath(filePath);
|
|
363
|
+
return normalized.startsWith(`${record.path}/`) || normalized === record.index;
|
|
364
|
+
};
|
|
365
|
+
export const upsertFileIntoRegistry = (registry, filePath) => {
|
|
366
|
+
const normalizedPath = normalizeRelativePath(filePath);
|
|
367
|
+
const fileType = inferFileType(normalizedPath);
|
|
368
|
+
for (const record of Object.values(registry.packages)) {
|
|
369
|
+
if (normalizedPath === record.index) {
|
|
370
|
+
return registry;
|
|
371
|
+
}
|
|
372
|
+
if (!isFileOwnedByPackage(record, normalizedPath)) {
|
|
373
|
+
continue;
|
|
374
|
+
}
|
|
375
|
+
const existingIndex = record.files.findIndex((entry) => entry.path === normalizedPath);
|
|
376
|
+
const nextFile = {
|
|
377
|
+
type: fileType,
|
|
378
|
+
path: normalizedPath
|
|
379
|
+
};
|
|
380
|
+
if (existingIndex >= 0) {
|
|
381
|
+
record.files[existingIndex] = nextFile;
|
|
382
|
+
}
|
|
383
|
+
else {
|
|
384
|
+
record.files.push(nextFile);
|
|
385
|
+
}
|
|
386
|
+
return registry;
|
|
387
|
+
}
|
|
388
|
+
const existing = registry.files.findIndex((entry) => entry.path === normalizedPath);
|
|
389
|
+
const nextFile = {
|
|
390
|
+
type: fileType,
|
|
391
|
+
path: normalizedPath
|
|
392
|
+
};
|
|
393
|
+
if (existing >= 0) {
|
|
394
|
+
registry.files[existing] = nextFile;
|
|
395
|
+
}
|
|
396
|
+
else {
|
|
397
|
+
registry.files.push(nextFile);
|
|
398
|
+
}
|
|
399
|
+
return registry;
|
|
400
|
+
};
|
|
401
|
+
export const removeFileFromRegistry = (registry, filePath) => {
|
|
402
|
+
const normalizedPath = normalizeRelativePath(filePath);
|
|
403
|
+
for (const record of Object.values(registry.packages)) {
|
|
404
|
+
if (normalizedPath === record.index) {
|
|
405
|
+
return registry;
|
|
406
|
+
}
|
|
407
|
+
if (!isFileOwnedByPackage(record, normalizedPath)) {
|
|
408
|
+
continue;
|
|
409
|
+
}
|
|
410
|
+
record.files = record.files.filter((entry) => entry.path !== normalizedPath);
|
|
411
|
+
return registry;
|
|
412
|
+
}
|
|
413
|
+
registry.files = registry.files.filter((entry) => entry.path !== normalizedPath);
|
|
414
|
+
return registry;
|
|
415
|
+
};
|
|
416
|
+
export const getOwningPackage = (registry, filePath) => {
|
|
417
|
+
const normalizedPath = normalizeRelativePath(filePath);
|
|
418
|
+
return Object.values(registry.packages).find((record) => isFileOwnedByPackage(record, normalizedPath));
|
|
419
|
+
};
|
|
420
|
+
export const renderPackageIndexForRecord = (record) => renderPackageIndex(record);
|
|
421
|
+
const generatedMarkers = {
|
|
422
|
+
imports: {
|
|
423
|
+
start: "// [sculptor:imports:start]",
|
|
424
|
+
end: "// [sculptor:imports:end]"
|
|
425
|
+
},
|
|
426
|
+
exports: {
|
|
427
|
+
start: "// [sculptor:exports:start]",
|
|
428
|
+
end: "// [sculptor:exports:end]"
|
|
429
|
+
},
|
|
430
|
+
package: {
|
|
431
|
+
start: "// [sculptor:package:start]",
|
|
432
|
+
end: "// [sculptor:package:end]"
|
|
433
|
+
}
|
|
434
|
+
};
|
|
435
|
+
const replaceMarkerBlock = (source, section, content) => {
|
|
436
|
+
const { start, end } = generatedMarkers[section];
|
|
437
|
+
const startIndex = source.indexOf(start);
|
|
438
|
+
const endIndex = source.indexOf(end);
|
|
439
|
+
if (startIndex < 0 || endIndex < 0 || endIndex < startIndex) {
|
|
440
|
+
throw new Error(`Malformed package index markers for ${section}.`);
|
|
441
|
+
}
|
|
442
|
+
if (source.indexOf(start, startIndex + start.length) !== -1 || source.indexOf(end, endIndex + end.length) !== -1) {
|
|
443
|
+
throw new Error(`Malformed package index markers for ${section}.`);
|
|
444
|
+
}
|
|
445
|
+
return `${source.slice(0, startIndex + start.length)}\n${content}\n${source.slice(endIndex)}`;
|
|
446
|
+
};
|
|
447
|
+
const renderPackageIndexSections = (record) => {
|
|
448
|
+
const sections = derivePackageIndexView(record);
|
|
449
|
+
return {
|
|
450
|
+
imports: sections.imports,
|
|
451
|
+
exports: sections.exports,
|
|
452
|
+
package: sections.packageBlock
|
|
453
|
+
};
|
|
454
|
+
};
|
|
455
|
+
export const updatePackageIndexForRecord = (filePath, record) => {
|
|
456
|
+
const next = renderPackageIndex(record);
|
|
457
|
+
if (!fs.existsSync(filePath)) {
|
|
458
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
459
|
+
fs.writeFileSync(filePath, next, "utf8");
|
|
460
|
+
return;
|
|
461
|
+
}
|
|
462
|
+
const current = fs.readFileSync(filePath, "utf8");
|
|
463
|
+
for (const section of Object.keys(generatedMarkers)) {
|
|
464
|
+
if (!current.includes(generatedMarkers[section].start) || !current.includes(generatedMarkers[section].end)) {
|
|
465
|
+
throw new Error(`Package index markers are missing or malformed in ${filePath}. Refusing to rewrite the file unsafely.`);
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
let updated = current;
|
|
469
|
+
const sections = renderPackageIndexSections(record);
|
|
470
|
+
updated = replaceMarkerBlock(updated, "imports", sections.imports);
|
|
471
|
+
updated = replaceMarkerBlock(updated, "exports", sections.exports);
|
|
472
|
+
updated = replaceMarkerBlock(updated, "package", sections.package);
|
|
473
|
+
if (updated !== current) {
|
|
474
|
+
fs.writeFileSync(filePath, updated, "utf8");
|
|
475
|
+
}
|
|
476
|
+
};
|
|
477
|
+
//# sourceMappingURL=package-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-registry.js","sourceRoot":"","sources":["../src/package-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAkC9C,MAAM,CAAC,MAAM,qBAAqB,GAAG,wBAAwB,CAAC;AAE9D,MAAM,aAAa,GAAG,CAAC,KAAc,EAAoC,EAAE,CACzE,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAEvE,MAAM,YAAY,GAAG,CAAC,KAAa,EAAU,EAAE,CAC7C,KAAK;KACF,KAAK,CAAC,eAAe,CAAC;KACtB,MAAM,CAAC,OAAO,CAAC;KACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAC3D,IAAI,CAAC,EAAE,CAAC,CAAC;AAEd,MAAM,WAAW,GAAG,CAAC,KAAa,EAAU,EAAE;IAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,KAAa,EAAU,EAAE,CACtD,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAEpE,MAAM,QAAQ,GAAG,CAAI,QAAgB,EAAiB,EAAE;IACtD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAE9C,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAM,CAAC;AAC9B,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,QAAgB,EAAE,KAAc,EAAQ,EAAE;IAC3D,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC5E,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,OAAe,EAAU,EAAE,CAC7C,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC,CAAC;AAElE,MAAM,aAAa,GAAG,CAAC,SAAiB,EAAW,EAAE,CACnD,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAEzD,MAAM,QAAQ,GAAG,CAAC,SAAiB,EAAU,EAAE;IAC7C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,QAAgB,EAAmB,EAAE;IAC1D,IAAI,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACxC,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACrC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACxC,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACxC,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACpC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC7E,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,QAAgB,EAAU,EAAE;IACvD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAEhE,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACpC,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC;IACxE,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,OAAO,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACjC,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC;IACvE,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC;IAClE,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACjC,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC;IACxE,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACjC,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC;IACxE,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC;IAChE,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC;IAC1D,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC;IAC9D,CAAC;IAED,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;AACrC,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,GAAW,EAAE,UAAkB,GAAG,EAAY,EAAE;IACtE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAE5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;YACjD,SAAS;QACX,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACnD,SAAS;QACX,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,WAAmB,EAAE,QAAgB,EAAW,EAAE;IAC9E,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;IACjE,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAC3D,OAAO,kBAAkB,CAAC,UAAU,CAAC,GAAG,qBAAqB,GAAG,CAAC,IAAI,kBAAkB,KAAK,GAAG,qBAAqB,WAAW,CAAC;AAClI,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,IAAa,EAA2B,EAAE,CAC/D,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAEjE,MAAM,mBAAmB,GAAG,CAAC,IAAyB,EAAiC,EAAE;IACvF,KAAK,MAAM,SAAS,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;QACxC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC;YACrC,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC;QACrC,IAAI,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACzD,OAAO,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAC3B,OAAe,EACf,QAAgB,EAC0B,EAAE;IAC5C,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAE7G,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC;IACpE,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;IAEzE,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,SAAS,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IAEzC,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC,yBAAyB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,oCAAoC,QAAQ,GAAG,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;IAEhD,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC3C,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,SAAS;QACX,CAAC;QAED,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACrG,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,QAAQ,GAAG,EAAE,EAAU,EAAE;QACvD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7C,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IAChE,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAE1C,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,oCAAoC,QAAQ,GAAG,CAAC,CAAC;IACnE,CAAC;IAED,OAAO;QACL,IAAI;QACJ,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;KAC/D,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAAe,EAAU,EAAE,CAChE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;AAE5C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAe,EAA2B,EAAE;IAC9E,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,QAAQ,CAA0B,QAAQ,CAAC,CAAC;IAEzD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACrC,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;QAC7B,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;KACxB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAe,EAAE,QAAiC,EAAQ,EAAE;IAC9F,SAAS,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAe,EAAqB,EAAE;IACxE,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAyE,EAAE,CAAC;IAE1F,MAAM,KAAK,GAAG,CAAC,GAAW,EAAQ,EAAE;QAClC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAE5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAChB,SAAS;YACX,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBACjD,SAAS;YACX,CAAC;YAED,MAAM,WAAW,GAAG,oBAAoB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC5D,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,SAAS;YACX,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC;gBACZ,GAAG,WAAW;gBACd,KAAK,EAAE,EAAE;aACV,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,CAAC,UAAU,CAAC,CAAC;IAElB,MAAM,UAAU,GAAG,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAEvD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,IAAI,KAAK,qBAAqB,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1F,SAAS;QACX,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC;aACxB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;aACrD,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAElE,MAAM,QAAQ,GAAsB;YAClC,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC;YACzB,IAAI,EAAE,IAAI;SACX,CAAC;QAEF,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3B,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAwB,EAAE,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,IAAI,KAAK,qBAAqB,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1F,SAAS;QACX,CAAC;QAED,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,SAAS;QACX,CAAC;QAED,UAAU,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC;YACzB,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,QAAQ;aACf,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;aACvG,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7D,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KAC7E,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,OAAe,EAAmB,EAAE,CACrE,mBAAmB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;AAExC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAe,EAA2B,EAAE;IAC9E,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAA4B;QACxC,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QAC5E,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC;IAEF,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACvC,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,MAAqB,EAInD,EAAE;IACF,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7E,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC1F,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IACpF,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC1F,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC1F,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IAChF,MAAM,iBAAiB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC/F,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5E,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IACjH,MAAM,eAAe,GAAG;QACtB,GAAG,eAAe;QAClB,GAAG,YAAY;QACf,GAAG,eAAe;QAClB,GAAG,eAAe;QAClB,GAAG,UAAU;QACb,GAAG,QAAQ;KACZ,CAAC;IACF,MAAM,WAAW,GAAG;QAClB,GAAG,eAAe;QAClB,GAAG,YAAY;QACf,GAAG,eAAe;QAClB,GAAG,eAAe;QAClB,GAAG,UAAU;QACb,GAAG,iBAAiB;QACpB,GAAG,QAAQ;KACZ,CAAC;IACF,MAAM,kBAAkB,GAAG;QACzB,GAAG,YAAY;QACf,GAAG,eAAe;QAClB,GAAG,eAAe;QAClB,GAAG,QAAQ;KACZ,CAAC;IAEF,MAAM,WAAW,GAAG,CAAC,MAAgB,EAAU,EAAE,CAC/C,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;IAE9F,MAAM,OAAO,GAAG,eAAe;SAC5B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5G,OAAO,YAAY,MAAM,cAAc,QAAQ,IAAI,CAAC;IACtD,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,OAAO,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,SAAS,CAAC;SAC3C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5G,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACtE,OAAO,iBAAiB,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,QAAQ,IAAI,CAAC;QACnF,CAAC;QAED,OAAO,oBAAoB,QAAQ,IAAI,CAAC;IAC1C,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,YAAY,GAAG;WACZ,MAAM,CAAC,IAAI;WACX,MAAM,CAAC,IAAI;;aAET,WAAW,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;iBACzE,WAAW,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;cAC7E,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;kBACnE,WAAW,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;iBAC3E,WAAW,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC/E,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;;eAElE,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;IAEnD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AAC5C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAqB,EAAU,EAAE;IAClE,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO,2GAA2G,QAAQ,CAAC,OAAO,+DAA+D,QAAQ,CAAC,OAAO,+DAA+D,QAAQ,CAAC,YAAY,+BAA+B,CAAC;AACvU,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,WAAmB,EAAU,EAAE,CACtE,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;AAE1D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAe,EAAE,WAAmB,EAAE,YAAqB,EAAU,EAAE;IACtG,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,aAAa,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;IAEzD,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;IACpG,CAAC;IAED,OAAO,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;AACxE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,WAAmB,EAAU,EAAE,CACnE,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;AAElE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,OAAe,EACf,WAAmB,EACnB,YAAqB,EACN,EAAE;IACjB,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;IACjD,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;IACjE,MAAM,KAAK,GAAwB;QACjC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,qBAAqB,gBAAgB,CAAC,CAAC,EAAE;QAC3H,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,qBAAqB,aAAa,CAAC,CAAC,EAAE;QACrH,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,qBAAqB,gBAAgB,CAAC,CAAC,EAAE;QAC3H,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,qBAAqB,SAAS,CAAC,CAAC,EAAE;QAC7G,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,qBAAqB,WAAW,CAAC,CAAC,EAAE;KACjH,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,qBAAqB;QAC3B,IAAI,EAAE,WAAW;QACjB,KAAK;QACL,KAAK;KACN,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,QAAgB,EAAU,EAAE;IAC5D,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrD,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,MAAqB,EAAE,QAAgB,EAAW,EAAE;IAChF,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IACnD,OAAO,UAAU,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,UAAU,KAAK,MAAM,CAAC,KAAK,CAAC;AACjF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,QAAiC,EACjC,QAAgB,EACS,EAAE;IAC3B,MAAM,cAAc,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;IAE/C,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtD,IAAI,cAAc,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;YACpC,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,CAAC;YAClD,SAAS;QACX,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;QACvF,MAAM,QAAQ,GAAsB;YAClC,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,cAAc;SACrB,CAAC;QAEF,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,QAAQ,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;IACpF,MAAM,QAAQ,GAAsB;QAClC,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,cAAc;KACrB,CAAC;IAEF,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QAClB,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;IACtC,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,QAAiC,EACjC,QAAgB,EACS,EAAE;IAC3B,MAAM,cAAc,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAEvD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtD,IAAI,cAAc,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;YACpC,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,CAAC;YAClD,SAAS;QACX,CAAC;QAED,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;QAE7E,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;IACjF,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,QAAiC,EACjC,QAAgB,EACW,EAAE;IAC7B,MAAM,cAAc,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IACvD,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;AACzG,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,MAAqB,EAAU,EAAE,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAEzG,MAAM,gBAAgB,GAAG;IACvB,OAAO,EAAE;QACP,KAAK,EAAE,6BAA6B;QACpC,GAAG,EAAE,2BAA2B;KACjC;IACD,OAAO,EAAE;QACP,KAAK,EAAE,6BAA6B;QACpC,GAAG,EAAE,2BAA2B;KACjC;IACD,OAAO,EAAE;QACP,KAAK,EAAE,6BAA6B;QACpC,GAAG,EAAE,2BAA2B;KACjC;CACO,CAAC;AAEX,MAAM,kBAAkB,GAAG,CAAC,MAAc,EAAE,OAAsC,EAAE,OAAe,EAAU,EAAE;IAC7G,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAErC,IAAI,UAAU,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,UAAU,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,uCAAuC,OAAO,GAAG,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACjH,MAAM,IAAI,KAAK,CAAC,uCAAuC,OAAO,GAAG,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,OAAO,KAAK,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;AAChG,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CAAC,MAAqB,EAAiD,EAAE;IAC1G,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAEhD,OAAO;QACL,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,OAAO,EAAE,QAAQ,CAAC,YAAY;KAC/B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,QAAgB,EAAE,MAAqB,EAAQ,EAAE;IAC3F,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAExC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACzC,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAElD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAyC,EAAE,CAAC;QAC5F,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3G,MAAM,IAAI,KAAK,CACb,qDAAqD,QAAQ,0CAA0C,CACxG,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,OAAO,GAAG,OAAO,CAAC;IACtB,MAAM,QAAQ,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACpD,OAAO,GAAG,kBAAkB,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACnE,OAAO,GAAG,kBAAkB,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACnE,OAAO,GAAG,kBAAkB,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAEnE,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC,CAAC"}
|
package/dist/scaffold.d.ts
CHANGED
|
@@ -4,9 +4,11 @@ export type { DevServer, GenerateKind, ScaffoldMode, ScaffoldProjectMetadata, Ty
|
|
|
4
4
|
export declare const controllerHelp = "# Controller Generator\n\n## Usage\n\n```bash\nsc generate controller user\nsc g c user\nsc generate controller user in src/app/controllers\nsc g c user --functional\n```\n\n## Output\n\n- `controllers/*.controller.ts`\n- controller-first by default\n- pass `--functional` to opt into paired functional route and handler files\n";
|
|
5
5
|
export declare const moduleHelp = "# Module Generator\n\n## Usage\n\n```bash\nsc generate module user\nsc g mo user\n```\n";
|
|
6
6
|
export declare const middlewareHelp = "# Middleware Generator\n\n## Usage\n\n```bash\nsc generate middleware auth\nsc g mw auth\n```\n";
|
|
7
|
+
export declare const repositoryHelp = "# Repository Generator\n\n## Usage\n\n```bash\nsc generate repository user\nsc g repo user\n```\n\n## Output\n\n- `*.repository.ts`\n- generates a `@Repository()` class\n";
|
|
8
|
+
export declare const dtoHelp = "# DTO Generator\n\n## Usage\n\n```bash\nsc generate dto user\nsc g dto user\n```\n\n## Output\n\n- `*.dto.ts`\n- generates an explicit DTO class\n";
|
|
7
9
|
export declare const typeHelp = "# Type Generator\n\n## Usage\n\n```bash\nsc generate type user\nsc g t user\nsc g t user -i\nsc g t user -c\nsc g t user -e\n```\n\n## Flags\n\n- `-i`, `-interface` => `*.interface.ts`\n- `-c`, `-class` => `*.class.ts`\n- `-e`, `-enum` => `*.enum.ts`\n- default => `*.type.ts`\n";
|
|
8
10
|
export declare const routeHelp = "# Route Generator\n\n## Usage\n\n```bash\nsc generate route user\nsc g r user\n```\n\n## Output\n\n- `*.route.ts`\n- `*.route.handler.ts`\n- uses `FunctionalRouter(prefix)`\n- generates a paired handler with try/catch and error middleware boilerplate\n";
|
|
9
|
-
export declare const generateHelp = "# Generate\n\n## Usage\n\n```bash\nsc generate controller user\nsc generate service user\nsc generate module user\nsc generate middleware auth\nsc generate type user\nsc generate route user\n```\n\n## Aliases\n\n- `sc g`\n- `controller` -> `c`\n- `service` -> `s`\n- `module` -> `m` / `mo`\n- `middleware` -> `mw`\n- `type` -> `t`\n- `route` -> `r`\n\n## Path\n\n- append `in <path>` to write into a custom directory\n- default output for types is `src/app/types`\n- controller generators are controller-first by default; pass `--functional` only when you want the paired functional route files\n- route generators always emit the paired functional route and handler files\n";
|
|
11
|
+
export declare const generateHelp = "# Generate\n\n## Usage\n\n```bash\nsc generate controller user\nsc generate service user\nsc generate module user\nsc generate middleware auth\nsc generate repository user\nsc generate dto user\nsc generate type user\nsc generate route user\nsc generate pkg user\nsc generate package user\n```\n\n## Aliases\n\n- `sc g`\n- `controller` -> `c`\n- `service` -> `s`\n- `module` -> `m` / `mo`\n- `middleware` -> `mw`\n- `repository` -> `repo`\n- `dto` -> `dto`\n- `type` -> `t`\n- `route` -> `r`\n- `pkg` -> `pkg`\n- `package` -> `package`\n\n## Path\n\n- append `in <path>` to write into a custom directory\n- default output for types is `src/app/types`\n- default output for repositories is `src/app/repositories`\n- default output for DTOs is `src/app/dtos`\n- package generation uses the configured `project.srcRoot` unless `in` is provided\n- controller generators are controller-first by default; pass `--functional` only when you want the paired functional route files\n- route generators always emit the paired functional route and handler files\n";
|
|
10
12
|
export declare const readModeFromFlags: (flags: string[], fallback: ScaffoldMode) => ScaffoldMode;
|
|
11
13
|
export declare const parseGenerateMode: (mode: string | undefined, fallback: ScaffoldMode) => ScaffoldMode;
|
|
12
14
|
type TemplateRegistryModule = typeof import("../../template-registry/dist/index.js");
|
package/dist/scaffold.js
CHANGED
|
@@ -34,6 +34,34 @@ sc generate middleware auth
|
|
|
34
34
|
sc g mw auth
|
|
35
35
|
\`\`\`
|
|
36
36
|
`;
|
|
37
|
+
export const repositoryHelp = `# Repository Generator
|
|
38
|
+
|
|
39
|
+
## Usage
|
|
40
|
+
|
|
41
|
+
\`\`\`bash
|
|
42
|
+
sc generate repository user
|
|
43
|
+
sc g repo user
|
|
44
|
+
\`\`\`
|
|
45
|
+
|
|
46
|
+
## Output
|
|
47
|
+
|
|
48
|
+
- \`*.repository.ts\`
|
|
49
|
+
- generates a \`@Repository()\` class
|
|
50
|
+
`;
|
|
51
|
+
export const dtoHelp = `# DTO Generator
|
|
52
|
+
|
|
53
|
+
## Usage
|
|
54
|
+
|
|
55
|
+
\`\`\`bash
|
|
56
|
+
sc generate dto user
|
|
57
|
+
sc g dto user
|
|
58
|
+
\`\`\`
|
|
59
|
+
|
|
60
|
+
## Output
|
|
61
|
+
|
|
62
|
+
- \`*.dto.ts\`
|
|
63
|
+
- generates an explicit DTO class
|
|
64
|
+
`;
|
|
37
65
|
export const typeHelp = `# Type Generator
|
|
38
66
|
|
|
39
67
|
## Usage
|
|
@@ -78,8 +106,12 @@ sc generate controller user
|
|
|
78
106
|
sc generate service user
|
|
79
107
|
sc generate module user
|
|
80
108
|
sc generate middleware auth
|
|
109
|
+
sc generate repository user
|
|
110
|
+
sc generate dto user
|
|
81
111
|
sc generate type user
|
|
82
112
|
sc generate route user
|
|
113
|
+
sc generate pkg user
|
|
114
|
+
sc generate package user
|
|
83
115
|
\`\`\`
|
|
84
116
|
|
|
85
117
|
## Aliases
|
|
@@ -89,13 +121,20 @@ sc generate route user
|
|
|
89
121
|
- \`service\` -> \`s\`
|
|
90
122
|
- \`module\` -> \`m\` / \`mo\`
|
|
91
123
|
- \`middleware\` -> \`mw\`
|
|
124
|
+
- \`repository\` -> \`repo\`
|
|
125
|
+
- \`dto\` -> \`dto\`
|
|
92
126
|
- \`type\` -> \`t\`
|
|
93
127
|
- \`route\` -> \`r\`
|
|
128
|
+
- \`pkg\` -> \`pkg\`
|
|
129
|
+
- \`package\` -> \`package\`
|
|
94
130
|
|
|
95
131
|
## Path
|
|
96
132
|
|
|
97
133
|
- append \`in <path>\` to write into a custom directory
|
|
98
134
|
- default output for types is \`src/app/types\`
|
|
135
|
+
- default output for repositories is \`src/app/repositories\`
|
|
136
|
+
- default output for DTOs is \`src/app/dtos\`
|
|
137
|
+
- package generation uses the configured \`project.srcRoot\` unless \`in\` is provided
|
|
99
138
|
- controller generators are controller-first by default; pass \`--functional\` only when you want the paired functional route files
|
|
100
139
|
- route generators always emit the paired functional route and handler files
|
|
101
140
|
`;
|
package/dist/scaffold.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAIlF,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;CAgB7B,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;CAQzB,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;CAQ7B,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;CAkBvB,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;CAexB,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG
|
|
1
|
+
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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"}
|