@se-studio/contentful-cms 1.0.19 → 1.0.21

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 (106) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +3 -13
  3. package/dist/bin/cms-edit.js +66 -9
  4. package/dist/bin/cms-edit.js.map +1 -1
  5. package/dist/commands/add.d.ts.map +1 -1
  6. package/dist/commands/add.js +8 -5
  7. package/dist/commands/add.js.map +1 -1
  8. package/dist/commands/asset.d.ts.map +1 -1
  9. package/dist/commands/asset.js +122 -16
  10. package/dist/commands/asset.js.map +1 -1
  11. package/dist/commands/backup.js.map +1 -1
  12. package/dist/commands/diff.d.ts.map +1 -1
  13. package/dist/commands/diff.js +119 -26
  14. package/dist/commands/diff.js.map +1 -1
  15. package/dist/commands/discard.d.ts.map +1 -1
  16. package/dist/commands/discard.js +26 -0
  17. package/dist/commands/discard.js.map +1 -1
  18. package/dist/commands/entry-search.d.ts.map +1 -1
  19. package/dist/commands/entry-search.js +10 -1
  20. package/dist/commands/entry-search.js.map +1 -1
  21. package/dist/commands/health.d.ts +4 -0
  22. package/dist/commands/health.d.ts.map +1 -0
  23. package/dist/commands/health.js +167 -0
  24. package/dist/commands/health.js.map +1 -0
  25. package/dist/commands/list.d.ts.map +1 -1
  26. package/dist/commands/list.js +7 -0
  27. package/dist/commands/list.js.map +1 -1
  28. package/dist/commands/nav.js.map +1 -1
  29. package/dist/commands/open.d.ts.map +1 -1
  30. package/dist/commands/open.js +3 -11
  31. package/dist/commands/open.js.map +1 -1
  32. package/dist/commands/peek.d.ts +4 -0
  33. package/dist/commands/peek.d.ts.map +1 -0
  34. package/dist/commands/peek.js +86 -0
  35. package/dist/commands/peek.js.map +1 -0
  36. package/dist/commands/restore.js +2 -2
  37. package/dist/commands/restore.js.map +1 -1
  38. package/dist/commands/revert.d.ts +4 -0
  39. package/dist/commands/revert.d.ts.map +1 -0
  40. package/dist/commands/revert.js +142 -0
  41. package/dist/commands/revert.js.map +1 -0
  42. package/dist/commands/rtf.d.ts +1 -0
  43. package/dist/commands/rtf.d.ts.map +1 -1
  44. package/dist/commands/rtf.js +308 -14
  45. package/dist/commands/rtf.js.map +1 -1
  46. package/dist/commands/run.d.ts +4 -0
  47. package/dist/commands/run.d.ts.map +1 -0
  48. package/dist/commands/run.js +290 -0
  49. package/dist/commands/run.js.map +1 -0
  50. package/dist/commands/schema.d.ts +4 -0
  51. package/dist/commands/schema.d.ts.map +1 -0
  52. package/dist/commands/schema.js +119 -0
  53. package/dist/commands/schema.js.map +1 -0
  54. package/dist/commands/screenshot.d.ts.map +1 -1
  55. package/dist/commands/screenshot.js +8 -0
  56. package/dist/commands/screenshot.js.map +1 -1
  57. package/dist/commands/sitemap.d.ts +4 -0
  58. package/dist/commands/sitemap.d.ts.map +1 -0
  59. package/dist/commands/sitemap.js +134 -0
  60. package/dist/commands/sitemap.js.map +1 -0
  61. package/dist/contentful/assets.d.ts +14 -1
  62. package/dist/contentful/assets.d.ts.map +1 -1
  63. package/dist/contentful/assets.js +24 -2
  64. package/dist/contentful/assets.js.map +1 -1
  65. package/dist/contentful/client.d.ts +16 -12
  66. package/dist/contentful/client.d.ts.map +1 -1
  67. package/dist/contentful/client.js +12 -21
  68. package/dist/contentful/client.js.map +1 -1
  69. package/dist/contentful/fetch.d.ts +5 -6
  70. package/dist/contentful/fetch.d.ts.map +1 -1
  71. package/dist/contentful/fetch.js +8 -5
  72. package/dist/contentful/fetch.js.map +1 -1
  73. package/dist/contentful/write.d.ts.map +1 -1
  74. package/dist/contentful/write.js +2 -3
  75. package/dist/contentful/write.js.map +1 -1
  76. package/dist/rtf/replacePlainText.d.ts +52 -9
  77. package/dist/rtf/replacePlainText.d.ts.map +1 -1
  78. package/dist/rtf/replacePlainText.js +169 -63
  79. package/dist/rtf/replacePlainText.js.map +1 -1
  80. package/dist/session/state.d.ts +7 -1
  81. package/dist/session/state.d.ts.map +1 -1
  82. package/dist/session/state.js +21 -0
  83. package/dist/session/state.js.map +1 -1
  84. package/dist/session/store.d.ts +10 -4
  85. package/dist/session/store.d.ts.map +1 -1
  86. package/dist/session/store.js +46 -11
  87. package/dist/session/store.js.map +1 -1
  88. package/dist/telemetry/index.d.ts +10 -0
  89. package/dist/telemetry/index.d.ts.map +1 -0
  90. package/dist/telemetry/index.js +11 -0
  91. package/dist/telemetry/index.js.map +1 -0
  92. package/dist/telemetry/local.d.ts +9 -0
  93. package/dist/telemetry/local.d.ts.map +1 -0
  94. package/dist/telemetry/local.js +21 -0
  95. package/dist/telemetry/local.js.map +1 -0
  96. package/dist/telemetry/types.d.ts +29 -0
  97. package/dist/telemetry/types.d.ts.map +1 -0
  98. package/dist/telemetry/types.js +2 -0
  99. package/dist/telemetry/types.js.map +1 -0
  100. package/package.json +4 -4
  101. package/skills/core/SKILL.md +84 -0
  102. package/skills/rich-text/SKILL.md +63 -0
  103. package/dist/commands/export-converted.d.ts +0 -8
  104. package/dist/commands/export-converted.d.ts.map +0 -1
  105. package/dist/commands/export-converted.js +0 -62
  106. package/dist/commands/export-converted.js.map +0 -1
