@payloadcms/codemod 4.0.0-internal.2f0d313 → 4.0.0-internal.314c594

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 (103) hide show
  1. package/README.md +1 -34
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +27 -22
  4. package/dist/cli.js.map +1 -1
  5. package/dist/cli.parseFlags.d.ts +0 -5
  6. package/dist/cli.parseFlags.d.ts.map +1 -1
  7. package/dist/cli.parseFlags.js +1 -20
  8. package/dist/cli.parseFlags.js.map +1 -1
  9. package/dist/cli.parseFlags.spec.js +0 -72
  10. package/dist/cli.parseFlags.spec.js.map +1 -1
  11. package/dist/registry.d.ts.map +1 -1
  12. package/dist/registry.js +3 -1
  13. package/dist/registry.js.map +1 -1
  14. package/dist/transforms/rename-experimental-table-feature/alias.input.js +6 -0
  15. package/dist/transforms/rename-experimental-table-feature/alias.input.js.map +1 -0
  16. package/dist/transforms/rename-experimental-table-feature/alias.output.js +6 -0
  17. package/dist/transforms/rename-experimental-table-feature/alias.output.js.map +1 -0
  18. package/dist/transforms/rename-experimental-table-feature/basic.input.js +19 -0
  19. package/dist/transforms/rename-experimental-table-feature/basic.input.js.map +1 -0
  20. package/dist/transforms/rename-experimental-table-feature/basic.output.js +19 -0
  21. package/dist/transforms/rename-experimental-table-feature/basic.output.js.map +1 -0
  22. package/dist/transforms/rename-experimental-table-feature/collision.input.js +7 -0
  23. package/dist/transforms/rename-experimental-table-feature/collision.input.js.map +1 -0
  24. package/dist/transforms/rename-experimental-table-feature/index.d.ts +3 -0
  25. package/dist/transforms/rename-experimental-table-feature/index.d.ts.map +1 -0
  26. package/dist/transforms/rename-experimental-table-feature/index.js +44 -0
  27. package/dist/transforms/rename-experimental-table-feature/index.js.map +1 -0
  28. package/dist/transforms/rename-experimental-table-feature/index.spec.d.ts.map +1 -0
  29. package/dist/transforms/rename-experimental-table-feature/index.spec.js +54 -0
  30. package/dist/transforms/rename-experimental-table-feature/index.spec.js.map +1 -0
  31. package/dist/transforms/rename-experimental-table-feature/no-match.input.js +9 -0
  32. package/dist/transforms/rename-experimental-table-feature/no-match.input.js.map +1 -0
  33. package/package.json +2 -5
  34. package/dist/runbook/payload-v4-upgrade.md +0 -55
  35. package/dist/runbook/v4.mdx +0 -1652
  36. package/dist/upgrade/detectPackageManager.d.ts +0 -8
  37. package/dist/upgrade/detectPackageManager.d.ts.map +0 -1
  38. package/dist/upgrade/detectPackageManager.js +0 -38
  39. package/dist/upgrade/detectPackageManager.js.map +0 -1
  40. package/dist/upgrade/detectPackageManager.spec.d.ts +0 -2
  41. package/dist/upgrade/detectPackageManager.spec.d.ts.map +0 -1
  42. package/dist/upgrade/detectPackageManager.spec.js +0 -41
  43. package/dist/upgrade/detectPackageManager.spec.js.map +0 -1
  44. package/dist/upgrade/index.d.ts +0 -24
  45. package/dist/upgrade/index.d.ts.map +0 -1
  46. package/dist/upgrade/index.js +0 -184
  47. package/dist/upgrade/index.js.map +0 -1
  48. package/dist/upgrade/index.spec.d.ts.map +0 -1
  49. package/dist/upgrade/index.spec.js +0 -132
  50. package/dist/upgrade/index.spec.js.map +0 -1
  51. package/dist/upgrade/packaging.spec.d.ts +0 -2
  52. package/dist/upgrade/packaging.spec.d.ts.map +0 -1
  53. package/dist/upgrade/packaging.spec.js +0 -29
  54. package/dist/upgrade/packaging.spec.js.map +0 -1
  55. package/dist/upgrade/prompt.d.ts +0 -11
  56. package/dist/upgrade/prompt.d.ts.map +0 -1
  57. package/dist/upgrade/prompt.js +0 -75
  58. package/dist/upgrade/prompt.js.map +0 -1
  59. package/dist/upgrade/prompt.spec.d.ts +0 -2
  60. package/dist/upgrade/prompt.spec.d.ts.map +0 -1
  61. package/dist/upgrade/prompt.spec.js +0 -51
  62. package/dist/upgrade/prompt.spec.js.map +0 -1
  63. package/dist/upgrade/report.d.ts +0 -18
  64. package/dist/upgrade/report.d.ts.map +0 -1
  65. package/dist/upgrade/report.js +0 -41
  66. package/dist/upgrade/report.js.map +0 -1
  67. package/dist/upgrade/report.spec.d.ts +0 -2
  68. package/dist/upgrade/report.spec.d.ts.map +0 -1
  69. package/dist/upgrade/report.spec.js +0 -87
  70. package/dist/upgrade/report.spec.js.map +0 -1
  71. package/dist/upgrade/resolveVersions.d.ts +0 -13
  72. package/dist/upgrade/resolveVersions.d.ts.map +0 -1
  73. package/dist/upgrade/resolveVersions.js +0 -55
  74. package/dist/upgrade/resolveVersions.js.map +0 -1
  75. package/dist/upgrade/resolveVersions.spec.d.ts +0 -2
  76. package/dist/upgrade/resolveVersions.spec.d.ts.map +0 -1
  77. package/dist/upgrade/resolveVersions.spec.js +0 -82
  78. package/dist/upgrade/resolveVersions.spec.js.map +0 -1
  79. package/dist/upgrade/rewritePackageJson.d.ts +0 -25
  80. package/dist/upgrade/rewritePackageJson.d.ts.map +0 -1
  81. package/dist/upgrade/rewritePackageJson.js +0 -106
  82. package/dist/upgrade/rewritePackageJson.js.map +0 -1
  83. package/dist/upgrade/rewritePackageJson.spec.d.ts +0 -2
  84. package/dist/upgrade/rewritePackageJson.spec.d.ts.map +0 -1
  85. package/dist/upgrade/rewritePackageJson.spec.js +0 -108
  86. package/dist/upgrade/rewritePackageJson.spec.js.map +0 -1
  87. package/dist/upgrade/runInstall.d.ts +0 -16
  88. package/dist/upgrade/runInstall.d.ts.map +0 -1
  89. package/dist/upgrade/runInstall.js +0 -17
  90. package/dist/upgrade/runInstall.js.map +0 -1
  91. package/dist/upgrade/runInstall.spec.d.ts +0 -2
  92. package/dist/upgrade/runInstall.spec.d.ts.map +0 -1
  93. package/dist/upgrade/runInstall.spec.js +0 -48
  94. package/dist/upgrade/runInstall.spec.js.map +0 -1
  95. package/dist/upgrade/types.d.ts +0 -42
  96. package/dist/upgrade/types.d.ts.map +0 -1
  97. package/dist/upgrade/types.js +0 -7
  98. package/dist/upgrade/types.js.map +0 -1
  99. package/dist/utils/project.d.ts +0 -4
  100. package/dist/utils/project.d.ts.map +0 -1
  101. package/dist/utils/project.js +0 -30
  102. package/dist/utils/project.js.map +0 -1
  103. /package/dist/{upgrade → transforms/rename-experimental-table-feature}/index.spec.d.ts +0 -0
package/README.md CHANGED
@@ -19,40 +19,6 @@ With no arguments, runs every registered transform against the current directory
19
19
  - `--dry` — analyze only; write nothing.
20
20
  - `--print` — print transformed sources to stdout instead of writing.
21
21
 
22
- ## `upgrade` command
23
-
24
- `npx @payloadcms/codemod upgrade [path]` performs the mechanical v3 -> v4 slice:
25
-
26
- 1. Resolves the current Payload canary from the npm registry (override with `--tag <dist-tag>`).
27
- 2. Rewrites `package.json`: pins `payload` + every `@payloadcms/*` to that exact version in
28
- lockstep, removes dependency overrides pinning them, converts their carets to exact, and writes
29
- the TypeScript / `@types/node` / `engines.node` floors. The `@payloadcms/eslint-*` packages are
30
- versioned independently, so they are set to `latest` rather than lockstep-pinned.
31
- 3. Installs with your detected package manager.
32
- 4. Runs every registered transform against the now-v4 tree.
33
- 5. Prints a report and points you at the bundled runbook for the rest.
34
-
35
- It does NOT upgrade Next.js. Payload v4 requires Next 16; run Next's own recommended agent
36
- workflow (linked from the bundled runbook) to bump Next and migrate the code together. The report
37
- prints the required Next target.
38
-
39
- ### `upgrade` flags
40
-
41
- - `--tag <dist-tag>` — dist-tag to resolve Payload versions from (default `canary`).
42
- - `--dry` — preview the `package.json` changes and planned steps; write and install nothing.
43
- - `--force` — skip the dirty-git-tree warning.
44
-
45
- ### `upgrade prompt`
46
-
47
- `npx @payloadcms/codemod upgrade prompt` prints an orchestration prompt for a coding agent to run
48
- the full v3 -> v4 upgrade, Next.js 16 included. It is offline and stateless: it writes nothing and
49
- makes no network calls. The text is project-agnostic, so pipe it to your agent and run it from the
50
- project root.
51
-
52
- The prompt sequences the upgrade (mechanical slice via this command, then Next.js via Next's own
53
- codemods and agent workflow, then regeneration, judgment work, and verification) and points at the
54
- bundled runbook and migration guide for detail rather than restating them.
55
-
56
22
  ## How it works
