@sculptor/cli 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +142 -369
- 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 +317 -15
- 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-manager.d.ts +3 -0
- package/dist/package-manager.js +20 -0
- package/dist/package-manager.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/plugins.d.ts +3 -0
- package/dist/plugins.js +29 -1
- package/dist/plugins.js.map +1 -1
- package/dist/runtime-dependencies.d.ts +8 -0
- package/dist/runtime-dependencies.js +2 -0
- package/dist/runtime-dependencies.js.map +1 -0
- package/dist/scaffold.d.ts +19 -1
- package/dist/scaffold.js +244 -1
- package/dist/scaffold.js.map +1 -1
- package/package.json +5 -4
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { loadConfig } from "@sculptor/config";
|
|
4
|
+
import { buildPackageRecord, getOwningPackage, loadPackageRegistry, removeFileFromRegistry, savePackageRegistry, scanPackageRegistry, syncPackageRegistry, updatePackageIndexForRecord, upsertFileIntoRegistry } from "./package-registry.js";
|
|
5
|
+
const packageFlagNames = ["-p", "--p", "-pkg", "--pkg", "-package", "--package"];
|
|
6
|
+
const ensureAppRoot = (cwd, command) => {
|
|
7
|
+
if (!fs.existsSync(path.join(cwd, "sculptor.json"))) {
|
|
8
|
+
throw new Error(`${command} can only be run from a Sculptor app root.`);
|
|
9
|
+
}
|
|
10
|
+
return cwd;
|
|
11
|
+
};
|
|
12
|
+
const normalizePath = (value) => value.replace(/\\/g, "/").replace(/^\/+/, "").replace(/\/+$/, "");
|
|
13
|
+
const isPackageFlag = (value) => packageFlagNames.some((flag) => value === flag || value.startsWith(`${flag}=`));
|
|
14
|
+
export const getPackageFlagValue = (args) => {
|
|
15
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
16
|
+
const arg = args[index];
|
|
17
|
+
for (const flag of packageFlagNames) {
|
|
18
|
+
const prefixed = `${flag}=`;
|
|
19
|
+
if (arg.startsWith(prefixed)) {
|
|
20
|
+
return arg.slice(prefixed.length);
|
|
21
|
+
}
|
|
22
|
+
if (arg !== flag) {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
const next = args[index + 1];
|
|
26
|
+
if (!next || next.startsWith("-")) {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
return next;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return undefined;
|
|
33
|
+
};
|
|
34
|
+
export const stripPackageFlag = (args) => {
|
|
35
|
+
const result = [];
|
|
36
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
37
|
+
const arg = args[index];
|
|
38
|
+
if (!isPackageFlag(arg)) {
|
|
39
|
+
result.push(arg);
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
if (packageFlagNames.some((flag) => arg.startsWith(`${flag}=`))) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
const next = args[index + 1];
|
|
46
|
+
if (next && !next.startsWith("-")) {
|
|
47
|
+
index += 1;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return result;
|
|
51
|
+
};
|
|
52
|
+
const toPascalCase = (value) => value
|
|
53
|
+
.split(/[^a-zA-Z0-9]+/)
|
|
54
|
+
.filter(Boolean)
|
|
55
|
+
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
56
|
+
.join("");
|
|
57
|
+
const getPackageByName = (registry, packageName) => Object.values(registry.packages).find((record) => record.name === packageName);
|
|
58
|
+
const getPackageRegistryKey = (registry, packageName) => Object.keys(registry.packages).find((key) => registry.packages[key]?.name === packageName);
|
|
59
|
+
const comparePackageFiles = (detected, registered, messages, packageName) => {
|
|
60
|
+
const detectedFiles = new Set((detected?.files ?? []).map((entry) => entry.path));
|
|
61
|
+
const registeredFiles = new Set((registered?.files ?? []).map((entry) => entry.path));
|
|
62
|
+
for (const file of registeredFiles) {
|
|
63
|
+
if (!detectedFiles.has(file)) {
|
|
64
|
+
messages.push(`Missing registered file: ${file}`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
for (const file of detectedFiles) {
|
|
68
|
+
if (!registeredFiles.has(file)) {
|
|
69
|
+
messages.push(`Detected unregistered file: ${file}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (detected && !registered) {
|
|
73
|
+
messages.push(`Package not registered: ${packageName}`);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
export const validatePackageRegistryState = (rootDir, packageName) => {
|
|
77
|
+
const scan = scanPackageRegistry(rootDir);
|
|
78
|
+
const registry = loadPackageRegistry(rootDir);
|
|
79
|
+
const messages = [];
|
|
80
|
+
const detectedPackages = packageName
|
|
81
|
+
? scan.packages.filter((record) => record.name === packageName)
|
|
82
|
+
: scan.packages;
|
|
83
|
+
const registeredPackages = packageName
|
|
84
|
+
? Object.values(registry.packages).filter((record) => record.name === packageName)
|
|
85
|
+
: Object.values(registry.packages);
|
|
86
|
+
for (const detected of detectedPackages) {
|
|
87
|
+
const registered = getPackageByName(registry, detected.name);
|
|
88
|
+
comparePackageFiles(detected, registered, messages, detected.name);
|
|
89
|
+
}
|
|
90
|
+
for (const registered of registeredPackages) {
|
|
91
|
+
const detected = detectedPackages.find((record) => record.name === registered.name);
|
|
92
|
+
comparePackageFiles(detected, registered, messages, registered.name);
|
|
93
|
+
}
|
|
94
|
+
const detectedFileSet = new Set(scan.files.map((file) => file.path));
|
|
95
|
+
const registeredFileSet = new Set(registry.files.map((file) => file.path));
|
|
96
|
+
for (const file of registeredFileSet) {
|
|
97
|
+
if (!detectedFileSet.has(file)) {
|
|
98
|
+
messages.push(`Missing registered file: ${file}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
for (const file of detectedFileSet) {
|
|
102
|
+
if (!registeredFileSet.has(file)) {
|
|
103
|
+
messages.push(`Detected unregistered file: ${file}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
packageCountDetected: detectedPackages.length,
|
|
108
|
+
packageCountRegistered: registeredPackages.length,
|
|
109
|
+
messages: [...new Set(messages)]
|
|
110
|
+
};
|
|
111
|
+
};
|
|
112
|
+
export const syncPackageRegistryState = (rootDir) => {
|
|
113
|
+
const report = validatePackageRegistryState(rootDir);
|
|
114
|
+
syncPackageRegistry(rootDir);
|
|
115
|
+
return report;
|
|
116
|
+
};
|
|
117
|
+
export const printPackageValidation = (report, log) => {
|
|
118
|
+
log(`Packages detected: ${report.packageCountDetected}`);
|
|
119
|
+
log(`Packages registered: ${report.packageCountRegistered}`);
|
|
120
|
+
for (const message of report.messages) {
|
|
121
|
+
log(message);
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
export const handleSyncCommand = (args, context) => {
|
|
125
|
+
const rootDir = ensureAppRoot(context.cwd, "sc sync");
|
|
126
|
+
const packageName = getPackageFlagValue(args);
|
|
127
|
+
const report = validatePackageRegistryState(rootDir, packageName);
|
|
128
|
+
printPackageValidation(report, context.log);
|
|
129
|
+
syncPackageRegistry(rootDir);
|
|
130
|
+
};
|
|
131
|
+
const packageTreeLines = (record, registered) => {
|
|
132
|
+
if (!record && !registered) {
|
|
133
|
+
return [];
|
|
134
|
+
}
|
|
135
|
+
const lines = [];
|
|
136
|
+
const source = record ?? registered;
|
|
137
|
+
if (!source) {
|
|
138
|
+
return lines;
|
|
139
|
+
}
|
|
140
|
+
lines.push(`${source.name} (${source.path})`);
|
|
141
|
+
const detectedFiles = new Set((record?.files ?? []).map((entry) => entry.path));
|
|
142
|
+
const registeredFiles = new Set((registered?.files ?? []).map((entry) => entry.path));
|
|
143
|
+
const allFiles = [...new Set([...detectedFiles, ...registeredFiles])].sort();
|
|
144
|
+
for (const file of allFiles) {
|
|
145
|
+
const marker = detectedFiles.has(file) && registeredFiles.has(file)
|
|
146
|
+
? "✔"
|
|
147
|
+
: detectedFiles.has(file)
|
|
148
|
+
? "⚠"
|
|
149
|
+
: "✖";
|
|
150
|
+
lines.push(` ${marker} ${path.posix.basename(file)}`);
|
|
151
|
+
}
|
|
152
|
+
return lines;
|
|
153
|
+
};
|
|
154
|
+
export const handleLsCommand = (args, context) => {
|
|
155
|
+
const rootDir = ensureAppRoot(context.cwd, "sc ls");
|
|
156
|
+
const treeMode = args.some((arg) => ["-t", "--tree", "-tree", "--t"].includes(arg));
|
|
157
|
+
const packageName = getPackageFlagValue(args);
|
|
158
|
+
const scan = scanPackageRegistry(rootDir);
|
|
159
|
+
const registry = loadPackageRegistry(rootDir);
|
|
160
|
+
if (treeMode) {
|
|
161
|
+
const packages = packageName
|
|
162
|
+
? scan.packages.filter((record) => record.name === packageName)
|
|
163
|
+
: scan.packages;
|
|
164
|
+
for (const pkg of packages) {
|
|
165
|
+
const registered = registry.packages[pkg.name];
|
|
166
|
+
for (const line of packageTreeLines(pkg, registered)) {
|
|
167
|
+
context.log(line);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (!packageName) {
|
|
171
|
+
const unpackaged = scan.files.filter((file) => !Object.values(registry.packages).some((record) => record.files.some((entry) => entry.path === file.path)));
|
|
172
|
+
if (unpackaged.length > 0) {
|
|
173
|
+
context.log("Unpackaged files");
|
|
174
|
+
for (const file of unpackaged) {
|
|
175
|
+
context.log(` ⚠ ${file.path}`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
context.log(`Packages detected: ${scan.packages.length}`);
|
|
182
|
+
for (const pkg of scan.packages) {
|
|
183
|
+
context.log(`${pkg.name} -> ${pkg.path}`);
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
export const handlePackageCommand = async (args, context) => {
|
|
187
|
+
const rootDir = ensureAppRoot(context.cwd, "sc pkg");
|
|
188
|
+
const [subcommand, ...rest] = args;
|
|
189
|
+
if (!subcommand || subcommand === "help") {
|
|
190
|
+
context.log(`Usage: sc pkg|package <name|ls|rm>`);
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
if (subcommand === "ls") {
|
|
194
|
+
const scan = scanPackageRegistry(rootDir);
|
|
195
|
+
for (const pkg of scan.packages) {
|
|
196
|
+
context.log(`${pkg.name} (${pkg.path})`);
|
|
197
|
+
}
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
if (subcommand === "rm") {
|
|
201
|
+
const packageName = rest[0];
|
|
202
|
+
if (!packageName) {
|
|
203
|
+
context.error("Usage: sc pkg|package rm <name>");
|
|
204
|
+
process.exit(1);
|
|
205
|
+
}
|
|
206
|
+
const registry = loadPackageRegistry(rootDir);
|
|
207
|
+
const record = getPackageByName(registry, packageName);
|
|
208
|
+
if (!record) {
|
|
209
|
+
context.error(`Package "${packageName}" is not registered.`);
|
|
210
|
+
process.exit(1);
|
|
211
|
+
}
|
|
212
|
+
const answer = await context.prompt(`Remove package "${packageName}" and delete ${record.path}? (y/n)`, "n");
|
|
213
|
+
if (!answer.trim().toLowerCase().startsWith("y")) {
|
|
214
|
+
context.log("Package removal cancelled.");
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
fs.rmSync(path.join(rootDir, record.path), { recursive: true, force: true });
|
|
218
|
+
const registryKey = getPackageRegistryKey(registry, packageName);
|
|
219
|
+
if (registryKey) {
|
|
220
|
+
delete registry.packages[registryKey];
|
|
221
|
+
}
|
|
222
|
+
savePackageRegistry(rootDir, registry);
|
|
223
|
+
context.log(`Removed package "${packageName}".`);
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
const registry = loadPackageRegistry(rootDir);
|
|
227
|
+
const packageRecord = getPackageByName(registry, subcommand);
|
|
228
|
+
if (!packageRecord) {
|
|
229
|
+
context.error(`Package "${subcommand}" is not registered.`);
|
|
230
|
+
process.exit(1);
|
|
231
|
+
}
|
|
232
|
+
context.log(`Package: ${packageRecord.name}`);
|
|
233
|
+
context.log(`Path: ${packageRecord.path}`);
|
|
234
|
+
context.log(`Index: ${packageRecord.index}`);
|
|
235
|
+
context.log(`Files: ${packageRecord.files.length}`);
|
|
236
|
+
for (const line of packageTreeLines(packageRecord, packageRecord)) {
|
|
237
|
+
context.log(line);
|
|
238
|
+
}
|
|
239
|
+
};
|
|
240
|
+
const resolveFilePath = (rootDir, filePath) => path.isAbsolute(filePath) ? filePath : path.join(rootDir, filePath);
|
|
241
|
+
export const handleRegisterCommand = async (command, args, context) => {
|
|
242
|
+
const rootDir = ensureAppRoot(context.cwd, `sc ${command}`);
|
|
243
|
+
const [fileInput] = args;
|
|
244
|
+
if (!fileInput) {
|
|
245
|
+
context.error(`Usage: sc ${command} <file>`);
|
|
246
|
+
process.exit(1);
|
|
247
|
+
}
|
|
248
|
+
const filePath = normalizePath(path.relative(rootDir, resolveFilePath(rootDir, fileInput)));
|
|
249
|
+
const fileAbs = resolveFilePath(rootDir, fileInput);
|
|
250
|
+
const registry = syncPackageRegistry(rootDir);
|
|
251
|
+
const owningPackage = getOwningPackage(registry, filePath);
|
|
252
|
+
if (command === "rm") {
|
|
253
|
+
if (owningPackage && filePath === owningPackage.index) {
|
|
254
|
+
context.error(`sc rm cannot delete the package index file for "${owningPackage.name}". Use sc pkg rm ${owningPackage.name} instead.`);
|
|
255
|
+
process.exit(1);
|
|
256
|
+
}
|
|
257
|
+
const answer = await context.prompt(`Delete ${filePath}? (y/n)`, "n");
|
|
258
|
+
if (!answer.trim().toLowerCase().startsWith("y")) {
|
|
259
|
+
context.log("Removal cancelled.");
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
if (command === "reg") {
|
|
264
|
+
upsertFileIntoRegistry(registry, filePath);
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
removeFileFromRegistry(registry, filePath);
|
|
268
|
+
}
|
|
269
|
+
savePackageRegistry(rootDir, registry);
|
|
270
|
+
if (command === "rm" && fs.existsSync(fileAbs)) {
|
|
271
|
+
fs.rmSync(fileAbs, { force: true });
|
|
272
|
+
}
|
|
273
|
+
if (owningPackage) {
|
|
274
|
+
updatePackageIndexForRecord(path.join(rootDir, owningPackage.index), owningPackage);
|
|
275
|
+
}
|
|
276
|
+
context.log(`${command === "reg" ? "Registered" : command === "rm" ? "Removed" : "Unregistered"} ${filePath}`);
|
|
277
|
+
};
|
|
278
|
+
export const createPackageFromName = (rootDir, name, explicitPath) => buildPackageRecord(rootDir, name, explicitPath);
|
|
279
|
+
export const ensureRootRegistryForPackages = (rootDir) => {
|
|
280
|
+
const srcRoot = String(loadConfig(rootDir).framework.project?.srcRoot ?? "src");
|
|
281
|
+
const registryPath = path.join(rootDir, srcRoot, "registry.ts");
|
|
282
|
+
if (fs.existsSync(registryPath)) {
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
const registry = loadPackageRegistry(rootDir);
|
|
286
|
+
const packageRecords = Object.values(registry.packages);
|
|
287
|
+
const packageEntries = packageRecords.map((record) => `${toPascalCase(record.name)}Package`);
|
|
288
|
+
const imports = packageRecords
|
|
289
|
+
.map((record) => {
|
|
290
|
+
const relativePath = record.path.startsWith(`${srcRoot}/`)
|
|
291
|
+
? record.path.slice(`${srcRoot}/`.length)
|
|
292
|
+
: record.path;
|
|
293
|
+
return `import { ${toPascalCase(record.name)}Package } from "./${relativePath}/index.js";`;
|
|
294
|
+
})
|
|
295
|
+
.join("\n");
|
|
296
|
+
fs.mkdirSync(path.dirname(registryPath), { recursive: true });
|
|
297
|
+
fs.writeFileSync(registryPath, `${imports}${imports ? "\n\n" : ""}export const registry = {\n packages: [${packageEntries.join(", ")}],\n controllers: [],\n services: [],\n repositories: [],\n middlewares: [],\n routes: []\n};\n`, "utf8");
|
|
298
|
+
};
|
|
299
|
+
//# sourceMappingURL=package-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-commands.js","sourceRoot":"","sources":["../src/package-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,2BAA2B,EAC3B,sBAAsB,EAEvB,MAAM,uBAAuB,CAAC;AAiB/B,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;AAEjF,MAAM,aAAa,GAAG,CAAC,GAAW,EAAE,OAAe,EAAU,EAAE;IAC7D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,4CAA4C,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,KAAa,EAAU,EAAE,CAC9C,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,aAAa,GAAG,CAAC,KAAa,EAAW,EAAE,CAC/C,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;AAElF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAc,EAAsB,EAAE;IACxE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAE,CAAC;QAEzB,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,GAAG,IAAI,GAAG,CAAC;YAC5B,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7B,OAAO,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACpC,CAAC;YAED,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACjB,SAAS;YACX,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClC,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAc,EAAY,EAAE;IAC3D,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAE,CAAC;QAEzB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,SAAS;QACX,CAAC;QAED,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;YAChE,SAAS;QACX,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC7B,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,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,gBAAgB,GAAG,CACvB,QAAgD,EAChD,WAAmB,EACQ,EAAE,CAC7B,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;AAEjF,MAAM,qBAAqB,GAAG,CAC5B,QAAgD,EAChD,WAAmB,EACC,EAAE,CACtB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,KAAK,WAAW,CAAC,CAAC;AAE7F,MAAM,mBAAmB,GAAG,CAC1B,QAAmC,EACnC,UAAqC,EACrC,QAAkB,EAClB,WAAmB,EACb,EAAE;IACR,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAClF,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAEtF,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,QAAQ,CAAC,IAAI,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,QAAQ,CAAC,IAAI,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,IAAI,CAAC,UAAU,EAAE,CAAC;QAC5B,QAAQ,CAAC,IAAI,CAAC,2BAA2B,WAAW,EAAE,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,OAAe,EAAE,WAAoB,EAA2B,EAAE;IAC7G,MAAM,IAAI,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,MAAM,gBAAgB,GAAG,WAAW;QAClC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW,CAAC;QAC/D,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;IAElB,MAAM,kBAAkB,GAAG,WAAW;QACpC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW,CAAC;QAClF,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAErC,KAAK,MAAM,QAAQ,IAAI,gBAAgB,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7D,mBAAmB,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,MAAM,UAAU,IAAI,kBAAkB,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,CAAC,CAAC;QACpF,mBAAmB,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACrE,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAE3E,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE,CAAC;QACrC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,QAAQ,CAAC,IAAI,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACnC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,QAAQ,CAAC,IAAI,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,OAAO;QACL,oBAAoB,EAAE,gBAAgB,CAAC,MAAM;QAC7C,sBAAsB,EAAE,kBAAkB,CAAC,MAAM;QACjD,QAAQ,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;KACjC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,OAAe,EAA2B,EAAE;IACnF,MAAM,MAAM,GAAG,4BAA4B,CAAC,OAAO,CAAC,CAAC;IACrD,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,MAA+B,EAC/B,GAAiC,EAC3B,EAAE;IACR,GAAG,CAAC,sBAAsB,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC;IACzD,GAAG,CAAC,wBAAwB,MAAM,CAAC,sBAAsB,EAAE,CAAC,CAAC;IAE7D,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,GAAG,CAAC,OAAO,CAAC,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAc,EAAE,OAA8B,EAAQ,EAAE;IACxF,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,4BAA4B,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAElE,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5C,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,MAAiC,EAAE,UAAqC,EAAY,EAAE;IAC9G,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,UAAU,CAAC;IAEpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;IAE9C,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAChF,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACtF,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,aAAa,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAE7E,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;YACjE,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;gBACvB,CAAC,CAAC,GAAG;gBACL,CAAC,CAAC,GAAG,CAAC;QACV,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAc,EAAE,OAA8B,EAAQ,EAAE;IACtF,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACpF,MAAM,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAE9C,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,QAAQ,GAAG,WAAW;YAC1B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW,CAAC;YAC/D,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QAElB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC/C,KAAK,MAAM,IAAI,IAAI,gBAAgB,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC;gBACrD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAC5C,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAC3G,CAAC;YAEF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;gBAChC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;oBAC9B,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1D,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EACvC,IAAc,EACd,OAA8B,EACf,EAAE;IACjB,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACrD,MAAM,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAEnC,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,OAAO;IACT,CAAC;IAED,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC1C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,YAAY,WAAW,sBAAsB,CAAC,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,mBAAmB,WAAW,gBAAgB,MAAM,CAAC,IAAI,SAAS,EAAE,GAAG,CAAC,CAAC;QAC7G,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7E,MAAM,WAAW,GAAG,qBAAqB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACjE,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACxC,CAAC;QACD,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,oBAAoB,WAAW,IAAI,CAAC,CAAC;QACjD,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,aAAa,GAAG,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAE7D,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,YAAY,UAAU,sBAAsB,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,YAAY,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,SAAS,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,UAAU,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,UAAU,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACpD,KAAK,MAAM,IAAI,IAAI,gBAAgB,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,OAAe,EAAE,QAAgB,EAAU,EAAE,CACpE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAEtE,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EACxC,OAA8B,EAC9B,IAAc,EACd,OAA8B,EACf,EAAE;IACjB,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,OAAO,EAAE,CAAC,CAAC;IAC5D,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;IAEzB,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,aAAa,OAAO,SAAS,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IAC5F,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,aAAa,GAAG,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAE3D,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,IAAI,aAAa,IAAI,QAAQ,KAAK,aAAa,CAAC,KAAK,EAAE,CAAC;YACtD,OAAO,CAAC,KAAK,CAAC,mDAAmD,aAAa,CAAC,IAAI,oBAAoB,aAAa,CAAC,IAAI,WAAW,CAAC,CAAC;YACtI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,UAAU,QAAQ,SAAS,EAAE,GAAG,CAAC,CAAC;QACtE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;IACH,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACtB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAEvC,IAAI,OAAO,KAAK,IAAI,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/C,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,CAAC;IACtF,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,IAAI,QAAQ,EAAE,CAAC,CAAC;AACjH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,OAAe,EACf,IAAY,EACZ,YAAqB,EACN,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;AAEpE,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,OAAe,EAAQ,EAAE;IACrE,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC,CAAC;IAChF,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;IAEhE,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7F,MAAM,OAAO,GAAG,cAAc;SAC3B,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACd,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,OAAO,GAAG,CAAC;YACxD,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,GAAG,CAAC,MAAM,CAAC;YACzC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;QAChB,OAAO,YAAY,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,YAAY,aAAa,CAAC;IAC7F,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,EAAE,CAAC,aAAa,CACd,YAAY,EACZ,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,2CAA2C,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,sGAAsG,EAC5M,MAAM,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export const detectPackageManager = () => {
|
|
2
|
+
const userAgent = process.env.npm_config_user_agent ?? "";
|
|
3
|
+
if (userAgent.includes("pnpm")) {
|
|
4
|
+
return "pnpm";
|
|
5
|
+
}
|
|
6
|
+
if (userAgent.includes("yarn")) {
|
|
7
|
+
return "yarn";
|
|
8
|
+
}
|
|
9
|
+
return "npm";
|
|
10
|
+
};
|
|
11
|
+
export const globalInstallArgsFor = (packageManager, packages) => {
|
|
12
|
+
if (packageManager === "pnpm") {
|
|
13
|
+
return ["add", "-g", ...packages];
|
|
14
|
+
}
|
|
15
|
+
if (packageManager === "yarn") {
|
|
16
|
+
return ["global", "add", ...packages];
|
|
17
|
+
}
|
|
18
|
+
return ["install", "-g", ...packages];
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=package-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../src/package-manager.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAmB,EAAE;IACvD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC;IAE1D,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,cAA8B,EAC9B,QAAkB,EACR,EAAE;IACZ,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC;AACxC,CAAC,CAAC"}
|
|
@@ -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;
|