@se-studio/contentful-cms 3.8.0 → 3.9.1

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 (113) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +7 -6
  3. package/dist/cli/program.d.ts.map +1 -1
  4. package/dist/cli/program.js +15 -9
  5. package/dist/cli/program.js.map +1 -1
  6. package/dist/cli/runner.d.ts +4 -0
  7. package/dist/cli/runner.d.ts.map +1 -1
  8. package/dist/cli/runner.js +29 -3
  9. package/dist/cli/runner.js.map +1 -1
  10. package/dist/commands/apply-from-json.d.ts +4 -0
  11. package/dist/commands/apply-from-json.d.ts.map +1 -0
  12. package/dist/commands/apply-from-json.js +198 -0
  13. package/dist/commands/apply-from-json.js.map +1 -0
  14. package/dist/commands/assignment-value.d.ts +6 -0
  15. package/dist/commands/assignment-value.d.ts.map +1 -0
  16. package/dist/commands/assignment-value.js +13 -0
  17. package/dist/commands/assignment-value.js.map +1 -0
  18. package/dist/commands/batch-assignments.d.ts.map +1 -1
  19. package/dist/commands/batch-assignments.js +2 -1
  20. package/dist/commands/batch-assignments.js.map +1 -1
  21. package/dist/commands/create-from-json.d.ts +9 -0
  22. package/dist/commands/create-from-json.d.ts.map +1 -1
  23. package/dist/commands/create-from-json.js +187 -113
  24. package/dist/commands/create-from-json.js.map +1 -1
  25. package/dist/commands/export-from-json.d.ts +4 -0
  26. package/dist/commands/export-from-json.d.ts.map +1 -0
  27. package/dist/commands/export-from-json.js +28 -0
  28. package/dist/commands/export-from-json.js.map +1 -0
  29. package/dist/commands/help.d.ts.map +1 -1
  30. package/dist/commands/help.js +18 -32
  31. package/dist/commands/help.js.map +1 -1
  32. package/dist/commands/list.d.ts.map +1 -1
  33. package/dist/commands/list.js +9 -3
  34. package/dist/commands/list.js.map +1 -1
  35. package/dist/commands/multiset-assignments.d.ts.map +1 -1
  36. package/dist/commands/multiset-assignments.js +2 -1
  37. package/dist/commands/multiset-assignments.js.map +1 -1
  38. package/dist/commands/schema.d.ts.map +1 -1
  39. package/dist/commands/schema.js +28 -10
  40. package/dist/commands/schema.js.map +1 -1
  41. package/dist/contentful/cma-user-agent.d.ts +1 -1
  42. package/dist/contentful/create-from-json-types.d.ts +56 -0
  43. package/dist/contentful/create-from-json-types.d.ts.map +1 -0
  44. package/dist/contentful/create-from-json-types.js +24 -0
  45. package/dist/contentful/create-from-json-types.js.map +1 -0
  46. package/dist/contentful/entry-fields.d.ts.map +1 -1
  47. package/dist/contentful/entry-fields.js +5 -0
  48. package/dist/contentful/entry-fields.js.map +1 -1
  49. package/dist/contentful/field-value-from-json.d.ts +2 -1
  50. package/dist/contentful/field-value-from-json.d.ts.map +1 -1
  51. package/dist/contentful/field-value-from-json.js +16 -11
  52. package/dist/contentful/field-value-from-json.js.map +1 -1
  53. package/dist/contentful/link-fields.d.ts +4 -1
  54. package/dist/contentful/link-fields.d.ts.map +1 -1
  55. package/dist/contentful/link-fields.js +8 -2
  56. package/dist/contentful/link-fields.js.map +1 -1
  57. package/dist/contentful/media.d.ts +1 -0
  58. package/dist/contentful/media.d.ts.map +1 -1
  59. package/dist/contentful/media.js +1 -1
  60. package/dist/contentful/media.js.map +1 -1
  61. package/dist/contentful/session-to-from-json.d.ts +7 -0
  62. package/dist/contentful/session-to-from-json.d.ts.map +1 -0
  63. package/dist/contentful/session-to-from-json.js +180 -0
  64. package/dist/contentful/session-to-from-json.js.map +1 -0
  65. package/dist/contentful/set-field-schema.d.ts +1 -0
  66. package/dist/contentful/set-field-schema.d.ts.map +1 -1
  67. package/dist/contentful/set-field-schema.js +8 -0
  68. package/dist/contentful/set-field-schema.js.map +1 -1
  69. package/dist/contentful/validate-from-json.d.ts +12 -0
  70. package/dist/contentful/validate-from-json.d.ts.map +1 -0
  71. package/dist/contentful/validate-from-json.js +106 -0
  72. package/dist/contentful/validate-from-json.js.map +1 -0
  73. package/dist/contentful/write.d.ts +8 -4
  74. package/dist/contentful/write.d.ts.map +1 -1
  75. package/dist/contentful/write.js +45 -21
  76. package/dist/contentful/write.js.map +1 -1
  77. package/dist/generated/help-topics.d.ts +3 -0
  78. package/dist/generated/help-topics.d.ts.map +1 -0
  79. package/dist/generated/help-topics.js +4 -0
  80. package/dist/generated/help-topics.js.map +1 -0
  81. package/dist/generated/hosted-guide.d.ts +1 -1
  82. package/dist/generated/hosted-guide.d.ts.map +1 -1
  83. package/dist/generated/hosted-guide.js +1 -1
  84. package/dist/generated/hosted-guide.js.map +1 -1
  85. package/dist/generated/version.d.ts +1 -1
  86. package/dist/generated/version.js +1 -1
  87. package/dist/hosted/index.d.ts +1 -1
  88. package/dist/hosted/index.d.ts.map +1 -1
  89. package/dist/hosted/index.js +1 -1
  90. package/dist/hosted/index.js.map +1 -1
  91. package/dist/index/reference-lookup.d.ts +5 -1
  92. package/dist/index/reference-lookup.d.ts.map +1 -1
  93. package/dist/index/reference-lookup.js +19 -2
  94. package/dist/index/reference-lookup.js.map +1 -1
  95. package/dist/mcp/http-handler.d.ts.map +1 -1
  96. package/dist/mcp/http-handler.js +2 -3
  97. package/dist/mcp/http-handler.js.map +1 -1
  98. package/dist/mcp/server.d.ts.map +1 -1
  99. package/dist/mcp/server.js +2 -3
  100. package/dist/mcp/server.js.map +1 -1
  101. package/dist/mcp/tools/cms-edit.d.ts +1 -1
  102. package/dist/mcp/tools/cms-edit.d.ts.map +1 -1
  103. package/dist/mcp/tools/cms-edit.js +15 -2
  104. package/dist/mcp/tools/cms-edit.js.map +1 -1
  105. package/dist/mcp/tools/help.d.ts.map +1 -1
  106. package/dist/mcp/tools/help.js +47 -6
  107. package/dist/mcp/tools/help.js.map +1 -1
  108. package/docs/editor-tasks/create-page.md +6 -6
  109. package/docs/help/create-from-json.md +24 -1
  110. package/docs/help/index.md +3 -1
  111. package/docs/mcp/hosted-guide.md +18 -7
  112. package/package.json +5 -5
  113. package/skills/core/SKILL.md +22 -25
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @se-studio/contentful-cms Changelog
2
2
 
