@nifrajs/cli 1.13.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -2
- package/dist/check.d.ts +17 -6
- package/dist/check.d.ts.map +1 -1
- package/dist/check.js +256 -15
- package/dist/check.js.map +1 -1
- package/dist/cli.d.ts +2 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +58 -71
- package/dist/cli.js.map +1 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +108 -48
- package/dist/doctor.js.map +1 -1
- package/dist/mcp-http.js +1 -1
- package/dist/mcp-http.js.map +1 -1
- package/dist/mcp.d.ts +2 -0
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +42 -0
- package/dist/mcp.js.map +1 -1
- package/dist/recipes/2.0.0.d.ts +9 -0
- package/dist/recipes/2.0.0.d.ts.map +1 -0
- package/dist/recipes/2.0.0.js +25 -0
- package/dist/recipes/2.0.0.js.map +1 -0
- package/dist/recipes/index.d.ts +7 -0
- package/dist/recipes/index.d.ts.map +1 -1
- package/dist/recipes/index.js +2 -0
- package/dist/recipes/index.js.map +1 -1
- package/dist/sync-manifest.d.ts +33 -0
- package/dist/sync-manifest.d.ts.map +1 -0
- package/dist/sync-manifest.js +97 -0
- package/dist/sync-manifest.js.map +1 -0
- package/dist/upgrade.d.ts +23 -2
- package/dist/upgrade.d.ts.map +1 -1
- package/dist/upgrade.js +144 -13
- package/dist/upgrade.js.map +1 -1
- package/docs/examples.json +69 -21
- package/docs/llms-full.txt +1065 -104
- package/docs/types.json +880 -175
- package/package.json +9 -9
- package/src/check.ts +251 -18
- package/src/cli.ts +57 -73
- package/src/doctor.ts +133 -49
- package/src/mcp-http.ts +1 -1
- package/src/mcp.ts +52 -0
- package/src/recipes/2.0.0.ts +26 -0
- package/src/recipes/index.ts +10 -0
- package/src/sync-manifest.ts +111 -0
- package/src/upgrade.ts +163 -11
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"2.0.0.js","sourceRoot":"","sources":["../../src/recipes/2.0.0.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,MAAM,GAAkB;IACnC,OAAO,EAAE,OAAO;IAChB,IAAI,EAAE;QACJ,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,OAAO,EAAE;QACnC,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,OAAO,EAAE;QACtC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE;KAChC;IACD,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;IACvF,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,sBAAsB,EAAE,CAAC;IACtE,KAAK,EAAE;QACL,uEAAuE;QACvE,6MAA6M;QAC7M,8IAA8I;QAC9I,4IAA4I;QAC5I,mJAAmJ;QACnJ,sHAAsH;KACvH;CACF,CAAA"}
|
package/dist/recipes/index.d.ts
CHANGED
|
@@ -10,6 +10,12 @@ export interface PinRule {
|
|
|
10
10
|
/** Bare target version, e.g. `1.8.0`. The range operator (`^`/`~`/exact) is preserved per-spec. */
|
|
11
11
|
readonly to: string;
|
|
12
12
|
}
|
|
13
|
+
/** Move a removed package dependency to its replacement, preserving the consumer's range style. */
|
|
14
|
+
export interface DependencyMove {
|
|
15
|
+
readonly from: string;
|
|
16
|
+
readonly to: string;
|
|
17
|
+
readonly toVersion: string;
|
|
18
|
+
}
|
|
13
19
|
/** An exact import-specifier rewrite (string-level, not AST): `from` → `to`. */
|
|
14
20
|
export interface ImportMove {
|
|
15
21
|
readonly from: string;
|
|
@@ -18,6 +24,7 @@ export interface ImportMove {
|
|
|
18
24
|
export interface UpgradeRecipe {
|
|
19
25
|
readonly version: string;
|
|
20
26
|
readonly pins: readonly PinRule[];
|
|
27
|
+
readonly dependencyMoves?: readonly DependencyMove[];
|
|
21
28
|
readonly importMoves: readonly ImportMove[];
|
|
22
29
|
/** Human notes printed after the plan — e.g. structural changes the runner deliberately can't do. */
|
|
23
30
|
readonly notes?: readonly string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/recipes/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/recipes/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,0FAA0F;AAC1F,MAAM,WAAW,OAAO;IACtB,uEAAuE;IACvE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,mGAAmG;IACnG,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CACpB;AAED,mGAAmG;AACnG,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED,gFAAgF;AAChF,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,CAAA;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,cAAc,EAAE,CAAA;IACpD,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAA;IAC3C,qGAAqG;IACrG,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACnC;AAOD,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEpE;AAED,4CAA4C;AAC5C,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C"}
|
package/dist/recipes/index.js
CHANGED
|
@@ -4,8 +4,10 @@
|
|
|
4
4
|
* them deterministically. Recipes are static imports (they bundle) and keyed by target version.
|
|
5
5
|
*/
|
|
6
6
|
import { recipe as v1_8_0 } from "./1.8.0.js";
|
|
7
|
+
import { recipe as v2_0_0 } from "./2.0.0.js";
|
|
7
8
|
const RECIPES = {
|
|
8
9
|
[v1_8_0.version]: v1_8_0,
|
|
10
|
+
[v2_0_0.version]: v2_0_0,
|
|
9
11
|
};
|
|
10
12
|
export function getRecipe(version) {
|
|
11
13
|
return RECIPES[version];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/recipes/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/recipes/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,YAAY,CAAA;AAgC7C,MAAM,OAAO,GAAkC;IAC7C,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM;IACxB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM;CACzB,CAAA;AAED,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,OAAO,OAAO,CAAC,OAAO,CAAC,CAAA;AACzB,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,kBAAkB;IAChC,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AACnE,CAAC;AAED,SAAS,eAAe,CAAC,CAAS,EAAE,CAAS;IAC3C,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACnC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACxD,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QACxC,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA;IAC7B,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nifra sync-manifest` - regenerate a committed web `server-manifest.ts` from the current `routes/` tree
|
|
3
|
+
* WITHOUT a full build. The manifest is a generated file that bakes the route table (+ client-asset hashes)
|
|
4
|
+
* for a disk-less edge worker; after adding/renaming/removing a route it drifts, and `nifra check` flags it.
|
|
5
|
+
* Regenerating it used to require the whole `build` (server + worker + migrate bundles). This re-scans
|
|
6
|
+
* `routes/` and rewrites just the manifest's route table, preserving the baked client-asset references.
|
|
7
|
+
*
|
|
8
|
+
* It does NOT rebuild the client bundle: a brand-new HYDRATING route still needs a full build so its client
|
|
9
|
+
* chunk exists. This clears route-table drift for the common case (a loader edit, an SSR-only route, a
|
|
10
|
+
* rename) in milliseconds, and prints that caveat for the case it can't cover.
|
|
11
|
+
*/
|
|
12
|
+
export interface SyncManifestResult {
|
|
13
|
+
/** The committed server-manifest file (relative to cwd). */
|
|
14
|
+
readonly file: string;
|
|
15
|
+
/** True when the file's route table changed and it was rewritten. */
|
|
16
|
+
readonly changed: boolean;
|
|
17
|
+
/** Route files now imported that weren't before (added). */
|
|
18
|
+
readonly added: readonly string[];
|
|
19
|
+
/** Route files no longer imported (removed/renamed away). */
|
|
20
|
+
readonly removed: readonly string[];
|
|
21
|
+
/** Set when the sync was REFUSED because discovery found zero routes for a manifest that had some
|
|
22
|
+
* (`routes/` likely emptied by mistake) - the manifest was left untouched rather than wiped. */
|
|
23
|
+
readonly refusedEmpty?: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Discover every generated `server-manifest.ts` under `cwd` and re-sync its route table from the live
|
|
27
|
+
* `routes/` tree, preserving baked client assets. Returns one result per generated manifest. Never throws
|
|
28
|
+
* on a per-manifest miss (an unreadable/absent routes dir is skipped).
|
|
29
|
+
*/
|
|
30
|
+
export declare function syncServerManifests(cwd: string): Promise<SyncManifestResult[]>;
|
|
31
|
+
/** CLI entry: sync every generated manifest, print a per-file summary + the client-rebuild caveat. */
|
|
32
|
+
export declare function runSyncManifest(cwd: string): Promise<boolean>;
|
|
33
|
+
//# sourceMappingURL=sync-manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-manifest.d.ts","sourceRoot":"","sources":["../src/sync-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAaH,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,qEAAqE;IACrE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,4DAA4D;IAC5D,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;IACjC,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC;oGACgG;IAChG,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAChC;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAqCpF;AAED,sGAAsG;AACtG,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA4BnE"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nifra sync-manifest` - regenerate a committed web `server-manifest.ts` from the current `routes/` tree
|
|
3
|
+
* WITHOUT a full build. The manifest is a generated file that bakes the route table (+ client-asset hashes)
|
|
4
|
+
* for a disk-less edge worker; after adding/renaming/removing a route it drifts, and `nifra check` flags it.
|
|
5
|
+
* Regenerating it used to require the whole `build` (server + worker + migrate bundles). This re-scans
|
|
6
|
+
* `routes/` and rewrites just the manifest's route table, preserving the baked client-asset references.
|
|
7
|
+
*
|
|
8
|
+
* It does NOT rebuild the client bundle: a brand-new HYDRATING route still needs a full build so its client
|
|
9
|
+
* chunk exists. This clears route-table drift for the common case (a loader edit, an SSR-only route, a
|
|
10
|
+
* rename) in milliseconds, and prints that caveat for the case it can't cover.
|
|
11
|
+
*/
|
|
12
|
+
import { join } from "node:path";
|
|
13
|
+
import { Glob } from "bun";
|
|
14
|
+
// The marker `generateServerManifest` writes at the top of the file - so a user file merely named
|
|
15
|
+
// `server-manifest.ts` is never mistaken for a generated one. Mirrors `nifra check`'s drift scan.
|
|
16
|
+
const GENERATED_MARKER = "GENERATED by @nifrajs/web generateServerManifest";
|
|
17
|
+
// The first route-import specifier's prefix up to `routes/` (`./`, `../`, `./src/`, …) - locates the
|
|
18
|
+
// routes dir relative to the manifest and strips imports to route-relative keys.
|
|
19
|
+
const ROUTES_PREFIX = /["'](\.{1,2}(?:\/[^"'/]+)*?\/routes\/)[^"']+["']/;
|
|
20
|
+
const IGNORED = /(^|\/)(node_modules|dist(-[a-z0-9]+)?|build|\.nifra|\.git|\.wrangler|coverage)\//;
|
|
21
|
+
/**
|
|
22
|
+
* Discover every generated `server-manifest.ts` under `cwd` and re-sync its route table from the live
|
|
23
|
+
* `routes/` tree, preserving baked client assets. Returns one result per generated manifest. Never throws
|
|
24
|
+
* on a per-manifest miss (an unreadable/absent routes dir is skipped).
|
|
25
|
+
*/
|
|
26
|
+
export async function syncServerManifests(cwd) {
|
|
27
|
+
const { discoverRoutes } = await import("@nifrajs/web/fs");
|
|
28
|
+
const { parseManifestRouteFiles, diffManifestRoutes, resyncServerManifestSource } = await import("@nifrajs/web/build");
|
|
29
|
+
const results = [];
|
|
30
|
+
for await (const rel of new Glob("**/server-manifest.ts").scan({ cwd, dot: false })) {
|
|
31
|
+
if (IGNORED.test(rel))
|
|
32
|
+
continue;
|
|
33
|
+
const abs = join(cwd, rel);
|
|
34
|
+
const source = await Bun.file(abs).text();
|
|
35
|
+
if (!source.includes(GENERATED_MARKER))
|
|
36
|
+
continue; // not a generated manifest - skip
|
|
37
|
+
const routesPrefix = ROUTES_PREFIX.exec(source)?.[1];
|
|
38
|
+
if (routesPrefix === undefined)
|
|
39
|
+
continue; // no routes/ imports -> nothing to sync
|
|
40
|
+
const manifestDir = rel.includes("/") ? rel.slice(0, rel.lastIndexOf("/")) : "";
|
|
41
|
+
const routesDir = join(cwd, manifestDir, routesPrefix);
|
|
42
|
+
let next;
|
|
43
|
+
try {
|
|
44
|
+
next = resyncServerManifestSource(source, discoverRoutes(routesDir), routesPrefix);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
continue; // routes dir gone/unreadable - not a manifest we can sync
|
|
48
|
+
}
|
|
49
|
+
const before = parseManifestRouteFiles(source, routesPrefix);
|
|
50
|
+
const after = parseManifestRouteFiles(next, routesPrefix);
|
|
51
|
+
// Floor guard: refuse to overwrite a populated manifest with an empty one. Discovery yielding zero
|
|
52
|
+
// routes for a manifest that had some means `routes/` was likely emptied by mistake - writing the wipe
|
|
53
|
+
// would silently un-serve every route. Leave the file untouched and surface it instead.
|
|
54
|
+
if (after.length === 0 && before.length > 0) {
|
|
55
|
+
results.push({ file: rel, changed: false, added: [], removed: [], refusedEmpty: true });
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
const changed = next !== source;
|
|
59
|
+
if (changed)
|
|
60
|
+
await Bun.write(abs, next);
|
|
61
|
+
// `diff(before, after)`: `missing` = files now present (added), `extra` = files gone (removed).
|
|
62
|
+
const drift = diffManifestRoutes(before, after);
|
|
63
|
+
results.push({ file: rel, changed, added: drift.missing, removed: drift.extra });
|
|
64
|
+
}
|
|
65
|
+
return results.sort((a, b) => a.file.localeCompare(b.file));
|
|
66
|
+
}
|
|
67
|
+
/** CLI entry: sync every generated manifest, print a per-file summary + the client-rebuild caveat. */
|
|
68
|
+
export async function runSyncManifest(cwd) {
|
|
69
|
+
const results = await syncServerManifests(cwd);
|
|
70
|
+
if (results.length === 0) {
|
|
71
|
+
console.log("nifra sync-manifest: no generated server-manifest.ts found under this directory.");
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
let anyChanged = false;
|
|
75
|
+
for (const r of results) {
|
|
76
|
+
if (r.refusedEmpty) {
|
|
77
|
+
console.log(`⚠ ${r.file}: refused - routes/ has zero routes but the manifest had some; left untouched (delete the manifest yourself if this is intentional).`);
|
|
78
|
+
}
|
|
79
|
+
else if (r.changed) {
|
|
80
|
+
anyChanged = true;
|
|
81
|
+
console.log(`✓ synced ${r.file}`);
|
|
82
|
+
if (r.added.length > 0)
|
|
83
|
+
console.log(` added: ${r.added.join(", ")}`);
|
|
84
|
+
if (r.removed.length > 0)
|
|
85
|
+
console.log(` removed: ${r.removed.join(", ")}`);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
console.log(`• ${r.file} already in sync`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
if (anyChanged) {
|
|
92
|
+
console.log("\nRe-synced the server manifest's route table. If you added or changed a HYDRATING route\n" +
|
|
93
|
+
"component (not just a loader / SSR-only route), also run a full build so the client bundle matches.");
|
|
94
|
+
}
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=sync-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-manifest.js","sourceRoot":"","sources":["../src/sync-manifest.ts"],"names":[],"mappings":"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"}
|
package/dist/upgrade.d.ts
CHANGED
|
@@ -5,8 +5,10 @@
|
|
|
5
5
|
*
|
|
6
6
|
* 1. **pin sweep** — set every matching dependency to the target version across the workspace's
|
|
7
7
|
* package.json files, preserving the caret/tilde/exact style and skipping `workspace:`/`link:` specs.
|
|
8
|
-
* 2. **
|
|
9
|
-
*
|
|
8
|
+
* 2. **dependency moves** — replace removed packages with their supported successor without
|
|
9
|
+
* reserializing package.json or leaving duplicate dependency keys.
|
|
10
|
+
* 3. **import moves** — rewrite exact import specifiers to their updated module paths.
|
|
11
|
+
* 4. **verify** — reuse the existing `nifra check` gate; no new verification surface.
|
|
10
12
|
*
|
|
11
13
|
* Dry-run by default (prints the plan, writes nothing); `--write` applies. Fail-closed on an unknown
|
|
12
14
|
* target version or a missing package.json, and deterministic (same repo + target → same edits).
|
|
@@ -40,9 +42,19 @@ export interface ImportChange {
|
|
|
40
42
|
readonly to: string;
|
|
41
43
|
readonly count: number;
|
|
42
44
|
}
|
|
45
|
+
export interface DependencyMoveChange {
|
|
46
|
+
readonly file: string;
|
|
47
|
+
readonly field: string;
|
|
48
|
+
readonly from: string;
|
|
49
|
+
readonly to: string;
|
|
50
|
+
readonly fromVersion: string;
|
|
51
|
+
readonly toVersion: string;
|
|
52
|
+
readonly action: "renamed" | "removed";
|
|
53
|
+
}
|
|
43
54
|
export interface UpgradePlan {
|
|
44
55
|
readonly version: string;
|
|
45
56
|
readonly pins: readonly PinChange[];
|
|
57
|
+
readonly dependencyMoves: readonly DependencyMoveChange[];
|
|
46
58
|
readonly importMoves: readonly ImportChange[];
|
|
47
59
|
readonly notes: readonly string[];
|
|
48
60
|
}
|
|
@@ -63,6 +75,15 @@ export declare function pinSweepText(text: string, rules: readonly {
|
|
|
63
75
|
text: string;
|
|
64
76
|
changes: Array<Omit<PinChange, "file">>;
|
|
65
77
|
};
|
|
78
|
+
/** Move removed package dependencies without reserializing or reordering package.json. */
|
|
79
|
+
export declare function moveDependenciesText(text: string, moves: readonly {
|
|
80
|
+
from: string;
|
|
81
|
+
to: string;
|
|
82
|
+
toVersion: string;
|
|
83
|
+
}[]): {
|
|
84
|
+
text: string;
|
|
85
|
+
changes: Array<Omit<DependencyMoveChange, "file">>;
|
|
86
|
+
};
|
|
66
87
|
/** Rewrite exact import/export/require/dynamic-import specifiers in one source file's text. */
|
|
67
88
|
export declare function applyImportMoves(text: string, moves: readonly {
|
|
68
89
|
from: string;
|
package/dist/upgrade.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../src/upgrade.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../src/upgrade.ts"],"names":[],"mappings":"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"}
|
package/dist/upgrade.js
CHANGED
|
@@ -5,8 +5,10 @@
|
|
|
5
5
|
*
|
|
6
6
|
* 1. **pin sweep** — set every matching dependency to the target version across the workspace's
|
|
7
7
|
* package.json files, preserving the caret/tilde/exact style and skipping `workspace:`/`link:` specs.
|
|
8
|
-
* 2. **
|
|
9
|
-
*
|
|
8
|
+
* 2. **dependency moves** — replace removed packages with their supported successor without
|
|
9
|
+
* reserializing package.json or leaving duplicate dependency keys.
|
|
10
|
+
* 3. **import moves** — rewrite exact import specifiers to their updated module paths.
|
|
11
|
+
* 4. **verify** — reuse the existing `nifra check` gate; no new verification surface.
|
|
10
12
|
*
|
|
11
13
|
* Dry-run by default (prints the plan, writes nothing); `--write` applies. Fail-closed on an unknown
|
|
12
14
|
* target version or a missing package.json, and deterministic (same repo + target → same edits).
|
|
@@ -62,7 +64,7 @@ export function pinSweepText(text, rules) {
|
|
|
62
64
|
for (const [name, rawSpec] of Object.entries(deps)) {
|
|
63
65
|
if (typeof rawSpec !== "string")
|
|
64
66
|
continue;
|
|
65
|
-
const rule = rules.find((r) => name.startsWith(r.match));
|
|
67
|
+
const rule = rules.find((r) => name === r.match || (r.match.endsWith("/") && name.startsWith(r.match)));
|
|
66
68
|
if (!rule)
|
|
67
69
|
continue;
|
|
68
70
|
const next = rewriteVersionSpec(rawSpec, rule.to);
|
|
@@ -79,6 +81,115 @@ export function pinSweepText(text, rules) {
|
|
|
79
81
|
}
|
|
80
82
|
return { text: out, changes };
|
|
81
83
|
}
|
|
84
|
+
function dependencyObjectRange(text, field) {
|
|
85
|
+
const match = new RegExp(`"${field}"\\s*:\\s*\\{`).exec(text);
|
|
86
|
+
if (match === null)
|
|
87
|
+
return undefined;
|
|
88
|
+
const open = text.indexOf("{", match.index);
|
|
89
|
+
let depth = 0;
|
|
90
|
+
let quoted = false;
|
|
91
|
+
let escaped = false;
|
|
92
|
+
for (let index = open; index < text.length; index++) {
|
|
93
|
+
const char = text[index];
|
|
94
|
+
if (quoted) {
|
|
95
|
+
if (escaped)
|
|
96
|
+
escaped = false;
|
|
97
|
+
else if (char === "\\")
|
|
98
|
+
escaped = true;
|
|
99
|
+
else if (char === '"')
|
|
100
|
+
quoted = false;
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
if (char === '"')
|
|
104
|
+
quoted = true;
|
|
105
|
+
else if (char === "{")
|
|
106
|
+
depth++;
|
|
107
|
+
else if (char === "}" && --depth === 0)
|
|
108
|
+
return { start: open + 1, end: index };
|
|
109
|
+
}
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
function rewriteDependencyEntry(text, field, from, fromVersion, to, toVersion) {
|
|
113
|
+
const range = dependencyObjectRange(text, field);
|
|
114
|
+
if (range === undefined)
|
|
115
|
+
return text;
|
|
116
|
+
const body = text.slice(range.start, range.end);
|
|
117
|
+
const key = escapeRegExp(from);
|
|
118
|
+
const version = escapeRegExp(fromVersion);
|
|
119
|
+
const entry = new RegExp(`"${key}"(\\s*:\\s*)"${version}"`);
|
|
120
|
+
const match = entry.exec(body);
|
|
121
|
+
if (match === null)
|
|
122
|
+
return text;
|
|
123
|
+
let nextBody;
|
|
124
|
+
if (to !== undefined && toVersion !== undefined) {
|
|
125
|
+
nextBody =
|
|
126
|
+
body.slice(0, match.index) +
|
|
127
|
+
`"${to}"${match[1]}"${toVersion}"` +
|
|
128
|
+
body.slice(match.index + match[0].length);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
let start = match.index;
|
|
132
|
+
let end = match.index + match[0].length;
|
|
133
|
+
let after = end;
|
|
134
|
+
while (/\\s/.test(body[after] ?? ""))
|
|
135
|
+
after++;
|
|
136
|
+
if (body[after] === ",") {
|
|
137
|
+
end = after + 1;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
let before = start - 1;
|
|
141
|
+
while (before >= 0 && /\\s/.test(body[before] ?? ""))
|
|
142
|
+
before--;
|
|
143
|
+
if (body[before] === ",")
|
|
144
|
+
start = before;
|
|
145
|
+
}
|
|
146
|
+
nextBody = body.slice(0, start) + body.slice(end);
|
|
147
|
+
}
|
|
148
|
+
return text.slice(0, range.start) + nextBody + text.slice(range.end);
|
|
149
|
+
}
|
|
150
|
+
/** Move removed package dependencies without reserializing or reordering package.json. */
|
|
151
|
+
export function moveDependenciesText(text, moves) {
|
|
152
|
+
let out = text;
|
|
153
|
+
const changes = [];
|
|
154
|
+
for (const move of moves) {
|
|
155
|
+
let parsed;
|
|
156
|
+
try {
|
|
157
|
+
parsed = JSON.parse(out);
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
return { text, changes: [] };
|
|
161
|
+
}
|
|
162
|
+
for (const field of DEP_FIELDS) {
|
|
163
|
+
const deps = parsed[field];
|
|
164
|
+
if (typeof deps !== "object" || deps === null)
|
|
165
|
+
continue;
|
|
166
|
+
const dependencyMap = deps;
|
|
167
|
+
if (!Object.hasOwn(dependencyMap, move.from))
|
|
168
|
+
continue;
|
|
169
|
+
const fromVersion = dependencyMap[move.from];
|
|
170
|
+
if (typeof fromVersion !== "string")
|
|
171
|
+
continue;
|
|
172
|
+
const movedVersion = rewriteVersionSpec(fromVersion, move.toVersion) ?? fromVersion;
|
|
173
|
+
// Dependency fields have different install semantics. A devDependency does not satisfy a runtime
|
|
174
|
+
// dependency, so only deduplicate the successor inside the same field.
|
|
175
|
+
const targetExists = Object.hasOwn(dependencyMap, move.to);
|
|
176
|
+
const action = targetExists ? "removed" : "renamed";
|
|
177
|
+
const next = rewriteDependencyEntry(out, field, move.from, fromVersion, targetExists ? undefined : move.to, targetExists ? undefined : movedVersion);
|
|
178
|
+
if (next === out)
|
|
179
|
+
continue;
|
|
180
|
+
out = next;
|
|
181
|
+
changes.push({
|
|
182
|
+
field,
|
|
183
|
+
from: move.from,
|
|
184
|
+
to: move.to,
|
|
185
|
+
fromVersion,
|
|
186
|
+
toVersion: movedVersion,
|
|
187
|
+
action,
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return { text: out, changes };
|
|
192
|
+
}
|
|
82
193
|
const IMPORT_SPEC = (from) => new RegExp(`(\\bfrom\\s*|\\bimport\\s*\\(\\s*|\\brequire\\s*\\(\\s*|\\bimport\\s+)(['"])${escapeRegExp(from)}(['"])`, "g");
|
|
83
194
|
/** Rewrite exact import/export/require/dynamic-import specifiers in one source file's text. */
|
|
84
195
|
export function applyImportMoves(text, moves) {
|
|
@@ -112,18 +223,20 @@ function scan(cwd, pattern) {
|
|
|
112
223
|
/** Compute the plan (and, when `write`, apply it) for a target recipe against `cwd`. */
|
|
113
224
|
export function computeUpgrade(cwd, recipe, write) {
|
|
114
225
|
const pins = [];
|
|
226
|
+
const dependencyMoves = [];
|
|
115
227
|
const importMoves = [];
|
|
116
|
-
if (recipe.pins.length > 0) {
|
|
228
|
+
if ((recipe.dependencyMoves?.length ?? 0) > 0 || recipe.pins.length > 0) {
|
|
117
229
|
for (const rel of scan(cwd, "**/package.json")) {
|
|
118
230
|
const abs = join(cwd, rel);
|
|
119
|
-
const
|
|
120
|
-
const
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
231
|
+
const original = readFileSync(abs, "utf8");
|
|
232
|
+
const moved = moveDependenciesText(original, recipe.dependencyMoves ?? []);
|
|
233
|
+
for (const change of moved.changes)
|
|
234
|
+
dependencyMoves.push({ file: rel, ...change });
|
|
235
|
+
const pinned = pinSweepText(moved.text, recipe.pins);
|
|
236
|
+
for (const change of pinned.changes)
|
|
124
237
|
pins.push({ file: rel, ...change });
|
|
125
|
-
if (write)
|
|
126
|
-
writeFileSync(abs,
|
|
238
|
+
if (write && pinned.text !== original)
|
|
239
|
+
writeFileSync(abs, pinned.text);
|
|
127
240
|
}
|
|
128
241
|
}
|
|
129
242
|
if (recipe.importMoves.length > 0) {
|
|
@@ -139,17 +252,35 @@ export function computeUpgrade(cwd, recipe, write) {
|
|
|
139
252
|
writeFileSync(abs, result.text);
|
|
140
253
|
}
|
|
141
254
|
}
|
|
142
|
-
return {
|
|
255
|
+
return {
|
|
256
|
+
version: recipe.version,
|
|
257
|
+
pins,
|
|
258
|
+
dependencyMoves,
|
|
259
|
+
importMoves,
|
|
260
|
+
notes: recipe.notes ?? [],
|
|
261
|
+
};
|
|
143
262
|
}
|
|
144
263
|
function renderPlan(plan, write) {
|
|
145
264
|
const lines = [];
|
|
146
265
|
const verb = write ? "Applied" : "Planned";
|
|
147
266
|
lines.push(`nifra upgrade → ${plan.version} (${write ? "write" : "dry-run"})`);
|
|
148
267
|
lines.push("");
|
|
149
|
-
if (plan.pins.length === 0 &&
|
|
268
|
+
if (plan.pins.length === 0 &&
|
|
269
|
+
plan.dependencyMoves.length === 0 &&
|
|
270
|
+
plan.importMoves.length === 0) {
|
|
150
271
|
lines.push("Already up to date — no changes.");
|
|
151
272
|
return lines.join("\n");
|
|
152
273
|
}
|
|
274
|
+
if (plan.dependencyMoves.length > 0) {
|
|
275
|
+
lines.push(`${verb} ${plan.dependencyMoves.length} dependency move(s):`);
|
|
276
|
+
for (const move of plan.dependencyMoves) {
|
|
277
|
+
const detail = move.action === "renamed"
|
|
278
|
+
? `${move.from}@${move.fromVersion} → ${move.to}@${move.toVersion}`
|
|
279
|
+
: `removed ${move.from}@${move.fromVersion}; ${move.to} is already declared`;
|
|
280
|
+
lines.push(` ${move.file} ${detail}`);
|
|
281
|
+
}
|
|
282
|
+
lines.push("");
|
|
283
|
+
}
|
|
153
284
|
if (plan.pins.length > 0) {
|
|
154
285
|
lines.push(`${verb} ${plan.pins.length} dependency pin(s):`);
|
|
155
286
|
for (const p of plan.pins)
|
package/dist/upgrade.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../src/upgrade.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../src/upgrade.ts"],"names":[],"mappings":"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"}
|