@nestia/migrate 14.0.2 → 14.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/lib/_virtual/_rolldown/runtime.mjs +6 -1
  2. package/lib/bundles/NEST_TEMPLATE.js +1 -1
  3. package/lib/bundles/NEST_TEMPLATE.mjs +1 -1
  4. package/lib/bundles/SDK_TEMPLATE.js +1 -1
  5. package/lib/bundles/SDK_TEMPLATE.mjs +1 -1
  6. package/lib/executable/NestiaMigrateCommander.d.ts +4 -2
  7. package/lib/executable/NestiaMigrateCommander.js +5 -3
  8. package/lib/executable/NestiaMigrateCommander.js.map +1 -1
  9. package/lib/executable/NestiaMigrateCommander.mjs +2 -2
  10. package/lib/executable/NestiaMigrateInquirer.d.ts +6 -4
  11. package/lib/executable/NestiaMigrateInquirer.js +16 -13
  12. package/lib/executable/NestiaMigrateInquirer.js.map +1 -1
  13. package/lib/executable/NestiaMigrateInquirer.mjs +4 -3
  14. package/lib/executable/TemplateBundleCache.d.ts +23 -0
  15. package/lib/executable/TemplateBundleCache.js +60 -0
  16. package/lib/executable/TemplateBundleCache.js.map +1 -0
  17. package/lib/executable/TemplateBundleCache.mjs +39 -0
  18. package/lib/executable/TemplateBundleCache.mjs.map +1 -0
  19. package/lib/executable/bundle.d.ts +1 -0
  20. package/lib/executable/bundle.js +404 -0
  21. package/lib/executable/bundle.js.map +1 -0
  22. package/lib/executable/bundle.mjs +324 -0
  23. package/lib/executable/bundle.mjs.map +1 -0
  24. package/lib/package.mjs +55 -0
  25. package/lib/package.mjs.map +1 -0
  26. package/package.json +3 -3
  27. package/src/bundles/NEST_TEMPLATE.ts +1 -1
  28. package/src/bundles/SDK_TEMPLATE.ts +1 -1
  29. package/src/executable/NestiaMigrateCommander.ts +5 -3
  30. package/src/executable/NestiaMigrateInquirer.ts +9 -6
  31. package/src/executable/TemplateBundleCache.ts +65 -0
  32. package/src/executable/{bundle.js → bundle.ts} +110 -43