3
+ ## 3.9.1
4
+
5
+ ### Patch Changes
6
+
7
+ - Bump runtime dependencies: js-yaml, sharp, and @upstash/redis.
8
+
9
+ ## 3.9.0
10
+
11
+ ### Minor Changes
12
+
13
+ - 288cf66: JSON-first cms-edit: local from-json validation, hosted create-from-json help, export/apply from-json, and cheaper CMA writes (session version, create with fields, index slug resolve).
14
+
3
15
  ## 3.8.0
4
16
 
5
17
  ### Minor Changes
package/README.md CHANGED
@@ -40,7 +40,7 @@ A single `cms_edit` tool that accepts an `args` array matching any `cms-edit` CL
40
40
  ["save"]
41
41
  ```
42
42
 
43
- All output is JSON. Stdin-mode commands (`rtf` with `-`) are not supported via MCP — use `--file` instead.
43
+ All output is JSON. JSON bulk: `--json` or `--json-base64`. RTF: `--content` or `--base64`. No `--file` or stdin on MCP.
44
44
 
45
45
  ## Contentful Role Setup (Required)
46
46
 
@@ -224,11 +224,12 @@ For content types that follow the `${contentType}Type` naming convention (e.g. `
224
224
  |---------|-------------|
225
225
  | `create page --slug /x --title "X" [--description "…"] [--cms-label "…"] [--template-id <id>] [--featured-image <asset-id>] [--indexed] [--hidden]` | Create a new page entry; all fields after `--title` are optional |
226
226
  | `create article --slug /x --title "X" --article-type-id <id>` | Create a new article |
