@se-studio/contentful-cms 1.0.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.
- package/CHANGELOG.md +15 -0
- package/README.md +519 -0
- package/dist/bin/cms-edit.d.ts +4 -0
- package/dist/bin/cms-edit.d.ts.map +1 -0
- package/dist/bin/cms-edit.js +101 -0
- package/dist/bin/cms-edit.js.map +1 -0
- package/dist/commands/add.d.ts +4 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +166 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/asset.d.ts +4 -0
- package/dist/commands/asset.d.ts.map +1 -0
- package/dist/commands/asset.js +110 -0
- package/dist/commands/asset.js.map +1 -0
- package/dist/commands/colours.d.ts +4 -0
- package/dist/commands/colours.d.ts.map +1 -0
- package/dist/commands/colours.js +91 -0
- package/dist/commands/colours.js.map +1 -0
- package/dist/commands/create.d.ts +4 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +223 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/diff.d.ts +4 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +141 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/discard.d.ts +4 -0
- package/dist/commands/discard.d.ts.map +1 -0
- package/dist/commands/discard.js +36 -0
- package/dist/commands/discard.js.map +1 -0
- package/dist/commands/entry-search.d.ts +4 -0
- package/dist/commands/entry-search.d.ts.map +1 -0
- package/dist/commands/entry-search.js +81 -0
- package/dist/commands/entry-search.js.map +1 -0
- package/dist/commands/export-converted.d.ts +8 -0
- package/dist/commands/export-converted.d.ts.map +1 -0
- package/dist/commands/export-converted.js +62 -0
- package/dist/commands/export-converted.js.map +1 -0
- package/dist/commands/links.d.ts +4 -0
- package/dist/commands/links.d.ts.map +1 -0
- package/dist/commands/links.js +255 -0
- package/dist/commands/links.js.map +1 -0
- package/dist/commands/list.d.ts +4 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +91 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/move.d.ts +3 -0
- package/dist/commands/move.d.ts.map +1 -0
- package/dist/commands/move.js +84 -0
- package/dist/commands/move.js.map +1 -0
- package/dist/commands/nav.d.ts +4 -0
- package/dist/commands/nav.d.ts.map +1 -0
- package/dist/commands/nav.js +196 -0
- package/dist/commands/nav.js.map +1 -0
- package/dist/commands/open.d.ts +4 -0
- package/dist/commands/open.d.ts.map +1 -0
- package/dist/commands/open.js +74 -0
- package/dist/commands/open.js.map +1 -0
- package/dist/commands/read.d.ts +4 -0
- package/dist/commands/read.d.ts.map +1 -0
- package/dist/commands/read.js +102 -0
- package/dist/commands/read.js.map +1 -0
- package/dist/commands/remove.d.ts +4 -0
- package/dist/commands/remove.d.ts.map +1 -0
- package/dist/commands/remove.js +98 -0
- package/dist/commands/remove.js.map +1 -0
- package/dist/commands/rtf.d.ts +3 -0
- package/dist/commands/rtf.d.ts.map +1 -0
- package/dist/commands/rtf.js +131 -0
- package/dist/commands/rtf.js.map +1 -0
- package/dist/commands/save.d.ts +4 -0
- package/dist/commands/save.d.ts.map +1 -0
- package/dist/commands/save.js +59 -0
- package/dist/commands/save.js.map +1 -0
- package/dist/commands/screenshot.d.ts +4 -0
- package/dist/commands/screenshot.d.ts.map +1 -0
- package/dist/commands/screenshot.js +246 -0
- package/dist/commands/screenshot.js.map +1 -0
- package/dist/commands/set.d.ts +3 -0
- package/dist/commands/set.d.ts.map +1 -0
- package/dist/commands/set.js +152 -0
- package/dist/commands/set.js.map +1 -0
- package/dist/commands/skill.d.ts +4 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +73 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/snapshot.d.ts +3 -0
- package/dist/commands/snapshot.d.ts.map +1 -0
- package/dist/commands/snapshot.js +21 -0
- package/dist/commands/snapshot.js.map +1 -0
- package/dist/commands/types.d.ts +4 -0
- package/dist/commands/types.d.ts.map +1 -0
- package/dist/commands/types.js +78 -0
- package/dist/commands/types.js.map +1 -0
- package/dist/config/load.d.ts +14 -0
- package/dist/config/load.d.ts.map +1 -0
- package/dist/config/load.js +79 -0
- package/dist/config/load.js.map +1 -0
- package/dist/config/types.d.ts +13 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +2 -0
- package/dist/config/types.js.map +1 -0
- package/dist/contentful/assets.d.ts +20 -0
- package/dist/contentful/assets.d.ts.map +1 -0
- package/dist/contentful/assets.js +36 -0
- package/dist/contentful/assets.js.map +1 -0
- package/dist/contentful/client.d.ts +28 -0
- package/dist/contentful/client.d.ts.map +1 -0
- package/dist/contentful/client.js +30 -0
- package/dist/contentful/client.js.map +1 -0
- package/dist/contentful/fetch.d.ts +20 -0
- package/dist/contentful/fetch.d.ts.map +1 -0
- package/dist/contentful/fetch.js +154 -0
- package/dist/contentful/fetch.js.map +1 -0
- package/dist/contentful/references.d.ts +7 -0
- package/dist/contentful/references.d.ts.map +1 -0
- package/dist/contentful/references.js +12 -0
- package/dist/contentful/references.js.map +1 -0
- package/dist/contentful/write.d.ts +16 -0
- package/dist/contentful/write.d.ts.map +1 -0
- package/dist/contentful/write.js +75 -0
- package/dist/contentful/write.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/output/json.d.ts +47 -0
- package/dist/output/json.d.ts.map +1 -0
- package/dist/output/json.js +87 -0
- package/dist/output/json.js.map +1 -0
- package/dist/output/mode.d.ts +3 -0
- package/dist/output/mode.d.ts.map +1 -0
- package/dist/output/mode.js +16 -0
- package/dist/output/mode.js.map +1 -0
- package/dist/output/print.d.ts +14 -0
- package/dist/output/print.d.ts.map +1 -0
- package/dist/output/print.js +61 -0
- package/dist/output/print.js.map +1 -0
- package/dist/rtf/fromMarkdown.d.ts +19 -0
- package/dist/rtf/fromMarkdown.d.ts.map +1 -0
- package/dist/rtf/fromMarkdown.js +230 -0
- package/dist/rtf/fromMarkdown.js.map +1 -0
- package/dist/rtf/toMarkdown.d.ts +6 -0
- package/dist/rtf/toMarkdown.d.ts.map +1 -0
- package/dist/rtf/toMarkdown.js +105 -0
- package/dist/rtf/toMarkdown.js.map +1 -0
- package/dist/session/refs.d.ts +35 -0
- package/dist/session/refs.d.ts.map +1 -0
- package/dist/session/refs.js +128 -0
- package/dist/session/refs.js.map +1 -0
- package/dist/session/state.d.ts +91 -0
- package/dist/session/state.d.ts.map +1 -0
- package/dist/session/state.js +61 -0
- package/dist/session/state.js.map +1 -0
- package/dist/session/store.d.ts +10 -0
- package/dist/session/store.d.ts.map +1 -0
- package/dist/session/store.js +62 -0
- package/dist/session/store.js.map +1 -0
- package/dist/snapshot/render.d.ts +15 -0
- package/dist/snapshot/render.d.ts.map +1 -0
- package/dist/snapshot/render.js +166 -0
- package/dist/snapshot/render.js.map +1 -0
- package/dist/validation/allowed-types.d.ts +7 -0
- package/dist/validation/allowed-types.d.ts.map +1 -0
- package/dist/validation/allowed-types.js +16 -0
- package/dist/validation/allowed-types.js.map +1 -0
- package/package.json +61 -0
- package/skills/core/SKILL.md +483 -0
- package/skills/manifest.json +7 -0
- package/skills/navigation/SKILL.md +18 -0
- package/skills/rich-text/SKILL.md +23 -0
- package/skills/screenshots/SKILL.md +32 -0
- package/skills/templates/SKILL.md +16 -0
|
@@ -0,0 +1,196 @@
|
|
|
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, successMsg } from '../output/print.js';
|
|
8
|
+
import { buildTree, getNavigationItemsFieldName, makeEntryLink, resolveRefToId, } from '../session/refs.js';
|
|
9
|
+
import { requireSession, saveSession } from '../session/store.js';
|
|
10
|
+
export function registerNavCommand(program) {
|
|
11
|
+
const nav = program.command('nav').description('Manage navigation entries');
|
|
12
|
+
nav
|
|
13
|
+
.command('open <slug-or-id>')
|
|
14
|
+
.description('Load a navigation entry by slug or ID')
|
|
15
|
+
.option('--id', 'Treat argument as entry ID')
|
|
16
|
+
.action(async (slugOrId, opts, cmd) => {
|
|
17
|
+
const parentOpts = cmd.parent?.parent?.opts() ?? {};
|
|
18
|
+
try {
|
|
19
|
+
const config = loadConfig(parentOpts.config);
|
|
20
|
+
const { key, space } = resolveSpaceConfig(config, parentOpts.space);
|
|
21
|
+
const env = await createSafeEnvironment(space);
|
|
22
|
+
const locale = space.defaultLocale;
|
|
23
|
+
let navEntry;
|
|
24
|
+
if (opts.id) {
|
|
25
|
+
navEntry = await env.getEntry(slugOrId);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
const found = await env.getEntries({
|
|
29
|
+
content_type: 'navigation',
|
|
30
|
+
'fields.slug': slugOrId,
|
|
31
|
+
limit: 1,
|
|
32
|
+
});
|
|
33
|
+
navEntry = found.items[0] ?? (await findEntryBySlug(env, slugOrId, locale));
|
|
34
|
+
}
|
|
35
|
+
if (!navEntry) {
|
|
36
|
+
errorMsg(`Navigation entry "${slugOrId}" not found.`);
|
|
37
|
+
process.exit(1);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const rootEntryId = navEntry.sys.id;
|
|
41
|
+
const entries = await fetchEntryTree(env, rootEntryId);
|
|
42
|
+
entries[rootEntryId] = serializeEntry(navEntry);
|
|
43
|
+
const { refs, refsByEntry, treeNodes } = buildTree(rootEntryId, entries, locale);
|
|
44
|
+
const session = {
|
|
45
|
+
version: 1,
|
|
46
|
+
spaceKey: key,
|
|
47
|
+
spaceId: space.spaceId,
|
|
48
|
+
environment: space.environment,
|
|
49
|
+
defaultLocale: locale,
|
|
50
|
+
rootEntryId,
|
|
51
|
+
rootEntryType: 'navigation',
|
|
52
|
+
fetchedAt: new Date().toISOString(),
|
|
53
|
+
entries,
|
|
54
|
+
originalEntries: JSON.parse(JSON.stringify(entries)),
|
|
55
|
+
refs,
|
|
56
|
+
refsByEntry,
|
|
57
|
+
treeNodes,
|
|
58
|
+
modifiedEntryIds: [],
|
|
59
|
+
pendingDeletions: [],
|
|
60
|
+
};
|
|
61
|
+
saveSession(session);
|
|
62
|
+
printNavTree(session, locale);
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
errorMsg(err instanceof Error ? err.message : String(err));
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
nav
|
|
70
|
+
.command('add')
|
|
71
|
+
.description('Add a navigation item to the navigation')
|
|
72
|
+
.requiredOption('--label <label>', 'Display label')
|
|
73
|
+
.option('--slug <slug>', 'Link to a page by slug')
|
|
74
|
+
.option('--href <href>', 'External URL')
|
|
75
|
+
.option('--after <ref>', 'Insert after this ref')
|
|
76
|
+
.action(async (opts, _cmd, cmd2) => {
|
|
77
|
+
const parentOpts = cmd2.parent?.parent?.opts() ?? {};
|
|
78
|
+
try {
|
|
79
|
+
const session = requireSession();
|
|
80
|
+
const locale = session.defaultLocale;
|
|
81
|
+
const config = loadConfig(parentOpts.config);
|
|
82
|
+
const { space } = resolveSpaceConfig(config, session.spaceKey);
|
|
83
|
+
const env = await createSafeEnvironment(space);
|
|
84
|
+
const fields = {
|
|
85
|
+
label: { [locale]: opts.label },
|
|
86
|
+
};
|
|
87
|
+
if (opts.slug) {
|
|
88
|
+
const slugValue = opts.slug.startsWith('/') ? opts.slug.slice(1) : opts.slug;
|
|
89
|
+
const pages = await env.getEntries({
|
|
90
|
+
'fields.slug': slugValue,
|
|
91
|
+
'content_type[in]': 'page,article',
|
|
92
|
+
limit: 1,
|
|
93
|
+
});
|
|
94
|
+
const page = pages.items[0];
|
|
95
|
+
if (page) {
|
|
96
|
+
fields['page'] = {
|
|
97
|
+
[locale]: { sys: { type: 'Link', linkType: 'Entry', id: page.sys.id } },
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
else if (opts.href) {
|
|
102
|
+
fields['externalUrl'] = { [locale]: opts.href };
|
|
103
|
+
}
|
|
104
|
+
const navItem = await env.createEntry('navigationItem', fields);
|
|
105
|
+
session.entries[navItem.sys.id] = serializeEntry(navItem);
|
|
106
|
+
const rootEntry = session.entries[session.rootEntryId];
|
|
107
|
+
if (!rootEntry) {
|
|
108
|
+
errorMsg('Root entry not found in session.');
|
|
109
|
+
process.exit(1);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const itemsFieldId = getNavigationItemsFieldName(rootEntry, locale);
|
|
113
|
+
if (!rootEntry.fields[itemsFieldId]) {
|
|
114
|
+
rootEntry.fields[itemsFieldId] = {};
|
|
115
|
+
}
|
|
116
|
+
const itemsMap = rootEntry.fields[itemsFieldId];
|
|
117
|
+
if (!itemsMap[locale])
|
|
118
|
+
itemsMap[locale] = [];
|
|
119
|
+
const arr = itemsMap[locale];
|
|
120
|
+
if (opts.after) {
|
|
121
|
+
const afterId = resolveRefToId(session, opts.after);
|
|
122
|
+
const afterIdx = arr.findIndex((item) => isEntryLink(item) && item.sys.id === afterId);
|
|
123
|
+
arr.splice(afterIdx >= 0 ? afterIdx + 1 : arr.length, 0, makeEntryLink(navItem.sys.id));
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
arr.push(makeEntryLink(navItem.sys.id));
|
|
127
|
+
}
|
|
128
|
+
if (!session.modifiedEntryIds.includes(session.rootEntryId)) {
|
|
129
|
+
session.modifiedEntryIds.push(session.rootEntryId);
|
|
130
|
+
}
|
|
131
|
+
const { refs, refsByEntry, treeNodes } = buildTree(session.rootEntryId, session.entries, locale);
|
|
132
|
+
session.refs = refs;
|
|
133
|
+
session.refsByEntry = refsByEntry;
|
|
134
|
+
session.treeNodes = treeNodes;
|
|
135
|
+
saveSession(session);
|
|
136
|
+
successMsg(`Added nav item "${opts.label}" (${navItem.sys.id})`);
|
|
137
|
+
printNavTree(session, locale);
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
errorMsg(err instanceof Error ? err.message : String(err));
|
|
141
|
+
process.exit(1);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
nav
|
|
145
|
+
.command('remove <ref>')
|
|
146
|
+
.description('Remove a navigation item')
|
|
147
|
+
.action((_ref, _opts, _cmd) => {
|
|
148
|
+
errorMsg('Use "cms-edit remove <ref>" to remove a navigation item from its parent.');
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
function printNavTree(session, locale) {
|
|
152
|
+
if (isJsonMode()) {
|
|
153
|
+
const items = session.treeNodes
|
|
154
|
+
.filter((n) => n.entryId !== session.rootEntryId)
|
|
155
|
+
.map((node) => {
|
|
156
|
+
const entry = session.entries[node.entryId];
|
|
157
|
+
if (!entry)
|
|
158
|
+
return null;
|
|
159
|
+
const f = entry.fields;
|
|
160
|
+
const getField = (id) => f[id]?.[locale] ?? f[id]?.['en-US'] ?? null;
|
|
161
|
+
return {
|
|
162
|
+
ref: node.ref,
|
|
163
|
+
entryId: node.entryId,
|
|
164
|
+
label: getField('label'),
|
|
165
|
+
externalUrl: getField('externalUrl'),
|
|
166
|
+
page: f['page']
|
|
167
|
+
? { id: f['page'][locale]?.sys?.id ?? null }
|
|
168
|
+
: null,
|
|
169
|
+
depth: node.depth,
|
|
170
|
+
parentRef: session.treeNodes.find((n) => n.entryId === node.parentId)?.ref ?? null,
|
|
171
|
+
};
|
|
172
|
+
})
|
|
173
|
+
.filter((x) => x !== null);
|
|
174
|
+
console.log(JSON.stringify({ rootId: session.rootEntryId, items }, null, 2));
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
console.log(`\n${pc.bold('Navigation:')} ${pc.dim(session.rootEntryId)}\n`);
|
|
178
|
+
for (const node of session.treeNodes) {
|
|
179
|
+
if (node.entryId === session.rootEntryId)
|
|
180
|
+
continue;
|
|
181
|
+
const entry = session.entries[node.entryId];
|
|
182
|
+
if (!entry)
|
|
183
|
+
continue;
|
|
184
|
+
const label = String(entry.fields['label']?.[locale] ?? entry.fields['label']?.['en-US'] ?? node.entryId);
|
|
185
|
+
const indent = ' '.repeat(node.depth);
|
|
186
|
+
console.log(`${indent}${pc.bold(node.ref)} ${pc.cyan(label)}`);
|
|
187
|
+
}
|
|
188
|
+
console.log('');
|
|
189
|
+
}
|
|
190
|
+
function isEntryLink(item) {
|
|
191
|
+
return (typeof item === 'object' &&
|
|
192
|
+
item !== null &&
|
|
193
|
+
'sys' in item &&
|
|
194
|
+
item.sys?.linkType === 'Entry');
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=nav.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nav.js","sourceRoot":"","sources":["../../src/commands/nav.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open.d.ts","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyE1D"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { loadConfig, resolveSpaceConfig } from '../config/load.js';
|
|
2
|
+
import { createSafeEnvironment } from '../contentful/client.js';
|
|
3
|
+
import { fetchEntryTree, findEntryBySlug, serializeEntry } from '../contentful/fetch.js';
|
|
4
|
+
import { errorMsg, infoMsg } from '../output/print.js';
|
|
5
|
+
import { buildTree } from '../session/refs.js';
|
|
6
|
+
import { saveSession } from '../session/store.js';
|
|
7
|
+
import { renderSnapshot } from '../snapshot/render.js';
|
|
8
|
+
export function registerOpenCommand(program) {
|
|
9
|
+
program
|
|
10
|
+
.command('open <slug-or-id>')
|
|
11
|
+
.description('Load a page, article, template, or navigation by slug (or entry ID with --id) and start a session')
|
|
12
|
+
.option('--id', 'Treat the argument as a Contentful entry ID instead of a slug')
|
|
13
|
+
.action(async (slugOrId, opts, cmd) => {
|
|
14
|
+
const parentOpts = cmd.parent?.opts() ?? {};
|
|
15
|
+
try {
|
|
16
|
+
const config = loadConfig(parentOpts.config);
|
|
17
|
+
const { key, space } = resolveSpaceConfig(config, parentOpts.space);
|
|
18
|
+
const env = await createSafeEnvironment(space);
|
|
19
|
+
const locale = space.defaultLocale;
|
|
20
|
+
infoMsg(`Loading ${opts.id ? 'entry' : 'slug'} "${slugOrId}" from space "${key}"…`);
|
|
21
|
+
let rootEntry;
|
|
22
|
+
if (opts.id) {
|
|
23
|
+
rootEntry = await env.getEntry(slugOrId);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
const found = await findEntryBySlug(env, slugOrId, locale);
|
|
27
|
+
if (!found) {
|
|
28
|
+
errorMsg(`No entry found with slug "${slugOrId}"`);
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
rootEntry = found;
|
|
32
|
+
}
|
|
33
|
+
const rootEntryId = rootEntry.sys.id;
|
|
34
|
+
const contentTypeId = rootEntry.sys.contentType.sys.id;
|
|
35
|
+
const rootEntryType = contentTypeId === 'page'
|
|
36
|
+
? 'page'
|
|
37
|
+
: contentTypeId === 'article'
|
|
38
|
+
? 'article'
|
|
39
|
+
: contentTypeId === 'navigation'
|
|
40
|
+
? 'navigation'
|
|
41
|
+
: contentTypeId === 'template'
|
|
42
|
+
? 'template'
|
|
43
|
+
: 'page';
|
|
44
|
+
infoMsg(`Fetching entry tree…`);
|
|
45
|
+
const entries = await fetchEntryTree(env, rootEntryId);
|
|
46
|
+
entries[rootEntryId] = serializeEntry(rootEntry);
|
|
47
|
+
const { refs, refsByEntry, treeNodes } = buildTree(rootEntryId, entries, locale);
|
|
48
|
+
const session = {
|
|
49
|
+
version: 1,
|
|
50
|
+
spaceKey: key,
|
|
51
|
+
spaceId: space.spaceId,
|
|
52
|
+
environment: space.environment,
|
|
53
|
+
defaultLocale: locale,
|
|
54
|
+
rootEntryId,
|
|
55
|
+
rootEntryType,
|
|
56
|
+
fetchedAt: new Date().toISOString(),
|
|
57
|
+
entries,
|
|
58
|
+
originalEntries: JSON.parse(JSON.stringify(entries)),
|
|
59
|
+
refs,
|
|
60
|
+
refsByEntry,
|
|
61
|
+
treeNodes,
|
|
62
|
+
modifiedEntryIds: [],
|
|
63
|
+
pendingDeletions: [],
|
|
64
|
+
};
|
|
65
|
+
saveSession(session);
|
|
66
|
+
renderSnapshot(session);
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
errorMsg(err instanceof Error ? err.message : String(err));
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=open.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/commands/read.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAEvF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoG1D"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/** biome-ignore-all lint/suspicious/noConsole: Console output is intentional in CLI */
|
|
2
|
+
import pc from 'picocolors';
|
|
3
|
+
import { entryFieldsToJson, entryToJson } from '../output/json.js';
|
|
4
|
+
import { isJsonMode } from '../output/mode.js';
|
|
5
|
+
import { errorMsg, statusBadge } from '../output/print.js';
|
|
6
|
+
import { rtfToMarkdown } from '../rtf/toMarkdown.js';
|
|
7
|
+
import { resolveRef } from '../session/refs.js';
|
|
8
|
+
import { getEntryLabel, getEntryStatus, getEntryTypeLabel } from '../session/state.js';
|
|
9
|
+
import { requireSession } from '../session/store.js';
|
|
10
|
+
import { renderFieldValue, renderSnapshot } from '../snapshot/render.js';
|
|
11
|
+
export function registerReadCommand(program) {
|
|
12
|
+
program
|
|
13
|
+
.command('read [ref] [field]')
|
|
14
|
+
.description('Read all fields of a ref entry, or a specific field. Omit ref to re-print snapshot.')
|
|
15
|
+
.option('--json', 'Output as JSON (entry object, or field value)')
|
|
16
|
+
.action((ref, field, opts) => {
|
|
17
|
+
try {
|
|
18
|
+
const session = requireSession();
|
|
19
|
+
if (!ref) {
|
|
20
|
+
renderSnapshot(session);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const entry = resolveRef(session, ref);
|
|
24
|
+
const locale = session.defaultLocale;
|
|
25
|
+
const isModified = session.modifiedEntryIds.includes(entry.sys.id);
|
|
26
|
+
const status = getEntryStatus(entry, isModified);
|
|
27
|
+
if (opts.json || isJsonMode()) {
|
|
28
|
+
if (field) {
|
|
29
|
+
const fieldData = entry.fields[field];
|
|
30
|
+
if (!fieldData) {
|
|
31
|
+
errorMsg(`Field "${field}" not found on this entry.`);
|
|
32
|
+
process.exit(1);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const serialized = entryFieldsToJson({ [field]: fieldData }, locale);
|
|
36
|
+
console.log(JSON.stringify(serialized[field] ?? null, null, 2));
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
const json = entryToJson({
|
|
40
|
+
sys: {
|
|
41
|
+
id: entry.sys.id,
|
|
42
|
+
contentType: { sys: { id: entry.sys.contentType.sys.id } },
|
|
43
|
+
publishedVersion: entry.sys.publishedVersion,
|
|
44
|
+
updatedAt: entry.sys.updatedAt,
|
|
45
|
+
},
|
|
46
|
+
fields: entry.fields,
|
|
47
|
+
}, locale);
|
|
48
|
+
console.log(JSON.stringify(json, null, 2));
|
|
49
|
+
}
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (field) {
|
|
53
|
+
const fieldData = entry.fields[field];
|
|
54
|
+
if (!fieldData) {
|
|
55
|
+
errorMsg(`Field "${field}" not found on this entry.`);
|
|
56
|
+
const available = Object.keys(entry.fields).join(', ');
|
|
57
|
+
console.log(pc.dim(`Available fields: ${available}`));
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
const value = fieldData[locale] ?? fieldData['en-US'];
|
|
61
|
+
if (isRtfDocument(value)) {
|
|
62
|
+
console.log(pc.bold(`\n${field} (rich text):\n`));
|
|
63
|
+
console.log(rtfToMarkdown(value));
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
console.log(pc.bold(`\n${field}:\n`));
|
|
67
|
+
console.log(renderFieldValue(value));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
const ref2 = session.refsByEntry[entry.sys.id] ?? '?';
|
|
72
|
+
const typeLabel = getEntryTypeLabel(entry, locale);
|
|
73
|
+
const displayLabel = getEntryLabel(entry, locale);
|
|
74
|
+
console.log(`\n${pc.bold(ref2)} ${pc.blue(typeLabel)} ${pc.white(`"${displayLabel}"`)} ${statusBadge(status)}`);
|
|
75
|
+
console.log(pc.dim(`Entry ID: ${entry.sys.id} v${entry.sys.version} Content type: ${entry.sys.contentType.sys.id}\n`));
|
|
76
|
+
for (const [fieldId, fieldData] of Object.entries(entry.fields)) {
|
|
77
|
+
const value = fieldData[locale] ?? fieldData['en-US'];
|
|
78
|
+
const label = pc.bold(`${fieldId}:`).padEnd(30);
|
|
79
|
+
if (isRtfDocument(value)) {
|
|
80
|
+
console.log(`${label} ${pc.dim('[Rich text]')} — use: cms-edit read ${ref2} ${fieldId}`);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
const rendered = renderFieldValue(value);
|
|
84
|
+
const firstLine = rendered.split('\n')[0] ?? rendered;
|
|
85
|
+
console.log(`${label} ${firstLine}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
console.log('');
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
errorMsg(err instanceof Error ? err.message : String(err));
|
|
93
|
+
process.exit(1);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
function isRtfDocument(value) {
|
|
98
|
+
return (typeof value === 'object' &&
|
|
99
|
+
value !== null &&
|
|
100
|
+
value.nodeType === 'document');
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/commands/read.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAEvF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyG5D"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/** biome-ignore-all lint/suspicious/noConsole: Console output is intentional in CLI */
|
|
2
|
+
import { loadConfig, resolveSpaceConfig } from '../config/load.js';
|
|
3
|
+
import { createSafeEnvironment } from '../contentful/client.js';
|
|
4
|
+
import { countInboundReferences } from '../contentful/references.js';
|
|
5
|
+
import { isJsonMode } from '../output/mode.js';
|
|
6
|
+
import { errorMsg, infoMsg, successMsg, warnMsg } from '../output/print.js';
|
|
7
|
+
import { buildTree, findTreeNode, resolveRefToId } from '../session/refs.js';
|
|
8
|
+
import { requireSession, saveSession } from '../session/store.js';
|
|
9
|
+
import { renderSnapshot } from '../snapshot/render.js';
|
|
10
|
+
export function registerRemoveCommand(program) {
|
|
11
|
+
program
|
|
12
|
+
.command('remove <ref>')
|
|
13
|
+
.description('Unlink a component or collection from the page.\n' +
|
|
14
|
+
'If the entry is unreferenced elsewhere and is a draft, it will be deleted on save.')
|
|
15
|
+
.action(async (ref, _opts, cmd) => {
|
|
16
|
+
const parentOpts = cmd.parent?.opts() ?? {};
|
|
17
|
+
try {
|
|
18
|
+
const session = requireSession();
|
|
19
|
+
const locale = session.defaultLocale;
|
|
20
|
+
const entryId = resolveRefToId(session, ref);
|
|
21
|
+
const node = findTreeNode(session, ref);
|
|
22
|
+
if (!node) {
|
|
23
|
+
errorMsg(`Ref "${ref}" not found in the content tree.`);
|
|
24
|
+
process.exit(1);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if (!node.parentId || !node.parentField) {
|
|
28
|
+
errorMsg(`Cannot remove the root entry.`);
|
|
29
|
+
process.exit(1);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const parentEntry = session.entries[node.parentId];
|
|
33
|
+
if (!parentEntry) {
|
|
34
|
+
errorMsg(`Parent entry not found.`);
|
|
35
|
+
process.exit(1);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
// Remove the link from the parent's content array
|
|
39
|
+
const fieldData = parentEntry.fields[node.parentField];
|
|
40
|
+
if (fieldData) {
|
|
41
|
+
const arr = fieldData[locale];
|
|
42
|
+
if (Array.isArray(arr)) {
|
|
43
|
+
const idx = arr.findIndex((item) => typeof item === 'object' &&
|
|
44
|
+
item !== null &&
|
|
45
|
+
'sys' in item &&
|
|
46
|
+
item.sys.id === entryId);
|
|
47
|
+
if (idx >= 0)
|
|
48
|
+
arr.splice(idx, 1);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (!session.modifiedEntryIds.includes(node.parentId)) {
|
|
52
|
+
session.modifiedEntryIds.push(node.parentId);
|
|
53
|
+
}
|
|
54
|
+
// Check if the entry should be deleted (draft-only + no other references)
|
|
55
|
+
const targetEntry = session.entries[entryId];
|
|
56
|
+
const isPublished = !!targetEntry?.sys.publishedVersion;
|
|
57
|
+
if (!isPublished) {
|
|
58
|
+
try {
|
|
59
|
+
const config = loadConfig(parentOpts.config);
|
|
60
|
+
const { space } = resolveSpaceConfig(config, session.spaceKey);
|
|
61
|
+
const env = await createSafeEnvironment(space);
|
|
62
|
+
const refCount = await countInboundReferences(env, entryId);
|
|
63
|
+
if (refCount <= 1) {
|
|
64
|
+
if (!session.pendingDeletions.includes(entryId)) {
|
|
65
|
+
session.pendingDeletions.push(entryId);
|
|
66
|
+
}
|
|
67
|
+
infoMsg(`Entry ${ref} is unreferenced and draft-only — will be deleted on save.`);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
warnMsg(`Entry ${ref} is referenced by ${refCount - 1} other entr${refCount - 1 === 1 ? 'y' : 'ies'} — unlinking only.`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
warnMsg(`Could not check references for ${ref} — unlinking only.`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
warnMsg(`Entry ${ref} is published — unlinking only. Delete it manually in Contentful if needed.`);
|
|
79
|
+
}
|
|
80
|
+
// Rebuild tree without the removed entry
|
|
81
|
+
delete session.entries[entryId];
|
|
82
|
+
const { refs, refsByEntry, treeNodes } = buildTree(session.rootEntryId, session.entries, locale);
|
|
83
|
+
session.refs = refs;
|
|
84
|
+
session.refsByEntry = refsByEntry;
|
|
85
|
+
session.treeNodes = treeNodes;
|
|
86
|
+
saveSession(session);
|
|
87
|
+
successMsg(`Removed ${ref} from the page.`);
|
|
88
|
+
if (!isJsonMode()) {
|
|
89
|
+
renderSnapshot(session);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
errorMsg(err instanceof Error ? err.message : String(err));
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=remove.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rtf.d.ts","sourceRoot":"","sources":["../../src/commands/rtf.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYzC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsIzD"}
|