@@ -0,0 +1,404 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ var _a;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ const node_child_process_1 = __importDefault(require("node:child_process"));
17
+ const node_fs_1 = __importDefault(require("node:fs"));
18
+ const TemplateBundleCache_1 = require("./TemplateBundleCache");
19
+ const { version } = require("../../../../package.json");
20
+ const ROOT = `${__dirname}/../..`;
21
+ const ASSETS = `${ROOT}/assets`;
22
+ const CATALOGS = require("js-yaml").load(node_fs_1.default.readFileSync(`${__dirname}/../../../../pnpm-lock.yaml`, "utf8")).catalogs;
23
+ const TYPIA = CATALOGS.samchon;
24
+ const TYPESCRIPT = (_a = CATALOGS.typescript) !== null && _a !== void 0 ? _a : {};
25
+ const update = (content, options = {}) => {
26
+ var _a, _b, _c, _d;
27
+ const parsed = JSON.parse(content);
28
+ for (const record of [
29
+ (_a = parsed.dependencies) !== null && _a !== void 0 ? _a : {},
30
+ (_b = parsed.devDependencies) !== null && _b !== void 0 ? _b : {},
31
+ ])
32
+ for (const key of Object.keys(record)) {
33
+ const current = record[key];
34
+ // `catalog:` / `workspace:` specifiers already carry their versions
35
+ // through pnpm-workspace.yaml, which gets its own stamping pass.
36
+ if (typeof current === "string" &&
37
+ (current.startsWith("catalog:") || current.startsWith("workspace:")))
38
+ continue;
39
+ if (key.startsWith("@nestia/") || key === "nestia")
40
+ record[key] = `^${version}`;
41
+ // Both catalogs, and in the same order updateWorkspaceCatalog resolves
42
+ // them. A template can pin a version two ways -- a `catalog:` reference
43
+ // its pnpm-workspace.yaml resolves, or a plain specifier here -- and a
44
+ // rule that reads only one catalog on this path leaves the toolchain
45
+ // frozen at whatever the upstream template last wrote. That is how a
46
+ // generated SDK project ended up with ttsc ^0.18.2 beside a `@nestia/core`
47
+ // stamped to this repository's version.
48
+ else {
49
+ const catalog = (_c = TYPIA[key]) !== null && _c !== void 0 ? _c : TYPESCRIPT[key];
50
+ if (catalog)
51
+ record[key] = catalog.specifier;
52
+ }
53
+ }
54
+ migratePackageJson(parsed);
55
+ if (options.sdkAggregate) {
56
+ (_d = parsed.devDependencies) !== null && _d !== void 0 ? _d : (parsed.devDependencies = {});
57
+ parsed.devDependencies["@nestia/core"] = `^${version}`;
58
+ }
59
+ return JSON.stringify(parsed, null, 2);
60
+ };
61
+ const migratePackageJson = (parsed) => {
62
+ var _a;
63
+ if (parsed.scripts)
64
+ for (const [key, value] of Object.entries(parsed.scripts))
65
+ if (typeof value === "string")
66
+ parsed.scripts[key] = normalizeScript(value);
67
+ const devDependencies = parsed.devDependencies;
68
+ if (devDependencies) {
69
+ const usesTypeScript = typeof devDependencies.typescript === "string" &&
70
+ devDependencies.typescript.startsWith("catalog:") === false;
71
+ delete devDependencies["typescript-transform-paths"];
72
+ // Single-package templates compiling with a direct typescript dependency
73
+ // need the ttsc compiler this repository currently builds against.
74
+ if (usesTypeScript && TYPESCRIPT.ttsc)
75
+ (_a = devDependencies.ttsc) !== null && _a !== void 0 ? _a : (devDependencies.ttsc = TYPESCRIPT.ttsc.specifier);
76
+ }
77
+ };
78
+ // Stamp the template's pnpm-workspace.yaml catalogs with this repository's
79
+ // current versions. Keep the rewrite line-targeted so quoted package names,
80
+ // comments, ordering, and any anchors supplied by the upstream template remain
81
+ // intact.
82
+ const updateWorkspaceCatalog = (content) => {
83
+ const replace = (line) => {
84
+ var _a, _b;
85
+ var _c, _d, _e;
86
+ const match = line.match(/^(\s+(?:"([^"]+)"|'([^']+)'|([^:\s]+)): (?:&[A-Za-z0-9_-]+ )?)\S[^\r\n]*(\r?)$/);
87
+ if (match === null)
88
+ return line;
89
+ const name = ((_d = (_c = match[2]) !== null && _c !== void 0 ? _c : match[3]) !== null && _d !== void 0 ? _d : match[4]);
90
+ const specifier = name === "nestia" || name.startsWith("@nestia/")
91
+ ? `^${version}`
92
+ : ((_e = (_a = TYPIA[name]) === null || _a === void 0 ? void 0 : _a.specifier) !== null && _e !== void 0 ? _e : (_b = TYPESCRIPT[name]) === null || _b === void 0 ? void 0 : _b.specifier);
93
+ if (typeof specifier !== "string")
94
+ return line;
95
+ return `${match[1]}${specifier}${match[5]}`;
96
+ };
97
+ return content.split("\n").map(replace).join("\n");
98
+ };
99
+ const trimTemplateDependencies = (parsed) => {
100
+ if (parsed.dependencies) {
101
+ delete parsed.dependencies.commander;
102
+ delete parsed.dependencies.inquirer;
103
+ }
104
+ if (parsed.devDependencies) {
105
+ delete parsed.devDependencies["@types/inquirer"];
106
+ delete parsed.devDependencies.commander;
107
+ delete parsed.devDependencies.inquirer;
108
+ }
109
+ };
110
+ const normalizeScript = (script) => script.replace(/(^|[^A-Za-z0-9_-])tsc(?=$|[^A-Za-z0-9_-])/g, "$1ttsc");
111
+ const ARGUMENT_PARSER = `import { createInterface } from "node:readline/promises";
112
+
113
+ export namespace ArgumentParser {
114
+ export interface Command {
115
+ option: (flags: string, description?: string) => Command;
116
+ }
117
+
118
+ export interface Prompt {
119
+ select: (
120
+ name: string,
121
+ ) => (
122
+ message: string,
123
+ ) => <Choice extends string>(choices: Choice[]) => Promise<Choice>;
124
+ boolean: (name: string) => (message: string) => Promise<boolean>;
125
+ number: (name: string) => (message: string) => Promise<number>;
126
+ }
127
+
128
+ export const parse = async <T>(
129
+ inquiry: (
130
+ command: Command,
131
+ prompt: Prompt,
132
+ action: (closure: (options: Partial<T>) => Promise<T>) => Promise<T>,
133
+ ) => Promise<T>,
134
+ ): Promise<T> => {
135
+ const command: Command = {
136
+ option: (_flags: string, _description?: string): Command => command,
137
+ };
138
+ const action = (closure: (options: Partial<T>) => Promise<T>) =>
139
+ closure(parseArguments() as Partial<T>);
140
+ return inquiry(
141
+ command,
142
+ { select, boolean, number },
143
+ action,
144
+ );
145
+ };
146
+
147
+ const select =
148
+ (_name: string) =>
149
+ (message: string) =>
150
+ async <Choice extends string>(choices: Choice[]): Promise<Choice> => {
151
+ const answer: string = await ask(\`\${message} (\${choices.join("/")})\`);
152
+ return (choices.find((choice) => choice === answer) ?? choices[0])!;
153
+ };
154
+
155
+ const boolean = (_name: string) => async (message: string) =>
156
+ /^(true|t|yes|y|1)$/i.test(await ask(\`\${message} [y/N]\`));
157
+
158
+ const number = (_name: string) => async (message: string) =>
159
+ Number(await ask(message));
160
+
161
+ const ask = async (message: string): Promise<string> => {
162
+ const reader = createInterface({
163
+ input: process.stdin,
164
+ output: process.stdout,
165
+ });
166
+ try {
167
+ return (await reader.question(\`\${message}: \`)).trim();
168
+ } finally {
169
+ reader.close();
170
+ }
171
+ };
172
+
173
+ const parseArguments = (): Record<string, string | string[] | boolean> => {
174
+ const output: Record<string, string | string[] | boolean> = {};
175
+ const args: string[] = process.argv.slice(2);
176
+ for (let i = 0; i < args.length; ++i) {
177
+ const raw: string = args[i]!;
178
+ if (raw.startsWith("--") === false) continue;
179
+
180
+ const equal: number = raw.indexOf("=");
181
+ const name: string = toCamelCase(
182
+ raw.slice(2, equal === -1 ? undefined : equal),
183
+ );
184
+ if (equal !== -1) {
185
+ assign(output, name, raw.slice(equal + 1));
186
+ continue;
187
+ }
188
+
189
+ const values: string[] = [];
190
+ while (i + 1 < args.length && args[i + 1]!.startsWith("--") === false)
191
+ values.push(args[++i]!);
192
+ assign(
193
+ output,
194
+ name,
195
+ values.length === 0 ? true : values.length === 1 ? values[0]! : values,
196
+ );
197
+ }
198
+ return output;
199
+ };
200
+
201
+ const assign = (
202
+ output: Record<string, string | string[] | boolean>,
203
+ name: string,
204
+ value: string | string[] | boolean,
205
+ ): void => {
206
+ const current: string | string[] | boolean | undefined = output[name];
207
+ if (current === undefined) output[name] = value;
208
+ else
209
+ output[name] = [
210
+ ...(Array.isArray(current) ? current : [String(current)]),
211
+ ...(Array.isArray(value) ? value : [String(value)]),
212
+ ];
213
+ };
214
+
215
+ const toCamelCase = (str: string): string =>
216
+ str.replace(/-([a-z])/g, (_matched, letter: string) =>
217
+ letter.toUpperCase(),
218
+ );
219
+ }
220
+ `;
221
+ const updateTsConfig = (content) => {
222
+ content = content.replace(/^\s*\{\s*"transform":\s*"typescript-transform-paths"\s*\},\r?\n/gm, "");
223
+ content = content.replace(/^\s*\{\s*"transform":\s*"typia\/lib\/transform"(?:,\s*"enabled":\s*false)?\s*\},?\r?\n/gm, "");
224
+ content = content.replace(/^\s*\{\s*"transform":\s*"@nestia\/core\/lib\/transform"\s*\},?\r?\n/gm, "");
225
+ content = content.replace(/^\s*\{\s*"transform":\s*"@nestia\/core\/native\/transform\.cjs"\s*\},?\r?\n/gm, "");
226
+ content = content.replace(/^\s*\{\s*"transform":\s*"@nestia\/sdk\/lib\/transform"\s*\},\r?\n/gm, "");
227
+ return content;
228
+ };
229
+ const bundle = (_a) => __awaiter(void 0, [_a], void 0, function* ({ mode, repository, revision, exceptions, transform, }) {
230
+ const root = `${__dirname}/../..`;
231
+ const assets = `${root}/assets`;
232
+ const template = `${assets}/${mode}`;
233
+ const clone = () => __awaiter(void 0, void 0, void 0, function* () {
234
+ // CLONE REPOSITORY
235
+ if (node_fs_1.default.existsSync(template))
236
+ yield node_fs_1.default.promises.rm(template, { recursive: true });
237
+ else
238
+ try {
239
+ yield node_fs_1.default.promises.mkdir(ASSETS);
240
+ }
241
+ catch (_a) { }
242
+ // Disable line-ending conversion so the bundled template is byte-identical
243
+ // on every platform: with core.autocrlf=true (the common Windows default)
244
+ // the checkout would rewrite LF to CRLF and break the line-targeted
245
+ // transforms below.
246
+ yield node_fs_1.default.promises.mkdir(template, { recursive: true });
247
+ node_child_process_1.default.execFileSync("git", ["init", "--quiet"], { cwd: template });
248
+ // The template repositories are live projects; an unpinned clone lets any
249
+ // upstream push break this build (samchon/nestia-start#632 did exactly
250
+ // that), so every bundle checks out a reviewed revision.
251
+ node_child_process_1.default.execFileSync("git", [
252
+ "fetch",
253
+ "--quiet",
254
+ "--depth=1",
255
+ // This checkout is consumed and removed immediately. Fetch's default
256
+ // auto-maintenance can detach a writer into .git/objects after fetch
257
+ // returns, racing the awaited removal below on a cold CI build.
258
+ "--no-auto-maintenance",
259
+ `https://github.com/samchon/${repository}`,
260
+ revision,
261
+ ], { cwd: template });
262
+ node_child_process_1.default.execFileSync("git", [
263
+ "-c",
264
+ "core.autocrlf=false",
265
+ "checkout",
266
+ "--quiet",
267
+ "--detach",
268
+ revision,
269
+ ], {
270
+ cwd: template,
271
+ stdio: "pipe",
272
+ });
273
+ // REMOVE VULNERABLE FILES
274
+ for (const location of exceptions !== null && exceptions !== void 0 ? exceptions : [])
275
+ yield node_fs_1.default.promises.rm(`${template}/${location}`, { recursive: true });
276
+ });
277
+ const iterate = (collection) => (location) => __awaiter(void 0, void 0, void 0, function* () {
278
+ const directory = yield node_fs_1.default.promises.readdir(location);
279
+ for (const file of directory) {
280
+ const absolute = location + "/" + file;
281
+ const stats = yield node_fs_1.default.promises.stat(absolute);
282
+ if (stats.isDirectory())
283
+ yield iterate(collection)(absolute);
284
+ else {
285
+ const content = yield node_fs_1.default.promises.readFile(absolute, "utf-8");
286
+ collection[(() => {
287
+ const str = absolute.replace(template, "");
288
+ return str[0] === "/" ? str.substring(1) : str;
289
+ })()] = content;
290
+ }
291
+ }
292
+ });
293
+ const archive = (collection) => __awaiter(void 0, void 0, void 0, function* () {
294
+ const name = `${mode.toUpperCase()}_TEMPLATE`;
295
+ const body = JSON.stringify(collection, null, 2);
296
+ const content = `export const ${name}: Record<string, string> = ${body}`;
297
+ try {
298
+ yield node_fs_1.default.promises.mkdir(`${ROOT}/src/bundles`);
299
+ }
300
+ catch (_a) { }
301
+ yield node_fs_1.default.promises.writeFile(`${ROOT}/src/bundles/${name}.ts`, content, "utf8");
302
+ });
303
+ const collection = {};
304
+ yield clone();
305
+ yield iterate(collection)(template);
306
+ if (transform)
307
+ for (const [key, value] of Object.entries(collection))
308
+ collection[key] = yield writeTransformedAsset(template, key, transform(key, value));
309
+ yield archive(collection);
310
+ });
311
+ const writeTransformedAsset = (template, key, value) => __awaiter(void 0, void 0, void 0, function* () {
312
+ yield node_fs_1.default.promises.writeFile(`${template}/${key}`, value, "utf8");
313
+ return value;
314
+ });
315
+ /**
316
+ * Generates both pinned templates using the current release and catalog stamps.
317
+ *
318
+ * The complete script is a cache input because it contains the revisions,
319
+ * exclusions and every transformation rule. A hit still verifies output bytes.
320
+ */
321
+ const generate = () => __awaiter(void 0, void 0, void 0, function* () {
322
+ yield bundle({
323
+ mode: "nest",
324
+ repository: "nestia-start",
325
+ // Pin the reviewed pnpm monorepo template after its catalog, rolldown, and
326
+ // package self-reference migrations.
327
+ revision: "8188661cb1c1b0fb30e6184b06422764d64a5f68",
328
+ exceptions: [
329
+ ".git",
330
+ ".github/dependabot.yml",
331
+ ".github/workflows/dependabot-automerge.yml",
332
+ // The template's lockfile resolves the catalog versions that the
333
+ // stamping below rewrites; shipping it would only bloat NEST_TEMPLATE
334
+ // with 160 KB of immediately-stale data.
335
+ "pnpm-lock.yaml",
336
+ "packages/api/src/functional",
337
+ "packages/api/src/structures",
338
+ "packages/backend/src/MyModule.ts",
339
+ "packages/backend/src/controllers",
340
+ "packages/backend/src/providers",
341
+ "packages/backend/test/features",
342
+ ],
343
+ transform: (key, value) => {
344
+ if (key.endsWith("package.json")) {
345
+ const parsed = JSON.parse(update(value));
346
+ trimTemplateDependencies(parsed);
347
+ return JSON.stringify(parsed, null, 2);
348
+ }
349
+ if (key === "pnpm-workspace.yaml")
350
+ return updateWorkspaceCatalog(value);
351
+ if (key === "packages/backend/test/helpers/ArgumentParser.ts")
352
+ return ARGUMENT_PARSER;
353
+ if (key.endsWith("tsconfig.json"))
354
+ return updateTsConfig(value);
355
+ return value;
356
+ },
357
+ });
358
+ yield bundle({
359
+ mode: "sdk",
360
+ repository: "nestia-sdk-template",
361
+ // Pin the reviewed pnpm-native SDK template.
362
+ revision: "37a019e2b8dea3d02237137aaec2f242f53dcd2d",
363
+ exceptions: [
364
+ ".git",
365
+ ".github/dependabot.yml",
366
+ ".github/workflows/build.yml",
367
+ ".github/workflows/dependabot-automerge.yml",
368
+ // update() stamps the current Nestia version into package.json. The
369
+ // template repository's lockfile resolves its own version, so let the
370
+ // first pnpm install create a lockfile that matches the migrated output.
371
+ "pnpm-lock.yaml",
372
+ "src/functional",
373
+ "src/structures",
374
+ "test/features",
375
+ ],
376
+ transform: (key, value) => {
377
+ if (key.endsWith("package.json")) {
378
+ const parsed = JSON.parse(update(value, { sdkAggregate: key === "package.json" }));
379
+ trimTemplateDependencies(parsed);
380
+ return JSON.stringify(parsed, null, 2);
381
+ }
382
+ if (key === "test/utils/ArgumentParser.ts")
383
+ return ARGUMENT_PARSER;
384
+ if (key.endsWith("tsconfig.json"))
385
+ return updateTsConfig(value);
386
+ return value;
387
+ },
388
+ });
389
+ });
390
+ const main = () => __awaiter(void 0, void 0, void 0, function* () {
391
+ const reused = yield (0, TemplateBundleCache_1.run)({
392
+ inputs: [version, CATALOGS, node_fs_1.default.readFileSync(__filename, "utf8")],
393
+ outputs: ["NEST_TEMPLATE", "SDK_TEMPLATE"].map((name) => `${ROOT}/src/bundles/${name}.ts`),
394
+ stampFile: `${ASSETS}/.bundle-cache.json`,
395
+ generate,
396
+ });
397
+ if (reused)
398
+ console.log("Reuse verified migration template bundles.");
399
+ });
400
+ main().catch((exp) => {
401
+ console.error(exp);
402
+ process.exit(-1);
403
+ });
404
+ //# sourceMappingURL=bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/executable/bundle.ts"],"names":[],"mappings":"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"}