227
- | `create from-json --file <path>` | Create a complete page or article (with all components) from a declarative JSON file |
228
- | `create from-json --file <path> --dry-run` | Preview the creation plan without writing to Contentful |
229
- | `create from-json --file <path> --strict` | Fail on unknown JSON keys (also strict on `--dry-run`) |
230
- | `create taxonomy-from-json --file <path> [--if-not-exists] [--dry-run]` | Batch-create tagType, articleType, and tag entries from JSON |
231
- | `create person-from-json --file <path> [--if-not-exists] [--dry-run]` | Batch-create person/author entries from JSON |
227
+ | `create from-json --json '<json>'` | Create a complete page or article from JSON (`--json-base64` for large payloads) |
228
+ | `create from-json --json '…' --dry-run --strict` | Validate locally (no CMA). Fails on `content` trees, empty `components`, `componentType` |
229
+ | `export from-json` | Dump the open session as from-json (ids + versions) |
230
+ | `apply from-json --json '…'` | Update/create from that document (1 CMA update per changed entry) |
231
+ | `create taxonomy-from-json --json '…' [--if-not-exists] [--dry-run]` | Batch-create tagType, articleType, and tag entries from JSON |
232
+ | `create person-from-json --json '…' [--if-not-exists] [--dry-run]` | Batch-create person/author entries from JSON |
232
233
  | `create person --slug <slug> --name "X" [--job-title <t>] [--json-file <path>] [--if-not-exists] [--dry-run]` | Create a person entry (draft) |
233
234
  | `create person … [--bio-markdown <md>]` or `[--bio-file <path>]` | Bio as Markdown (mutually exclusive paths) |
234
235
  | `create tag-type --slug <slug> --name "X" [--json-file <path>] [--if-not-exists] [--dry-run]` | Create a tagType entry (draft) |
