@pixerate/editor 0.18.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/README.md +91 -2
  2. package/dist/agent/index.cjs +625 -2
  3. package/dist/agent/index.cjs.map +1 -1
  4. package/dist/agent/index.d.cts +286 -2
  5. package/dist/agent/index.d.ts +286 -2
  6. package/dist/agent/index.js +624 -1
  7. package/dist/agent/index.js.map +1 -1
  8. package/dist/canvas/index.cjs +1240 -22
  9. package/dist/canvas/index.cjs.map +1 -1
  10. package/dist/canvas/index.d.cts +515 -3
  11. package/dist/canvas/index.d.ts +515 -3
  12. package/dist/canvas/index.js +1219 -1
  13. package/dist/canvas/index.js.map +1 -1
  14. package/dist/chunk-3TYMNULT.js +1367 -0
  15. package/dist/chunk-3TYMNULT.js.map +1 -0
  16. package/dist/chunk-4QPLEUL2.cjs +4480 -0
  17. package/dist/chunk-4QPLEUL2.cjs.map +1 -0
  18. package/dist/chunk-4SUNJZWB.cjs +553 -0
  19. package/dist/chunk-4SUNJZWB.cjs.map +1 -0
  20. package/dist/chunk-A7DKIA72.js +2657 -0
  21. package/dist/chunk-A7DKIA72.js.map +1 -0
  22. package/dist/chunk-AXV2ZW34.cjs +118 -0
  23. package/dist/chunk-AXV2ZW34.cjs.map +1 -0
  24. package/dist/chunk-B2ZRLN4S.js +118 -0
  25. package/dist/chunk-B2ZRLN4S.js.map +1 -0
  26. package/dist/chunk-CYFJCKC4.js +4480 -0
  27. package/dist/chunk-CYFJCKC4.js.map +1 -0
  28. package/dist/chunk-GVW4P7BG.js +2706 -0
  29. package/dist/chunk-GVW4P7BG.js.map +1 -0
  30. package/dist/chunk-JACER6TE.cjs +1 -0
  31. package/dist/chunk-JACER6TE.cjs.map +1 -0
  32. package/dist/chunk-JYRIOFEN.cjs +2657 -0
  33. package/dist/chunk-JYRIOFEN.cjs.map +1 -0
  34. package/dist/chunk-KYRZDWM4.js +299 -0
  35. package/dist/chunk-KYRZDWM4.js.map +1 -0
  36. package/dist/chunk-LA7PEGU3.cjs +299 -0
  37. package/dist/chunk-LA7PEGU3.cjs.map +1 -0
  38. package/dist/chunk-N7FG6CBO.js +1 -0
  39. package/dist/chunk-N7FG6CBO.js.map +1 -0
  40. package/dist/chunk-OYXSKQFR.js +553 -0
  41. package/dist/chunk-OYXSKQFR.js.map +1 -0
  42. package/dist/chunk-TVRC4KVT.cjs +1367 -0
  43. package/dist/chunk-TVRC4KVT.cjs.map +1 -0
  44. package/dist/chunk-U6NDQFOK.cjs +2706 -0
  45. package/dist/chunk-U6NDQFOK.cjs.map +1 -0
  46. package/dist/controller-OUdxPY-X.d.cts +754 -0
  47. package/dist/controller-OUdxPY-X.d.ts +754 -0
  48. package/dist/extensions/index.cjs +144 -3
  49. package/dist/extensions/index.cjs.map +1 -1
  50. package/dist/extensions/index.d.cts +9 -144
  51. package/dist/extensions/index.d.ts +9 -144
  52. package/dist/extensions/index.js +145 -4
  53. package/dist/grammar/index.cjs +31 -3
  54. package/dist/grammar/index.cjs.map +1 -1
  55. package/dist/grammar/index.d.cts +239 -19
  56. package/dist/grammar/index.d.ts +239 -19
  57. package/dist/grammar/index.js +31 -3
  58. package/dist/history/index.d.cts +2 -41
  59. package/dist/history/index.d.ts +2 -41
  60. package/dist/image-editor/index.cjs +732 -497
  61. package/dist/image-editor/index.cjs.map +1 -1
  62. package/dist/image-editor/index.d.cts +105 -9
  63. package/dist/image-editor/index.d.ts +105 -9
  64. package/dist/image-editor/index.js +721 -486
  65. package/dist/image-editor/index.js.map +1 -1
  66. package/dist/index-Ng1pG7JE.d.ts +899 -0
  67. package/dist/index-k3mFbPx_.d.cts +899 -0
  68. package/dist/index.cjs +457 -20
  69. package/dist/index.cjs.map +1 -1
  70. package/dist/index.d.cts +99 -12
  71. package/dist/index.d.ts +99 -12
  72. package/dist/index.js +457 -20
  73. package/dist/index.js.map +1 -1
  74. package/dist/registry-iAHbqkYt.d.cts +128 -0
  75. package/dist/registry-iAHbqkYt.d.ts +128 -0
  76. package/dist/serializers/index.cjs +26 -3
  77. package/dist/serializers/index.cjs.map +1 -1
  78. package/dist/serializers/index.d.cts +119 -6
  79. package/dist/serializers/index.d.ts +119 -6
  80. package/dist/serializers/index.js +24 -1
  81. package/dist/spreadsheet/index.cjs +122 -2
  82. package/dist/spreadsheet/index.cjs.map +1 -1
  83. package/dist/spreadsheet/index.d.cts +371 -313
  84. package/dist/spreadsheet/index.d.ts +371 -313
  85. package/dist/spreadsheet/index.js +127 -7
  86. package/dist/tokens-CyLZmIei.d.cts +76 -0
  87. package/dist/tokens-CyLZmIei.d.ts +76 -0
  88. package/dist/track-changes-G8JcWB8b.d.cts +306 -0
  89. package/dist/track-changes-G8JcWB8b.d.ts +306 -0
  90. package/dist/types-BZgcDsC5.d.cts +42 -0
  91. package/dist/types-BZgcDsC5.d.ts +42 -0
  92. package/dist/{types-JV3S8VeR.d.cts → types-DMe0vFB1.d.cts} +1 -1
  93. package/dist/{types-JV3S8VeR.d.ts → types-DMe0vFB1.d.ts} +1 -1
  94. package/package.json +1 -1
  95. package/dist/chunk-7FWEWE6T.js +0 -1888
  96. package/dist/chunk-7FWEWE6T.js.map +0 -1
  97. package/dist/chunk-AIZUKWTL.js +0 -1715
  98. package/dist/chunk-AIZUKWTL.js.map +0 -1
  99. package/dist/chunk-GLSIZKOX.js +0 -17
  100. package/dist/chunk-GLSIZKOX.js.map +0 -1
  101. package/dist/chunk-LDES3EOS.cjs +0 -1888
  102. package/dist/chunk-LDES3EOS.cjs.map +0 -1
  103. package/dist/chunk-LLUAKTLW.cjs +0 -532
  104. package/dist/chunk-LLUAKTLW.cjs.map +0 -1
  105. package/dist/chunk-MPPXH7U5.cjs +0 -336
  106. package/dist/chunk-MPPXH7U5.cjs.map +0 -1
  107. package/dist/chunk-O7LOPQMH.js +0 -336
  108. package/dist/chunk-O7LOPQMH.js.map +0 -1
  109. package/dist/chunk-QGVMBCT5.js +0 -532
  110. package/dist/chunk-QGVMBCT5.js.map +0 -1
  111. package/dist/chunk-SEDR75VH.cjs +0 -17
  112. package/dist/chunk-SEDR75VH.cjs.map +0 -1
  113. package/dist/chunk-YQCI4CCN.cjs +0 -1715
  114. package/dist/chunk-YQCI4CCN.cjs.map +0 -1
  115. package/dist/mention-Dcevh3ff.d.cts +0 -32
  116. package/dist/mention-Dcevh3ff.d.ts +0 -32
  117. package/dist/tokens-7kRTEtPb.d.cts +0 -39
  118. package/dist/tokens-7kRTEtPb.d.ts +0 -39
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/editor/editor/packages/core/dist/chunk-LA7PEGU3.cjs","../src/serializers/html.ts","../src/serializers/rtf.ts","../src/serializers/clipboard.ts"],"names":[],"mappings":"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","file":"/home/runner/work/editor/editor/packages/core/dist/chunk-LA7PEGU3.cjs","sourcesContent":[null,"import { sanitizeHtml } from \"./markdown\";\nimport { escapeHtml } from \"./plain-text\";\n\n/**\n * Elements whose content is never document text (scripts, styles, metadata,\n * embedded objects, form controls). They are removed together with their\n * content before sanitizing, so e.g. CSS rules don't show up as paragraphs.\n */\nconst DROP_WITH_CONTENT_REGEX =\n /<(script|style|template|noscript|iframe|object|embed|head|title|svg|math|textarea|select|button)\\b[^>]*>[\\s\\S]*?<\\/\\1\\s*>/gi;\n/** An unclosed `<script>` / `<style>` swallows the rest of the document. */\nconst UNCLOSED_RAW_TEXT_REGEX = /<(script|style)\\b[^>]*>[\\s\\S]*$/i;\nconst BODY_REGEX = /<body\\b[^>]*>([\\s\\S]*?)(?:<\\/body\\s*>|$)/i;\n/** Namespaced tags such as Word's `<o:p>`, which the sanitizer cannot parse. */\nconst NAMESPACED_TAG_REGEX = /<\\/?[a-zA-Z][\\w-]*:[\\w-]+\\b[^>]*>/g;\n\n/**\n * Sanitizes a full HTML document or fragment for insertion into the editor,\n * e.g. an imported `.html` file or HTML from another application.\n *\n * - Keeps only the `<body>` content when the input is a full document.\n * - Removes comments, doctype/XML declarations, CDATA, scripts, styles and\n * other non-text elements together with their content.\n * - Applies the same tag/attribute/URL allowlist as embedded HTML in markdown\n * (see `sanitizeHtml`), but strips disallowed tags instead of escaping them,\n * so wrappers such as `<section>` or `<font>` keep their text.\n *\n * It is string-based (no live DOM), so handlers such as `<img onerror>` never run.\n */\nexport function sanitizeImportedHtml(html: string): string {\n if (!html) return \"<p></p>\";\n let content = html.replace(/^/, \"\");\n content = content\n .replace(/<!--[\\s\\S]*?(?:-->|$)/g, \"\")\n .replace(/<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>|$)/g, \"\")\n .replace(/<![^>]*>/g, \"\")\n .replace(/<\\?[\\s\\S]*?(?:\\?>|$)/g, \"\");\n const body = BODY_REGEX.exec(content);\n if (body) content = body[1];\n content = content\n .replace(DROP_WITH_CONTENT_REGEX, \"\")\n .replace(UNCLOSED_RAW_TEXT_REGEX, \"\")\n .replace(NAMESPACED_TAG_REGEX, \"\");\n const sanitized = sanitizeHtml(content, { disallowedTags: \"strip\" }).trim();\n return sanitized || \"<p></p>\";\n}\n\n/**\n * Converts untrusted plain text to TipTap paragraph HTML, always escaping it.\n *\n * Unlike `plainTextToTipTapHtml`, text that already looks like `<p>…</p>` is\n * not passed through as HTML, which matters for imported files.\n */\nexport function plainTextToParagraphHtml(text: string): string {\n if (!text) return \"<p></p>\";\n return text\n .replace(/\\r\\n?/g, \"\\n\")\n .split(\"\\n\")\n .map((line) => `<p>${escapeHtml(line)}</p>`)\n .join(\"\");\n}\n","/**\n * Destinations whose content is metadata or binary data rather than document\n * text. A group starting with one of these control words (or with `\\*`) is\n * skipped entirely.\n */\nconst SKIPPED_DESTINATIONS = new Set([\n \"author\", \"bkmkend\", \"bkmkstart\", \"colortbl\", \"comment\", \"datastore\",\n \"doccomm\", \"falt\", \"fldinst\", \"filetbl\", \"fonttbl\", \"footer\", \"footerf\",\n \"footerl\", \"footerr\", \"footnote\", \"generator\", \"header\", \"headerf\",\n \"headerl\", \"headerr\", \"info\", \"keywords\", \"latentstyles\", \"listoverridetable\",\n \"listtable\", \"nonshppict\", \"object\", \"operator\", \"pict\", \"private\", \"revtbl\",\n \"rsidtbl\", \"shppict\", \"stylesheet\", \"subject\", \"themedata\", \"title\",\n \"xmlnstbl\", \"colorschememapping\",\n]);\n\n/** Control words that map to a literal character. */\nconst CONTROL_WORD_TEXT: Record<string, string> = {\n par: \"\\n\",\n sect: \"\\n\",\n page: \"\\n\",\n line: \"\\n\",\n row: \"\\n\",\n cell: \"\\t\",\n tab: \"\\t\",\n emdash: \"—\",\n endash: \"–\",\n emspace: \" \",\n enspace: \" \",\n bullet: \"•\",\n lquote: \"‘\",\n rquote: \"’\",\n ldblquote: \"“\",\n rdblquote: \"”\",\n};\n\n/** Windows-1252 code points in 0x80–0x9F that differ from Latin-1. */\nconst CP1252: Record<number, string> = {\n 0x80: \"€\", 0x82: \"‚\", 0x83: \"ƒ\", 0x84: \"„\", 0x85: \"…\",\n 0x86: \"†\", 0x87: \"‡\", 0x88: \"ˆ\", 0x89: \"‰\", 0x8a: \"Š\",\n 0x8b: \"‹\", 0x8c: \"Œ\", 0x8e: \"Ž\", 0x91: \"‘\", 0x92: \"’\",\n 0x93: \"“\", 0x94: \"”\", 0x95: \"•\", 0x96: \"–\", 0x97: \"—\",\n 0x98: \"˜\", 0x99: \"™\", 0x9a: \"š\", 0x9b: \"›\", 0x9c: \"œ\",\n 0x9e: \"ž\", 0x9f: \"Ÿ\",\n};\n\nconst CONTROL_WORD_REGEX = /\\\\([a-zA-Z]{1,32})(-?\\d{1,10})? ?/y;\n\n/**\n * Best-effort plain-text extraction from an RTF document.\n *\n * Handles paragraphs/line breaks/tabs, escaped braces and backslashes,\n * `\\'hh` hex escapes (decoded as Windows-1252), `\\uN` Unicode escapes with\n * their `\\ucN` fallback characters, common typographic control words, and\n * skips metadata destinations (font/colour tables, `\\info`, pictures, field\n * instructions, `\\*` destinations). Formatting (bold, lists, tables) is not\n * preserved. Input that does not start with `{\\rtf` is returned unchanged.\n */\nexport function rtfToPlainText(rtf: string): string {\n if (!rtf) return \"\";\n if (!/^\\s*\\{\\\\rtf/.test(rtf)) return rtf;\n\n let out = \"\";\n const stack: Array<{ skip: boolean; uc: number }> = [];\n let skip = false;\n // Number of fallback characters that follow a \\uN escape.\n let uc = 1;\n let pendingFallback = 0;\n // True right after `{`, so a destination control word can mark the group.\n let groupStart = false;\n\n const emit = (text: string) => {\n if (skip) return;\n if (pendingFallback > 0) {\n pendingFallback--;\n return;\n }\n out += text;\n };\n\n let i = 0;\n while (i < rtf.length) {\n const ch = rtf[i];\n if (ch === \"{\") {\n stack.push({ skip, uc });\n groupStart = true;\n i++;\n continue;\n }\n if (ch === \"}\") {\n const prev = stack.pop();\n if (prev) {\n skip = prev.skip;\n uc = prev.uc;\n }\n pendingFallback = 0;\n groupStart = false;\n i++;\n continue;\n }\n const atGroupStart = groupStart;\n groupStart = false;\n\n if (ch === \"\\\\\") {\n const next = rtf[i + 1];\n if (next === \"\\\\\" || next === \"{\" || next === \"}\") {\n emit(next);\n i += 2;\n continue;\n }\n if (next === \"*\") {\n // `{\\*\\dest …}`: an ignorable destination this reader doesn't know.\n skip = true;\n i += 2;\n continue;\n }\n if (next === \"'\") {\n const code = parseInt(rtf.slice(i + 2, i + 4), 16);\n if (!Number.isNaN(code)) emit(CP1252[code] ?? String.fromCharCode(code));\n i += 4;\n continue;\n }\n if (next === \"~\") {\n emit(\" \");\n i += 2;\n continue;\n }\n if (next === \"_\") {\n emit(\"‑\");\n i += 2;\n continue;\n }\n if (next === \"\\n\" || next === \"\\r\") {\n emit(\"\\n\");\n i += 2;\n continue;\n }\n CONTROL_WORD_REGEX.lastIndex = i;\n const match = CONTROL_WORD_REGEX.exec(rtf);\n if (!match) {\n // Other control symbols (`\\-`, `\\|`, `\\:`) produce no text.\n i += 2;\n continue;\n }\n i = CONTROL_WORD_REGEX.lastIndex;\n const word = match[1];\n const param = match[2] !== undefined ? parseInt(match[2], 10) : undefined;\n if (atGroupStart && SKIPPED_DESTINATIONS.has(word)) {\n skip = true;\n } else if (word === \"u\" && param !== undefined) {\n emit(String.fromCharCode(param < 0 ? param + 65536 : param));\n if (!skip) pendingFallback = uc;\n } else if (word === \"uc\" && param !== undefined) {\n uc = param;\n } else if (word === \"bin\" && param !== undefined) {\n // Raw binary data: skip it.\n i += param;\n } else if (CONTROL_WORD_TEXT[word] !== undefined) {\n emit(CONTROL_WORD_TEXT[word]);\n }\n continue;\n }\n // Raw newlines are formatting in RTF; only control words break lines.\n if (ch === \"\\n\" || ch === \"\\r\") {\n i++;\n continue;\n }\n emit(ch);\n i++;\n }\n\n return out.replace(/\\n+$/, \"\");\n}\n","import { Slice, type Schema } from \"@tiptap/pm/model\";\n\n/**\n * Custom clipboard MIME type for content copied from a @pixerate/editor\n * rich-text editor. It carries the ProseMirror slice as JSON so pasting back\n * into a compatible editor is lossless (no HTML round trip).\n */\nexport const PIXERATE_DOCUMENT_MIME = \"application/x.pixerate.document+json\";\n\n/** Payload written under {@link PIXERATE_DOCUMENT_MIME}. */\nexport interface RichClipboardPayload {\n version: 1;\n /** {@link getSchemaSignature} of the source editor's schema. */\n schema: string;\n /** `Slice.toJSON()` of the copied selection. */\n slice: { content?: unknown[]; openStart?: number; openEnd?: number } | null;\n}\n\nconst signatureCache = new WeakMap<Schema, string>();\n\n/** 32-bit FNV-1a, enough to tell schemas apart without a crypto dependency. */\nfunction fnv1a(text: string): string {\n let hash = 0x811c9dc5;\n for (let i = 0; i < text.length; i++) {\n hash ^= text.charCodeAt(i);\n hash = Math.imul(hash, 0x01000193);\n }\n return (hash >>> 0).toString(16).padStart(8, \"0\");\n}\n\n/**\n * Returns a stable signature for a ProseMirror schema: node names, content\n * expressions, groups, attribute names and mark names. Two editors with the\n * same extensions produce the same signature, so a slice copied from one can\n * be deserialized in the other without losing or rejecting nodes.\n */\nexport function getSchemaSignature(schema: Schema): string {\n const cached = signatureCache.get(schema);\n if (cached) return cached;\n const parts: string[] = [];\n for (const [name, type] of Object.entries(schema.nodes)) {\n const spec = type.spec;\n parts.push(\n `n:${name}|${spec.content ?? \"\"}|${spec.group ?? \"\"}|${spec.marks ?? \"\"}|${Object.keys(type.spec.attrs ?? {}).sort().join(\",\")}`,\n );\n }\n for (const [name, type] of Object.entries(schema.marks)) {\n parts.push(`m:${name}|${Object.keys(type.spec.attrs ?? {}).sort().join(\",\")}`);\n }\n const signature = `pm1-${fnv1a(parts.join(\";\"))}`;\n signatureCache.set(schema, signature);\n return signature;\n}\n\n/** Serializes a slice into the {@link PIXERATE_DOCUMENT_MIME} payload string. */\nexport function serializeRichClipboardPayload(slice: Slice, schema: Schema): string {\n const payload: RichClipboardPayload = {\n version: 1,\n schema: getSchemaSignature(schema),\n slice: slice.toJSON(),\n };\n return JSON.stringify(payload);\n}\n\n/**\n * Parses a {@link PIXERATE_DOCUMENT_MIME} payload into a slice for `schema`.\n * Returns `null` (so callers fall back to HTML / plain text) when the payload\n * is malformed, from another payload version, or from an editor whose schema\n * signature differs.\n */\nexport function parseRichClipboardPayload(data: string | null | undefined, schema: Schema): Slice | null {\n if (!data) return null;\n try {\n const payload = JSON.parse(data) as Partial<RichClipboardPayload>;\n if (!payload || payload.version !== 1) return null;\n if (payload.schema !== getSchemaSignature(schema)) return null;\n if (!payload.slice) return null;\n return Slice.fromJSON(schema, payload.slice as any);\n } catch {\n return null;\n }\n}\n\n/** Minimal clipboard data surface (`DataTransfer`). */\nexport interface ClipboardDataLike {\n getData(format: string): string;\n setData(format: string, data: string): void;\n clearData?(format?: string): void;\n}\n\n/**\n * Returns the `clipboardData` of a native `ClipboardEvent` or of a React\n * synthetic clipboard event (which wraps the native event in `nativeEvent`).\n */\nexport function getClipboardData(event: unknown): ClipboardDataLike | null {\n if (!event || typeof event !== \"object\") return null;\n const native = \"nativeEvent\" in event ? (event as any).nativeEvent : event;\n return ((event as any).clipboardData ?? native?.clipboardData ?? null) as ClipboardDataLike | null;\n}\n\n/**\n * Reads a slice from a paste event's {@link PIXERATE_DOCUMENT_MIME} data.\n * Returns `null` when the data is missing or its schema does not match.\n */\nexport function readRichClipboard(\n event: unknown,\n schema: Schema,\n mimeType: string = PIXERATE_DOCUMENT_MIME,\n): Slice | null {\n const data = getClipboardData(event);\n if (!data) return null;\n let raw: string | undefined;\n try {\n raw = data.getData(mimeType);\n } catch {\n return null;\n }\n return parseRichClipboardPayload(raw, schema);\n}\n"]}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=chunk-N7FG6CBO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,553 @@
1
+ import {
2
+ INSTRUCTION_REGEX,
3
+ TEMPLATE_REGEX,
4
+ VARIABLE_REGEX,
5
+ evaluateCondition,
6
+ getSuppliedValue,
7
+ matchConditionalTags,
8
+ parseVariableBody
9
+ } from "./chunk-B2ZRLN4S.js";
10
+
11
+ // src/grammar/tokenizer.ts
12
+ function tokenizePrompt(text) {
13
+ return tokenizePromptWithDiagnostics(text).tokens;
14
+ }
15
+ function getPromptDiagnostics(text) {
16
+ return tokenizePromptWithDiagnostics(text).diagnostics;
17
+ }
18
+ function tokenizePromptWithDiagnostics(text) {
19
+ if (!text) {
20
+ return { tokens: [], diagnostics: [] };
21
+ }
22
+ const rawMatches = [];
23
+ const tmplRegex = new RegExp(TEMPLATE_REGEX.source, TEMPLATE_REGEX.flags);
24
+ let match;
25
+ while ((match = tmplRegex.exec(text)) !== null) {
26
+ rawMatches.push({
27
+ type: "template",
28
+ raw: match[0],
29
+ value: match[1].trim(),
30
+ start: match.index,
31
+ end: match.index + match[0].length
32
+ });
33
+ }
34
+ const varRegex = new RegExp(VARIABLE_REGEX.source, VARIABLE_REGEX.flags);
35
+ while ((match = varRegex.exec(text)) !== null) {
36
+ const start = match.index;
37
+ const end = start + match[0].length;
38
+ const overlaps = rawMatches.some(
39
+ (m) => !(end <= m.start || start >= m.end)
40
+ );
41
+ if (!overlaps) {
42
+ const parsed = parseVariableBody(match[1]);
43
+ if (parsed.kind === "conditional") {
44
+ rawMatches.push({
45
+ type: "conditional",
46
+ raw: match[0],
47
+ value: parsed.name,
48
+ start,
49
+ end,
50
+ conditional: parsed.conditional
51
+ });
52
+ } else {
53
+ const token = {
54
+ type: "variable",
55
+ raw: match[0],
56
+ value: parsed.name,
57
+ start,
58
+ end
59
+ };
60
+ if (parsed.defaultValue !== void 0) {
61
+ token.defaultValue = parsed.defaultValue;
62
+ }
63
+ if (parsed.description !== void 0) {
64
+ token.description = parsed.description;
65
+ }
66
+ rawMatches.push(token);
67
+ }
68
+ }
69
+ }
70
+ const instRegex = new RegExp(
71
+ INSTRUCTION_REGEX.source,
72
+ INSTRUCTION_REGEX.flags
73
+ );
74
+ while ((match = instRegex.exec(text)) !== null) {
75
+ const start = match.index;
76
+ const end = start + match[0].length;
77
+ const overlaps = rawMatches.some(
78
+ (m) => !(end <= m.start || start >= m.end)
79
+ );
80
+ if (!overlaps) {
81
+ rawMatches.push({
82
+ type: "instruction",
83
+ raw: match[0],
84
+ value: match[1].trim(),
85
+ start,
86
+ end
87
+ });
88
+ }
89
+ }
90
+ rawMatches.sort((a, b) => a.start - b.start);
91
+ const diagnostics = [];
92
+ const literal = /* @__PURE__ */ new Set();
93
+ const conditionals = rawMatches.filter(
94
+ (m) => m.type === "conditional"
95
+ );
96
+ matchConditionalTags(
97
+ conditionals.map((m) => ({ conditional: m.conditional, name: m.value }))
98
+ ).forEach((result, i) => {
99
+ if (!result.error) return;
100
+ const tag = conditionals[i];
101
+ literal.add(tag);
102
+ diagnostics.push({
103
+ code: result.error,
104
+ message: result.error === "unclosed-section" ? `Section "${tag.raw}" is never closed with "{/${tag.value}}"` : `"${tag.raw}" does not close any open section`,
105
+ name: tag.value,
106
+ start: tag.start,
107
+ end: tag.end
108
+ });
109
+ });
110
+ const tokens = [];
111
+ let currentIdx = 0;
112
+ const pushText = (start, end) => {
113
+ const previous = tokens[tokens.length - 1];
114
+ if (previous?.type === "text" && previous.end === start) {
115
+ previous.raw = previous.value = text.slice(previous.start, end);
116
+ previous.end = end;
117
+ return;
118
+ }
119
+ const textChunk = text.slice(start, end);
120
+ tokens.push({
121
+ type: "text",
122
+ raw: textChunk,
123
+ value: textChunk,
124
+ start,
125
+ end
126
+ });
127
+ };
128
+ for (const m of rawMatches) {
129
+ if (m.start > currentIdx) {
130
+ pushText(currentIdx, m.start);
131
+ }
132
+ if (literal.has(m)) {
133
+ pushText(m.start, m.end);
134
+ } else {
135
+ tokens.push({ ...m });
136
+ }
137
+ currentIdx = m.end;
138
+ }
139
+ if (currentIdx < text.length) {
140
+ pushText(currentIdx, text.length);
141
+ }
142
+ return { tokens, diagnostics };
143
+ }
144
+
145
+ // src/grammar/engine.ts
146
+ function getLatestVersion(template) {
147
+ if (!template.versions || template.versions.length === 0) {
148
+ if (template.body !== void 0) {
149
+ return {
150
+ id: template.id || "default",
151
+ version: "1.0",
152
+ body: template.body
153
+ };
154
+ }
155
+ return void 0;
156
+ }
157
+ if (template.latestVersion) {
158
+ const found = template.versions.find(
159
+ (v) => v.version === template.latestVersion
160
+ );
161
+ if (found) return found;
162
+ }
163
+ return template.versions[template.versions.length - 1];
164
+ }
165
+ var TEMPLATE_LOOP_ERROR = "[Template loop detected]";
166
+ var TEMPLATE_DEPTH_ERROR = "[Template max depth exceeded]";
167
+ function getTemplateBody(template, bindings) {
168
+ const boundVersionId = bindings?.[template.name];
169
+ if (boundVersionId && template.versions) {
170
+ const boundVersion = template.versions.find(
171
+ (v) => v.id === boundVersionId || v.version === boundVersionId
172
+ );
173
+ return boundVersion?.body;
174
+ }
175
+ return getLatestVersion(template)?.body ?? template.body;
176
+ }
177
+ var Output = class {
178
+ constructor(segments) {
179
+ this.segments = segments;
180
+ }
181
+ segments;
182
+ text = "";
183
+ /** Text copied verbatim from the raw input. Locked segments never merge. */
184
+ raw(rawStart, rawEnd, value, locked = false) {
185
+ const resolvedStart = this.text.length;
186
+ this.text += value;
187
+ if (!this.segments) return;
188
+ const last = this.segments[this.segments.length - 1];
189
+ if (!locked && last && last.source === "raw" && !last.locked && last.rawEnd === rawStart && last.resolvedEnd === resolvedStart) {
190
+ last.rawEnd = rawEnd;
191
+ last.resolvedEnd = this.text.length;
192
+ return;
193
+ }
194
+ this.segments.push({
195
+ resolvedStart,
196
+ resolvedEnd: this.text.length,
197
+ source: "raw",
198
+ rawStart,
199
+ rawEnd,
200
+ ...locked ? { locked } : {}
201
+ });
202
+ }
203
+ /** Text that replaces a raw range (template body, value, removed section). */
204
+ replaced(rawStart, rawEnd, value, extra) {
205
+ const resolvedStart = this.text.length;
206
+ this.text += value;
207
+ this.segments?.push({
208
+ resolvedStart,
209
+ resolvedEnd: this.text.length,
210
+ rawStart,
211
+ rawEnd,
212
+ ...extra
213
+ });
214
+ }
215
+ };
216
+ function pairSections(tokens) {
217
+ const pairs = /* @__PURE__ */ new Map();
218
+ const stack = [];
219
+ tokens.forEach((token, index) => {
220
+ if (token.type !== "conditional") return;
221
+ if (token.conditional === "end") {
222
+ const open = stack.pop();
223
+ if (open !== void 0) pairs.set(open, index);
224
+ } else {
225
+ stack.push(index);
226
+ }
227
+ });
228
+ return pairs;
229
+ }
230
+ function resolvePrompt(text, templates = [], options = {}) {
231
+ const templateMap = /* @__PURE__ */ new Map();
232
+ for (const t of templates) {
233
+ templateMap.set(t.name, t);
234
+ }
235
+ const maxDepth = options.maxDepth ?? 10;
236
+ const values = options.values;
237
+ const diagnostics = [];
238
+ const reported = /* @__PURE__ */ new Set();
239
+ function resolveInto(source, out2, visited, depth, templateName) {
240
+ const { tokens, diagnostics: found } = tokenizePromptWithDiagnostics(source);
241
+ for (const diagnostic of found) {
242
+ const key = `${templateName ?? ""}\0${diagnostic.start}\0${diagnostic.code}`;
243
+ if (reported.has(key)) continue;
244
+ reported.add(key);
245
+ diagnostics.push(
246
+ templateName === void 0 ? diagnostic : { ...diagnostic, templateName }
247
+ );
248
+ }
249
+ const pairs = values ? pairSections(tokens) : null;
250
+ for (let i = 0; i < tokens.length; i++) {
251
+ const token = tokens[i];
252
+ if (token.type === "template") {
253
+ const name = token.value;
254
+ if (visited.has(name)) {
255
+ out2.replaced(token.start, token.end, TEMPLATE_LOOP_ERROR, {
256
+ source: "template",
257
+ templateName: name
258
+ });
259
+ continue;
260
+ }
261
+ const template = templateMap.get(name);
262
+ const body = template ? getTemplateBody(template, options.bindings) : void 0;
263
+ if (body === void 0) {
264
+ out2.raw(token.start, token.end, token.raw, true);
265
+ continue;
266
+ }
267
+ if (depth + 1 > maxDepth) {
268
+ out2.replaced(token.start, token.end, TEMPLATE_DEPTH_ERROR, {
269
+ source: "template",
270
+ templateName: name
271
+ });
272
+ continue;
273
+ }
274
+ const nested = new Output(null);
275
+ const nextVisited = new Set(visited);
276
+ nextVisited.add(name);
277
+ resolveInto(body, nested, nextVisited, depth + 1, name);
278
+ out2.replaced(token.start, token.end, nested.text, {
279
+ source: "template",
280
+ templateName: name
281
+ });
282
+ continue;
283
+ }
284
+ if (values && token.type === "variable") {
285
+ const supplied = getSuppliedValue(values, token.value);
286
+ const value = supplied ?? token.defaultValue;
287
+ if (value !== void 0) {
288
+ out2.replaced(token.start, token.end, value, {
289
+ source: "variable",
290
+ variableName: token.value,
291
+ valueSource: supplied !== void 0 ? "value" : "default"
292
+ });
293
+ continue;
294
+ }
295
+ }
296
+ if (values && token.type === "conditional" && token.conditional) {
297
+ const tagInfo = {
298
+ source: "conditional",
299
+ variableName: token.value
300
+ };
301
+ if (token.conditional !== "end") {
302
+ const close = pairs.get(i);
303
+ if (!evaluateCondition(token.conditional, token.value, values)) {
304
+ out2.replaced(token.start, tokens[close].end, "", tagInfo);
305
+ i = close;
306
+ continue;
307
+ }
308
+ }
309
+ out2.replaced(token.start, token.end, "", tagInfo);
310
+ continue;
311
+ }
312
+ out2.raw(token.start, token.end, token.raw);
313
+ }
314
+ }
315
+ const out = new Output([]);
316
+ resolveInto(text, out, /* @__PURE__ */ new Set(), 0, void 0);
317
+ const map = out.segments.map(
318
+ ({ locked: _locked, ...segment }) => segment
319
+ );
320
+ if (map.length === 0) {
321
+ map.push({
322
+ resolvedStart: 0,
323
+ resolvedEnd: 0,
324
+ source: "raw",
325
+ rawStart: 0,
326
+ rawEnd: 0
327
+ });
328
+ }
329
+ return { text: out.text, map, diagnostics };
330
+ }
331
+ function evaluatePromptTokens(text, values) {
332
+ const tokens = tokenizePromptWithDiagnostics(text).tokens;
333
+ if (!values) return tokens;
334
+ const pairs = pairSections(tokens);
335
+ const result = [];
336
+ for (let i = 0; i < tokens.length; i++) {
337
+ const token = tokens[i];
338
+ if (token.type === "conditional") {
339
+ if (token.conditional !== "end" && !evaluateCondition(token.conditional, token.value, values)) {
340
+ i = pairs.get(i);
341
+ }
342
+ continue;
343
+ }
344
+ if (token.type === "variable") {
345
+ const supplied = getSuppliedValue(values, token.value);
346
+ const value = supplied ?? token.defaultValue;
347
+ if (value !== void 0) {
348
+ result.push({
349
+ ...token,
350
+ resolvedValue: value,
351
+ valueSource: supplied !== void 0 ? "value" : "default"
352
+ });
353
+ continue;
354
+ }
355
+ }
356
+ result.push(token);
357
+ }
358
+ return result;
359
+ }
360
+
361
+ // src/grammar/resolver.ts
362
+ function resolveTemplates(text, templates = [], options) {
363
+ return resolvePrompt(text, templates, options).text;
364
+ }
365
+ function resolveVariables(text, values) {
366
+ if (!text) return "";
367
+ return resolvePrompt(text, [], { values }).text;
368
+ }
369
+ function extractTemplateNames(text) {
370
+ if (!text) return [];
371
+ const set = /* @__PURE__ */ new Set();
372
+ const regex = new RegExp(TEMPLATE_REGEX.source, TEMPLATE_REGEX.flags);
373
+ let match;
374
+ while ((match = regex.exec(text)) !== null) {
375
+ set.add(match[1].trim());
376
+ }
377
+ return Array.from(set);
378
+ }
379
+ function extractVariableNames(text) {
380
+ if (!text) return [];
381
+ const set = /* @__PURE__ */ new Set();
382
+ const regex = new RegExp(VARIABLE_REGEX.source, VARIABLE_REGEX.flags);
383
+ let match;
384
+ while ((match = regex.exec(text)) !== null) {
385
+ set.add(parseVariableBody(match[1]).name);
386
+ }
387
+ return Array.from(set);
388
+ }
389
+ function extractInstructionNames(text) {
390
+ if (!text) return [];
391
+ const set = /* @__PURE__ */ new Set();
392
+ const regex = new RegExp(INSTRUCTION_REGEX.source, INSTRUCTION_REGEX.flags);
393
+ let match;
394
+ while ((match = regex.exec(text)) !== null) {
395
+ set.add(match[1].trim());
396
+ }
397
+ return Array.from(set);
398
+ }
399
+
400
+ // src/grammar/sourcemap.ts
401
+ function resolveTemplatesWithMapping(text, templates = [], templateBindings, options) {
402
+ if (options?.values === void 0 && (!templates || templates.length === 0 || !text.includes("{{"))) {
403
+ return {
404
+ diagnostics: getPromptDiagnostics(text),
405
+ text,
406
+ map: [
407
+ {
408
+ resolvedStart: 0,
409
+ resolvedEnd: text.length,
410
+ source: "raw",
411
+ rawStart: 0,
412
+ rawEnd: text.length
413
+ }
414
+ ]
415
+ };
416
+ }
417
+ return resolvePrompt(text, templates, {
418
+ bindings: templateBindings,
419
+ maxDepth: options?.maxDepth,
420
+ values: options?.values
421
+ });
422
+ }
423
+ function mapResolvedOffsetToRaw(resolvedOffset, map) {
424
+ for (let i = 0; i < map.length; i++) {
425
+ const seg = map[i];
426
+ const isLast = i === map.length - 1;
427
+ const inRange = isLast ? resolvedOffset >= seg.resolvedStart && resolvedOffset <= seg.resolvedEnd : resolvedOffset >= seg.resolvedStart && resolvedOffset < seg.resolvedEnd;
428
+ if (inRange) {
429
+ if (seg.source === "raw") {
430
+ return seg.rawStart + (resolvedOffset - seg.resolvedStart);
431
+ }
432
+ if (resolvedOffset === seg.resolvedEnd) {
433
+ return seg.rawEnd;
434
+ }
435
+ return seg.rawStart;
436
+ }
437
+ }
438
+ return resolvedOffset;
439
+ }
440
+ function mapRawOffsetToResolved(rawOffset, map) {
441
+ for (let i = 0; i < map.length; i++) {
442
+ const seg = map[i];
443
+ const isLast = i === map.length - 1;
444
+ const inRange = isLast ? rawOffset >= seg.rawStart && rawOffset <= seg.rawEnd : rawOffset >= seg.rawStart && rawOffset < seg.rawEnd;
445
+ if (inRange) {
446
+ if (seg.source === "raw") {
447
+ return seg.resolvedStart + (rawOffset - seg.rawStart);
448
+ }
449
+ if (rawOffset === seg.rawEnd) {
450
+ return seg.resolvedEnd;
451
+ }
452
+ return seg.resolvedStart;
453
+ }
454
+ }
455
+ return rawOffset;
456
+ }
457
+
458
+ // src/grammar/fields.ts
459
+ function extractVariables(text, options = {}) {
460
+ const descriptors = /* @__PURE__ */ new Map();
461
+ const templateMap = new Map(
462
+ (options.templates ?? []).map((t) => [t.name, t])
463
+ );
464
+ const maxDepth = options.maxDepth ?? 10;
465
+ const describe = (name, templateName) => {
466
+ let descriptor = descriptors.get(name);
467
+ if (!descriptor) {
468
+ descriptor = {
469
+ name,
470
+ usedAsValue: false,
471
+ usedInCondition: false,
472
+ occurrences: 0,
473
+ templates: []
474
+ };
475
+ descriptors.set(name, descriptor);
476
+ }
477
+ descriptor.occurrences++;
478
+ if (templateName && !descriptor.templates.includes(templateName)) {
479
+ descriptor.templates.push(templateName);
480
+ }
481
+ return descriptor;
482
+ };
483
+ const visit = (source, visited, depth, templateName) => {
484
+ for (const token of tokenizePrompt(source)) {
485
+ if (token.type === "variable") {
486
+ const descriptor = describe(token.value, templateName);
487
+ descriptor.usedAsValue = true;
488
+ if (descriptor.defaultValue === void 0 && token.defaultValue !== void 0) {
489
+ descriptor.defaultValue = token.defaultValue;
490
+ }
491
+ if (descriptor.description === void 0 && token.description !== void 0) {
492
+ descriptor.description = token.description;
493
+ }
494
+ } else if (token.type === "conditional" && token.conditional !== "end") {
495
+ describe(token.value, templateName).usedInCondition = true;
496
+ } else if (token.type === "template") {
497
+ const template = templateMap.get(token.value);
498
+ if (!template || visited.has(token.value) || depth + 1 > maxDepth) {
499
+ continue;
500
+ }
501
+ const body = getTemplateBody(template, options.bindings);
502
+ if (body === void 0) continue;
503
+ visit(body, new Set(visited).add(token.value), depth + 1, token.value);
504
+ }
505
+ }
506
+ };
507
+ if (text) visit(text, /* @__PURE__ */ new Set(), 0);
508
+ return Array.from(descriptors.values());
509
+ }
510
+ function getVariableFormFields(text, options = {}) {
511
+ return extractVariables(text, options).map((variable) => ({
512
+ name: variable.name,
513
+ label: variable.description || variable.name,
514
+ placeholder: variable.defaultValue ?? "",
515
+ ...variable.defaultValue !== void 0 ? { defaultValue: variable.defaultValue } : {},
516
+ ...variable.description !== void 0 ? { description: variable.description } : {},
517
+ required: variable.usedAsValue && variable.defaultValue === void 0,
518
+ conditionOnly: !variable.usedAsValue
519
+ }));
520
+ }
521
+ function compactVariableValues(input) {
522
+ const values = {};
523
+ for (const [name, value] of Object.entries(input)) {
524
+ if (value !== null && value !== void 0 && value.trim() !== "") {
525
+ values[name] = value;
526
+ }
527
+ }
528
+ return values;
529
+ }
530
+
531
+ export {
532
+ tokenizePrompt,
533
+ getPromptDiagnostics,
534
+ tokenizePromptWithDiagnostics,
535
+ getLatestVersion,
536
+ TEMPLATE_LOOP_ERROR,
537
+ TEMPLATE_DEPTH_ERROR,
538
+ getTemplateBody,
539
+ resolvePrompt,
540
+ evaluatePromptTokens,
541
+ resolveTemplates,
542
+ resolveVariables,
543
+ extractTemplateNames,
544
+ extractVariableNames,
545
+ extractInstructionNames,
546
+ resolveTemplatesWithMapping,
547
+ mapResolvedOffsetToRaw,
548
+ mapRawOffsetToResolved,
549
+ extractVariables,
550
+ getVariableFormFields,
551
+ compactVariableValues
552
+ };
553
+ //# sourceMappingURL=chunk-OYXSKQFR.js.map