@se-studio/contentful-cms 3.7.4 → 3.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/HOSTED.md +1 -1
- package/README.md +9 -8
- package/dist/bin/cms-edit.js +5 -0
- package/dist/bin/cms-edit.js.map +1 -1
- package/dist/cli/local-cli-allowed.d.ts +6 -0
- package/dist/cli/local-cli-allowed.d.ts.map +1 -0
- package/dist/cli/local-cli-allowed.js +28 -0
- package/dist/cli/local-cli-allowed.js.map +1 -0
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +15 -9
- package/dist/cli/program.js.map +1 -1
- package/dist/cli/runner.d.ts +4 -0
- package/dist/cli/runner.d.ts.map +1 -1
- package/dist/cli/runner.js +29 -3
- package/dist/cli/runner.js.map +1 -1
- package/dist/commands/apply-from-json.d.ts +4 -0
- package/dist/commands/apply-from-json.d.ts.map +1 -0
- package/dist/commands/apply-from-json.js +198 -0
- package/dist/commands/apply-from-json.js.map +1 -0
- package/dist/commands/assignment-value.d.ts +6 -0
- package/dist/commands/assignment-value.d.ts.map +1 -0
- package/dist/commands/assignment-value.js +13 -0
- package/dist/commands/assignment-value.js.map +1 -0
- package/dist/commands/batch-assignments.d.ts.map +1 -1
- package/dist/commands/batch-assignments.js +2 -1
- package/dist/commands/batch-assignments.js.map +1 -1
- package/dist/commands/create-from-json.d.ts +9 -0
- package/dist/commands/create-from-json.d.ts.map +1 -1
- package/dist/commands/create-from-json.js +187 -113
- package/dist/commands/create-from-json.js.map +1 -1
- package/dist/commands/export-from-json.d.ts +4 -0
- package/dist/commands/export-from-json.d.ts.map +1 -0
- package/dist/commands/export-from-json.js +28 -0
- package/dist/commands/export-from-json.js.map +1 -0
- package/dist/commands/help.d.ts.map +1 -1
- package/dist/commands/help.js +18 -32
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +9 -3
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/multiset-assignments.d.ts.map +1 -1
- package/dist/commands/multiset-assignments.js +2 -1
- package/dist/commands/multiset-assignments.js.map +1 -1
- package/dist/commands/schema.d.ts.map +1 -1
- package/dist/commands/schema.js +28 -10
- package/dist/commands/schema.js.map +1 -1
- package/dist/config/types.d.ts +1 -1
- package/dist/contentful/cma-user-agent.d.ts +1 -1
- package/dist/contentful/create-from-json-types.d.ts +56 -0
- package/dist/contentful/create-from-json-types.d.ts.map +1 -0
- package/dist/contentful/create-from-json-types.js +24 -0
- package/dist/contentful/create-from-json-types.js.map +1 -0
- package/dist/contentful/entry-fields.d.ts.map +1 -1
- package/dist/contentful/entry-fields.js +5 -0
- package/dist/contentful/entry-fields.js.map +1 -1
- package/dist/contentful/field-value-from-json.d.ts +2 -1
- package/dist/contentful/field-value-from-json.d.ts.map +1 -1
- package/dist/contentful/field-value-from-json.js +16 -11
- package/dist/contentful/field-value-from-json.js.map +1 -1
- package/dist/contentful/link-fields.d.ts +4 -1
- package/dist/contentful/link-fields.d.ts.map +1 -1
- package/dist/contentful/link-fields.js +8 -2
- package/dist/contentful/link-fields.js.map +1 -1
- package/dist/contentful/media.d.ts +1 -0
- package/dist/contentful/media.d.ts.map +1 -1
- package/dist/contentful/media.js +1 -1
- package/dist/contentful/media.js.map +1 -1
- package/dist/contentful/session-to-from-json.d.ts +7 -0
- package/dist/contentful/session-to-from-json.d.ts.map +1 -0
- package/dist/contentful/session-to-from-json.js +180 -0
- package/dist/contentful/session-to-from-json.js.map +1 -0
- package/dist/contentful/set-field-schema.d.ts +1 -0
- package/dist/contentful/set-field-schema.d.ts.map +1 -1
- package/dist/contentful/set-field-schema.js +8 -0
- package/dist/contentful/set-field-schema.js.map +1 -1
- package/dist/contentful/validate-from-json.d.ts +12 -0
- package/dist/contentful/validate-from-json.d.ts.map +1 -0
- package/dist/contentful/validate-from-json.js +106 -0
- package/dist/contentful/validate-from-json.js.map +1 -0
- package/dist/contentful/write.d.ts +8 -4
- package/dist/contentful/write.d.ts.map +1 -1
- package/dist/contentful/write.js +45 -21
- package/dist/contentful/write.js.map +1 -1
- package/dist/generated/help-topics.d.ts +3 -0
- package/dist/generated/help-topics.d.ts.map +1 -0
- package/dist/generated/help-topics.js +4 -0
- package/dist/generated/help-topics.js.map +1 -0
- package/dist/generated/hosted-guide.d.ts +1 -1
- package/dist/generated/hosted-guide.d.ts.map +1 -1
- package/dist/generated/hosted-guide.js +1 -1
- package/dist/generated/hosted-guide.js.map +1 -1
- package/dist/generated/version.d.ts +1 -1
- package/dist/generated/version.js +1 -1
- package/dist/hosted/index.d.ts +1 -1
- package/dist/hosted/index.d.ts.map +1 -1
- package/dist/hosted/index.js +1 -1
- package/dist/hosted/index.js.map +1 -1
- package/dist/hosted/next/page-styles.js +1 -1
- package/dist/hosted/next/page-styles.js.map +1 -1
- package/dist/index/reference-lookup.d.ts +5 -1
- package/dist/index/reference-lookup.d.ts.map +1 -1
- package/dist/index/reference-lookup.js +19 -2
- package/dist/index/reference-lookup.js.map +1 -1
- package/dist/mcp/guide.js +2 -2
- package/dist/mcp/guide.js.map +1 -1
- package/dist/mcp/http-handler.d.ts.map +1 -1
- package/dist/mcp/http-handler.js +2 -3
- package/dist/mcp/http-handler.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +2 -3
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/cms-edit.d.ts +1 -1
- package/dist/mcp/tools/cms-edit.d.ts.map +1 -1
- package/dist/mcp/tools/cms-edit.js +15 -2
- package/dist/mcp/tools/cms-edit.js.map +1 -1
- package/dist/mcp/tools/help.d.ts.map +1 -1
- package/dist/mcp/tools/help.js +47 -6
- package/dist/mcp/tools/help.js.map +1 -1
- package/docs/FUNCTIONAL_SPEC.md +1 -1
- package/docs/editor-tasks/create-page.md +6 -6
- package/docs/editor-tasks/media-reuse-and-upload.md +1 -1
- package/docs/help/create-from-json.md +24 -1
- package/docs/help/index.md +3 -1
- package/docs/mcp/hosted-guide.md +18 -7
- package/package.json +3 -3
- package/skills/core/SKILL.md +28 -30
- package/skills/manifest.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @se-studio/contentful-cms Changelog
|
|
2
2
|
|
|
3
|
+
## 3.9.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 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).
|
|
8
|
+
|
|
9
|
+
## 3.8.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- 2b1e79c: Portless local URLs: require `portless service install` for HTTPS 443; document unique last-segment worktree hosts. Refuse local `cms-edit` content commands (hosted MCP only). Smoke/revalidation use `start:dev` so `PORT` is not swallowed by portless.
|
|
14
|
+
|
|
3
15
|
## 3.7.4
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/HOSTED.md
CHANGED
|
@@ -149,4 +149,4 @@ Older deployments used a Claude Desktop **extension** (`.mcpb`) with a manual Co
|
|
|
149
149
|
|
|
150
150
|
## Developers
|
|
151
151
|
|
|
152
|
-
Local stdio MCP is not supported. Use the hosted connector URL from `/cms-edit
|
|
152
|
+
Local stdio MCP is not supported. Use the hosted connector URL from `/cms-edit`. The local `cms-edit` CLI is for host/editor-pack/project tooling only — not content edits. See [INSTALL.md](./INSTALL.md).
|
package/README.md
CHANGED
|
@@ -27,7 +27,7 @@ Editors connect Claude via **hosted cms-edit MCP** (OAuth) — no Node.js or loc
|
|
|
27
27
|
|
|
28
28
|
Shared route logic lives in `@se-studio/contentful-cms/hosted/next`. Editor walkthrough: [INSTALL.md](./INSTALL.md).
|
|
29
29
|
|
|
30
|
-
**Local stdio MCP is not supported** — do not register `mcpServers.cms-edit` in Claude Desktop. Developers use the hosted connector URL from the site
|
|
30
|
+
**Local stdio MCP is not supported** — do not register `mcpServers.cms-edit` in Claude Desktop. Developers and agents use the hosted connector URL from the site’s `/cms-edit` page. The local `cms-edit` binary only runs **tooling** (`host`, `editor-pack`, `project`, `schema`, `guide`). Content commands (`open`, `save`, `set`, …) are refused on the CLI.
|
|
31
31
|
|
|
32
32
|
### What hosted MCP exposes
|
|
33
33
|
|
|
@@ -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.
|
|
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
|
|
|
@@ -72,7 +72,7 @@ Create `.contentful-cms.json` in your project root (copy from `.contentful-cms.e
|
|
|
72
72
|
"environment": "master",
|
|
73
73
|
"managementToken": "${CMS_EDIT_TOKEN_OM1}",
|
|
74
74
|
"defaultLocale": "en-US",
|
|
75
|
-
"devBaseUrl": "
|
|
75
|
+
"devBaseUrl": "https://om1.localhost"
|
|
76
76
|
},
|
|
77
77
|
"brightline": {
|
|
78
78
|
"spaceId": "another-space-id",
|
|
@@ -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 --
|
|
228
|
-
| `create from-json --
|
|
229
|
-
| `
|
|
230
|
-
| `
|
|
231
|
-
| `create
|
|
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) |
|
package/dist/bin/cms-edit.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
/** biome-ignore-all lint/suspicious/noConsole: Console output is intentional in CLI */
|
|
3
3
|
import * as path from 'node:path';
|
|
4
4
|
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { isLocalCmsEditCliCommandAllowed, localCmsEditCliRefusalMessage, } from '../cli/local-cli-allowed.js';
|
|
5
6
|
import { createCmsEditProgram } from '../cli/program.js';
|
|
6
7
|
import { CMS_EDIT_VERSION } from '../version.js';
|
|
7
8
|
const program = createCmsEditProgram();
|
|
@@ -39,6 +40,10 @@ if (firstPositional === undefined || firstPositional === 'help') {
|
|
|
39
40
|
program.outputHelp();
|
|
40
41
|
process.exit(0);
|
|
41
42
|
}
|
|
43
|
+
if (!isLocalCmsEditCliCommandAllowed(firstPositional)) {
|
|
44
|
+
console.error(localCmsEditCliRefusalMessage(firstPositional));
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
42
47
|
program.parseAsync(process.argv).catch((err) => {
|
|
43
48
|
console.error(err instanceof Error ? err.message : String(err));
|
|
44
49
|
_origExit(1);
|
package/dist/bin/cms-edit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cms-edit.js","sourceRoot":"","sources":["../../src/bin/cms-edit.ts"],"names":[],"mappings":";AACA,uFAAuF;AAEvF,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,OAAO,GAAG,oBAAoB,EAAE,CAAC;AAEvC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7C,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,IAAsB,EAAE,EAAE;IACzC,MAAM,OAAO,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IACnF,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AACjD,CAAC,CAAwB,CAAC;AAE1B,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,GAAG,GAAG,CAAC,CAAC;AACZ,IAAI,eAAmC,CAAC;AACxC,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IACzB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1C,eAAe,GAAG,CAAC,CAAC;QACpB,MAAM;IACR,CAAC;IACD,IAAI,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,WAAW;QAAE,GAAG,IAAI,CAAC,CAAC;;QAClE,GAAG,IAAI,CAAC,CAAC;AAChB,CAAC;AACD,IAAI,eAAe,KAAK,SAAS,IAAI,eAAe,KAAK,MAAM,EAAE,CAAC;IAChE,OAAO,CAAC,UAAU,EAAE,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IACtD,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,SAAS,CAAC,CAAC,CAAC,CAAC;AACf,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"cms-edit.js","sourceRoot":"","sources":["../../src/bin/cms-edit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Commands the local `cms-edit` binary may still run (pack/host tooling). */
|
|
2
|
+
export declare const LOCAL_CMS_EDIT_CLI_ALLOWED_COMMANDS: readonly ['host', 'editor-pack', 'project', 'help', 'version', 'guide', 'schema'];
|
|
3
|
+
export declare function isHostedCmsEditProcess(): boolean;
|
|
4
|
+
export declare function isLocalCmsEditCliCommandAllowed(command: string | undefined): boolean;
|
|
5
|
+
export declare function localCmsEditCliRefusalMessage(command: string | undefined): string;
|
|
6
|
+
//# sourceMappingURL=local-cli-allowed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-cli-allowed.d.ts","sourceRoot":"","sources":["../../src/cli/local-cli-allowed.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAE9E,eAAO,MAAM,mCAAmC,YAC9C,MAAM,EACN,aAAa,EACb,SAAS,EACT,MAAM,EACN,SAAS,EACT,OAAO,EACP,QAAQ,CACA,CAAC;AAIX,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAKpF;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAMjF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/** Commands the local `cms-edit` binary may still run (pack/host tooling). */
|
|
2
|
+
export const LOCAL_CMS_EDIT_CLI_ALLOWED_COMMANDS = [
|
|
3
|
+
'host',
|
|
4
|
+
'editor-pack',
|
|
5
|
+
'project',
|
|
6
|
+
'help',
|
|
7
|
+
'version',
|
|
8
|
+
'guide',
|
|
9
|
+
'schema',
|
|
10
|
+
];
|
|
11
|
+
const allowed = new Set(LOCAL_CMS_EDIT_CLI_ALLOWED_COMMANDS);
|
|
12
|
+
export function isHostedCmsEditProcess() {
|
|
13
|
+
return process.env['VERCEL'] === '1' || process.env['CMS_EDIT_HOSTED'] === '1';
|
|
14
|
+
}
|
|
15
|
+
export function isLocalCmsEditCliCommandAllowed(command) {
|
|
16
|
+
if (isHostedCmsEditProcess()) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
return command !== undefined && allowed.has(command);
|
|
20
|
+
}
|
|
21
|
+
export function localCmsEditCliRefusalMessage(command) {
|
|
22
|
+
const shown = command ? `\`${command}\`` : 'that command';
|
|
23
|
+
return [
|
|
24
|
+
`Local cms-edit ${shown} is disabled. Content edits go through hosted MCP (cms_edit), not the CLI.`,
|
|
25
|
+
`Allowed local commands: ${LOCAL_CMS_EDIT_CLI_ALLOWED_COMMANDS.join(', ')}.`,
|
|
26
|
+
].join(' ');
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=local-cli-allowed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-cli-allowed.js","sourceRoot":"","sources":["../../src/cli/local-cli-allowed.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAE9E,MAAM,CAAC,MAAM,mCAAmC,GAAG;IACjD,MAAM;IACN,aAAa;IACb,SAAS;IACT,MAAM;IACN,SAAS;IACT,OAAO;IACP,QAAQ;CACA,CAAC;AAEX,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,mCAAmC,CAAC,CAAC;AAErE,MAAM,UAAU,sBAAsB;IACpC,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,GAAG,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,OAA2B;IACzE,IAAI,sBAAsB,EAAE,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,OAA2B;IACvE,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC;IAC1D,OAAO;QACL,kBAAkB,KAAK,4EAA4E;QACnG,2BAA2B,mCAAmC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;KAC7E,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC"}
|
|
@@ -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;
|
|
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"}
|
package/dist/cli/program.js
CHANGED
|
@@ -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
|
-
'
|
|
49
|
-
'
|
|
50
|
-
'
|
|
51
|
-
'
|
|
52
|
-
'
|
|
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);
|
package/dist/cli/program.js.map
CHANGED
|
@@ -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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"}
|
package/dist/cli/runner.d.ts
CHANGED
|
@@ -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.
|
package/dist/cli/runner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"AAAA,uFAAuF;
|
|
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"}
|
package/dist/cli/runner.js
CHANGED
|
@@ -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 {
|
|
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 {
|
|
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 {
|
package/dist/cli/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAEvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,QAAQ,CAAS;IAE1B,YAAY,QAAgB;QAC1B,KAAK,CAAC,6BAA6B,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"
|
|
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"}
|