@se-studio/contentful-cms 1.0.18 → 1.0.20
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/README.md +0 -12
- package/dist/bin/cms-edit.js +66 -9
- package/dist/bin/cms-edit.js.map +1 -1
- package/dist/commands/asset.d.ts.map +1 -1
- package/dist/commands/asset.js +122 -16
- package/dist/commands/asset.js.map +1 -1
- package/dist/commands/diff.d.ts.map +1 -1
- package/dist/commands/diff.js +119 -26
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/discard.d.ts.map +1 -1
- package/dist/commands/discard.js +26 -0
- package/dist/commands/discard.js.map +1 -1
- package/dist/commands/entry-search.d.ts.map +1 -1
- package/dist/commands/entry-search.js +10 -1
- package/dist/commands/entry-search.js.map +1 -1
- package/dist/commands/health.d.ts +4 -0
- package/dist/commands/health.d.ts.map +1 -0
- package/dist/commands/health.js +167 -0
- package/dist/commands/health.js.map +1 -0
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +7 -0
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/peek.d.ts +4 -0
- package/dist/commands/peek.d.ts.map +1 -0
- package/dist/commands/peek.js +94 -0
- package/dist/commands/peek.js.map +1 -0
- package/dist/commands/revert.d.ts +4 -0
- package/dist/commands/revert.d.ts.map +1 -0
- package/dist/commands/revert.js +142 -0
- package/dist/commands/revert.js.map +1 -0
- package/dist/commands/rtf.d.ts +1 -0
- package/dist/commands/rtf.d.ts.map +1 -1
- package/dist/commands/rtf.js +308 -14
- package/dist/commands/rtf.js.map +1 -1
- package/dist/commands/run.d.ts +4 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +296 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/schema.d.ts +4 -0
- package/dist/commands/schema.d.ts.map +1 -0
- package/dist/commands/schema.js +119 -0
- package/dist/commands/schema.js.map +1 -0
- package/dist/commands/screenshot.d.ts.map +1 -1
- package/dist/commands/screenshot.js +8 -0
- package/dist/commands/screenshot.js.map +1 -1
- package/dist/commands/sitemap.d.ts +4 -0
- package/dist/commands/sitemap.d.ts.map +1 -0
- package/dist/commands/sitemap.js +134 -0
- package/dist/commands/sitemap.js.map +1 -0
- package/dist/contentful/assets.d.ts +14 -1
- package/dist/contentful/assets.d.ts.map +1 -1
- package/dist/contentful/assets.js +24 -2
- package/dist/contentful/assets.js.map +1 -1
- package/dist/rtf/replacePlainText.d.ts +52 -9
- package/dist/rtf/replacePlainText.d.ts.map +1 -1
- package/dist/rtf/replacePlainText.js +169 -63
- package/dist/rtf/replacePlainText.js.map +1 -1
- package/dist/session/store.d.ts +10 -4
- package/dist/session/store.d.ts.map +1 -1
- package/dist/session/store.js +46 -11
- package/dist/session/store.js.map +1 -1
- package/dist/telemetry/index.d.ts +10 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +11 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/local.d.ts +9 -0
- package/dist/telemetry/local.d.ts.map +1 -0
- package/dist/telemetry/local.js +21 -0
- package/dist/telemetry/local.js.map +1 -0
- package/dist/telemetry/types.d.ts +29 -0
- package/dist/telemetry/types.d.ts.map +1 -0
- package/dist/telemetry/types.js +2 -0
- package/dist/telemetry/types.js.map +1 -0
- package/package.json +5 -5
- package/skills/core/SKILL.md +82 -0
- package/skills/rich-text/SKILL.md +63 -0
- package/dist/commands/export-converted.d.ts +0 -8
- package/dist/commands/export-converted.d.ts.map +0 -1
- package/dist/commands/export-converted.js +0 -62
- package/dist/commands/export-converted.js.map +0 -1
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/** biome-ignore-all lint/suspicious/noConsole: Console output is intentional in CLI */
|
|
2
|
+
import pc from 'picocolors';
|
|
3
|
+
import { loadConfig, resolveSpaceConfig } from '../config/load.js';
|
|
4
|
+
import { createSafeEnvironment } from '../contentful/client.js';
|
|
5
|
+
import { fetchEntryTree, findEntryBySlug, serializeEntry } from '../contentful/fetch.js';
|
|
6
|
+
import { isJsonMode } from '../output/mode.js';
|
|
7
|
+
import { errorMsg, infoMsg } from '../output/print.js';
|
|
8
|
+
import { buildTree } from '../session/refs.js';
|
|
9
|
+
import { loadSession } from '../session/store.js';
|
|
10
|
+
import { renderSnapshot } from '../snapshot/render.js';
|
|
11
|
+
export function registerPeekCommand(program) {
|
|
12
|
+
program
|
|
13
|
+
.command('peek <slug-or-id>')
|
|
14
|
+
.description('Fetch and display an entry tree without affecting your active session.\n' +
|
|
15
|
+
"Useful for inspecting a page's structure, refs, and field values before opening it.\n" +
|
|
16
|
+
'Use --id to look up by entry ID instead of slug.\n' +
|
|
17
|
+
'Example: cms-edit peek /pricing (your active session is unchanged)')
|
|
18
|
+
.option('--id', 'Treat the argument as a Contentful entry ID instead of a slug')
|
|
19
|
+
.action(async (slugOrId, opts, cmd) => {
|
|
20
|
+
const parentOpts = cmd.parent?.opts() ?? {};
|
|
21
|
+
try {
|
|
22
|
+
const config = loadConfig(parentOpts.config);
|
|
23
|
+
const { key, space } = resolveSpaceConfig(config, parentOpts.space);
|
|
24
|
+
const env = await createSafeEnvironment(space);
|
|
25
|
+
const locale = space.defaultLocale;
|
|
26
|
+
infoMsg(`Peeking at ${opts.id ? 'entry' : 'slug'} "${slugOrId}" in space "${key}"…`);
|
|
27
|
+
let rootEntry;
|
|
28
|
+
if (opts.id) {
|
|
29
|
+
rootEntry = await env.getEntry(slugOrId);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
const found = await findEntryBySlug(env, slugOrId, locale);
|
|
33
|
+
if (!found) {
|
|
34
|
+
errorMsg(`No entry found with slug "${slugOrId}"`);
|
|
35
|
+
process.exit(1);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
rootEntry = found;
|
|
39
|
+
}
|
|
40
|
+
const rootEntryId = rootEntry.sys.id;
|
|
41
|
+
const contentTypeId = rootEntry.sys.contentType.sys.id;
|
|
42
|
+
const rootEntryType = contentTypeId === 'page'
|
|
43
|
+
? 'page'
|
|
44
|
+
: contentTypeId === 'article'
|
|
45
|
+
? 'article'
|
|
46
|
+
: contentTypeId === 'navigation'
|
|
47
|
+
? 'navigation'
|
|
48
|
+
: contentTypeId === 'template'
|
|
49
|
+
? 'template'
|
|
50
|
+
: 'page';
|
|
51
|
+
infoMsg('Fetching entry tree…');
|
|
52
|
+
const entries = await fetchEntryTree(env, rootEntryId);
|
|
53
|
+
entries[rootEntryId] = serializeEntry(rootEntry);
|
|
54
|
+
const { refs, refsByEntry, treeNodes } = buildTree(rootEntryId, entries, locale);
|
|
55
|
+
// Build an in-memory session — NOT saved to disk
|
|
56
|
+
const peekSession = {
|
|
57
|
+
version: 1,
|
|
58
|
+
spaceKey: key,
|
|
59
|
+
spaceId: space.spaceId,
|
|
60
|
+
environment: space.environment,
|
|
61
|
+
defaultLocale: locale,
|
|
62
|
+
rootEntryId,
|
|
63
|
+
rootEntryType,
|
|
64
|
+
fetchedAt: new Date().toISOString(),
|
|
65
|
+
entries,
|
|
66
|
+
originalEntries: {},
|
|
67
|
+
refs,
|
|
68
|
+
refsByEntry,
|
|
69
|
+
treeNodes,
|
|
70
|
+
modifiedEntryIds: [],
|
|
71
|
+
pendingDeletions: [],
|
|
72
|
+
};
|
|
73
|
+
if (!isJsonMode()) {
|
|
74
|
+
console.log(pc.yellow(pc.bold('[PEEK — not your active session]')));
|
|
75
|
+
}
|
|
76
|
+
renderSnapshot(peekSession);
|
|
77
|
+
// Mention active session if one exists
|
|
78
|
+
if (!isJsonMode()) {
|
|
79
|
+
const activeSession = loadSession();
|
|
80
|
+
if (activeSession) {
|
|
81
|
+
const activeSlug = activeSession.entries[activeSession.rootEntryId]?.fields['slug']?.[activeSession.defaultLocale] ??
|
|
82
|
+
activeSession.entries[activeSession.rootEntryId]?.fields['slug']?.['en-US'] ??
|
|
83
|
+
activeSession.rootEntryId;
|
|
84
|
+
console.log(pc.dim(`\nActive session: "${String(activeSlug)}" — unchanged by peek.`));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
errorMsg(err instanceof Error ? err.message : String(err));
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=peek.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peek.js","sourceRoot":"","sources":["../../src/commands/peek.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revert.d.ts","sourceRoot":"","sources":["../../src/commands/revert.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAEvF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgI5D"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/** biome-ignore-all lint/suspicious/noConsole: Console output is intentional in CLI */
|
|
2
|
+
import { isJsonMode } from '../output/mode.js';
|
|
3
|
+
import { errorMsg, infoMsg, successMsg, warnMsg } from '../output/print.js';
|
|
4
|
+
import { resolveRef, resolveRefToId } from '../session/refs.js';
|
|
5
|
+
import { getEntryLabel } from '../session/state.js';
|
|
6
|
+
import { requireSession, saveSession } from '../session/store.js';
|
|
7
|
+
export function registerRevertCommand(program) {
|
|
8
|
+
program
|
|
9
|
+
.command('revert [ref] [field]')
|
|
10
|
+
.description('Revert local changes to one or all fields, restoring the original values from session open.\n' +
|
|
11
|
+
'Usage:\n' +
|
|
12
|
+
' cms-edit revert @c0 heading — revert a single field\n' +
|
|
13
|
+
' cms-edit revert @c0 — revert all fields on an entry\n' +
|
|
14
|
+
' cms-edit revert --all — revert all modified entries (session stays open)')
|
|
15
|
+
.option('--all', 'Revert all modified entries')
|
|
16
|
+
.action((ref, field, opts) => {
|
|
17
|
+
try {
|
|
18
|
+
const session = requireSession();
|
|
19
|
+
const locale = session.defaultLocale;
|
|
20
|
+
if (opts.all) {
|
|
21
|
+
// Revert all modified entries that have originals
|
|
22
|
+
const revertedItems = [];
|
|
23
|
+
const createdRefs = [];
|
|
24
|
+
for (const entryId of [...session.modifiedEntryIds]) {
|
|
25
|
+
const original = session.originalEntries[entryId];
|
|
26
|
+
if (!original) {
|
|
27
|
+
const entryRef = session.refsByEntry[entryId] ?? entryId;
|
|
28
|
+
createdRefs.push(entryRef);
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
const entry = session.entries[entryId];
|
|
32
|
+
if (!entry)
|
|
33
|
+
continue;
|
|
34
|
+
entry.fields = JSON.parse(JSON.stringify(original.fields));
|
|
35
|
+
session.modifiedEntryIds = session.modifiedEntryIds.filter((id) => id !== entryId);
|
|
36
|
+
const entryRef = session.refsByEntry[entryId] ?? entryId;
|
|
37
|
+
revertedItems.push(entryRef);
|
|
38
|
+
}
|
|
39
|
+
saveSession(session);
|
|
40
|
+
if (createdRefs.length > 0) {
|
|
41
|
+
warnMsg(`Skipped ${String(createdRefs.length)} entr${createdRefs.length === 1 ? 'y' : 'ies'} created in this session (no original to revert to): ${createdRefs.join(', ')}`);
|
|
42
|
+
}
|
|
43
|
+
if (revertedItems.length === 0) {
|
|
44
|
+
infoMsg('No modified entries to revert.');
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (isJsonMode()) {
|
|
48
|
+
console.log(JSON.stringify({ ok: true, reverted: revertedItems.map((r) => `${r}.*`) }));
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
successMsg(`Reverted all fields on ${String(revertedItems.length)} entr${revertedItems.length === 1 ? 'y' : 'ies'}: ${revertedItems.join(', ')}`);
|
|
52
|
+
}
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (!ref) {
|
|
56
|
+
errorMsg('Provide a ref (e.g. @c0) or use --all. Example: cms-edit revert @c0 heading');
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
const entryId = resolveRefToId(session, ref);
|
|
60
|
+
const entry = resolveRef(session, ref);
|
|
61
|
+
const original = session.originalEntries[entryId];
|
|
62
|
+
if (!original) {
|
|
63
|
+
errorMsg(`${ref} was created in this session and has no original. Use 'remove ${ref}' to unlink it.`);
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
const isModified = session.modifiedEntryIds.includes(entryId);
|
|
67
|
+
if (field) {
|
|
68
|
+
// Revert a single field
|
|
69
|
+
const originalFieldData = original.fields[field];
|
|
70
|
+
if (originalFieldData === undefined) {
|
|
71
|
+
// Field didn't exist originally — delete it from current entry
|
|
72
|
+
delete entry.fields[field];
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
entry.fields[field] = JSON.parse(JSON.stringify(originalFieldData));
|
|
76
|
+
}
|
|
77
|
+
// Check if entry is now fully reverted
|
|
78
|
+
const stillModified = hasAnyFieldChanged(original, entry, locale);
|
|
79
|
+
if (!stillModified) {
|
|
80
|
+
session.modifiedEntryIds = session.modifiedEntryIds.filter((id) => id !== entryId);
|
|
81
|
+
}
|
|
82
|
+
saveSession(session);
|
|
83
|
+
const restoredValue = getFieldDisplayValue(entry, field, locale);
|
|
84
|
+
if (isJsonMode()) {
|
|
85
|
+
console.log(JSON.stringify({ ok: true, ref, field, restoredTo: restoredValue }));
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
successMsg(`Reverted "${field}" on ${ref} to: ${restoredValue}`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
// Revert all fields on the entry
|
|
93
|
+
if (!isModified) {
|
|
94
|
+
infoMsg(`${ref} has no pending changes.`);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
entry.fields = JSON.parse(JSON.stringify(original.fields));
|
|
98
|
+
session.modifiedEntryIds = session.modifiedEntryIds.filter((id) => id !== entryId);
|
|
99
|
+
saveSession(session);
|
|
100
|
+
const label = getEntryLabel(entry, locale);
|
|
101
|
+
if (isJsonMode()) {
|
|
102
|
+
console.log(JSON.stringify({ ok: true, ref, reverted: `${ref}.*`, label }));
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
successMsg(`Reverted all fields on ${ref} ("${label}") to original values.`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
errorMsg(err instanceof Error ? err.message : String(err));
|
|
111
|
+
process.exit(1);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Returns true if any field in the current entry differs from the original for the given locale.
|
|
117
|
+
*/
|
|
118
|
+
function hasAnyFieldChanged(original, current, locale) {
|
|
119
|
+
const allFields = new Set([...Object.keys(original.fields), ...Object.keys(current.fields)]);
|
|
120
|
+
for (const fieldId of allFields) {
|
|
121
|
+
const oldVal = original.fields[fieldId]?.[locale] ?? original.fields[fieldId]?.['en-US'];
|
|
122
|
+
const newVal = current.fields[fieldId]?.[locale] ?? current.fields[fieldId]?.['en-US'];
|
|
123
|
+
if (JSON.stringify(oldVal) !== JSON.stringify(newVal))
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
/** Returns a short display string for a field value. */
|
|
129
|
+
function getFieldDisplayValue(entry, field, locale) {
|
|
130
|
+
const fieldData = entry.fields[field];
|
|
131
|
+
if (!fieldData)
|
|
132
|
+
return '(removed)';
|
|
133
|
+
const val = fieldData[locale] ?? fieldData['en-US'];
|
|
134
|
+
if (val === null || val === undefined)
|
|
135
|
+
return '(empty)';
|
|
136
|
+
if (typeof val === 'string')
|
|
137
|
+
return `"${val.slice(0, 80)}${val.length > 80 ? '…' : ''}"`;
|
|
138
|
+
if (typeof val === 'object' && val.nodeType)
|
|
139
|
+
return '(rich text)';
|
|
140
|
+
return JSON.stringify(val).slice(0, 80);
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=revert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revert.js","sourceRoot":"","sources":["../../src/commands/revert.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/rtf.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rtf.d.ts","sourceRoot":"","sources":["../../src/commands/rtf.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rtf.d.ts","sourceRoot":"","sources":["../../src/commands/rtf.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAKvF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBzC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAunBzD"}
|