57
23
 
58
24
  The tool loads your project via [ts-morph](https://ts-morph.com/), using your `tsconfig.json` when present, otherwise globbing `**/*.{ts,tsx,js,jsx}` (excluding `node_modules`, `dist`, `.next`, `build`). Each registered transform is applied in order against the shared project; changes are saved at the end unless `--dry` or `--print` is passed.
@@ -82,6 +48,7 @@ The tool loads your project via [ts-morph](https://ts-morph.com/), using your `t
82
48
  - `rename-typescript-schema-to-json-schema` — renames the `typescriptSchema` field-config property to `jsonSchema` (it always accepted JSON Schema, not TypeScript). Skips any object that already defines a `jsonSchema` sibling and surfaces it as a note for manual review.
83
49
  - `migrate-build-script` — rewrites the `build` npm script in `package.json` from `next build` to `payload build`, so the Import Map (and types) are generated before the Next.js build. Matches the `next build` invocation only (leaves `next build-storybook` and the like untouched) and is a no-op when `build` is already `payload build`.
84
50
  - `migrate-slug-field` — converts the removed experimental `slugField()` helper (imported from `payload`) into the native `{ type: 'slug' }` field, mapping `useAsSlug`/`fieldToUse`, `slugify`, `required`, `localized`, `disableUnique` (→ `unique: false`), and `position` (→ `admin.position`), and dropping the obsolete `checkboxName`. Removes the now-unused `slugField` import. Calls using `overrides` (or other unrecognized options) are left in place with a note for manual migration.
51
+ - `rename-experimental-table-feature` — renames imports of `EXPERIMENTAL_TableFeature` from `@payloadcms/richtext-lexical` to `TableFeature` (the table feature is now stable) and updates all local usages, e.g. `EXPERIMENTAL_TableFeature()` call sites.
85
52
 
86
53
  ## Contributing
87
54
 
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAiBA,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CA6EhF"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAaA,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CA6DhF"}
package/dist/cli.js CHANGED
@@ -1,32 +1,12 @@
1
- /* eslint-disable no-console */ import { writeFileSync } from 'node:fs';
1
+ /* eslint-disable no-console */ import { existsSync, writeFileSync } from 'node:fs';
2
2
  import { resolve } from 'node:path';
3
+ import { IndentationText, Project, QuoteKind } from 'ts-morph';
3
4
  import { parseFlags } from './cli.parseFlags.js';
4
5
  import { transforms as registry } from './registry.js';
5
6
  import { runTransforms } from './runner.js';
6
- import { runUpgrade } from './upgrade/index.js';
7
- import { renderUpgradePrompt } from './upgrade/prompt.js';
8
7
  import { loadPackageJsons, serializePackageJson } from './utils/packageJson.js';
9
- import { loadProject } from './utils/project.js';
10
8
  export async function main(argv = process.argv.slice(2)) {
11
9
  const flags = parseFlags(argv);
12
- if (flags.command === 'upgrade' && flags.emitPrompt) {
13
- console.log(renderUpgradePrompt());
14
- return;
15
- }
16
- if (flags.command === 'upgrade') {
17
- const { failed } = await runUpgrade({
18
- flags: {
19
- dry: flags.dry,
20
- force: flags.force,
21
- tag: flags.tag ?? 'canary'
22
- },
23
- path: flags.path
24
- });
25
- if (failed) {
26
- process.exitCode = 1;
27
- }
28
- return;
29
- }
30
10
  if (flags.list) {
31
11
  printList();
32
12
  return;
@@ -91,6 +71,31 @@ function printList() {
91
71
  console.log(`${t.name} ${t.description}`);
92
72
  }
93
73
  }
74
+ function loadProject(path) {
75
+ const manipulationSettings = {
76
+ indentationText: IndentationText.TwoSpaces,
77
+ quoteKind: QuoteKind.Single,
78
+ useTrailingCommas: true
79
+ };
80
+ const tsconfigPath = resolve(path, 'tsconfig.json');
81
+ if (existsSync(tsconfigPath)) {
82
+ return new Project({
83
+ manipulationSettings,
84
+ tsConfigFilePath: tsconfigPath
85
+ });
86
+ }
87
+ const project = new Project({
88
+ manipulationSettings
89
+ });
90
+ project.addSourceFilesAtPaths([
91
+ `${path}/**/*.{ts,tsx,js,jsx}`,
92
+ '!**/node_modules/**',
93
+ '!**/dist/**',
94
+ '!**/.next/**',
95
+ '!**/build/**'
96
+ ]);
97
+ return project;
98
+ }
94
99
  function snapshotProject(project) {
95
100
  return new Map(project.getSourceFiles().map((file)=>[
96
101
  file.getFilePath(),
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli.ts"],"sourcesContent":["import type { Project } from 'ts-morph'\n\n/* eslint-disable no-console */\nimport { writeFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\n\nimport type { TransformRunResult } from './runner.js'\nimport type { Transform } from './types.js'\n\nimport { parseFlags } from './cli.parseFlags.js'\nimport { transforms as registry } from './registry.js'\nimport { runTransforms } from './runner.js'\nimport { runUpgrade } from './upgrade/index.js'\nimport { renderUpgradePrompt } from './upgrade/prompt.js'\nimport { loadPackageJsons, serializePackageJson } from './utils/packageJson.js'\nimport { loadProject } from './utils/project.js'\n\nexport async function main(argv: string[] = process.argv.slice(2)): Promise<void> {\n const flags = parseFlags(argv)\n\n if (flags.command === 'upgrade' && flags.emitPrompt) {\n console.log(renderUpgradePrompt())\n return\n }\n\n if (flags.command === 'upgrade') {\n const { failed } = await runUpgrade({\n flags: { dry: flags.dry, force: flags.force, tag: flags.tag ?? 'canary' },\n path: flags.path,\n })\n if (failed) {\n process.exitCode = 1\n }\n return\n }\n\n if (flags.list) {\n printList()\n return\n }\n\n const selected = selectTransforms(registry, flags.transform)\n if (selected.length === 0) {\n console.error(`No transforms matched${flags.transform ? ` \"${flags.transform}\"` : ''}.`)\n process.exitCode = 1\n return\n }\n\n const project = loadProject(resolve(flags.path))\n const snapshot = snapshotProject(project)\n\n const packageJsons = loadPackageJsons(resolve(flags.path))\n\n const { failed, results } = await runTransforms({\n // Shares the same `data` reference, so transform mutations are visible\n // below for change detection (do not clone here).\n packageJsons: packageJsons.map(({ data, path }) => ({ data, path })),\n project,\n transforms: selected,\n })\n\n const changed = project\n .getSourceFiles()\n .filter((file) => snapshot.get(file.getFilePath()) !== file.getFullText())\n\n const changedPackageJsons = packageJsons.filter(\n (pkg) => serializePackageJson(pkg.data, pkg.originalText) !== pkg.originalText,\n )\n\n if (flags.print) {\n if (changed.length === 0 && changedPackageJsons.length === 0) {\n console.log('(no files changed)')\n } else {\n for (const file of changed) {\n console.log(`// ${file.getFilePath()}`)\n console.log(file.getFullText())\n }\n for (const pkg of changedPackageJsons) {\n console.log(`// ${pkg.path}`)\n console.log(serializePackageJson(pkg.data, pkg.originalText))\n }\n }\n } else if (!flags.dry) {\n await Promise.all(changed.map((file) => file.save()))\n for (const pkg of changedPackageJsons) {\n writeFileSync(pkg.path, serializePackageJson(pkg.data, pkg.originalText))\n }\n }\n\n printSummary(results)\n\n if (failed) {\n process.exitCode = 1\n }\n}\n\nfunction selectTransforms(available: Transform[], name: string | undefined): Transform[] {\n if (!name) {\n return available\n }\n return available.filter((t) => t.name === name)\n}\n\nfunction printList(): void {\n if (registry.length === 0) {\n console.log('No transforms registered.')\n return\n }\n for (const t of registry) {\n console.log(`${t.name} ${t.description}`)\n }\n}\n\nfunction snapshotProject(project: Project): Map<string, string> {\n return new Map(project.getSourceFiles().map((file) => [file.getFilePath(), file.getFullText()]))\n}\n\nfunction printSummary(results: TransformRunResult[]): void {\n console.log('')\n console.log('Codemod summary:')\n for (const r of results) {\n if (r.error) {\n console.log(` [FAIL] ${r.name} — ${r.error.message}`)\n continue\n }\n console.log(` [ok] ${r.name} — ${r.filesChanged.length} file(s) changed`)\n for (const note of r.notes ?? []) {\n console.log(` note: ${note}`)\n }\n }\n}\n"],"names":["writeFileSync","resolve","parseFlags","transforms","registry","runTransforms","runUpgrade","renderUpgradePrompt","loadPackageJsons","serializePackageJson","loadProject","main","argv","process","slice","flags","command","emitPrompt","console","log","failed","dry","force","tag","path","exitCode","list","printList","selected","selectTransforms","transform","length","error","project","snapshot","snapshotProject","packageJsons","results","map","data","changed","getSourceFiles","filter","file","get","getFilePath","getFullText","changedPackageJsons","pkg","originalText","print","Promise","all","save","printSummary","available","name","t","description","Map","r","message","filesChanged","note","notes"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/cli.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { existsSync, writeFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { IndentationText, Project, QuoteKind } from 'ts-morph'\n\nimport type { TransformRunResult } from './runner.js'\nimport type { Transform } from './types.js'\n\nimport { parseFlags } from './cli.parseFlags.js'\nimport { transforms as registry } from './registry.js'\nimport { runTransforms } from './runner.js'\nimport { loadPackageJsons, serializePackageJson } from './utils/packageJson.js'\n\nexport async function main(argv: string[] = process.argv.slice(2)): Promise<void> {\n const flags = parseFlags(argv)\n\n if (flags.list) {\n printList()\n return\n }\n\n const selected = selectTransforms(registry, flags.transform)\n if (selected.length === 0) {\n console.error(`No transforms matched${flags.transform ? ` \"${flags.transform}\"` : ''}.`)\n process.exitCode = 1\n return\n }\n\n const project = loadProject(resolve(flags.path))\n const snapshot = snapshotProject(project)\n\n const packageJsons = loadPackageJsons(resolve(flags.path))\n\n const { failed, results } = await runTransforms({\n // Shares the same `data` reference, so transform mutations are visible\n // below for change detection (do not clone here).\n packageJsons: packageJsons.map(({ data, path }) => ({ data, path })),\n project,\n transforms: selected,\n })\n\n const changed = project\n .getSourceFiles()\n .filter((file) => snapshot.get(file.getFilePath()) !== file.getFullText())\n\n const changedPackageJsons = packageJsons.filter(\n (pkg) => serializePackageJson(pkg.data, pkg.originalText) !== pkg.originalText,\n )\n\n if (flags.print) {\n if (changed.length === 0 && changedPackageJsons.length === 0) {\n console.log('(no files changed)')\n } else {\n for (const file of changed) {\n console.log(`// ${file.getFilePath()}`)\n console.log(file.getFullText())\n }\n for (const pkg of changedPackageJsons) {\n console.log(`// ${pkg.path}`)\n console.log(serializePackageJson(pkg.data, pkg.originalText))\n }\n }\n } else if (!flags.dry) {\n await Promise.all(changed.map((file) => file.save()))\n for (const pkg of changedPackageJsons) {\n writeFileSync(pkg.path, serializePackageJson(pkg.data, pkg.originalText))\n }\n }\n\n printSummary(results)\n\n if (failed) {\n process.exitCode = 1\n }\n}\n\nfunction selectTransforms(available: Transform[], name: string | undefined): Transform[] {\n if (!name) {\n return available\n }\n return available.filter((t) => t.name === name)\n}\n\nfunction printList(): void {\n if (registry.length === 0) {\n console.log('No transforms registered.')\n return\n }\n for (const t of registry) {\n console.log(`${t.name} ${t.description}`)\n }\n}\n\nfunction loadProject(path: string): Project {\n const manipulationSettings = {\n indentationText: IndentationText.TwoSpaces,\n quoteKind: QuoteKind.Single,\n useTrailingCommas: true,\n }\n const tsconfigPath = resolve(path, 'tsconfig.json')\n if (existsSync(tsconfigPath)) {\n return new Project({ manipulationSettings, tsConfigFilePath: tsconfigPath })\n }\n const project = new Project({ manipulationSettings })\n project.addSourceFilesAtPaths([\n `${path}/**/*.{ts,tsx,js,jsx}`,\n '!**/node_modules/**',\n '!**/dist/**',\n '!**/.next/**',\n '!**/build/**',\n ])\n return project\n}\n\nfunction snapshotProject(project: Project): Map<string, string> {\n return new Map(project.getSourceFiles().map((file) => [file.getFilePath(), file.getFullText()]))\n}\n\nfunction printSummary(results: TransformRunResult[]): void {\n console.log('')\n console.log('Codemod summary:')\n for (const r of results) {\n if (r.error) {\n console.log(` [FAIL] ${r.name} — ${r.error.message}`)\n continue\n }\n console.log(` [ok] ${r.name} — ${r.filesChanged.length} file(s) changed`)\n for (const note of r.notes ?? []) {\n console.log(` note: ${note}`)\n }\n }\n}\n"],"names":["existsSync","writeFileSync","resolve","IndentationText","Project","QuoteKind","parseFlags","transforms","registry","runTransforms","loadPackageJsons","serializePackageJson","main","argv","process","slice","flags","list","printList","selected","selectTransforms","transform","length","console","error","exitCode","project","loadProject","path","snapshot","snapshotProject","packageJsons","failed","results","map","data","changed","getSourceFiles","filter","file","get","getFilePath","getFullText","changedPackageJsons","pkg","originalText","print","log","dry","Promise","all","save","printSummary","available","name","t","description","manipulationSettings","indentationText","TwoSpaces","quoteKind","Single","useTrailingCommas","tsconfigPath","tsConfigFilePath","addSourceFilesAtPaths","Map","r","message","filesChanged","note","notes"],"mappings":"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"}
@@ -1,13 +1,8 @@
1
- export type CliCommand = 'upgrade';
2
1
  export type CliFlags = {
3
- command?: CliCommand;
4
2
  dry: boolean;
5
- emitPrompt: boolean;
6
- force: boolean;
7
3
  list: boolean;
8
4
  path: string;
9
5
  print: boolean;
10
- tag?: string;
11
6
  transform?: string;
12
7
  };
13
8
  export declare function parseFlags(argv: string[]): CliFlags;
@@ -1 +1 @@
1
- {"version":3,"file":"cli.parseFlags.d.ts","sourceRoot":"","sources":["../src/cli.parseFlags.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAAG,SAAS,CAAA;AAElC,MAAM,MAAM,QAAQ,GAAG;IACrB,OAAO,CAAC,EAAE,UAAU,CAAA;IACpB,GAAG,EAAE,OAAO,CAAA;IACZ,UAAU,EAAE,OAAO,CAAA;IACnB,KAAK,EAAE,OAAO,CAAA;IACd,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,OAAO,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,CAmCnD"}
1
+ {"version":3,"file":"cli.parseFlags.d.ts","sourceRoot":"","sources":["../src/cli.parseFlags.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,EAAE,OAAO,CAAA;IACZ,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,OAAO,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,CAoBnD"}
@@ -12,10 +12,6 @@ export function parseFlags(argv) {
12
12
  type: 'boolean',
13
13
  default: false
14
14
  },
15
- force: {
16
- type: 'boolean',
17
- default: false
18
- },
19
15
  list: {
20
16
  type: 'boolean',
21
17
  default: false
@@ -24,31 +20,16 @@ export function parseFlags(argv) {
24
20
  type: 'boolean',
25
21
  default: false
26
22
  },
27
- tag: {
28
- type: 'string'
29
- },
30
23
  transform: {
31
24
  type: 'string'
32
25
  }
33
26
  }
34
27
  });
35
- const isUpgrade = positionals[0] === 'upgrade';
36
- const command = isUpgrade ? 'upgrade' : undefined;
37
- // `upgrade prompt [path]` emits the orchestration prompt; `prompt` consumes
38
- // positional 1, shifting the path to positional 2.
39
- const emitPrompt = isUpgrade && positionals[1] === 'prompt';
40
- const upgradePath = emitPrompt ? positionals[2] : positionals[1];
41
- // When `upgrade` is present it consumes positional 0; the path shifts to positional 1.
42
- const path = (isUpgrade ? upgradePath : positionals[0]) ?? process.cwd();
43
28
  return {
44
- command,
45
29
  dry: Boolean(values.dry) || Boolean(values['dry-run']),
46
- emitPrompt,
47
- force: Boolean(values.force),
48
30
  list: Boolean(values.list),
49
- path,
31
+ path: positionals[0] ?? process.cwd(),
50
32
  print: Boolean(values.print),
51
- tag: values.tag,
52
33
  transform: values.transform
53
34
  };
54
35
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli.parseFlags.ts"],"sourcesContent":["import { parseArgs } from 'node:util'\n\nexport type CliCommand = 'upgrade'\n\nexport type CliFlags = {\n command?: CliCommand\n dry: boolean\n emitPrompt: boolean\n force: boolean\n list: boolean\n path: string\n print: boolean\n tag?: string\n transform?: string\n}\n\nexport function parseFlags(argv: string[]): CliFlags {\n const { positionals, values } = parseArgs({\n allowPositionals: true,\n args: argv,\n options: {\n dry: { type: 'boolean', default: false },\n 'dry-run': { type: 'boolean', default: false },\n force: { type: 'boolean', default: false },\n list: { type: 'boolean', default: false },\n print: { type: 'boolean', default: false },\n tag: { type: 'string' },\n transform: { type: 'string' },\n },\n })\n\n const isUpgrade = positionals[0] === 'upgrade'\n const command = isUpgrade ? 'upgrade' : undefined\n // `upgrade prompt [path]` emits the orchestration prompt; `prompt` consumes\n // positional 1, shifting the path to positional 2.\n const emitPrompt = isUpgrade && positionals[1] === 'prompt'\n const upgradePath = emitPrompt ? positionals[2] : positionals[1]\n // When `upgrade` is present it consumes positional 0; the path shifts to positional 1.\n const path = (isUpgrade ? upgradePath : positionals[0]) ?? process.cwd()\n\n return {\n command,\n dry: Boolean(values.dry) || Boolean(values['dry-run']),\n emitPrompt,\n force: Boolean(values.force),\n list: Boolean(values.list),\n path,\n print: Boolean(values.print),\n tag: values.tag,\n transform: values.transform,\n }\n}\n"],"names":["parseArgs","parseFlags","argv","positionals","values","allowPositionals","args","options","dry","type","default","force","list","print","tag","transform","isUpgrade","command","undefined","emitPrompt","upgradePath","path","process","cwd","Boolean"],"mappings":"AAAA,SAASA,SAAS,QAAQ,YAAW;AAgBrC,OAAO,SAASC,WAAWC,IAAc;IACvC,MAAM,EAAEC,WAAW,EAAEC,MAAM,EAAE,GAAGJ,UAAU;QACxCK,kBAAkB;QAClBC,MAAMJ;QACNK,SAAS;YACPC,KAAK;gBAAEC,MAAM;gBAAWC,SAAS;YAAM;YACvC,WAAW;gBAAED,MAAM;gBAAWC,SAAS;YAAM;YAC7CC,OAAO;gBAAEF,MAAM;gBAAWC,SAAS;YAAM;YACzCE,MAAM;gBAAEH,MAAM;gBAAWC,SAAS;YAAM;YACxCG,OAAO;gBAAEJ,MAAM;gBAAWC,SAAS;YAAM;YACzCI,KAAK;gBAAEL,MAAM;YAAS;YACtBM,WAAW;gBAAEN,MAAM;YAAS;QAC9B;IACF;IAEA,MAAMO,YAAYb,WAAW,CAAC,EAAE,KAAK;IACrC,MAAMc,UAAUD,YAAY,YAAYE;IACxC,4EAA4E;IAC5E,mDAAmD;IACnD,MAAMC,aAAaH,aAAab,WAAW,CAAC,EAAE,KAAK;IACnD,MAAMiB,cAAcD,aAAahB,WAAW,CAAC,EAAE,GAAGA,WAAW,CAAC,EAAE;IAChE,uFAAuF;IACvF,MAAMkB,OAAO,AAACL,CAAAA,YAAYI,cAAcjB,WAAW,CAAC,EAAE,AAAD,KAAMmB,QAAQC,GAAG;IAEtE,OAAO;QACLN;QACAT,KAAKgB,QAAQpB,OAAOI,GAAG,KAAKgB,QAAQpB,MAAM,CAAC,UAAU;QACrDe;QACAR,OAAOa,QAAQpB,OAAOO,KAAK;QAC3BC,MAAMY,QAAQpB,OAAOQ,IAAI;QACzBS;QACAR,OAAOW,QAAQpB,OAAOS,KAAK;QAC3BC,KAAKV,OAAOU,GAAG;QACfC,WAAWX,OAAOW,SAAS;IAC7B;AACF"}
1
+ {"version":3,"sources":["../src/cli.parseFlags.ts"],"sourcesContent":["import { parseArgs } from 'node:util'\n\nexport type CliFlags = {\n dry: boolean\n list: boolean\n path: string\n print: boolean\n transform?: string\n}\n\nexport function parseFlags(argv: string[]): CliFlags {\n const { positionals, values } = parseArgs({\n allowPositionals: true,\n args: argv,\n options: {\n dry: { type: 'boolean', default: false },\n 'dry-run': { type: 'boolean', default: false },\n list: { type: 'boolean', default: false },\n print: { type: 'boolean', default: false },\n transform: { type: 'string' },\n },\n })\n\n return {\n dry: Boolean(values.dry) || Boolean(values['dry-run']),\n list: Boolean(values.list),\n path: positionals[0] ?? process.cwd(),\n print: Boolean(values.print),\n transform: values.transform,\n }\n}\n"],"names":["parseArgs","parseFlags","argv","positionals","values","allowPositionals","args","options","dry","type","default","list","print","transform","Boolean","path","process","cwd"],"mappings":"AAAA,SAASA,SAAS,QAAQ,YAAW;AAUrC,OAAO,SAASC,WAAWC,IAAc;IACvC,MAAM,EAAEC,WAAW,EAAEC,MAAM,EAAE,GAAGJ,UAAU;QACxCK,kBAAkB;QAClBC,MAAMJ;QACNK,SAAS;YACPC,KAAK;gBAAEC,MAAM;gBAAWC,SAAS;YAAM;YACvC,WAAW;gBAAED,MAAM;gBAAWC,SAAS;YAAM;YAC7CC,MAAM;gBAAEF,MAAM;gBAAWC,SAAS;YAAM;YACxCE,OAAO;gBAAEH,MAAM;gBAAWC,SAAS;YAAM;YACzCG,WAAW;gBAAEJ,MAAM;YAAS;QAC9B;IACF;IAEA,OAAO;QACLD,KAAKM,QAAQV,OAAOI,GAAG,KAAKM,QAAQV,MAAM,CAAC,UAAU;QACrDO,MAAMG,QAAQV,OAAOO,IAAI;QACzBI,MAAMZ,WAAW,CAAC,EAAE,IAAIa,QAAQC,GAAG;QACnCL,OAAOE,QAAQV,OAAOQ,KAAK;QAC3BC,WAAWT,OAAOS,SAAS;IAC7B;AACF"}
@@ -3,14 +3,10 @@ import { parseFlags } from './cli.parseFlags.js';
3
3
  describe('parseFlags', ()=>{
4
4
  it('defaults path to cwd when no positional arg is given', ()=>{
5
5
  expect(parseFlags([])).toEqual({
6
- command: undefined,
7
6
  dry: false,
8
- emitPrompt: false,
9
- force: false,
10
7
  list: false,
11
8
  path: process.cwd(),
12
9
  print: false,
13
- tag: undefined,
14
10
  transform: undefined
15
11
  });
16
12
  });
@@ -48,74 +44,6 @@ describe('parseFlags', ()=>{
48
44
  '--dry-run'
49
45
  ]).dry).toBe(true);
50
46
  });
51
- it('parses the upgrade subcommand with default path', ()=>{
52
- expect(parseFlags([
53
- 'upgrade'
54
- ])).toMatchObject({
55
- command: 'upgrade',
56
- path: process.cwd()
57
- });
58
- });
59
- it('parses upgrade with path, tag, force, and dry', ()=>{
60
- expect(parseFlags([
61
- 'upgrade',
62
- './app',
63
- '--tag',
64
- 'latest',
65
- '--force',
66
- '--dry'
67
- ])).toMatchObject({
68
- command: 'upgrade',
69
- dry: true,
70
- force: true,
71
- path: './app',
72
- tag: 'latest'
73
- });
74
- });
75
- it('parses `upgrade prompt` with default path', ()=>{
76
- expect(parseFlags([
77
- 'upgrade',
78
- 'prompt'
79
- ])).toMatchObject({
80
- command: 'upgrade',
81
- emitPrompt: true,
82
- path: process.cwd()
83
- });
84
- });
85
- it('parses `upgrade prompt <path>` with tag', ()=>{
86
- expect(parseFlags([
87
- 'upgrade',
88
- 'prompt',
89
- './app',
90
- '--tag',
91
- 'latest'
92
- ])).toMatchObject({
93
- command: 'upgrade',
94
- emitPrompt: true,
95
- path: './app',
96
- tag: 'latest'
97
- });
98
- });
99
- it('leaves emitPrompt false for a plain upgrade run', ()=>{
100
- expect(parseFlags([
101
- 'upgrade',
102
- './app'
103
- ])).toMatchObject({
104
- command: 'upgrade',
105
- emitPrompt: false,
106
- path: './app'
107
- });
108
- });
109
- it('leaves command undefined for a bare path invocation', ()=>{
110
- expect(parseFlags([
111
- './src',
112
- '--dry'
113
- ])).toMatchObject({
114
- command: undefined,
115
- dry: true,
116
- path: './src'
117
- });
118
- });
119
47
  });
120
48
 
121
49
  //# sourceMappingURL=cli.parseFlags.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli.parseFlags.spec.ts"],"sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { parseFlags } from './cli.parseFlags.js'\n\ndescribe('parseFlags', () => {\n it('defaults path to cwd when no positional arg is given', () => {\n expect(parseFlags([])).toEqual({\n command: undefined,\n dry: false,\n emitPrompt: false,\n force: false,\n list: false,\n path: process.cwd(),\n print: false,\n tag: undefined,\n transform: undefined,\n })\n })\n\n it('reads positional path', () => {\n expect(parseFlags(['./src']).path).toBe('./src')\n })\n\n it('parses flags', () => {\n expect(parseFlags(['./src', '--dry', '--print'])).toMatchObject({\n dry: true,\n path: './src',\n print: true,\n })\n })\n\n it('parses --transform', () => {\n expect(parseFlags(['--transform', 'rename-slate-export'])).toMatchObject({\n transform: 'rename-slate-export',\n })\n })\n\n it('parses --list', () => {\n expect(parseFlags(['--list']).list).toBe(true)\n })\n\n it('treats --dry-run as an alias for --dry', () => {\n expect(parseFlags(['--dry-run']).dry).toBe(true)\n })\n\n it('parses the upgrade subcommand with default path', () => {\n expect(parseFlags(['upgrade'])).toMatchObject({\n command: 'upgrade',\n path: process.cwd(),\n })\n })\n\n it('parses upgrade with path, tag, force, and dry', () => {\n expect(parseFlags(['upgrade', './app', '--tag', 'latest', '--force', '--dry'])).toMatchObject({\n command: 'upgrade',\n dry: true,\n force: true,\n path: './app',\n tag: 'latest',\n })\n })\n\n it('parses `upgrade prompt` with default path', () => {\n expect(parseFlags(['upgrade', 'prompt'])).toMatchObject({\n command: 'upgrade',\n emitPrompt: true,\n path: process.cwd(),\n })\n })\n\n it('parses `upgrade prompt <path>` with tag', () => {\n expect(parseFlags(['upgrade', 'prompt', './app', '--tag', 'latest'])).toMatchObject({\n command: 'upgrade',\n emitPrompt: true,\n path: './app',\n tag: 'latest',\n })\n })\n\n it('leaves emitPrompt false for a plain upgrade run', () => {\n expect(parseFlags(['upgrade', './app'])).toMatchObject({\n command: 'upgrade',\n emitPrompt: false,\n path: './app',\n })\n })\n\n it('leaves command undefined for a bare path invocation', () => {\n expect(parseFlags(['./src', '--dry'])).toMatchObject({\n command: undefined,\n dry: true,\n path: './src',\n })\n })\n})\n"],"names":["describe","expect","it","parseFlags","toEqual","command","undefined","dry","emitPrompt","force","list","path","process","cwd","print","tag","transform","toBe","toMatchObject"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,SAAQ;AAE7C,SAASC,UAAU,QAAQ,sBAAqB;AAEhDH,SAAS,cAAc;IACrBE,GAAG,wDAAwD;QACzDD,OAAOE,WAAW,EAAE,GAAGC,OAAO,CAAC;YAC7BC,SAASC;YACTC,KAAK;YACLC,YAAY;YACZC,OAAO;YACPC,MAAM;YACNC,MAAMC,QAAQC,GAAG;YACjBC,OAAO;YACPC,KAAKT;YACLU,WAAWV;QACb;IACF;IAEAJ,GAAG,yBAAyB;QAC1BD,OAAOE,WAAW;YAAC;SAAQ,EAAEQ,IAAI,EAAEM,IAAI,CAAC;IAC1C;IAEAf,GAAG,gBAAgB;QACjBD,OAAOE,WAAW;YAAC;YAAS;YAAS;SAAU,GAAGe,aAAa,CAAC;YAC9DX,KAAK;YACLI,MAAM;YACNG,OAAO;QACT;IACF;IAEAZ,GAAG,sBAAsB;QACvBD,OAAOE,WAAW;YAAC;YAAe;SAAsB,GAAGe,aAAa,CAAC;YACvEF,WAAW;QACb;IACF;IAEAd,GAAG,iBAAiB;QAClBD,OAAOE,WAAW;YAAC;SAAS,EAAEO,IAAI,EAAEO,IAAI,CAAC;IAC3C;IAEAf,GAAG,0CAA0C;QAC3CD,OAAOE,WAAW;YAAC;SAAY,EAAEI,GAAG,EAAEU,IAAI,CAAC;IAC7C;IAEAf,GAAG,mDAAmD;QACpDD,OAAOE,WAAW;YAAC;SAAU,GAAGe,aAAa,CAAC;YAC5Cb,SAAS;YACTM,MAAMC,QAAQC,GAAG;QACnB;IACF;IAEAX,GAAG,iDAAiD;QAClDD,OAAOE,WAAW;YAAC;YAAW;YAAS;YAAS;YAAU;YAAW;SAAQ,GAAGe,aAAa,CAAC;YAC5Fb,SAAS;YACTE,KAAK;YACLE,OAAO;YACPE,MAAM;YACNI,KAAK;QACP;IACF;IAEAb,GAAG,6CAA6C;QAC9CD,OAAOE,WAAW;YAAC;YAAW;SAAS,GAAGe,aAAa,CAAC;YACtDb,SAAS;YACTG,YAAY;YACZG,MAAMC,QAAQC,GAAG;QACnB;IACF;IAEAX,GAAG,2CAA2C;QAC5CD,OAAOE,WAAW;YAAC;YAAW;YAAU;YAAS;YAAS;SAAS,GAAGe,aAAa,CAAC;YAClFb,SAAS;YACTG,YAAY;YACZG,MAAM;YACNI,KAAK;QACP;IACF;IAEAb,GAAG,mDAAmD;QACpDD,OAAOE,WAAW;YAAC;YAAW;SAAQ,GAAGe,aAAa,CAAC;YACrDb,SAAS;YACTG,YAAY;YACZG,MAAM;QACR;IACF;IAEAT,GAAG,uDAAuD;QACxDD,OAAOE,WAAW;YAAC;YAAS;SAAQ,GAAGe,aAAa,CAAC;YACnDb,SAASC;YACTC,KAAK;YACLI,MAAM;QACR;IACF;AACF"}
1
+ {"version":3,"sources":["../src/cli.parseFlags.spec.ts"],"sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { parseFlags } from './cli.parseFlags.js'\n\ndescribe('parseFlags', () => {\n it('defaults path to cwd when no positional arg is given', () => {\n expect(parseFlags([])).toEqual({\n dry: false,\n list: false,\n path: process.cwd(),\n print: false,\n transform: undefined,\n })\n })\n\n it('reads positional path', () => {\n expect(parseFlags(['./src']).path).toBe('./src')\n })\n\n it('parses flags', () => {\n expect(parseFlags(['./src', '--dry', '--print'])).toMatchObject({\n dry: true,\n path: './src',\n print: true,\n })\n })\n\n it('parses --transform', () => {\n expect(parseFlags(['--transform', 'rename-slate-export'])).toMatchObject({\n transform: 'rename-slate-export',\n })\n })\n\n it('parses --list', () => {\n expect(parseFlags(['--list']).list).toBe(true)\n })\n\n it('treats --dry-run as an alias for --dry', () => {\n expect(parseFlags(['--dry-run']).dry).toBe(true)\n })\n})\n"],"names":["describe","expect","it","parseFlags","toEqual","dry","list","path","process","cwd","print","transform","undefined","toBe","toMatchObject"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,SAAQ;AAE7C,SAASC,UAAU,QAAQ,sBAAqB;AAEhDH,SAAS,cAAc;IACrBE,GAAG,wDAAwD;QACzDD,OAAOE,WAAW,EAAE,GAAGC,OAAO,CAAC;YAC7BC,KAAK;YACLC,MAAM;YACNC,MAAMC,QAAQC,GAAG;YACjBC,OAAO;YACPC,WAAWC;QACb;IACF;IAEAV,GAAG,yBAAyB;QAC1BD,OAAOE,WAAW;YAAC;SAAQ,EAAEI,IAAI,EAAEM,IAAI,CAAC;IAC1C;IAEAX,GAAG,gBAAgB;QACjBD,OAAOE,WAAW;YAAC;YAAS;YAAS;SAAU,GAAGW,aAAa,CAAC;YAC9DT,KAAK;YACLE,MAAM;YACNG,OAAO;QACT;IACF;IAEAR,GAAG,sBAAsB;QACvBD,OAAOE,WAAW;YAAC;YAAe;SAAsB,GAAGW,aAAa,CAAC;YACvEH,WAAW;QACb;IACF;IAEAT,GAAG,iBAAiB;QAClBD,OAAOE,WAAW;YAAC;SAAS,EAAEG,IAAI,EAAEO,IAAI,CAAC;IAC3C;IAEAX,GAAG,0CAA0C;QAC3CD,OAAOE,WAAW;YAAC;SAAY,EAAEE,GAAG,EAAEQ,IAAI,CAAC;IAC7C;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AA4B3C,eAAO,MAAM,UAAU,EAAE,SAAS,EA0BjC,CAAA"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AA6B3C,eAAO,MAAM,UAAU,EAAE,SAAS,EA2BjC,CAAA"}
package/dist/registry.js CHANGED
@@ -21,6 +21,7 @@ import { removeGroupByTrue } from './transforms/remove-group-by-true/index.js';
21
21
  import { removeLocalizeStatusConfig } from './transforms/remove-localize-status-config/index.js';
22
22
  import { removePublishSpecificLocale } from './transforms/remove-publish-specific-locale/index.js';
23
23
  import { removeVersionsTrue } from './transforms/remove-versions-true/index.js';
24
+ import { renameExperimentalTableFeature } from './transforms/rename-experimental-table-feature/index.js';
24
25
  import { renameStorageAdaptersToStorage } from './transforms/rename-storage-adapters-to-storage/index.js';
25
26
  import { renameTypescriptSchemaToJsonSchema } from './transforms/rename-typescript-schema-to-json-schema/index.js';
26
27
  export const transforms = [
@@ -48,7 +49,8 @@ export const transforms = [
48
49
  removeLocalizeStatusConfig,
49
50
  removeVersionsTrue,
50
51
  removePublishSpecificLocale,
51
- renameTypescriptSchemaToJsonSchema
52
+ renameTypescriptSchemaToJsonSchema,
53
+ renameExperimentalTableFeature
52
54
  ];
53
55
 
54
56
  //# sourceMappingURL=registry.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/registry.ts"],"sourcesContent":["import type { Transform } from './types.js'\n\nimport { exampleNoop } from './transforms/example-noop/index.js'\nimport { globalsComponentsEdit } from './transforms/globals-components-edit/index.js'\nimport { migrateAfterOperationRead } from './transforms/migrate-after-operation-read/index.js'\nimport { migrateAliasedExports } from './transforms/migrate-aliased-exports/index.js'\nimport { migrateAzureChunkLargeFiles } from './transforms/migrate-azure-chunk-large-files/index.js'\nimport { migrateBlockReferencesToBlocks } from './transforms/migrate-block-references-to-blocks/index.js'\nimport { migrateBuildScript } from './transforms/migrate-build-script/index.js'\nimport { migrateDbTypesSubpath } from './transforms/migrate-db-types-subpath/index.js'\nimport { migrateDisabledFields } from './transforms/migrate-disabled-fields/index.js'\nimport { migrateDocumentTitleContext } from './transforms/migrate-document-title-context/index.js'\nimport { migrateForceSelect } from './transforms/migrate-force-select/index.js'\nimport { migrateHideAPIURL } from './transforms/migrate-hide-api-url/index.js'\nimport { migrateImportExportHooks } from './transforms/migrate-import-export-hooks/index.js'\nimport { migrateListViewSelectAPI } from './transforms/migrate-list-view-select-api/index.js'\nimport { migrateNextGenerateViewportExport } from './transforms/migrate-next-generate-viewport-export/index.js'\nimport { migrateNextSubpathExports } from './transforms/migrate-next-subpath-exports/index.js'\nimport { migrateSlugField } from './transforms/migrate-slug-field/index.js'\nimport { migrateStorageAdaptersToConfig } from './transforms/migrate-storage-adapters-to-config/index.js'\nimport { migrateVersionsDefault } from './transforms/migrate-versions-default/index.js'\nimport { removeGroupByTrue } from './transforms/remove-group-by-true/index.js'\nimport { removeLocalizeStatusConfig } from './transforms/remove-localize-status-config/index.js'\nimport { removePublishSpecificLocale } from './transforms/remove-publish-specific-locale/index.js'\nimport { removeVersionsTrue } from './transforms/remove-versions-true/index.js'\nimport { renameStorageAdaptersToStorage } from './transforms/rename-storage-adapters-to-storage/index.js'\nimport { renameTypescriptSchemaToJsonSchema } from './transforms/rename-typescript-schema-to-json-schema/index.js'\n\nexport const transforms: Transform[] = [\n exampleNoop,\n migrateAfterOperationRead,\n migrateHideAPIURL,\n globalsComponentsEdit,\n migrateListViewSelectAPI,\n migrateDisabledFields,\n migrateForceSelect,\n migrateAliasedExports,\n migrateBlockReferencesToBlocks,\n migrateBuildScript,\n migrateDocumentTitleContext,\n migrateStorageAdaptersToConfig,\n migrateAzureChunkLargeFiles,\n renameStorageAdaptersToStorage,\n migrateImportExportHooks,\n migrateDbTypesSubpath,\n migrateNextGenerateViewportExport,\n migrateNextSubpathExports,\n migrateSlugField,\n migrateVersionsDefault,\n removeGroupByTrue,\n removeLocalizeStatusConfig,\n removeVersionsTrue,\n removePublishSpecificLocale,\n renameTypescriptSchemaToJsonSchema,\n]\n"],"names":["exampleNoop","globalsComponentsEdit","migrateAfterOperationRead","migrateAliasedExports","migrateAzureChunkLargeFiles","migrateBlockReferencesToBlocks","migrateBuildScript","migrateDbTypesSubpath","migrateDisabledFields","migrateDocumentTitleContext","migrateForceSelect","migrateHideAPIURL","migrateImportExportHooks","migrateListViewSelectAPI","migrateNextGenerateViewportExport","migrateNextSubpathExports","migrateSlugField","migrateStorageAdaptersToConfig","migrateVersionsDefault","removeGroupByTrue","removeLocalizeStatusConfig","removePublishSpecificLocale","removeVersionsTrue","renameStorageAdaptersToStorage","renameTypescriptSchemaToJsonSchema","transforms"],"mappings":"AAEA,SAASA,WAAW,QAAQ,qCAAoC;AAChE,SAASC,qBAAqB,QAAQ,gDAA+C;AACrF,SAASC,yBAAyB,QAAQ,qDAAoD;AAC9F,SAASC,qBAAqB,QAAQ,gDAA+C;AACrF,SAASC,2BAA2B,QAAQ,wDAAuD;AACnG,SAASC,8BAA8B,QAAQ,2DAA0D;AACzG,SAASC,kBAAkB,QAAQ,6CAA4C;AAC/E,SAASC,qBAAqB,QAAQ,iDAAgD;AACtF,SAASC,qBAAqB,QAAQ,gDAA+C;AACrF,SAASC,2BAA2B,QAAQ,uDAAsD;AAClG,SAASC,kBAAkB,QAAQ,6CAA4C;AAC/E,SAASC,iBAAiB,QAAQ,6CAA4C;AAC9E,SAASC,wBAAwB,QAAQ,oDAAmD;AAC5F,SAASC,wBAAwB,QAAQ,qDAAoD;AAC7F,SAASC,iCAAiC,QAAQ,8DAA6D;AAC/G,SAASC,yBAAyB,QAAQ,qDAAoD;AAC9F,SAASC,gBAAgB,QAAQ,2CAA0C;AAC3E,SAASC,8BAA8B,QAAQ,2DAA0D;AACzG,SAASC,sBAAsB,QAAQ,iDAAgD;AACvF,SAASC,iBAAiB,QAAQ,6CAA4C;AAC9E,SAASC,0BAA0B,QAAQ,sDAAqD;AAChG,SAASC,2BAA2B,QAAQ,uDAAsD;AAClG,SAASC,kBAAkB,QAAQ,6CAA4C;AAC/E,SAASC,8BAA8B,QAAQ,2DAA0D;AACzG,SAASC,kCAAkC,QAAQ,gEAA+D;AAElH,OAAO,MAAMC,aAA0B;IACrCzB;IACAE;IACAS;IACAV;IACAY;IACAL;IACAE;IACAP;IACAE;IACAC;IACAG;IACAQ;IACAb;IACAmB;IACAX;IACAL;IACAO;IACAC;IACAC;IACAE;IACAC;IACAC;IACAE;IACAD;IACAG;CACD,CAAA"}
1
+ {"version":3,"sources":["../src/registry.ts"],"sourcesContent":["import type { Transform } from './types.js'\n\nimport { exampleNoop } from './transforms/example-noop/index.js'\nimport { globalsComponentsEdit } from './transforms/globals-components-edit/index.js'\nimport { migrateAfterOperationRead } from './transforms/migrate-after-operation-read/index.js'\nimport { migrateAliasedExports } from './transforms/migrate-aliased-exports/index.js'\nimport { migrateAzureChunkLargeFiles } from './transforms/migrate-azure-chunk-large-files/index.js'\nimport { migrateBlockReferencesToBlocks } from './transforms/migrate-block-references-to-blocks/index.js'\nimport { migrateBuildScript } from './transforms/migrate-build-script/index.js'\nimport { migrateDbTypesSubpath } from './transforms/migrate-db-types-subpath/index.js'\nimport { migrateDisabledFields } from './transforms/migrate-disabled-fields/index.js'\nimport { migrateDocumentTitleContext } from './transforms/migrate-document-title-context/index.js'\nimport { migrateForceSelect } from './transforms/migrate-force-select/index.js'\nimport { migrateHideAPIURL } from './transforms/migrate-hide-api-url/index.js'\nimport { migrateImportExportHooks } from './transforms/migrate-import-export-hooks/index.js'\nimport { migrateListViewSelectAPI } from './transforms/migrate-list-view-select-api/index.js'\nimport { migrateNextGenerateViewportExport } from './transforms/migrate-next-generate-viewport-export/index.js'\nimport { migrateNextSubpathExports } from './transforms/migrate-next-subpath-exports/index.js'\nimport { migrateSlugField } from './transforms/migrate-slug-field/index.js'\nimport { migrateStorageAdaptersToConfig } from './transforms/migrate-storage-adapters-to-config/index.js'\nimport { migrateVersionsDefault } from './transforms/migrate-versions-default/index.js'\nimport { removeGroupByTrue } from './transforms/remove-group-by-true/index.js'\nimport { removeLocalizeStatusConfig } from './transforms/remove-localize-status-config/index.js'\nimport { removePublishSpecificLocale } from './transforms/remove-publish-specific-locale/index.js'\nimport { removeVersionsTrue } from './transforms/remove-versions-true/index.js'\nimport { renameExperimentalTableFeature } from './transforms/rename-experimental-table-feature/index.js'\nimport { renameStorageAdaptersToStorage } from './transforms/rename-storage-adapters-to-storage/index.js'\nimport { renameTypescriptSchemaToJsonSchema } from './transforms/rename-typescript-schema-to-json-schema/index.js'\n\nexport const transforms: Transform[] = [\n exampleNoop,\n migrateAfterOperationRead,\n migrateHideAPIURL,\n globalsComponentsEdit,\n migrateListViewSelectAPI,\n migrateDisabledFields,\n migrateForceSelect,\n migrateAliasedExports,\n migrateBlockReferencesToBlocks,\n migrateBuildScript,\n migrateDocumentTitleContext,\n migrateStorageAdaptersToConfig,\n migrateAzureChunkLargeFiles,\n renameStorageAdaptersToStorage,\n migrateImportExportHooks,\n migrateDbTypesSubpath,\n migrateNextGenerateViewportExport,\n migrateNextSubpathExports,\n migrateSlugField,\n migrateVersionsDefault,\n removeGroupByTrue,\n removeLocalizeStatusConfig,\n removeVersionsTrue,\n removePublishSpecificLocale,\n renameTypescriptSchemaToJsonSchema,\n renameExperimentalTableFeature,\n]\n"],"names":["exampleNoop","globalsComponentsEdit","migrateAfterOperationRead","migrateAliasedExports","migrateAzureChunkLargeFiles","migrateBlockReferencesToBlocks","migrateBuildScript","migrateDbTypesSubpath","migrateDisabledFields","migrateDocumentTitleContext","migrateForceSelect","migrateHideAPIURL","migrateImportExportHooks","migrateListViewSelectAPI","migrateNextGenerateViewportExport","migrateNextSubpathExports","migrateSlugField","migrateStorageAdaptersToConfig","migrateVersionsDefault","removeGroupByTrue","removeLocalizeStatusConfig","removePublishSpecificLocale","removeVersionsTrue","renameExperimentalTableFeature","renameStorageAdaptersToStorage","renameTypescriptSchemaToJsonSchema","transforms"],"mappings":"AAEA,SAASA,WAAW,QAAQ,qCAAoC;AAChE,SAASC,qBAAqB,QAAQ,gDAA+C;AACrF,SAASC,yBAAyB,QAAQ,qDAAoD;AAC9F,SAASC,qBAAqB,QAAQ,gDAA+C;AACrF,SAASC,2BAA2B,QAAQ,wDAAuD;AACnG,SAASC,8BAA8B,QAAQ,2DAA0D;AACzG,SAASC,kBAAkB,QAAQ,6CAA4C;AAC/E,SAASC,qBAAqB,QAAQ,iDAAgD;AACtF,SAASC,qBAAqB,QAAQ,gDAA+C;AACrF,SAASC,2BAA2B,QAAQ,uDAAsD;AAClG,SAASC,kBAAkB,QAAQ,6CAA4C;AAC/E,SAASC,iBAAiB,QAAQ,6CAA4C;AAC9E,SAASC,wBAAwB,QAAQ,oDAAmD;AAC5F,SAASC,wBAAwB,QAAQ,qDAAoD;AAC7F,SAASC,iCAAiC,QAAQ,8DAA6D;AAC/G,SAASC,yBAAyB,QAAQ,qDAAoD;AAC9F,SAASC,gBAAgB,QAAQ,2CAA0C;AAC3E,SAASC,8BAA8B,QAAQ,2DAA0D;AACzG,SAASC,sBAAsB,QAAQ,iDAAgD;AACvF,SAASC,iBAAiB,QAAQ,6CAA4C;AAC9E,SAASC,0BAA0B,QAAQ,sDAAqD;AAChG,SAASC,2BAA2B,QAAQ,uDAAsD;AAClG,SAASC,kBAAkB,QAAQ,6CAA4C;AAC/E,SAASC,8BAA8B,QAAQ,0DAAyD;AACxG,SAASC,8BAA8B,QAAQ,2DAA0D;AACzG,SAASC,kCAAkC,QAAQ,gEAA+D;AAElH,OAAO,MAAMC,aAA0B;IACrC1B;IACAE;IACAS;IACAV;IACAY;IACAL;IACAE;IACAP;IACAE;IACAC;IACAG;IACAQ;IACAb;IACAoB;IACAZ;IACAL;IACAO;IACAC;IACAC;IACAE;IACAC;IACAC;IACAE;IACAD;IACAI;IACAF;CACD,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { EXPERIMENTAL_TableFeature as TableFeatureFn } from '@payloadcms/richtext-lexical';
2
+ export const features = [
3
+ TableFeatureFn()
4
+ ];
5
+
6
+ //# sourceMappingURL=alias.input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/transforms/rename-experimental-table-feature/alias.input.ts"],"sourcesContent":["import { EXPERIMENTAL_TableFeature as TableFeatureFn } from '@payloadcms/richtext-lexical'\n\nexport const features = [TableFeatureFn()]\n"],"names":["EXPERIMENTAL_TableFeature","TableFeatureFn","features"],"mappings":"AAAA,SAASA,6BAA6BC,cAAc,QAAQ,+BAA8B;AAE1F,OAAO,MAAMC,WAAW;IAACD;CAAiB,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { TableFeature as TableFeatureFn } from '@payloadcms/richtext-lexical';
2
+ export const features = [
3
+ TableFeatureFn()
4
+ ];
5
+
6
+ //# sourceMappingURL=alias.output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/transforms/rename-experimental-table-feature/alias.output.ts"],"sourcesContent":["import { TableFeature as TableFeatureFn } from '@payloadcms/richtext-lexical'\n\nexport const features = [TableFeatureFn()]\n"],"names":["TableFeature","TableFeatureFn","features"],"mappings":"AAAA,SAASA,gBAAgBC,cAAc,QAAQ,+BAA8B;AAE7E,OAAO,MAAMC,WAAW;IAACD;CAAiB,CAAA"}
@@ -0,0 +1,19 @@
1
+ import { EXPERIMENTAL_TableFeature, FixedToolbarFeature, lexicalEditor } from '@payloadcms/richtext-lexical';
2
+ export const RichText = {
3
+ fields: [
4
+ {
5
+ name: 'content',
6
+ type: 'richText',
7
+ editor: lexicalEditor({
8
+ features: ({ defaultFeatures })=>[
9
+ ...defaultFeatures,
10
+ FixedToolbarFeature(),
11
+ EXPERIMENTAL_TableFeature()
12
+ ]
13
+ })
14
+ }
15
+ ],
16
+ slug: 'richtext'
17
+ };
18
+
19
+ //# sourceMappingURL=basic.input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/transforms/rename-experimental-table-feature/basic.input.ts"],"sourcesContent":["import type { CollectionConfig } from 'payload'\n\nimport { EXPERIMENTAL_TableFeature, FixedToolbarFeature, lexicalEditor } from '@payloadcms/richtext-lexical'\n\nexport const RichText: CollectionConfig = {\n fields: [\n {\n name: 'content',\n type: 'richText',\n editor: lexicalEditor({\n features: ({ defaultFeatures }) => [\n ...defaultFeatures,\n FixedToolbarFeature(),\n EXPERIMENTAL_TableFeature(),\n ],\n }),\n },\n ],\n slug: 'richtext',\n}\n"],"names":["EXPERIMENTAL_TableFeature","FixedToolbarFeature","lexicalEditor","RichText","fields","name","type","editor","features","defaultFeatures","slug"],"mappings":"AAEA,SAASA,yBAAyB,EAAEC,mBAAmB,EAAEC,aAAa,QAAQ,+BAA8B;AAE5G,OAAO,MAAMC,WAA6B;IACxCC,QAAQ;QACN;YACEC,MAAM;YACNC,MAAM;YACNC,QAAQL,cAAc;gBACpBM,UAAU,CAAC,EAAEC,eAAe,EAAE,GAAK;2BAC9BA;wBACHR;wBACAD;qBACD;YACH;QACF;KACD;IACDU,MAAM;AACR,EAAC"}
@@ -0,0 +1,19 @@
1
+ import { TableFeature, FixedToolbarFeature, lexicalEditor } from '@payloadcms/richtext-lexical';
2
+ export const RichText = {
3
+ fields: [
4
+ {
5
+ name: 'content',
6
+ type: 'richText',
7
+ editor: lexicalEditor({
8
+ features: ({ defaultFeatures })=>[
9
+ ...defaultFeatures,
10
+ FixedToolbarFeature(),
11
+ TableFeature()
12
+ ]
13
+ })
14
+ }
15
+ ],
16
+ slug: 'richtext'
17
+ };
18
+
19
+ //# sourceMappingURL=basic.output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/transforms/rename-experimental-table-feature/basic.output.ts"],"sourcesContent":["import type { CollectionConfig } from 'payload'\n\nimport { TableFeature, FixedToolbarFeature, lexicalEditor } from '@payloadcms/richtext-lexical'\n\nexport const RichText: CollectionConfig = {\n fields: [\n {\n name: 'content',\n type: 'richText',\n editor: lexicalEditor({\n features: ({ defaultFeatures }) => [\n ...defaultFeatures,\n FixedToolbarFeature(),\n TableFeature(),\n ],\n }),\n },\n ],\n slug: 'richtext',\n}\n"],"names":["TableFeature","FixedToolbarFeature","lexicalEditor","RichText","fields","name","type","editor","features","defaultFeatures","slug"],"mappings":"AAEA,SAASA,YAAY,EAAEC,mBAAmB,EAAEC,aAAa,QAAQ,+BAA8B;AAE/F,OAAO,MAAMC,WAA6B;IACxCC,QAAQ;QACN;YACEC,MAAM;YACNC,MAAM;YACNC,QAAQL,cAAc;gBACpBM,UAAU,CAAC,EAAEC,eAAe,EAAE,GAAK;2BAC9BA;wBACHR;wBACAD;qBACD;YACH;QACF;KACD;IACDU,MAAM;AACR,EAAC"}
@@ -0,0 +1,7 @@
1
+ import { EXPERIMENTAL_TableFeature, TableFeature } from '@payloadcms/richtext-lexical';
2
+ export const features = [
3
+ EXPERIMENTAL_TableFeature(),
4
+ TableFeature()
5
+ ];
6
+
7
+ //# sourceMappingURL=collision.input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/transforms/rename-experimental-table-feature/collision.input.ts"],"sourcesContent":["import { EXPERIMENTAL_TableFeature, TableFeature } from '@payloadcms/richtext-lexical'\n\nexport const features = [EXPERIMENTAL_TableFeature(), TableFeature()]\n"],"names":["EXPERIMENTAL_TableFeature","TableFeature","features"],"mappings":"AAAA,SAASA,yBAAyB,EAAEC,YAAY,QAAQ,+BAA8B;AAEtF,OAAO,MAAMC,WAAW;IAACF;IAA6BC;CAAe,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { Transform } from '../../types.js';
2
+ export declare const renameExperimentalTableFeature: Transform;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/transforms/rename-experimental-table-feature/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAM/C,eAAO,MAAM,8BAA8B,EAAE,SA2C5C,CAAA"}
@@ -0,0 +1,44 @@
1
+ const PACKAGE_NAME = '@payloadcms/richtext-lexical';
2
+ const OLD_NAME = 'EXPERIMENTAL_TableFeature';
3
+ const NEW_NAME = 'TableFeature';
4
+ export const renameExperimentalTableFeature = {
5
+ name: 'rename-experimental-table-feature',
6
+ apply: ({ project })=>{
7
+ const filesChanged = new Set();
8
+ for (const file of project.getSourceFiles()){
9
+ for (const importDecl of file.getImportDeclarations()){
10
+ if (importDecl.getModuleSpecifierValue() !== PACKAGE_NAME) {
11
+ continue;
12
+ }
13
+ const named = importDecl.getNamedImports();
14
+ const spec = named.find((specifier)=>specifier.getName() === OLD_NAME);
15
+ if (!spec) {
16
+ continue;
17
+ }
18
+ // Skip if `TableFeature` is already imported here too, to avoid a collision.
19
+ const hasNewName = named.some((specifier)=>(specifier.getAliasNode()?.getText() ?? specifier.getName()) === NEW_NAME);
20
+ if (hasNewName) {
21
+ continue;
22
+ }
23
+ if (spec.getAliasNode()) {
24
+ // Aliased usages (`EXPERIMENTAL_TableFeature as Foo`) only reference the alias,
25
+ // so the imported name can be swapped without touching call sites.
26
+ spec.setName(NEW_NAME);
27
+ } else {
28
+ // No alias: the imported name is also the local binding, so rename it to update
29
+ // every call site (e.g. `EXPERIMENTAL_TableFeature()`) in the same pass.
30
+ spec.getNameNode().rename(NEW_NAME);
31
+ }
32
+ filesChanged.add(file.getFilePath());
33
+ }
34
+ }
35
+ return {
36
+ filesChanged: [
37
+ ...filesChanged
38
+ ]
39
+ };
40
+ },
41
+ description: 'Renames imports of `EXPERIMENTAL_TableFeature` from `@payloadcms/richtext-lexical` to `TableFeature` (the table feature is now stable) and updates all local usages.'
42
+ };
43
+
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/transforms/rename-experimental-table-feature/index.ts"],"sourcesContent":["import type { Transform } from '../../types.js'\n\nconst PACKAGE_NAME = '@payloadcms/richtext-lexical'\nconst OLD_NAME = 'EXPERIMENTAL_TableFeature'\nconst NEW_NAME = 'TableFeature'\n\nexport const renameExperimentalTableFeature: Transform = {\n name: 'rename-experimental-table-feature',\n apply: ({ project }) => {\n const filesChanged = new Set<string>()\n\n for (const file of project.getSourceFiles()) {\n for (const importDecl of file.getImportDeclarations()) {\n if (importDecl.getModuleSpecifierValue() !== PACKAGE_NAME) {\n continue\n }\n\n const named = importDecl.getNamedImports()\n const spec = named.find((specifier) => specifier.getName() === OLD_NAME)\n if (!spec) {\n continue\n }\n\n // Skip if `TableFeature` is already imported here too, to avoid a collision.\n const hasNewName = named.some(\n (specifier) => (specifier.getAliasNode()?.getText() ?? specifier.getName()) === NEW_NAME,\n )\n if (hasNewName) {\n continue\n }\n\n if (spec.getAliasNode()) {\n // Aliased usages (`EXPERIMENTAL_TableFeature as Foo`) only reference the alias,\n // so the imported name can be swapped without touching call sites.\n spec.setName(NEW_NAME)\n } else {\n // No alias: the imported name is also the local binding, so rename it to update\n // every call site (e.g. `EXPERIMENTAL_TableFeature()`) in the same pass.\n spec.getNameNode().rename(NEW_NAME)\n }\n\n filesChanged.add(file.getFilePath())\n }\n }\n\n return { filesChanged: [...filesChanged] }\n },\n description:\n 'Renames imports of `EXPERIMENTAL_TableFeature` from `@payloadcms/richtext-lexical` to `TableFeature` (the table feature is now stable) and updates all local usages.',\n}\n"],"names":["PACKAGE_NAME","OLD_NAME","NEW_NAME","renameExperimentalTableFeature","name","apply","project","filesChanged","Set","file","getSourceFiles","importDecl","getImportDeclarations","getModuleSpecifierValue","named","getNamedImports","spec","find","specifier","getName","hasNewName","some","getAliasNode","getText","setName","getNameNode","rename","add","getFilePath","description"],"mappings":"AAEA,MAAMA,eAAe;AACrB,MAAMC,WAAW;AACjB,MAAMC,WAAW;AAEjB,OAAO,MAAMC,iCAA4C;IACvDC,MAAM;IACNC,OAAO,CAAC,EAAEC,OAAO,EAAE;QACjB,MAAMC,eAAe,IAAIC;QAEzB,KAAK,MAAMC,QAAQH,QAAQI,cAAc,GAAI;YAC3C,KAAK,MAAMC,cAAcF,KAAKG,qBAAqB,GAAI;gBACrD,IAAID,WAAWE,uBAAuB,OAAOb,cAAc;oBACzD;gBACF;gBAEA,MAAMc,QAAQH,WAAWI,eAAe;gBACxC,MAAMC,OAAOF,MAAMG,IAAI,CAAC,CAACC,YAAcA,UAAUC,OAAO,OAAOlB;gBAC/D,IAAI,CAACe,MAAM;oBACT;gBACF;gBAEA,6EAA6E;gBAC7E,MAAMI,aAAaN,MAAMO,IAAI,CAC3B,CAACH,YAAc,AAACA,CAAAA,UAAUI,YAAY,IAAIC,aAAaL,UAAUC,OAAO,EAAC,MAAOjB;gBAElF,IAAIkB,YAAY;oBACd;gBACF;gBAEA,IAAIJ,KAAKM,YAAY,IAAI;oBACvB,gFAAgF;oBAChF,mEAAmE;oBACnEN,KAAKQ,OAAO,CAACtB;gBACf,OAAO;oBACL,gFAAgF;oBAChF,yEAAyE;oBACzEc,KAAKS,WAAW,GAAGC,MAAM,CAACxB;gBAC5B;gBAEAK,aAAaoB,GAAG,CAAClB,KAAKmB,WAAW;YACnC;QACF;QAEA,OAAO;YAAErB,cAAc;mBAAIA;aAAa;QAAC;IAC3C;IACAsB,aACE;AACJ,EAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.spec.d.ts","sourceRoot":"","sources":["../../../src/transforms/rename-experimental-table-feature/index.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,54 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { dirname, join } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { describe, expect, it } from 'vitest';
5
+ import { runTransform } from '../../utils/test-helpers.js';
6
+ import { renameExperimentalTableFeature } from './index.js';
7
+ const here = dirname(fileURLToPath(import.meta.url));
8
+ const fixture = (name)=>readFile(join(here, name), 'utf8');
9
+ describe('rename-experimental-table-feature', ()=>{
10
+ it('renames EXPERIMENTAL_TableFeature to TableFeature and updates call sites', async ()=>{
11
+ const input = await fixture('basic.input.ts');
12
+ const output = await fixture('basic.output.ts');
13
+ const result = await runTransform({
14
+ source: input,
15
+ transform: renameExperimentalTableFeature
16
+ });
17
+ expect(result).toBe(output);
18
+ });
19
+ it('is idempotent', async ()=>{
20
+ const output = await fixture('basic.output.ts');
21
+ const result = await runTransform({
22
+ source: output,
23
+ transform: renameExperimentalTableFeature
24
+ });
25
+ expect(result).toBe(output);
26
+ });
27
+ it('renames the imported name without touching an aliased local binding', async ()=>{
28
+ const input = await fixture('alias.input.ts');
29
+ const output = await fixture('alias.output.ts');
30
+ const result = await runTransform({
31
+ source: input,
32
+ transform: renameExperimentalTableFeature
33
+ });
34
+ expect(result).toBe(output);
35
+ });
36
+ it('no-ops on code without EXPERIMENTAL_TableFeature', async ()=>{
37
+ const input = await fixture('no-match.input.ts');
38
+ const result = await runTransform({
39
+ source: input,
40
+ transform: renameExperimentalTableFeature
41
+ });
42
+ expect(result).toBe(input);
43
+ });
44
+ it('skips the rename when TableFeature is already imported from the same declaration', async ()=>{
45
+ const input = await fixture('collision.input.ts');
46
+ const result = await runTransform({
47
+ source: input,
48
+ transform: renameExperimentalTableFeature
49
+ });
50
+ expect(result).toBe(input);
51
+ });
52
+ });
53
+
54
+ //# sourceMappingURL=index.spec.js.map