emdash-emit 0.0.0-stage → 0.1.2

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 (171) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +798 -2
  3. package/dist/bin/emit.d.ts +5 -0
  4. package/dist/bin/emit.d.ts.map +1 -0
  5. package/dist/bin/emit.js +63 -0
  6. package/dist/bin/emit.js.map +1 -0
  7. package/dist/cli/commands/new.d.ts +4 -0
  8. package/dist/cli/commands/new.d.ts.map +1 -0
  9. package/dist/cli/commands/new.js +49 -0
  10. package/dist/cli/commands/new.js.map +1 -0
  11. package/dist/cli/commands/profile.d.ts +3 -0
  12. package/dist/cli/commands/profile.d.ts.map +1 -0
  13. package/dist/cli/commands/profile.js +104 -0
  14. package/dist/cli/commands/profile.js.map +1 -0
  15. package/dist/cli/commands/pull.d.ts +4 -0
  16. package/dist/cli/commands/pull.d.ts.map +1 -0
  17. package/dist/cli/commands/pull.js +157 -0
  18. package/dist/cli/commands/pull.js.map +1 -0
  19. package/dist/cli/commands/push.d.ts +4 -0
  20. package/dist/cli/commands/push.d.ts.map +1 -0
  21. package/dist/cli/commands/push.js +107 -0
  22. package/dist/cli/commands/push.js.map +1 -0
  23. package/dist/cli/commands/status.d.ts +4 -0
  24. package/dist/cli/commands/status.d.ts.map +1 -0
  25. package/dist/cli/commands/status.js +100 -0
  26. package/dist/cli/commands/status.js.map +1 -0
  27. package/dist/cli/context.d.ts +15 -0
  28. package/dist/cli/context.d.ts.map +1 -0
  29. package/dist/cli/context.js +75 -0
  30. package/dist/cli/context.js.map +1 -0
  31. package/dist/client/api.d.ts +19 -0
  32. package/dist/client/api.d.ts.map +1 -0
  33. package/dist/client/api.js +96 -0
  34. package/dist/client/api.js.map +1 -0
  35. package/dist/client/auth.d.ts +48 -0
  36. package/dist/client/auth.d.ts.map +1 -0
  37. package/dist/client/auth.js +165 -0
  38. package/dist/client/auth.js.map +1 -0
  39. package/dist/client/error.d.ts +22 -0
  40. package/dist/client/error.d.ts.map +1 -0
  41. package/dist/client/error.js +57 -0
  42. package/dist/client/error.js.map +1 -0
  43. package/dist/client/http.d.ts +31 -0
  44. package/dist/client/http.d.ts.map +1 -0
  45. package/dist/client/http.js +97 -0
  46. package/dist/client/http.js.map +1 -0
  47. package/dist/client/lock.d.ts +40 -0
  48. package/dist/client/lock.d.ts.map +1 -0
  49. package/dist/client/lock.js +104 -0
  50. package/dist/client/lock.js.map +1 -0
  51. package/dist/client/mapper.d.ts +37 -0
  52. package/dist/client/mapper.d.ts.map +1 -0
  53. package/dist/client/mapper.js +142 -0
  54. package/dist/client/mapper.js.map +1 -0
  55. package/dist/client/portable-text.d.ts +94 -0
  56. package/dist/client/portable-text.d.ts.map +1 -0
  57. package/dist/client/portable-text.js +428 -0
  58. package/dist/client/portable-text.js.map +1 -0
  59. package/dist/client/schemas.d.ts +1928 -0
  60. package/dist/client/schemas.d.ts.map +1 -0
  61. package/dist/client/schemas.js +123 -0
  62. package/dist/client/schemas.js.map +1 -0
  63. package/dist/db/cache.d.ts +60 -0
  64. package/dist/db/cache.d.ts.map +1 -0
  65. package/dist/db/cache.js +303 -0
  66. package/dist/db/cache.js.map +1 -0
  67. package/dist/index.d.ts +24 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +45 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/mcp/context.d.ts +14 -0
  72. package/dist/mcp/context.d.ts.map +1 -0
  73. package/dist/mcp/context.js +23 -0
  74. package/dist/mcp/context.js.map +1 -0
  75. package/dist/mcp/server.d.ts +12 -0
  76. package/dist/mcp/server.d.ts.map +1 -0
  77. package/dist/mcp/server.js +106 -0
  78. package/dist/mcp/server.js.map +1 -0
  79. package/dist/mcp/tools/profile.d.ts +6 -0
  80. package/dist/mcp/tools/profile.d.ts.map +1 -0
  81. package/dist/mcp/tools/profile.js +81 -0
  82. package/dist/mcp/tools/profile.js.map +1 -0
  83. package/dist/mcp/tools/sync-diff.d.ts +4 -0
  84. package/dist/mcp/tools/sync-diff.d.ts.map +1 -0
  85. package/dist/mcp/tools/sync-diff.js +115 -0
  86. package/dist/mcp/tools/sync-diff.js.map +1 -0
  87. package/dist/mcp/tools/sync-new.d.ts +4 -0
  88. package/dist/mcp/tools/sync-new.d.ts.map +1 -0
  89. package/dist/mcp/tools/sync-new.js +54 -0
  90. package/dist/mcp/tools/sync-new.js.map +1 -0
  91. package/dist/mcp/tools/sync-pull.d.ts +4 -0
  92. package/dist/mcp/tools/sync-pull.d.ts.map +1 -0
  93. package/dist/mcp/tools/sync-pull.js +180 -0
  94. package/dist/mcp/tools/sync-pull.js.map +1 -0
  95. package/dist/mcp/tools/sync-push.d.ts +4 -0
  96. package/dist/mcp/tools/sync-push.d.ts.map +1 -0
  97. package/dist/mcp/tools/sync-push.js +105 -0
  98. package/dist/mcp/tools/sync-push.js.map +1 -0
  99. package/dist/mcp/tools/sync-status.d.ts +4 -0
  100. package/dist/mcp/tools/sync-status.d.ts.map +1 -0
  101. package/dist/mcp/tools/sync-status.js +45 -0
  102. package/dist/mcp/tools/sync-status.js.map +1 -0
  103. package/dist/sync/bylines.d.ts +23 -0
  104. package/dist/sync/bylines.d.ts.map +1 -0
  105. package/dist/sync/bylines.js +112 -0
  106. package/dist/sync/bylines.js.map +1 -0
  107. package/dist/sync/diff.d.ts +16 -0
  108. package/dist/sync/diff.d.ts.map +1 -0
  109. package/dist/sync/diff.js +68 -0
  110. package/dist/sync/diff.js.map +1 -0
  111. package/dist/sync/media.d.ts +37 -0
  112. package/dist/sync/media.d.ts.map +1 -0
  113. package/dist/sync/media.js +191 -0
  114. package/dist/sync/media.js.map +1 -0
  115. package/dist/sync/merge.d.ts +36 -0
  116. package/dist/sync/merge.d.ts.map +1 -0
  117. package/dist/sync/merge.js +112 -0
  118. package/dist/sync/merge.js.map +1 -0
  119. package/dist/sync/new.d.ts +24 -0
  120. package/dist/sync/new.d.ts.map +1 -0
  121. package/dist/sync/new.js +75 -0
  122. package/dist/sync/new.js.map +1 -0
  123. package/dist/sync/orchestrator.d.ts +55 -0
  124. package/dist/sync/orchestrator.d.ts.map +1 -0
  125. package/dist/sync/orchestrator.js +222 -0
  126. package/dist/sync/orchestrator.js.map +1 -0
  127. package/dist/sync/preflight.d.ts +25 -0
  128. package/dist/sync/preflight.d.ts.map +1 -0
  129. package/dist/sync/preflight.js +128 -0
  130. package/dist/sync/preflight.js.map +1 -0
  131. package/dist/sync/pull.d.ts +67 -0
  132. package/dist/sync/pull.d.ts.map +1 -0
  133. package/dist/sync/pull.js +405 -0
  134. package/dist/sync/pull.js.map +1 -0
  135. package/dist/sync/push.d.ts +33 -0
  136. package/dist/sync/push.d.ts.map +1 -0
  137. package/dist/sync/push.js +432 -0
  138. package/dist/sync/push.js.map +1 -0
  139. package/dist/sync/status.d.ts +24 -0
  140. package/dist/sync/status.d.ts.map +1 -0
  141. package/dist/sync/status.js +85 -0
  142. package/dist/sync/status.js.map +1 -0
  143. package/dist/sync/taxonomies.d.ts +49 -0
  144. package/dist/sync/taxonomies.d.ts.map +1 -0
  145. package/dist/sync/taxonomies.js +220 -0
  146. package/dist/sync/taxonomies.js.map +1 -0
  147. package/dist/utils/config.d.ts +18 -0
  148. package/dist/utils/config.d.ts.map +1 -0
  149. package/dist/utils/config.js +79 -0
  150. package/dist/utils/config.js.map +1 -0
  151. package/dist/utils/frontmatter.d.ts +115 -0
  152. package/dist/utils/frontmatter.d.ts.map +1 -0
  153. package/dist/utils/frontmatter.js +147 -0
  154. package/dist/utils/frontmatter.js.map +1 -0
  155. package/dist/utils/naming.d.ts +28 -0
  156. package/dist/utils/naming.d.ts.map +1 -0
  157. package/dist/utils/naming.js +94 -0
  158. package/dist/utils/naming.js.map +1 -0
  159. package/dist/utils/profile.d.ts +72 -0
  160. package/dist/utils/profile.d.ts.map +1 -0
  161. package/dist/utils/profile.js +180 -0
  162. package/dist/utils/profile.js.map +1 -0
  163. package/dist/utils/version.d.ts +5 -0
  164. package/dist/utils/version.d.ts.map +1 -0
  165. package/dist/utils/version.js +43 -0
  166. package/dist/utils/version.js.map +1 -0
  167. package/dist/utils/workspace.d.ts +22 -0
  168. package/dist/utils/workspace.d.ts.map +1 -0
  169. package/dist/utils/workspace.js +74 -0
  170. package/dist/utils/workspace.js.map +1 -0
  171. package/package.json +68 -4