@@ -0,0 +1,134 @@
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 { serializeEntry } from '../contentful/fetch.js';
6
+ import { isJsonMode } from '../output/mode.js';
7
+ import { errorMsg, infoMsg, statusBadge } from '../output/print.js';
8
+ import { getEntryStatus } from '../session/state.js';
9
+ export function registerSitemapCommand(program) {
10
+ program
11
+ .command('sitemap')
12
+ .description('List all pages (and optionally articles) in the space with their slugs, titles, and publish status.\n' +
13
+ 'No session required. Useful for discovering page slugs before running "cms-edit open".')
14
+ .option('--include <types>', 'Comma-separated content types to include (default: page)', 'page')
15
+ .option('--prefix <slug>', 'Filter to slugs starting with this prefix (e.g. /blog)')
16
+ .option('--status <status>', 'Filter by status: published, draft, changed, pending')
17
+ .option('--sort <by>', 'Sort by: slug (default), updated (most recently updated first)', 'slug')
18
+ .option('--tree', 'Render as indented tree grouped by path depth')
19
+ .option('--limit <n>', 'Maximum number of pages to fetch per content type (default 500)', '500')
20
+ .action(async (opts, cmd) => {
21
+ const parentOpts = cmd.parent?.opts() ?? {};
22
+ try {
23
+ const config = loadConfig(parentOpts.config);
24
+ const { key, space } = resolveSpaceConfig(config, parentOpts.space);
25
+ const env = await createSafeEnvironment(space);
26
+ const locale = space.defaultLocale;
27
+ const maxItems = Number.parseInt(opts.limit, 10) || 500;
28
+ const contentTypes = opts.include
29
+ .split(',')
30
+ .map((s) => s.trim())
31
+ .filter(Boolean);
32
+ infoMsg(`Fetching sitemap for space "${key}"…`);
33
+ const allPages = [];
34
+ for (const ctId of contentTypes) {
35
+ let skip = 0;
36
+ const pageSize = Math.min(maxItems, 200);
37
+ let fetched = 0;
38
+ while (true) {
39
+ const result = await env.getEntries({
40
+ content_type: ctId,
41
+ select: 'sys,fields.slug,fields.title,fields.heading,fields.adminLabel',
42
+ limit: pageSize,
43
+ skip,
44
+ order: 'fields.slug',
45
+ });
46
+ for (const raw of result.items) {
47
+ const entry = serializeEntry(raw);
48
+ const status = getEntryStatus(entry, false);
49
+ // Get slug
50
+ const slugField = entry.fields['slug'];
51
+ const rawSlug = (slugField?.[locale] ?? slugField?.['en-US'] ?? '');
52
+ const slug = rawSlug.startsWith('/') ? rawSlug : `/${rawSlug}`;
53
+ // Get title
54
+ const titleField = entry.fields['title'] ?? entry.fields['heading'] ?? entry.fields['adminLabel'];
55
+ const title = (titleField?.[locale] ?? titleField?.['en-US'] ?? '') || entry.sys.id;
56
+ allPages.push({
57
+ entryId: entry.sys.id,
58
+ slug,
59
+ title,
60
+ status,
61
+ updatedAt: entry.sys.updatedAt,
62
+ });
63
+ }
64
+ fetched += result.items.length;
65
+ skip += result.items.length;
66
+ if (fetched >= result.total || fetched >= maxItems || result.items.length === 0) {
67
+ break;
68
+ }
69
+ }
70
+ }
71
+ // Filter
72
+ let pages = allPages;
73
+ if (opts.prefix) {
74
+ const prefix = opts.prefix.startsWith('/') ? opts.prefix : `/${opts.prefix}`;
75
+ pages = pages.filter((p) => p.slug.startsWith(prefix));
76
+ }
77
+ if (opts.status) {
78
+ pages = pages.filter((p) => p.status === opts.status);
79
+ }
80
+ // Sort
81
+ if (opts.sort === 'updated') {
82
+ pages.sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));
83
+ }
84
+ else {
85
+ pages.sort((a, b) => a.slug.localeCompare(b.slug));
86
+ }
87
+ if (isJsonMode()) {
88
+ console.log(JSON.stringify({ space: key, total: pages.length, pages }, null, 2));
89
+ return;
90
+ }
91
+ const spaceLabel = `Site: ${key} · ${String(pages.length)} page${pages.length !== 1 ? 's' : ''}`;
92
+ console.log(`\n${pc.bold(spaceLabel)}\n`);
93
+ if (pages.length === 0) {
94
+ console.log(pc.dim('No pages found matching your filters.'));
95
+ console.log('');
96
+ return;
97
+ }
98
+ if (opts.tree) {
99
+ renderTree(pages);
100
+ }
101
+ else {
102
+ renderFlat(pages);
103
+ }
104
+ console.log('');
105
+ }
106
+ catch (err) {
107
+ errorMsg(err instanceof Error ? err.message : String(err));
108
+ process.exit(1);
109
+ }
110
+ });
111
+ }
112
+ function renderFlat(pages) {
113
+ const slugWidth = Math.min(50, Math.max(20, ...pages.map((p) => p.slug.length)) + 2);
114
+ const titleWidth = 40;
115
+ for (const p of pages) {
116
+ const slug = p.slug.padEnd(slugWidth);
117
+ const title = truncate(p.title, titleWidth).padEnd(titleWidth + 2);
118
+ const badge = statusBadge(p.status);
119
+ console.log(`${pc.cyan(slug)} ${pc.dim(`"${title}"`)} ${badge}`);
120
+ }
121
+ }
122
+ function renderTree(pages) {
123
+ // Group pages into a prefix tree; render with indentation by depth
124
+ for (const p of pages) {
125
+ const depth = (p.slug.match(/\//g) ?? []).length - 1;
126
+ const indent = ' '.repeat(depth);
127
+ const badge = statusBadge(p.status);
128
+ console.log(`${indent}${pc.cyan(p.slug)} ${pc.dim(`"${truncate(p.title, 40)}"`)}` + ` ${badge}`);
129
+ }
130
+ }
131
+ function truncate(str, max) {
132
+ return str.length > max ? `${str.slice(0, max - 1)}…` : str;
133
+ }
134
+ //# sourceMappingURL=sitemap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sitemap.js","sourceRoot":"","sources":["../../src/commands/sitemap.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAGvF,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAUrD,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CACV,uGAAuG;QACrG,wFAAwF,CAC3F;SACA,MAAM,CAAC,mBAAmB,EAAE,0DAA0D,EAAE,MAAM,CAAC;SAC/F,MAAM,CAAC,iBAAiB,EAAE,wDAAwD,CAAC;SACnF,MAAM,CAAC,mBAAmB,EAAE,sDAAsD,CAAC;SACnF,MAAM,CAAC,aAAa,EAAE,gEAAgE,EAAE,MAAM,CAAC;SAC/F,MAAM,CAAC,QAAQ,EAAE,+CAA+C,CAAC;SACjE,MAAM,CAAC,aAAa,EAAE,iEAAiE,EAAE,KAAK,CAAC;SAC/F,MAAM,CACL,KAAK,EACH,IAOC,EACD,GAAY,EACZ,EAAE;QACF,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,EAAuC,IAAI,EAAE,CAAC;QACjF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC7C,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,kBAAkB,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;YACpE,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;YACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;YAExD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO;iBAC9B,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBACpB,MAAM,CAAC,OAAO,CAAC,CAAC;YAEnB,OAAO,CAAC,+BAA+B,GAAG,IAAI,CAAC,CAAC;YAEhD,MAAM,QAAQ,GAAgB,EAAE,CAAC;YAEjC,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;gBAChC,IAAI,IAAI,GAAG,CAAC,CAAC;gBACb,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;gBACzC,IAAI,OAAO,GAAG,CAAC,CAAC;gBAEhB,OAAO,IAAI,EAAE,CAAC;oBACZ,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC;wBAClC,YAAY,EAAE,IAAI;wBAClB,MAAM,EAAE,+DAA+D;wBACvE,KAAK,EAAE,QAAQ;wBACf,IAAI;wBACJ,KAAK,EAAE,aAAa;qBACrB,CAAC,CAAC;oBAEH,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;wBAC/B,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;wBAClC,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;wBAE5C,WAAW;wBACX,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;wBACvC,MAAM,OAAO,GAAG,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAW,CAAC;wBAC9E,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;wBAE/D,YAAY;wBACZ,MAAM,UAAU,GACd,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;wBACjF,MAAM,KAAK,GACR,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAY,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;wBAEpF,QAAQ,CAAC,IAAI,CAAC;4BACZ,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE;4BACrB,IAAI;4BACJ,KAAK;4BACL,MAAM;4BACN,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS;yBAC/B,CAAC,CAAC;oBACL,CAAC;oBAED,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;oBAC/B,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;oBAE5B,IAAI,OAAO,IAAI,MAAM,CAAC,KAAK,IAAI,OAAO,IAAI,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAChF,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAED,SAAS;YACT,IAAI,KAAK,GAAG,QAAQ,CAAC;YACrB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC7E,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YACzD,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC;YACxD,CAAC;YAED,OAAO;YACP,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YAC/D,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACrD,CAAC;YAED,IAAI,UAAU,EAAE,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACjF,OAAO;YACT,CAAC;YAED,MAAM,UAAU,GAAG,SAAS,GAAG,QAAQ,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACnG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAE1C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC,CAAC;gBAC7D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO;YACT,CAAC;YAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,UAAU,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CACF,CAAC;AACN,CAAC;AAED,SAAS,UAAU,CAAC,KAAkB;IACpC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACrF,MAAM,UAAU,GAAG,EAAE,CAAC;IAEtB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QACnE,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,MAAmD,CAAC,CAAC;QACjF,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAkB;IACpC,mEAAmE;IACnE,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,MAAmD,CAAC,CAAC;QACjF,OAAO,CAAC,GAAG,CACT,GAAG,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,KAAK,EAAE,CACtF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW,EAAE,GAAW;IACxC,OAAO,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AAC9D,CAAC"}
@@ -12,7 +12,20 @@ export interface AssetSummary {
12
12
  /**
13
13
  * Searches Contentful assets by title query string.
14
14
  */
15
- export declare function searchAssets(env: SafeEnvironment, query: string, limit?: number): Promise<AssetSummary[]>;
15
+ export declare function searchAssets(env: SafeEnvironment, query: string, opts?: {
16
+ limit?: number;
17
+ skip?: number;
18
+ mimeTypePrefix?: string;
19
+ }): Promise<AssetSummary[]>;
20
+ export interface BacklinkSummary {
21
+ entryId: string;
22
+ contentType: string;
23
+ label: string;
24
+ }
25
+ /**
26
+ * Returns entries that reference the given asset ID.
27
+ */
28
+ export declare function getAssetBacklinks(env: SafeEnvironment, assetId: string, locale: string): Promise<BacklinkSummary[]>;
16
29
  /**
17
30
  * Fetches a single asset by ID and returns a summary.
18
31
  */
@@ -1 +1 @@
1
- {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/contentful/assets.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE,MAAM,EACb,KAAK,SAAK,GACT,OAAO,CAAC,YAAY,EAAE,CAAC,CAGzB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAQ9B"}
1
+ {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/contentful/assets.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE,MAAM,EACb,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAO,GACpE,OAAO,CAAC,YAAY,EAAE,CAAC,CAYzB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,EAAE,CAAC,CAU5B;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAQ9B"}
@@ -1,10 +1,32 @@
1
1
  /**
2
2
  * Searches Contentful assets by title query string.
3
3
  */
4
- export async function searchAssets(env, query, limit = 10) {
5
- const result = await env.getAssets({ 'fields.title[match]': query, limit });
4
+ export async function searchAssets(env, query, opts = {}) {
5
+ const { limit = 10, skip = 0, mimeTypePrefix } = opts;
6
+ const queryParams = {
7
+ 'fields.title[match]': query,
8
+ limit,
9
+ skip,
10
+ };
11
+ if (mimeTypePrefix) {
12
+ queryParams['fields.file.contentType[match]'] = mimeTypePrefix;
13
+ }
14
+ const result = await env.getAssets(queryParams);
6
15
  return result.items.map(summariseAsset);
7
16
  }
17
+ /**
18
+ * Returns entries that reference the given asset ID.
19
+ */
20
+ export async function getAssetBacklinks(env, assetId, locale) {
21
+ const result = await env.getEntries({ links_to_asset: assetId, limit: 10 });
22
+ return result.items.map((entry) => {
23
+ const ctId = entry.sys.contentType.sys.id;
24
+ const fields = entry.fields;
25
+ const labelField = fields['cmsLabel'] ?? fields['heading'] ?? fields['title'] ?? fields['adminLabel'];
26
+ const label = String(labelField?.[locale] ?? labelField?.['en-US'] ?? entry.sys.id);
27
+ return { entryId: entry.sys.id, contentType: ctId, label };
28
+ });
29
+ }
8
30
  /**
9
31
  * Fetches a single asset by ID and returns a summary.
10
32
  */
@@ -1 +1 @@
1
- {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/contentful/assets.ts"],"names":[],"mappings":"AAcA;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAoB,EACpB,KAAa,EACb,KAAK,GAAG,EAAE;IAEV,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,EAAE,qBAAqB,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5E,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAoB,EACpB,OAAe;IAEf,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,OAAO,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAY;IAClC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,IAUb,CAAC;IACd,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;IACrD,MAAM,QAAQ,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;IAEhC,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE;QAChB,KAAK,EAAE,MAAM,CACV,KAAK,CAAC,MAAM,CAAC,KAA6C,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CACtF;QACD,QAAQ,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE;QAClC,WAAW,EAAE,QAAQ,EAAE,WAAW,IAAI,EAAE;QACxC,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE;QACjD,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK;QACtC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM;QACxC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI;KAC9B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/contentful/assets.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type AssetProps, type CollectionProp, type ContentTypeProps, type EntryProps } from 'contentful-management';
1
2
  import type { SpaceConfig } from '../config/types.js';
2
3
  /**
3
4
  * A restricted CMA client that deliberately does NOT expose publish, unpublish,
@@ -6,24 +7,27 @@ import type { SpaceConfig } from '../config/types.js';
6
7
  *
7
8
  * Safety is enforced at both the Contentful Role level (no publish permissions on
8
9
  * the token) and here at the application level (no publish methods on this interface).
10
+ *
11
+ * Under contentful-management v12+, this is backed by the plain client (scoped with
12
+ * space/environment defaults). Entry and collection types are plain props
13
+ * (`EntryProps`, `CollectionProp`, …), not legacy entity instances.
9
14
  */
10
15
  export interface SafeEnvironment {
11
- getEntry(entryId: string): Promise<import('contentful-management').Entry>;
12
- getEntries(query: Record<string, unknown>): Promise<import('contentful-management').Collection<import('contentful-management').Entry, import('contentful-management').EntryProps>>;
13
- createEntry(contentTypeId: string, fields: Record<string, Record<string, unknown>>): Promise<import('contentful-management').Entry>;
14
- getAsset(assetId: string): Promise<import('contentful-management').Asset>;
15
- getAssets(query?: Record<string, unknown>): Promise<import('contentful-management').Collection<import('contentful-management').Asset, import('contentful-management').AssetProps>>;
16
- getContentType(contentTypeId: string): Promise<import('contentful-management').ContentType>;
17
- getContentTypes(): Promise<import('contentful-management').Collection<import('contentful-management').ContentType, import('contentful-management').ContentTypeProps>>;
16
+ getEntry(entryId: string): Promise<EntryProps>;
17
+ getEntries(query: Record<string, unknown>): Promise<CollectionProp<EntryProps>>;
18
+ createEntry(contentTypeId: string, fields: Record<string, Record<string, unknown>>): Promise<EntryProps>;
19
+ getAsset(assetId: string): Promise<AssetProps>;
20
+ getAssets(query?: Record<string, unknown>): Promise<CollectionProp<AssetProps>>;
21
+ getContentType(contentTypeId: string): Promise<ContentTypeProps>;
22
+ getContentTypes(): Promise<CollectionProp<ContentTypeProps>>;
23
+ /** Saves entry fields as draft (plain `entry.update`). */
24
+ saveDraft(entry: EntryProps): Promise<EntryProps>;
25
+ /** Deletes a draft entry (never published). */
26
+ deleteEntry(entryId: string): Promise<void>;
18
27
  }
19
28
  /**
20
29
  * Creates a safe CMA environment wrapper for the given space config.
21
30
  * The returned object only exposes methods that cannot publish or delete.
22
31
  */
23
32
  export declare function createSafeEnvironment(space: SpaceConfig): Promise<SafeEnvironment>;
24
- /**
25
- * Saves an entry as a draft (never publishes).
26
- * Requires the entry to have been fetched via getEntry so sys.version is current.
27
- */
28
- export declare function saveDraft(entry: import('contentful-management').Entry): Promise<import('contentful-management').Entry>;
29
33
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/contentful/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAItD;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,uBAAuB,EAAE,KAAK,CAAC,CAAC;IAC1E,UAAU,CACR,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CACR,OAAO,uBAAuB,EAAE,UAAU,CACxC,OAAO,uBAAuB,EAAE,KAAK,EACrC,OAAO,uBAAuB,EAAE,UAAU,CAC3C,CACF,CAAC;IACF,WAAW,CACT,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAC9C,OAAO,CAAC,OAAO,uBAAuB,EAAE,KAAK,CAAC,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,uBAAuB,EAAE,KAAK,CAAC,CAAC;IAC1E,SAAS,CACP,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CACR,OAAO,uBAAuB,EAAE,UAAU,CACxC,OAAO,uBAAuB,EAAE,KAAK,EACrC,OAAO,uBAAuB,EAAE,UAAU,CAC3C,CACF,CAAC;IACF,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,uBAAuB,EAAE,WAAW,CAAC,CAAC;IAC5F,eAAe,IAAI,OAAO,CACxB,OAAO,uBAAuB,EAAE,UAAU,CACxC,OAAO,uBAAuB,EAAE,WAAW,EAC3C,OAAO,uBAAuB,EAAE,gBAAgB,CACjD,CACF,CAAC;CACH;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAiBxF;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,KAAK,EAAE,OAAO,uBAAuB,EAAE,KAAK,GAC3C,OAAO,CAAC,OAAO,uBAAuB,EAAE,KAAK,CAAC,CAEhD"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/contentful/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,gBAAgB,EAErB,KAAK,UAAU,EAChB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/C,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;IAChF,WAAW,CACT,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAC9C,OAAO,CAAC,UAAU,CAAC,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/C,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;IAChF,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACjE,eAAe,IAAI,OAAO,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC7D,0DAA0D;IAC1D,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAClD,+CAA+C;IAC/C,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAoBxF"}
@@ -1,31 +1,22 @@
1
- import contentfulManagement from 'contentful-management';
2
- const { createClient } = contentfulManagement;
1
+ import { createClient, } from 'contentful-management';
3
2
  /**
4
3
  * Creates a safe CMA environment wrapper for the given space config.
5
4
  * The returned object only exposes methods that cannot publish or delete.
6
5
  */
7
6
  export async function createSafeEnvironment(space) {
8
- const client = createClient({ accessToken: space.managementToken });
9
- const cmaSpace = await client.getSpace(space.spaceId);
10
- const env = await cmaSpace.getEnvironment(space.environment);
7
+ const client = createClient({ accessToken: space.managementToken }, { defaults: { spaceId: space.spaceId, environmentId: space.environment } });
11
8
  return {
12
- getEntry: (entryId) => env.getEntry(entryId),
13
- getEntries: (query) => env.getEntries(query),
14
- createEntry: async (contentTypeId, fields) => {
15
- const entry = await env.createEntry(contentTypeId, { fields });
16
- return entry;
9
+ getEntry: (entryId) => client.entry.get({ entryId }),
10
+ getEntries: (query) => client.entry.getMany({ query }),
11
+ createEntry: async (contentTypeId, fields) => client.entry.create({ contentTypeId }, { fields }),
12
+ getAsset: (assetId) => client.asset.get({ assetId }),
13
+ getAssets: (query) => client.asset.getMany({ query: query ?? {} }),
14
+ getContentType: (contentTypeId) => client.contentType.get({ contentTypeId }),
15
+ getContentTypes: () => client.contentType.getMany({ query: {} }),
16
+ saveDraft: (entry) => client.entry.update({ entryId: entry.sys.id }, entry),
17
+ deleteEntry: async (entryId) => {
18
+ await client.entry.delete({ entryId });
17
19
  },
18
- getAsset: (assetId) => env.getAsset(assetId),
19
- getAssets: (query) => env.getAssets(query ?? {}),
20
- getContentType: (contentTypeId) => env.getContentType(contentTypeId),
21
- getContentTypes: () => env.getContentTypes(),
22
20
  };
23
21
  }
24
- /**
25
- * Saves an entry as a draft (never publishes).
26
- * Requires the entry to have been fetched via getEntry so sys.version is current.
27
- */
28
- export async function saveDraft(entry) {
29
- return entry.update();
30
- }
31
22
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/contentful/client.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,MAAM,uBAAuB,CAAC;AAGzD,MAAM,EAAE,YAAY,EAAE,GAAG,oBAAoB,CAAC;AA0C9C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,KAAkB;IAC5D,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAE7D,OAAO;QACL,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC5C,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC;QAC5C,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE;YAC3C,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/D,OAAO,KAAK,CAAC;QACf,CAAC;QACD,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC5C,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC;QAChD,cAAc,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,aAAa,CAAC;QACpE,eAAe,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE;KAC7C,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,KAA4C;IAE5C,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/contentful/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,YAAY,GAEb,MAAM,uBAAuB,CAAC;AAgC/B;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,KAAkB;IAC5D,MAAM,MAAM,GAAG,YAAY,CACzB,EAAE,WAAW,EAAE,KAAK,CAAC,eAAe,EAAE,EACtC,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,CAC3E,CAAC;IAEF,OAAO;QACL,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC;QACpD,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC;QACtD,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,CAC3C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;QACpD,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC;QACpD,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;QAClE,cAAc,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,aAAa,EAAE,CAAC;QAC5E,eAAe,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAChE,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC;QAC3E,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YAC7B,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QACzC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,16 +1,15 @@
1
- import type { Entry } from 'contentful-management';
1
+ import type { EntryProps } from 'contentful-management';
2
2
  import type { SerializedEntry } from '../session/state.js';
3
3
  import type { SafeEnvironment } from './client.js';
4
4
  /**
5
5
  * Serializes a CMA Entry into the session's plain-object format.
6
6
  */
7
- export declare function serializeEntry(entry: Entry): SerializedEntry;
7
+ export declare function serializeEntry(entry: EntryProps): SerializedEntry;
8
8
  /**
9
- * Finds an entry by slug field. Searches across page, article, and navigation content types.
10
- * Queries one content type at a time because the Management API does not allow field filters
11
- * when querying multiple content types.
9
+ * Finds an entry by slug field. Searches page, article, articleType, and tag (one content type per query;
10
+ * the Management API does not allow field filters across multiple content types).
12
11
  */
13
- export declare function findEntryBySlug(env: SafeEnvironment, slug: string, _locale: string): Promise<Entry | null>;
12
+ export declare function findEntryBySlug(env: SafeEnvironment, slug: string, _locale: string): Promise<EntryProps | null>;
14
13
  /**
15
14
  * Fetches a full entry tree starting from a root entry ID.
16
15
  * Returns all entries keyed by ID.
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/contentful/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAMnD;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,eAAe,CAa5D;AAKD;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAiBvB;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,eAAe,EACpB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CA2B1C"}
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/contentful/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAMnD;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,eAAe,CAajE;AASD;;;GAGG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAiB5B;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,eAAe,EACpB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CA2B1C"}
@@ -18,12 +18,15 @@ export function serializeEntry(entry) {
18
18
  fields: entry.fields,
19
19
  };
20
20
  }
21
- /** Content types that have a slug field (navigation does not). */
22
- const SLUG_CONTENT_TYPES = ['page', 'article'];
23
21
  /**
24
- * Finds an entry by slug field. Searches across page, article, and navigation content types.
25
- * Queries one content type at a time because the Management API does not allow field filters
26
- * when querying multiple content types.
22
+ * Content types queried by slug for `open` / `peek` / backup.
23
+ * Order matters: first match wins if multiple types share a slug (page before article before taxonomy).
24
+ * Navigation uses its own slug query in nav.ts (navigation entries are opened via `cms-edit nav open`).
25
+ */
26
+ const SLUG_CONTENT_TYPES = ['page', 'article', 'articleType', 'tag'];
27
+ /**
28
+ * Finds an entry by slug field. Searches page, article, articleType, and tag (one content type per query;
29
+ * the Management API does not allow field filters across multiple content types).
27
30
  */
28
31
  export async function findEntryBySlug(env, slug, _locale) {
29
32
  const normalizedSlug = slug.startsWith('/') ? slug.slice(1) : slug;
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/contentful/fetch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/contentful/fetch.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,GAAG,GAAG,CAAC;AACvB,MAAM,cAAc,GAAG,CAAC,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;AAC9E,MAAM,mBAAmB,GAAG,CAAC,UAAU,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;AAElE;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAiB;IAC9C,OAAO;QACL,GAAG,EAAE;YACH,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE;YAChB,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO;YAC1B,gBAAgB,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,IAAI,SAAS;YACzD,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,IAAI,SAAS;YAC/C,WAAW,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE;YAC1D,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS;YAC9B,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS;SAC/B;QACD,MAAM,EAAE,KAAK,CAAC,MAAiD;KAChE,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,CAAU,CAAC;AAE9E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAoB,EACpB,IAAY,EACZ,OAAe;IAEf,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACnE,MAAM,aAAa,GAAG,cAAc,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;IACvE,MAAM,YAAY,GAAG,CAAC,aAAa,EAAE,IAAI,aAAa,EAAE,CAAC,CAAC;IAE1D,KAAK,MAAM,WAAW,IAAI,kBAAkB,EAAE,CAAC;QAC7C,KAAK,MAAM,SAAS,IAAI,YAAY,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC;gBAClC,YAAY,EAAE,WAAW;gBACzB,aAAa,EAAE,SAAS;gBACxB,KAAK,EAAE,CAAC;aACT,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,GAAoB,EACpB,WAAmB;IAEnB,MAAM,OAAO,GAAoC,EAAE,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,CAAC,WAAW,CAAC,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,OAAO,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACvD,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;YACvB,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QAC1F,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjC,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAE1B,MAAM,SAAS,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;YACpD,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;gBAC3B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;oBACzC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,KAAsB;IACnD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;IAE1C,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,SAAS;YAAE,SAAS;QACzB,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;gBAAE,SAAS;YAC1C,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;gBAC/B,IAAI,WAAW,CAAC,IAAI,CAAC;oBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,mBAAmB,EAAE,CAAC;QAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,SAAS;YAAE,SAAS;QACzB,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACnD,IAAI,WAAW,CAAC,WAAW,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,KAAK,MAAM,OAAO,IAAI,CAAC,YAAY,EAAE,aAAa,CAAU,EAAE,CAAC;YAC7D,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,CAAC,SAAS;gBAAE,SAAS;YACzB,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBACnD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;oBAAE,SAAS;gBAC1C,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;oBAC/B,IAAI,WAAW,CAAC,IAAI,CAAC;wBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;QACH,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAU,EAAE,CAAC;YAClD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,CAAC,SAAS;gBAAE,SAAS;YACzB,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBACnD,IAAI,WAAW,CAAC,WAAW,CAAC;oBAAE,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,KAAK,MAAM,OAAO,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAU,EAAE,CAAC;YAC5D,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,CAAC,SAAS;gBAAE,SAAS;YACzB,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBACnD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;oBAAE,SAAS;gBAC1C,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;oBAC/B,IAAI,WAAW,CAAC,IAAI,CAAC;wBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,WAAW,CAAC,IAAa;IAChC,OAAO,CACL,OAAO,IAAI,KAAK,QAAQ;QACxB,IAAI,KAAK,IAAI;QACb,KAAK,IAAI,IAAI;QACb,OAAQ,IAAyB,CAAC,GAAG,KAAK,QAAQ;QACjD,IAAuC,CAAC,GAAG,CAAC,QAAQ,KAAK,OAAO,CAClE,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/contentful/write.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAoDjF"}
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/contentful/write.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmB,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGnD;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAoDjF"}
@@ -1,4 +1,3 @@
1
- import { saveDraft } from './client.js';
2
1
  import { serializeEntry } from './fetch.js';
3
2
  /**
4
3
  * Applies all local modifications to Contentful as drafts.
@@ -18,7 +17,7 @@ export async function applySessionPatches(env, session) {
18
17
  const fresh = await env.getEntry(entryId);
19
18
  // Apply our local field changes on top of the freshly fetched entry
20
19
  mergeFields(fresh, localEntry, session.defaultLocale);
21
- const updated = await saveDraft(fresh);
20
+ const updated = await env.saveDraft(fresh);
22
21
  session.entries[entryId] = serializeEntry(updated);
23
22
  saved.push(entryId);
24
23
  }
@@ -44,7 +43,7 @@ export async function applySessionPatches(env, session) {
44
43
  });
45
44
  continue;
46
45
  }
47
- await fresh.delete();
46
+ await env.deleteEntry(entryId);
48
47
  saved.push(entryId);
49
48
  }
50
49
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/contentful/write.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/contentful/write.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { Document, Inline, Text } from '@contentful/rich-text-types';
1
+ import type { Block, Document, Inline, Text } from '@contentful/rich-text-types';
2
2
  export declare class RichTextReplaceError extends Error {
3
3
  constructor(message: string);
4
4
  }
@@ -12,7 +12,7 @@ export interface ReplaceRtfPlainTextOptions {
12
12
  */
13
13
  replaceMarkdown?: string;
14
14
  /**
15
- * Literal replacement text (no Markdown). Use for quidget tokens like `{*credit_card_id*:...}` so
15
+ * Literal replacement text (no Markdown). Use for tokens containing `*` so
16
16
  * `*` is not parsed as italic.
17
17
  */
18
18
  replacePlain?: string;
@@ -29,9 +29,28 @@ export interface ReplaceRtfPlainTextOptions {
29
29
  */
30
30
  tableCol?: number;
31
31
  /**
32
- * Scope replacements to blocks under the heading whose plain-text matches this string exactly.
32
+ * Restrict search-and-replace to table cells in this row (1-indexed; row 1 = header row).
33
+ * Non-table content is always included. Omit to search all rows.
34
+ */
35
+ tableRow?: number;
36
+ /**
37
+ * Restrict search-and-replace to table rows where any cell contains this literal text.
38
+ * Case-sensitive substring match. Non-table content is always included.
39
+ */
40
+ inRowContaining?: string;
41
+ /**
42
+ * Restrict search-and-replace to the table column whose header cell (row 1) contains
43
+ * this literal text. Case-sensitive substring match. Resolved to a column index before
44
+ * searching; throws {@link RichTextReplaceError} if no header cell matches.
45
+ * If combined with an explicit {@link tableCol}, both must resolve to the same column or
46
+ * an error is thrown.
47
+ */
48
+ inColContaining?: string;
49
+ /**
50
+ * Scope replacements to blocks under the heading whose plain-text matches this string.
51
+ * Leading/trailing whitespace in headings is ignored during comparison.
33
52
  * Blocks before the heading or after the next heading of equal/higher level are excluded.
34
- * Throws {@link RichTextReplaceError} if no heading matches.
53
+ * Throws {@link RichTextReplaceError} if no heading matches (error includes available headings).
35
54
  */
36
55
  section?: string;
37
56
  /**
@@ -40,12 +59,32 @@ export interface ReplaceRtfPlainTextOptions {
40
59
  * Throws {@link RichTextReplaceError} if the Nth occurrence does not exist.
41
60
  */
42
61
  sectionNth?: number;
62
+ /**
63
+ * A regex string that defines "protected spans" in text nodes. Matches whose range falls
64
+ * strictly inside a protected span are skipped (the span itself can still be found/replaced).
65
+ * Example: `'\\{\\*[^{}]*\\*\\}'` to protect `{*...*}` tokens.
66
+ * When omitted, no span protection is applied.
67
+ */
68
+ protectPattern?: string;
69
+ /**
70
+ * When true, count matches and return positions but do not write replacements.
71
+ * The returned `document` is unchanged. `matchCount` and `matchPositions` are still populated.
72
+ */
73
+ dryRun?: boolean;
43
74
  }
44
75
  export interface ReplaceRtfPlainTextResult {
45
76
  document: Document;
46
- /** Number of non-overlapping occurrences of `find` that were replaced (0 in `all` mode if none). */
77
+ /** Number of non-overlapping occurrences of `find` that were replaced (0 if none). */
47
78
  matchCount: number;
79
+ /**
80
+ * Block indices (into `document.content`) that contain at least one match.
81
+ * Populated for all modes; useful for dry-run previews and exactlyOne diagnostics.
82
+ */
83
+ matchPositions: number[];
48
84
  }
85
+ export declare function isHeadingBlock(block: Block): boolean;
86
+ export declare function getHeadingLevel(block: Block): number;
87
+ export declare function extractBlockPlainText(block: Block): string;
49
88
  /**
50
89
  * Replaces plain-text occurrences in a Contentful rich-text document.
51
90
  *
@@ -53,13 +92,17 @@ export interface ReplaceRtfPlainTextResult {
53
92
  * Use `ignoreMarks: true` to match across adjacent sibling text nodes in the same block
54
93
  * (e.g. `**Annual fee: **$95` split by bold).
55
94
  *
56
- * **Quidget protection:** Matches that fall inside an existing `{*...*}` span are always
57
- * skipped this prevents nesting a new quidget inside an already-inserted one.
95
+ * **Protected spans:** Pass `protectPattern` (a regex string) to skip matches that fall inside
96
+ * an existing token matching that pattern. The token itself can still be found/replaced; only
97
+ * shorter matches landing strictly inside it are skipped.
58
98
  *
59
99
  * **Modes:** `all` replaces every non-overlapping occurrence. `exactlyOne` requires exactly
60
- * one occurrence in the entire document or throws {@link RichTextReplaceError}.
100
+ * one occurrence in the entire document or throws {@link RichTextReplaceError} with diagnostics.
101
+ *
102
+ * **Dry run:** Pass `dryRun: true` to count and locate matches without writing changes.
61
103
  *
62
- * @returns A deep-cloned document with replacements applied (input is not mutated).
104
+ * @returns A deep-cloned document with replacements applied (input is not mutated),
105
+ * plus `matchCount` and `matchPositions` (block indices where matches were found).
63
106
  */
64
107
  export declare function replaceRtfPlainText(document: Document, options: ReplaceRtfPlainTextOptions): ReplaceRtfPlainTextResult;
65
108
  export declare function walkTextNodes(inlines: (Text | Inline)[], fn: (parent: (Text | Inline)[], index: number, text: Text) => void): void;
@@ -1 +1 @@
1
- {"version":3,"file":"replacePlainText.d.ts","sourceRoot":"","sources":["../../src/rtf/replacePlainText.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAKjF,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,YAAY,CAAC;AAE3D,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,uBAAuB,CAAC;IAC9B;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,QAAQ,CAAC;IACnB,oGAAoG;IACpG,UAAU,EAAE,MAAM,CAAC;CACpB;AA0ID;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,0BAA0B,GAClC,yBAAyB,CAkC3B;AAoED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC,EAAE,EAC1B,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,GACjE,IAAI,CAaN"}
1
+ {"version":3,"file":"replacePlainText.d.ts","sourceRoot":"","sources":["../../src/rtf/replacePlainText.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAKjF,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,YAAY,CAAC;AAE3D,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,uBAAuB,CAAC;IAC9B;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,QAAQ,CAAC;IACnB,sFAAsF;IACtF,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AA4ED,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAEpD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAEpD;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAI1D;AAgED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,0BAA0B,GAClC,yBAAyB,CA+D3B;AAoHD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC,EAAE,EAC1B,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,GACjE,IAAI,CAaN"}