@nifrajs/cli 1.13.0 → 2.1.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.
Files changed (47) hide show
  1. package/README.md +17 -2
  2. package/dist/check.d.ts +17 -6
  3. package/dist/check.d.ts.map +1 -1
  4. package/dist/check.js +256 -15
  5. package/dist/check.js.map +1 -1
  6. package/dist/cli.d.ts +2 -3
  7. package/dist/cli.d.ts.map +1 -1
  8. package/dist/cli.js +58 -71
  9. package/dist/cli.js.map +1 -1
  10. package/dist/doctor.d.ts.map +1 -1
  11. package/dist/doctor.js +108 -48
  12. package/dist/doctor.js.map +1 -1
  13. package/dist/mcp-http.js +1 -1
  14. package/dist/mcp-http.js.map +1 -1
  15. package/dist/mcp.d.ts +2 -0
  16. package/dist/mcp.d.ts.map +1 -1
  17. package/dist/mcp.js +42 -0
  18. package/dist/mcp.js.map +1 -1
  19. package/dist/recipes/2.0.0.d.ts +9 -0
  20. package/dist/recipes/2.0.0.d.ts.map +1 -0
  21. package/dist/recipes/2.0.0.js +25 -0
  22. package/dist/recipes/2.0.0.js.map +1 -0
  23. package/dist/recipes/index.d.ts +7 -0
  24. package/dist/recipes/index.d.ts.map +1 -1
  25. package/dist/recipes/index.js +2 -0
  26. package/dist/recipes/index.js.map +1 -1
  27. package/dist/sync-manifest.d.ts +33 -0
  28. package/dist/sync-manifest.d.ts.map +1 -0
  29. package/dist/sync-manifest.js +97 -0
  30. package/dist/sync-manifest.js.map +1 -0
  31. package/dist/upgrade.d.ts +23 -2
  32. package/dist/upgrade.d.ts.map +1 -1
  33. package/dist/upgrade.js +144 -13
  34. package/dist/upgrade.js.map +1 -1
  35. package/docs/examples.json +69 -21
  36. package/docs/llms-full.txt +1186 -142
  37. package/docs/types.json +1914 -213
  38. package/package.json +9 -9
  39. package/src/check.ts +251 -18
  40. package/src/cli.ts +57 -73
  41. package/src/doctor.ts +133 -49
  42. package/src/mcp-http.ts +1 -1
  43. package/src/mcp.ts +52 -0
  44. package/src/recipes/2.0.0.ts +26 -0
  45. package/src/recipes/index.ts +10 -0
  46. package/src/sync-manifest.ts +111 -0
  47. 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"}
@@ -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;AAIH,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,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,WAAW,EAAE,SAAS,UAAU,EAAE,CAAA;IAC3C,qGAAqG;IACrG,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACnC;AAMD,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEpE;AAED,4CAA4C;AAC5C,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C"}
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"}
@@ -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;AAwB7C,MAAM,OAAO,GAAkC;IAC7C,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"}
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. **import moves** — rewrite exact import specifiers to their updated module paths.
9
- * 3. **verify** — reuse the existing `nifra check` gate; no new verification surface.
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;
@@ -1 +1 @@
1
- {"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../src/upgrade.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,EAAiC,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEtF,MAAM,WAAW,cAAc;IAC7B,mEAAmE;IACnE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,mFAAmF;IACnF,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;IACxB,uEAAuE;IACvE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;IACvB,sDAAsD;IACtD,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;IACvB,yFAAyF;IACzF,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,CAAA;IACnC,QAAQ,CAAC,WAAW,EAAE,SAAS,YAAY,EAAE,CAAA;IAC7C,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAClC;AAcD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMjF;AAID;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,GAC9C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;CAAE,CA4B3D;AAQD,+FAA+F;AAC/F,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,GAC7C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAa/E;AAiBD,wFAAwF;AACxF,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,GAAG,WAAW,CA2B9F;AA2BD,wGAAwG;AACxG,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAmDvF"}
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. **import moves** — rewrite exact import specifiers to their updated module paths.
9
- * 3. **verify** — reuse the existing `nifra check` gate; no new verification surface.
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 text = readFileSync(abs, "utf8");
120
- const result = pinSweepText(text, recipe.pins);
121
- if (result.changes.length === 0)
122
- continue;
123
- for (const change of result.changes)
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, result.text);
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 { version: recipe.version, pins, importMoves, notes: recipe.notes ?? [] };
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 && plan.importMoves.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)
@@ -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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"}