@@ -1 +1 @@
1
- {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAEvF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6DpC,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7D,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;CAClC;AAED,wBAAgB,oBAAoB,CAAC,KAAK,GAAE,mBAAwB,GAAG,OAAO,CAoG7E"}
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAEvF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2DpC,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7D,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;CAClC;AAED,wBAAgB,oBAAoB,CAAC,KAAK,GAAE,mBAAwB,GAAG,OAAO,CA4G7E"}
@@ -1,6 +1,7 @@
1
1
  /** biome-ignore-all lint/suspicious/noConsole: Console output is intentional in CLI */
2
2
  import { Command } from 'commander';
3
3
  import { registerAddCommand } from '../commands/add.js';
4
+ import { registerApplyFromJsonCommand } from '../commands/apply-from-json.js';
4
5
  import { registerArticleTagsFromJsonCommand } from '../commands/article-tags-from-json.js';
5
6
  import { registerAssetCommand } from '../commands/asset.js';
6
7
  import { registerBatchCommand } from '../commands/batch.js';
@@ -17,6 +18,7 @@ import { registerDiffCommand } from '../commands/diff.js';
17
18
  import { registerDiscardCommand } from '../commands/discard.js';
18
19
  import { registerEditorPackCommand } from '../commands/editor-pack.js';
19
20
  import { registerEntrySearchCommand } from '../commands/entry-search.js';
21
+ import { registerExportFromJsonCommand } from '../commands/export-from-json.js';
20
22
  import { registerGuideCommand } from '../commands/guide.js';
21
23
  import { registerHealthCommand } from '../commands/health.js';
22
24
  import { registerHelpCommand } from '../commands/help.js';
@@ -45,15 +47,11 @@ import { setJsonMode } from '../output/mode.js';
45
47
  import { beginTelemetryCommand, recordTelemetryOutcome } from '../telemetry/index.js';
46
48
  import { CMS_EDIT_VERSION } from '../version.js';
47
49
  const LLM_INTRO = 'Opinionated CLI for editing Contentful draft content (pages, articles, templates, navigation). No publish — all saves create drafts.\n' +
48
- 'Workflow: open → snapshot → read/set/rtf/add/remove/move → diff → save. Use @refs from snapshot (e.g. @c0); re-snapshot after add/remove/move.\n' +
49
- 'Detailed help: cms-edit help <topic> Topics: workflow, create-from-json, taxonomy-from-json, person-from-json, article-tags-from-json, bulk-rtf-replace, batch, batch-run, fields, fields-page, fields-article, fields-component, fields-collection, fields-taxonomy, index-sync, asset-review, lookup\n' +
50
- 'Getting started (hosted/MCP): cms-edit guide [overview|workflow|commands|troubleshooting|hosted]\n' +
51
- 'Single-shot page/article creation: cms-edit help create-from-json\n' +
52
- 'Taxonomy bootstrap: cms-edit help taxonomy-from-json\n' +
53
- 'Author import: cms-edit help person-from-json\n' +
54
- 'Full README: cms-edit --docs. Agent skills: npx skills add @se-studio/skills\n' +
55
- 'Schema introspection: cms-edit schema <content-type> | cms-edit schema colours | cms-edit schema types <content-type>\n' +
56
- 'Visual checks: cms-edit preview url <slug> or cms-edit preview showcase --component <type> (use browser MCP to open the URL).';
50
+ 'Agents: use hosted MCP cms_edit (args array). The local cms-edit binary is for host/editor-pack/project/schema tooling only.\n' +
51
+ 'JSON-first: create from-json --dry-run --strict, then create from-json. Edit: open → export from-json → apply from-json. Tiny patches: set/rtf/add.\n' +
52
+ 'JSON input: --json or --json-base64 only (no --file or stdin). Help: cms_edit ["help", "create-from-json"] or cms_edit_help {topic: "create-from-json"}.\n' +
53
+ 'Schema: cms_edit ["schema", "<content-type>"] for this space (do not guess field ids from generic tables).\n' +
54
+ 'Getting started: cms_edit_help {topic: overview|workflow|commands|troubleshooting|hosted}.';
57
55
  export function createCmsEditProgram(hooks = {}) {
58
56
  const program = new Command('cms-edit');
59
57
  program
@@ -106,6 +104,14 @@ export function createCmsEditProgram(hooks = {}) {
106
104
  registerTaxonomyCreateCommands(createCmd, program);
107
105
  registerPersonCreateCommands(createCmd, program);
108
106
  registerCreateFromJsonCommand(createCmd);
107
+ const exportCmd = program
108
+ .command('export')
109
+ .description('Export the open session (from-json document for apply).');
110
+ registerExportFromJsonCommand(exportCmd);
111
+ const applyCmd = program
112
+ .command('apply')
113
+ .description('Apply a from-json document to the open session (validate locally, then CMA).');
114
+ registerApplyFromJsonCommand(applyCmd);
109
115
  registerTaxonomyFromJsonCommand(createCmd, program);
110
116
  registerPersonFromJsonCommand(createCmd, program);
111
117
  registerArticleTagsFromJsonCommand(program);
@@ -1 +1 @@
1
- {"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,11 @@ export declare class CmsEditProcessExit extends Error {
6
6
  export interface RunCmsEditArgsResult {
7
7
  exitCode: number;
8
8
  output: string;
9
+ cma_requests: number;
10
+ cpa_requests: number;
9
11
  }
12
+ /** Appends CMA/CPA counts as a second JSON line for MCP (does not change command stdout). */
13
+ export declare function formatCmsEditMcpOutput(result: RunCmsEditArgsResult): string;
10
14
  /**
11
15
  * Runs cms-edit commands in-process, capturing stdout/stderr instead of spawning a child.
12
16
  * Used by the hosted MCP server on Vercel.
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAUvF,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,YAAY,QAAQ,EAAE,MAAM,EAI3B;CACF;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AA2BD;;;GAGG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAclF"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAWvF,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,YAAY,QAAQ,EAAE,MAAM,EAI3B;CACF;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AA2BD,6FAA6F;AAC7F,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAU3E;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAclF"}
@@ -1,6 +1,6 @@
1
1
  /** biome-ignore-all lint/suspicious/noConsole: Console output is intentional in CLI */
2
2
  import { sessionLogVerbose } from '../session/log.js';
3
- import { flushTelemetry, recordTelemetryOutcome, runWithContentfulRequestStats, } from '../telemetry/index.js';
3
+ import { flushTelemetry, getContentfulRequestStats, recordTelemetryOutcome, runWithContentfulRequestStats, } from '../telemetry/index.js';
4
4
  import { createCmsEditProgram } from './program.js';
5
5
  export class CmsEditProcessExit extends Error {
6
6
  exitCode;
@@ -33,6 +33,17 @@ function getProgram() {
33
33
  }
34
34
  /** Serializes in-process CLI runs — global console/process.exit patching is not concurrency-safe. */
35
35
  let runLock = Promise.resolve();
36
+ /** Appends CMA/CPA counts as a second JSON line for MCP (does not change command stdout). */
37
+ export function formatCmsEditMcpOutput(result) {
38
+ const statsLine = JSON.stringify({
39
+ cma_requests: result.cma_requests,
40
+ cpa_requests: result.cpa_requests,
41
+ });
42
+ const body = result.exitCode !== 0
43
+ ? `${result.output}\n(exit code ${String(result.exitCode)})`
44
+ : result.output;
45
+ return body ? `${body}\n${statsLine}` : statsLine;
46
+ }
36
47
  /**
37
48
  * Runs cms-edit commands in-process, capturing stdout/stderr instead of spawning a child.
38
49
  * Used by the hosted MCP server on Vercel.
@@ -86,20 +97,35 @@ async function runCmsEditArgsInner(args) {
86
97
  sessionLogVerbose('runCmsEditArgs done', {
87
98
  envSession: process.env['CONTENTFUL_CMS_SESSION'] ?? null,
88
99
  });
100
+ const stats = getContentfulRequestStats();
89
101
  const output = [...stdoutChunks, ...stderrChunks].filter(Boolean).join('\n').trim();
90
- return { exitCode: 0, output };
102
+ return {
103
+ exitCode: 0,
104
+ output,
105
+ cma_requests: stats?.cma_requests ?? 0,
106
+ cpa_requests: stats?.cpa_requests ?? 0,
107
+ };
91
108
  }
92
109
  catch (err) {
93
110
  if (err instanceof CmsEditProcessExit) {
94
111
  recordTelemetryOutcome('exit', { exitCode: err.exitCode });
112
+ const stats = getContentfulRequestStats();
95
113
  const output = [...stdoutChunks, ...stderrChunks].filter(Boolean).join('\n').trim();
96
- return { exitCode: err.exitCode, output };
114
+ return {
115
+ exitCode: err.exitCode,
116
+ output,
117
+ cma_requests: stats?.cma_requests ?? 0,
118
+ cpa_requests: stats?.cpa_requests ?? 0,
119
+ };
97
120
  }
98
121
  const message = err instanceof Error ? err.message : String(err);
99
122
  stderrChunks.push(message);
123
+ const stats = getContentfulRequestStats();
100
124
  return {
101
125
  exitCode: 1,
102
126
  output: [...stdoutChunks, ...stderrChunks].filter(Boolean).join('\n').trim(),
127
+ cma_requests: stats?.cma_requests ?? 0,
128
+ cpa_requests: stats?.cpa_requests ?? 0,
103
129
  };
104
130
  }
105
131
  finally {
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /** biome-ignore-all lint/suspicious/noConsole: Console output is intentional in CLI */
2
+ import type { Command } from 'commander';
3
+ export declare function registerApplyFromJsonCommand(applyCmd: Command): void;
4
+ //# sourceMappingURL=apply-from-json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-from-json.d.ts","sourceRoot":"","sources":["../../src/commands/apply-from-json.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAEvF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2BzC,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAyJpE"}
@@ -0,0 +1,198 @@
1
+ /** biome-ignore-all lint/suspicious/noConsole: Console output is intentional in CLI */
2
+ import { readJsonInput } from '../cli/read-json-input.js';
3
+ import { loadConfig, resolveSpaceConfig } from '../config/load.js';
4
+ import { createSafeEnvironment } from '../contentful/client.js';
5
+ import { buildEntryFieldsFromSpec, entryFieldsSpecFromCreateFromJson, } from '../contentful/entry-fields.js';
6
+ import { normalizeSlug } from '../contentful/fetch.js';
7
+ import { formatFromJsonValidationErrors, summarizeLinkPlan, validateFromJsonTree, } from '../contentful/validate-from-json.js';
8
+ import { applySessionPatches } from '../contentful/write.js';
9
+ import { notifyContentIndexChanged } from '../index/invalidate.js';
10
+ import { isJsonMode } from '../output/mode.js';
11
+ import { errorMsg, infoMsg, successMsg, warnMsg } from '../output/print.js';
12
+ import { makeEntryLink } from '../session/refs.js';
13
+ import { requireSession, saveSession } from '../session/store.js';
14
+ import { cleanupCreatedEntries, processComponentSpec } from './create-from-json.js';
15
+ const ROOT_TREE_FIELDS = new Set(['content', 'topContent', 'bottomContent', 'contents']);
16
+ export function registerApplyFromJsonCommand(applyCmd) {
17
+ applyCmd
18
+ .command('from-json')
19
+ .description('Apply a from-json document to the open session: update existing ids (exported versions), create new nodes, splice parent links.\n' +
20
+ 'Provide --json or --json-base64. Use --dry-run to validate without CMA writes.')
21
+ .option('--json <json>', 'Inline JSON entry definition')
22
+ .option('--json-base64 <encoded>', 'Base64-encoded JSON entry definition')
23
+ .option('--dry-run', 'Validate and print the plan without writing to Contentful')
24
+ .action(async (opts, cmd) => {
25
+ const parentOpts = cmd.parent?.parent?.opts() ?? {};
26
+ try {
27
+ let parsed;
28
+ try {
29
+ parsed = readJsonInput({
30
+ json: opts.json,
31
+ jsonBase64: opts.jsonBase64,
32
+ label: 'apply from-json',
33
+ });
34
+ }
35
+ catch (err) {
36
+ errorMsg(err instanceof Error ? err.message : String(err));
37
+ process.exit(1);
38
+ }
39
+ const treeCheck = validateFromJsonTree(parsed);
40
+ if (treeCheck.errors.length > 0) {
41
+ errorMsg(formatFromJsonValidationErrors(treeCheck.errors));
42
+ process.exit(1);
43
+ }
44
+ const spec = treeCheck.spec;
45
+ const isDryRun = !!opts.dryRun;
46
+ if (isDryRun) {
47
+ console.log('\n[dry-run] Would apply from-json:');
48
+ if (spec.existingId)
49
+ console.log(` existingId: ${spec.existingId}`);
50
+ if (spec.slug)
51
+ console.log(` slug: ${spec.slug}`);
52
+ printApplyPlan(spec.components ?? [], ' ');
53
+ console.log('\nNo changes written (--dry-run).\n');
54
+ return;
55
+ }
56
+ const session = await requireSession(parentOpts.session, parentOpts.config);
57
+ if (spec.existingId && spec.existingId !== session.rootEntryId) {
58
+ errorMsg(`JSON existingId ${spec.existingId} does not match open session root ${session.rootEntryId}. Export from this session, or open the matching entry.`);
59
+ process.exit(1);
60
+ }
61
+ const config = loadConfig(parentOpts.config);
62
+ const { space } = resolveSpaceConfig(config, session.spaceKey);
63
+ const env = await createSafeEnvironment(space);
64
+ const locale = session.defaultLocale;
65
+ const createdEntryIds = [];
66
+ try {
67
+ const root = session.entries[session.rootEntryId];
68
+ if (!root)
69
+ throw new Error('Session root missing.');
70
+ const rootBefore = JSON.stringify(root.fields);
71
+ if (typeof spec.version === 'number') {
72
+ root.sys.version = spec.version;
73
+ }
74
+ await mergeExportedRootFields(spec, env, session, space, locale);
75
+ const byTarget = new Map();
76
+ for (const comp of spec.components ?? []) {
77
+ const target = comp.target ?? 'content';
78
+ const list = byTarget.get(target) ?? [];
79
+ list.push(comp);
80
+ byTarget.set(target, list);
81
+ }
82
+ for (const [target, comps] of byTarget) {
83
+ const ids = [];
84
+ for (const comp of comps) {
85
+ const id = await processComponentSpec(comp, session.rootEntryId, target, env, session, locale, space, createdEntryIds, { skipParentLink: true, patchExisting: true });
86
+ ids.push(id);
87
+ }
88
+ const parent = session.entries[session.rootEntryId];
89
+ if (parent) {
90
+ if (!parent.fields[target])
91
+ parent.fields[target] = {};
92
+ parent.fields[target][locale] = ids.map((id) => makeEntryLink(id));
93
+ }
94
+ }
95
+ const rootAfter = session.entries[session.rootEntryId];
96
+ if (rootAfter &&
97
+ rootBefore !== JSON.stringify(rootAfter.fields) &&
98
+ !session.modifiedEntryIds.includes(session.rootEntryId)) {
99
+ session.modifiedEntryIds.push(session.rootEntryId);
100
+ }
101
+ const { saved, failed } = await applySessionPatches(env, session);
102
+ if (saved.length > 0) {
103
+ await notifyContentIndexChanged(space, {
104
+ session: {
105
+ defaultLocale: session.defaultLocale,
106
+ entries: session.entries,
107
+ originalEntries: session.originalEntries,
108
+ },
109
+ savedEntryIds: saved,
110
+ });
111
+ }
112
+ await saveSession(session);
113
+ if (failed.length > 0) {
114
+ for (const f of failed) {
115
+ errorMsg(`Failed to save ${f.entryId}: ${f.error}`);
116
+ }
117
+ process.exit(1);
118
+ }
119
+ const summary = {
120
+ ok: true,
121
+ rootEntryId: session.rootEntryId,
122
+ saved: saved.length,
123
+ created: createdEntryIds.length,
124
+ };
125
+ if (isJsonMode()) {
126
+ console.log(JSON.stringify(summary));
127
+ }
128
+ else {
129
+ successMsg(`Applied from-json: ${String(saved.length)} draft update(s), ${String(createdEntryIds.length)} new entry(ies).`);
130
+ infoMsg('Publish in Contentful when ready.');
131
+ }
132
+ }
133
+ catch (inner) {
134
+ await cleanupCreatedEntries(env, createdEntryIds, space.spaceId);
135
+ throw inner;
136
+ }
137
+ }
138
+ catch (err) {
139
+ errorMsg(err instanceof Error ? err.message : String(err));
140
+ process.exit(1);
141
+ }
142
+ });
143
+ }
144
+ async function mergeExportedRootFields(spec, env, session, space, locale) {
145
+ const root = session.entries[session.rootEntryId];
146
+ if (!root)
147
+ return;
148
+ const slug = typeof spec.slug === 'string' && spec.slug.trim() !== '' ? normalizeSlug(spec.slug) : undefined;
149
+ const { spec: entrySpec, aliasWarnings } = entryFieldsSpecFromCreateFromJson(spec, slug ?? '');
150
+ if (!slug) {
151
+ delete entrySpec.slug;
152
+ }
153
+ for (const w of aliasWarnings)
154
+ warnMsg(w);
155
+ const { fields: rootFields, warnings } = await buildEntryFieldsFromSpec(env, {
156
+ contentTypeId: session.rootEntryType === 'article' ? 'article' : 'page',
157
+ spec: {
158
+ ...entrySpec,
159
+ ...(slug ? { slug } : {}),
160
+ },
161
+ locale,
162
+ spaceId: space.spaceId,
163
+ environment: space.environment,
164
+ space,
165
+ strict: false,
166
+ });
167
+ for (const w of warnings)
168
+ warnMsg(w);
169
+ for (const [fieldId, localeMap] of Object.entries(rootFields)) {
170
+ if (ROOT_TREE_FIELDS.has(fieldId))
171
+ continue;
172
+ const value = localeMap[locale];
173
+ if (value === undefined)
174
+ continue;
175
+ if (!root.fields[fieldId])
176
+ root.fields[fieldId] = {};
177
+ root.fields[fieldId][locale] = value;
178
+ }
179
+ }
180
+ function printApplyPlan(components, indent) {
181
+ for (const comp of components) {
182
+ if (comp.existingId) {
183
+ console.log(`${indent}• Update ${comp.existingId}${comp.type ? ` [${comp.type}]` : ''}${comp.version != null ? ` v${String(comp.version)}` : ''}`);
184
+ }
185
+ else {
186
+ console.log(`${indent}• Create ${comp.contentType ?? 'component'} [${comp.type ?? ''}]`);
187
+ }
188
+ if (comp.links?.length) {
189
+ for (const link of comp.links) {
190
+ console.log(`${indent} link: ${summarizeLinkPlan(link)}`);
191
+ }
192
+ }
193
+ if (comp.items?.length) {
194
+ printApplyPlan(comp.items, `${indent} `);
195
+ }
196
+ }
197
+ }
198
+ //# sourceMappingURL=apply-from-json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-from-json.js","sourceRoot":"","sources":["../../src/commands/apply-from-json.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Batch / multi-set tokens use @ref:field=value as a single argv item.
3
+ * If the agent wraps the value in quotes, those characters become Contentful content.
4
+ */
5
+ export declare function unwrapAssignmentValue(raw: string): string;
6
+ //# sourceMappingURL=assignment-value.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assignment-value.d.ts","sourceRoot":"","sources":["../../src/commands/assignment-value.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CASzD"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Batch / multi-set tokens use @ref:field=value as a single argv item.
3
+ * If the agent wraps the value in quotes, those characters become Contentful content.
4
+ */
5
+ export function unwrapAssignmentValue(raw) {
6
+ const wrapped = (raw.startsWith('"') && raw.endsWith('"') && raw.length >= 2) ||
7
+ (raw.startsWith("'") && raw.endsWith("'") && raw.length >= 2);
8
+ if (!wrapped)
9
+ return raw;
10
+ throw new Error(`Quoted values are not allowed in field=value tokens (got ${raw.slice(0, 48)}…). ` +
11
+ 'Use ["set", "@cN", "field", "value"] so quote characters are not stored in the field.');
12
+ }
13
+ //# sourceMappingURL=assignment-value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assignment-value.js","sourceRoot":"","sources":["../../src/commands/assignment-value.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,MAAM,OAAO,GACX,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;QAC7D,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IAChE,IAAI,CAAC,OAAO;QAAE,OAAO,GAAG,CAAC;IACzB,MAAM,IAAI,KAAK,CACb,4DAA4D,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM;QAChF,uFAAuF,CAC1F,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"batch-assignments.d.ts","sourceRoot":"","sources":["../../src/commands/batch-assignments.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,sBAAsB,QAAuD,CAAC;AAI3F,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAE5E;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAsCvE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,kBAAkB,EAAE,CAU/E"}
1
+ {"version":3,"file":"batch-assignments.d.ts","sourceRoot":"","sources":["../../src/commands/batch-assignments.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,sBAAsB,QAAuD,CAAC;AAI3F,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAE5E;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAsCvE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,kBAAkB,EAAE,CAU/E"}
@@ -1,3 +1,4 @@
1
+ import { unwrapAssignmentValue } from './assignment-value.js';
1
2
  /**
2
3
  * Bulk `cms-edit batch set` tokens: entryId:fieldId=value (scalar only).
3
4
  * Contentful entry IDs are alphanumeric (plus _/-), typically ~22 chars but not fixed-length.
@@ -54,7 +55,7 @@ export function parseBatchSetAssignments(tokens) {
54
55
  if (!match?.[1] || !match[2] || match[3] === undefined || match[3] === '') {
55
56
  throw new Error(describeBatchAssignmentParseError(token));
56
57
  }
57
- parsed.push({ entryId: match[1], field: match[2], raw: match[3] });
58
+ parsed.push({ entryId: match[1], field: match[2], raw: unwrapAssignmentValue(match[3]) });
58
59
  }
59
60
  return parsed;
60
61
  }
@@ -1 +1 @@
1
- {"version":3,"file":"batch-assignments.js","sourceRoot":"","sources":["../../src/commands/batch-assignments.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"batch-assignments.js","sourceRoot":"","sources":["../../src/commands/batch-assignments.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,17 @@
1
1
  /** biome-ignore-all lint/suspicious/noConsole: Console output is intentional in CLI */
2
2
  import type { Command } from 'commander';
3
+ import type { SpaceConfig } from '../config/types.js';
4
+ import { createSafeEnvironment } from '../contentful/client.js';
5
+ import type { ComponentSpec } from '../contentful/create-from-json-types.js';
6
+ import { type SessionState } from '../session/state.js';
3
7
  /**
4
8
  * Registers the `create from-json` subcommand on the existing `create` Command group.
5
9
  * Must be called with the Command instance returned by registerCreateCommand.
6
10
  */
7
11
  export declare function registerCreateFromJsonCommand(createCmd: Command): void;
12
+ export declare function processComponentSpec(spec: ComponentSpec, parentEntryId: string, defaultTargetField: string, env: Awaited<ReturnType<typeof createSafeEnvironment>>, session: SessionState, locale: string, space: SpaceConfig, createdEntryIds: string[], options?: {
13
+ skipParentLink?: boolean;
14
+ patchExisting?: boolean;
15
+ }): Promise<string>;
16
+ export declare function cleanupCreatedEntries(env: Awaited<ReturnType<typeof createSafeEnvironment>>, ids: string[], spaceId: string): Promise<void>;
8
17
  //# sourceMappingURL=create-from-json.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-from-json.d.ts","sourceRoot":"","sources":["../../src/commands/create-from-json.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAEvF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsHzC;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CA6PtE"}
1
+ {"version":3,"file":"create-from-json.d.ts","sourceRoot":"","sources":["../../src/commands/create-from-json.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAEvF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EACV,aAAa,EAGd,MAAM,yCAAyC,CAAC;AA4BjD,OAAO,EAAmC,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AASzF;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CA6QtE;AAMD,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,aAAa,EACnB,aAAa,EAAE,MAAM,EACrB,kBAAkB,EAAE,MAAM,EAC1B,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,EACtD,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,WAAW,EAClB,eAAe,EAAE,MAAM,EAAE,EACzB,OAAO,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GAC9D,OAAO,CAAC,MAAM,CAAC,CAuHjB;AAsND,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,EACtD,GAAG,EAAE,MAAM,EAAE,EACb,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAwBf"}