@@ -0,0 +1,428 @@
1
+ /*
2
+ * Copyright (C) 2026 SPORT-SERVICE RS★R
3
+ *
4
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ * of this software and associated documentation files (the "Software"), to deal
6
+ * in the Software without restriction, including without limitation the rights
7
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ * copies of the Software, and to permit persons to whom the Software is
9
+ * furnished to do so, subject to the following conditions:
10
+ *
11
+ * The above copyright notice and this permission notice shall be included in all
12
+ * copies or substantial portions of the Software.
13
+ *
14
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ * SOFTWARE.
21
+ */
22
+ // ---------------------------------------------------------------------------
23
+ // PT -> Markdown
24
+ // ---------------------------------------------------------------------------
25
+ /**
26
+ * Convert Portable Text blocks to Markdown.
27
+ * Unknown block types are serialized as opaque fences.
28
+ */
29
+ export function portableTextToMarkdown(blocks) {
30
+ const lines = [];
31
+ let prevWasList = false;
32
+ for (let i = 0; i < blocks.length; i++) {
33
+ const block = blocks[i];
34
+ if (block._type === 'block') {
35
+ const isList = !!block.listItem;
36
+ // Blank line between non-contiguous block types
37
+ if (i > 0 && (!isList || !prevWasList)) {
38
+ lines.push('');
39
+ }
40
+ lines.push(renderStandardBlock(block));
41
+ prevWasList = isList;
42
+ }
43
+ else if (block._type === 'code') {
44
+ if (i > 0)
45
+ lines.push('');
46
+ const lang = block.language || '';
47
+ const code = block.code || '';
48
+ lines.push('```' + lang);
49
+ lines.push(code);
50
+ lines.push('```');
51
+ prevWasList = false;
52
+ }
53
+ else if (block._type === 'image') {
54
+ if (i > 0)
55
+ lines.push('');
56
+ const alt = block.alt || '';
57
+ const url = block.asset?.url || '';
58
+ lines.push(`![${alt}](${url})`);
59
+ prevWasList = false;
60
+ }
61
+ else {
62
+ // Tier 3: Unknown block -> opaque fence
63
+ if (i > 0)
64
+ lines.push('');
65
+ lines.push(`<!--ec:block ${JSON.stringify(block)} -->`);
66
+ prevWasList = false;
67
+ }
68
+ }
69
+ return lines.join('\n') + '\n';
70
+ }
71
+ function renderStandardBlock(block) {
72
+ const text = renderSpans(block.children ?? [], block.markDefs ?? []);
73
+ // List items
74
+ if (block.listItem) {
75
+ const indent = ' '.repeat(Math.max(0, (block.level ?? 1) - 1));
76
+ const marker = block.listItem === 'number' ? '1.' : '-';
77
+ return `${indent}${marker} ${text}`;
78
+ }
79
+ // Headings
80
+ if (block.style && block.style.startsWith('h')) {
81
+ const level = parseInt(block.style.substring(1), 10);
82
+ if (level >= 1 && level <= 6) {
83
+ return `${'#'.repeat(level)} ${text}`;
84
+ }
85
+ }
86
+ // Blockquote
87
+ if (block.style === 'blockquote') {
88
+ return `> ${text}`;
89
+ }
90
+ return text;
91
+ }
92
+ function renderSpans(spans, markDefs) {
93
+ let result = '';
94
+ for (const span of spans) {
95
+ if (span._type !== 'span')
96
+ continue;
97
+ let text = span.text ?? '';
98
+ const marks = span.marks ?? [];
99
+ for (const mark of marks) {
100
+ const def = markDefs.find((d) => d._key === mark);
101
+ if (def) {
102
+ if (def._type === 'link') {
103
+ text = `[${text}](${def.href ?? ''})`;
104
+ }
105
+ }
106
+ else {
107
+ switch (mark) {
108
+ case 'strong':
109
+ text = `**${text}**`;
110
+ break;
111
+ case 'em':
112
+ text = `_${text}_`;
113
+ break;
114
+ case 'code':
115
+ text = `\`${text}\``;
116
+ break;
117
+ case 'strike-through':
118
+ case 'strikethrough':
119
+ text = `~~${text}~~`;
120
+ break;
121
+ }
122
+ }
123
+ }
124
+ result += text;
125
+ }
126
+ return result;
127
+ }
128
+ // ---------------------------------------------------------------------------
129
+ // Markdown -> PT
130
+ // ---------------------------------------------------------------------------
131
+ // Regex patterns for markdown parsing
132
+ const OPAQUE_FENCE_PATTERN = /^<!--ec:block (.+) -->$/;
133
+ const HEADING_PATTERN = /^(#{1,6})\s+(.+)$/;
134
+ const UNORDERED_LIST_PATTERN = /^(\s*)[-*+]\s+(.+)$/;
135
+ const ORDERED_LIST_PATTERN = /^(\s*)\d+\.\s+(.+)$/;
136
+ const IMAGE_PATTERN = /^!\[([^\]]*)\]\(([^)]+)\)$/;
137
+ const INLINE_MARKDOWN_PATTERN = /(\*\*(.+?)\*\*)|(_(.+?)_)|(`(.+?)`)|(\[(.+?)\]\((.+?)\))|(~~(.+?)~~)/g;
138
+ /**
139
+ * Convert Markdown to Portable Text blocks.
140
+ * Opaque fences (<!--ec:block ... -->) are deserialized and spliced back in.
141
+ */
142
+ export function markdownToPortableText(markdown) {
143
+ const blocks = [];
144
+ const lines = markdown.split('\n');
145
+ let i = 0;
146
+ while (i < lines.length) {
147
+ const line = lines[i];
148
+ // Opaque fence
149
+ const opaqueMatch = line.match(OPAQUE_FENCE_PATTERN);
150
+ if (opaqueMatch) {
151
+ try {
152
+ blocks.push(JSON.parse(opaqueMatch[1]));
153
+ }
154
+ catch {
155
+ blocks.push(makeBlock(line));
156
+ }
157
+ i++;
158
+ continue;
159
+ }
160
+ // Code fence
161
+ if (line.startsWith('```')) {
162
+ const lang = line.slice(3).trim();
163
+ const codeLines = [];
164
+ i++;
165
+ while (i < lines.length && !lines[i].startsWith('```')) {
166
+ codeLines.push(lines[i]);
167
+ i++;
168
+ }
169
+ blocks.push({
170
+ _type: 'code',
171
+ _key: generateKey(),
172
+ language: lang || undefined,
173
+ code: codeLines.join('\n'),
174
+ });
175
+ i++; // skip closing ```
176
+ continue;
177
+ }
178
+ // Blank line
179
+ if (line.trim() === '') {
180
+ i++;
181
+ continue;
182
+ }
183
+ // Heading
184
+ const headingMatch = line.match(HEADING_PATTERN);
185
+ if (headingMatch) {
186
+ blocks.push(makeBlock(headingMatch[2], `h${headingMatch[1].length}`));
187
+ i++;
188
+ continue;
189
+ }
190
+ // Blockquote
191
+ if (line.startsWith('> ')) {
192
+ blocks.push(makeBlock(line.slice(2), 'blockquote'));
193
+ i++;
194
+ continue;
195
+ }
196
+ // Unordered list
197
+ const ulMatch = line.match(UNORDERED_LIST_PATTERN);
198
+ if (ulMatch) {
199
+ const level = Math.floor(ulMatch[1].length / 2) + 1;
200
+ blocks.push(makeListBlock(ulMatch[2], 'bullet', level));
201
+ i++;
202
+ continue;
203
+ }
204
+ // Ordered list
205
+ const olMatch = line.match(ORDERED_LIST_PATTERN);
206
+ if (olMatch) {
207
+ const level = Math.floor(olMatch[1].length / 2) + 1;
208
+ blocks.push(makeListBlock(olMatch[2], 'number', level));
209
+ i++;
210
+ continue;
211
+ }
212
+ // Image
213
+ const imgMatch = line.match(IMAGE_PATTERN);
214
+ if (imgMatch) {
215
+ blocks.push({
216
+ _type: 'image',
217
+ _key: generateKey(),
218
+ alt: imgMatch[1],
219
+ asset: { url: imgMatch[2] },
220
+ });
221
+ i++;
222
+ continue;
223
+ }
224
+ // Paragraph
225
+ blocks.push(makeBlock(line));
226
+ i++;
227
+ }
228
+ return blocks;
229
+ }
230
+ // ---------------------------------------------------------------------------
231
+ // Block builders
232
+ // ---------------------------------------------------------------------------
233
+ function makeBlock(text, style = 'normal') {
234
+ const { spans, markDefs } = parseInline(text);
235
+ return { _type: 'block', _key: generateKey(), style, markDefs, children: spans };
236
+ }
237
+ function makeListBlock(text, listItem, level) {
238
+ const { spans, markDefs } = parseInline(text);
239
+ return {
240
+ _type: 'block',
241
+ _key: generateKey(),
242
+ style: 'normal',
243
+ listItem,
244
+ level,
245
+ markDefs,
246
+ children: spans,
247
+ };
248
+ }
249
+ /**
250
+ * Parse inline markdown (bold, italic, code, links, strikethrough) into PT spans + markDefs.
251
+ */
252
+ function parseInline(text) {
253
+ const spans = [];
254
+ const markDefs = [];
255
+ const regex = INLINE_MARKDOWN_PATTERN;
256
+ let lastIndex = 0;
257
+ let match;
258
+ while ((match = regex.exec(text)) !== null) {
259
+ if (match.index > lastIndex) {
260
+ spans.push({
261
+ _type: 'span',
262
+ _key: generateKey(),
263
+ text: text.slice(lastIndex, match.index),
264
+ marks: [],
265
+ });
266
+ }
267
+ if (match[2] != null) {
268
+ spans.push({ _type: 'span', _key: generateKey(), text: match[2], marks: ['strong'] });
269
+ }
270
+ else if (match[4] != null) {
271
+ spans.push({ _type: 'span', _key: generateKey(), text: match[4], marks: ['em'] });
272
+ }
273
+ else if (match[6] != null) {
274
+ spans.push({ _type: 'span', _key: generateKey(), text: match[6], marks: ['code'] });
275
+ }
276
+ else if (match[8] != null && match[9] != null) {
277
+ const key = generateKey();
278
+ markDefs.push({ _key: key, _type: 'link', href: match[9] });
279
+ spans.push({ _type: 'span', _key: generateKey(), text: match[8], marks: [key] });
280
+ }
281
+ else if (match[11] != null) {
282
+ spans.push({
283
+ _type: 'span',
284
+ _key: generateKey(),
285
+ text: match[11],
286
+ marks: ['strike-through'],
287
+ });
288
+ }
289
+ lastIndex = match.index + match[0].length;
290
+ }
291
+ if (lastIndex < text.length) {
292
+ spans.push({ _type: 'span', _key: generateKey(), text: text.slice(lastIndex), marks: [] });
293
+ }
294
+ if (spans.length === 0) {
295
+ spans.push({ _type: 'span', _key: generateKey(), text, marks: [] });
296
+ }
297
+ return { spans, markDefs };
298
+ }
299
+ // ---------------------------------------------------------------------------
300
+ // Key generation
301
+ // ---------------------------------------------------------------------------
302
+ let keyCounter = 0;
303
+ function generateKey() {
304
+ return `k${(keyCounter++).toString(36)}`;
305
+ }
306
+ /** Reset key counter (useful for testing) */
307
+ export function resetKeyCounter() {
308
+ keyCounter = 0;
309
+ }
310
+ function convertNestedBlockPortableText(value, field, direction) {
311
+ if (!Array.isArray(value))
312
+ return value;
313
+ const validation = field.validation;
314
+ const allowedTypes = validation && typeof validation === 'object' && 'allowedTypes' in validation
315
+ ? validation.allowedTypes
316
+ : undefined;
317
+ return value.map((block) => {
318
+ if (!block || typeof block !== 'object' || Array.isArray(block))
319
+ return block;
320
+ const record = { ...block };
321
+ const type = record._type === undefined &&
322
+ direction === 'write' &&
323
+ Array.isArray(allowedTypes) &&
324
+ allowedTypes.length === 1
325
+ ? allowedTypes[0]
326
+ : record._type;
327
+ const version = typeof record._version === 'number' ? record._version : undefined;
328
+ const blockType = field.blockTypes?.find((candidate) => candidate.slug === type);
329
+ const definition = blockType?.versions.find((candidate) => candidate.version === (version ?? blockType.currentVersion));
330
+ if (!definition)
331
+ return block;
332
+ for (const nestedField of definition.fields) {
333
+ if (nestedField.type !== 'portableText')
334
+ continue;
335
+ const nestedValue = record[nestedField.slug];
336
+ if (direction === 'read' && Array.isArray(nestedValue)) {
337
+ record[nestedField.slug] = portableTextToMarkdown(nestedValue);
338
+ }
339
+ else if (direction === 'write' && typeof nestedValue === 'string') {
340
+ record[nestedField.slug] = markdownToPortableText(nestedValue);
341
+ }
342
+ }
343
+ return record;
344
+ });
345
+ }
346
+ /**
347
+ * Convert content data for reading: Portable Text arrays -> Markdown strings.
348
+ * Converts top-level `portableText` arrays and nested `portableText` arrays
349
+ * inside `blocks` arrays.
350
+ */
351
+ export function convertDataForRead(data, fields, raw = false) {
352
+ if (raw)
353
+ return data;
354
+ const result = { ...data };
355
+ for (const field of fields) {
356
+ if (field.type === 'portableText' && Array.isArray(result[field.slug])) {
357
+ result[field.slug] = portableTextToMarkdown(result[field.slug]);
358
+ }
359
+ else if (field.type === 'blocks' && Array.isArray(result[field.slug])) {
360
+ result[field.slug] = convertNestedBlockPortableText(result[field.slug], field, 'read');
361
+ }
362
+ }
363
+ return result;
364
+ }
365
+ /**
366
+ * Convert content data for writing: Markdown strings -> Portable Text arrays.
367
+ * Converts top-level `portableText` strings and nested Markdown strings
368
+ * in `portableText` fields inside `blocks` arrays.
369
+ */
370
+ export function convertDataForWrite(data, fields) {
371
+ const result = { ...data };
372
+ for (const field of fields) {
373
+ if (field.type === 'portableText' && typeof result[field.slug] === 'string') {
374
+ result[field.slug] = markdownToPortableText(result[field.slug]);
375
+ }
376
+ else if (field.type === 'blocks' && Array.isArray(result[field.slug])) {
377
+ result[field.slug] = convertNestedBlockPortableText(result[field.slug], field, 'write');
378
+ }
379
+ }
380
+ return result;
381
+ }
382
+ // ---------------------------------------------------------------------------
383
+ // Syntax Validation & Opaque Block Safety Guards (Emit additions)
384
+ // ---------------------------------------------------------------------------
385
+ /**
386
+ * Strips code fences (```...```) from markdown to prevent false positives in regex checks.
387
+ */
388
+ export function stripCodeBlocks(markdown) {
389
+ return markdown.replace(/```[\s\S]*?```/g, '');
390
+ }
391
+ /**
392
+ * Detects syntax that is unsupported by the line-based EmDash parser,
393
+ * such as markdown tables, raw block HTML, or mixed inline images.
394
+ */
395
+ export function detectUnsupportedMarkdownSyntax(markdown) {
396
+ const cleaned = stripCodeBlocks(markdown);
397
+ const warnings = [];
398
+ // Markdown tables (| col | col |)
399
+ if (/^\|(?:[^\r\n|]+\|)+$/m.test(cleaned)) {
400
+ warnings.push('Markdown tables are not supported by the line-based parser and will degrade to plain text paragraphs.');
401
+ }
402
+ // Raw block HTML tags
403
+ if (/<(?:div|section|article|table|form|iframe|script)[\s>]/i.test(cleaned)) {
404
+ warnings.push('Raw HTML block tags are not supported and will be treated as plain text paragraphs.');
405
+ }
406
+ return warnings;
407
+ }
408
+ /**
409
+ * Extracts all opaque fence lines (`<!--ec:block ... -->`) from markdown.
410
+ */
411
+ export function extractOpaqueBlockLines(markdown) {
412
+ const lines = markdown.split('\n');
413
+ return lines.filter((line) => OPAQUE_FENCE_PATTERN.test(line.trim()));
414
+ }
415
+ /**
416
+ * Verifies that all opaque block fences present in baseMarkdown are intact in localMarkdown (G9 guard).
417
+ * Returns true if untampered, false if any base opaque block fence was modified or removed.
418
+ */
419
+ export function verifyOpaqueBlocksUntampered(baseMarkdown, localMarkdown) {
420
+ const baseFences = extractOpaqueBlockLines(baseMarkdown);
421
+ if (baseFences.length === 0)
422
+ return true;
423
+ const localFences = extractOpaqueBlockLines(localMarkdown);
424
+ if (baseFences.length !== localFences.length)
425
+ return false;
426
+ return baseFences.every((fence, idx) => fence === localFences[idx]);
427
+ }
428
+ //# sourceMappingURL=portable-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portable-text.js","sourceRoot":"","sources":["../../src/client/portable-text.ts"],"names":[],"mappings":"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"}