{"version":3,"sources":["../../node_modules/@vercel/stega/dist/index.mjs","../../src/stega/types.ts","../../src/stega/decode.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["var s={0:8203,1:8204,2:8205,3:8290,4:8291,5:8288,6:65279,7:8289,8:119155,9:119156,a:119157,b:119158,c:119159,d:119160,e:119161,f:119162},c={0:8203,1:8204,2:8205,3:65279},u=new Array(4).fill(String.fromCodePoint(c[0])).join(\"\"),m=String.fromCharCode(0);function E(t){let e=JSON.stringify(t);return`${u}${Array.from(e).map(r=>{let n=r.charCodeAt(0);if(n>255)throw new Error(`Only ASCII edit info can be encoded. Error attempting to encode ${e} on character ${r} (${n})`);return Array.from(n.toString(4).padStart(4,\"0\")).map(o=>String.fromCodePoint(c[o])).join(\"\")}).join(\"\")}`}function y(t){let e=JSON.stringify(t);return Array.from(e).map(r=>{let n=r.charCodeAt(0);if(n>255)throw new Error(`Only ASCII edit info can be encoded. Error attempting to encode ${e} on character ${r} (${n})`);return Array.from(n.toString(16).padStart(2,\"0\")).map(o=>String.fromCodePoint(s[o])).join(\"\")}).join(\"\")}function I(t){return!Number.isNaN(Number(t))||/[a-z]/i.test(t)&&!/\\d+(?:[-:\\/]\\d+){2}(?:T\\d+(?:[-:\\/]\\d+){1,2}(\\.\\d+)?Z?)?/.test(t)?!1:Boolean(Date.parse(t))}function T(t){try{new URL(t,t.startsWith(\"/\")?\"https://acme.com\":void 0)}catch{return!1}return!0}function C(t,e,r=\"auto\"){return r===!0||r===\"auto\"&&(I(t)||T(t))?t:`${t}${E(e)}`}var x=Object.fromEntries(Object.entries(c).map(t=>t.reverse())),g=Object.fromEntries(Object.entries(s).map(t=>t.reverse())),S=`${Object.values(s).map(t=>`\\\\u{${t.toString(16)}}`).join(\"\")}`,f=new RegExp(`[${S}]{4,}`,\"gu\");function G(t){let e=t.match(f);if(!!e)return h(e[0],!0)[0]}function $(t){let e=t.match(f);if(!!e)return e.map(r=>h(r)).flat()}function h(t,e=!1){let r=Array.from(t);if(r.length%2===0){if(r.length%4||!t.startsWith(u))return A(r,e)}else throw new Error(\"Encoded data has invalid length\");let n=[];for(let o=r.length*.25;o--;){let p=r.slice(o*4,o*4+4).map(d=>x[d.codePointAt(0)]).join(\"\");n.unshift(String.fromCharCode(parseInt(p,4)))}if(e){n.shift();let o=n.indexOf(m);return o===-1&&(o=n.length),[JSON.parse(n.slice(0,o).join(\"\"))]}return n.join(\"\").split(m).filter(Boolean).map(o=>JSON.parse(o))}function A(t,e){var d;let r=[];for(let i=t.length*.5;i--;){let a=`${g[t[i*2].codePointAt(0)]}${g[t[i*2+1].codePointAt(0)]}`;r.unshift(String.fromCharCode(parseInt(a,16)))}let n=[],o=[r.join(\"\")],p=10;for(;o.length;){let i=o.shift();try{if(n.push(JSON.parse(i)),e)return n}catch(a){if(!p--)throw a;let l=+((d=a.message.match(/\\sposition\\s(\\d+)$/))==null?void 0:d[1]);if(!l)throw a;o.unshift(i.substring(0,l),i.substring(l))}}return n}function _(t){var e;return{cleaned:t.replace(f,\"\"),encoded:((e=t.match(f))==null?void 0:e[0])||\"\"}}function O(t){return t&&JSON.parse(_(JSON.stringify(t)).cleaned)}export{f as VERCEL_STEGA_REGEX,y as legacyStegaEncode,O as vercelStegaClean,C as vercelStegaCombine,G as vercelStegaDecode,$ as vercelStegaDecodeAll,E as vercelStegaEncode,_ as vercelStegaSplit};\n","/**\n * Canonical metadata extracted from a stega payload. Most properties are\n * optional because the upstream string might not provide them, but we always\n * surface the raw payload for debugging purposes.\n */\nexport type DecodedInfo = {\n  origin: string;\n  href: string;\n};\n\nexport function isDecodedInfo(value: unknown): value is DecodedInfo {\n  return (\n    typeof value === 'object' &&\n    value !== null &&\n    'origin' in value &&\n    typeof value.origin === 'string' &&\n    'href' in value &&\n    typeof value.href === 'string'\n  );\n}\n","/**\n * Steganography helpers built on top of @vercel/stega.\n * These utilities decode the zero-width encoded metadata that DatoCMS embeds\n * into strings (text content, alt attributes, etc.) and normalize the result\n * into the strongly typed structure consumed by the rest of the SDK.\n */\nimport {\n  VERCEL_STEGA_REGEX,\n  vercelStegaClean,\n  vercelStegaDecode,\n  vercelStegaSplit\n} from '@vercel/stega';\nimport { type DecodedInfo, isDecodedInfo } from './types.js';\n\nexport const STEGA_REGEXP = VERCEL_STEGA_REGEX;\n\n/**\n * Splits a string into its cleaned content and encoded stega data.\n *\n * This function separates the visible content from invisible stega-encoded metadata\n * using the VERCEL_STEGA_REGEX pattern. It removes ALL stega encodings found in the\n * input string (due to the global regex flag).\n *\n * @param {string} input - The string potentially containing stega-encoded data\n * @returns {{ cleaned: string, encoded: string }} An object containing:\n *   - `cleaned`: The input string with all stega encodings removed\n *   - `encoded`: The first stega-encoded segment found (empty string if none found)\n *\n * @example\n * const result = splitStega(\"Hello[U+200E]World\");\n * // result.cleaned: \"HelloWorld\"\n * // result.encoded: \"[U+200E]\" (invisible characters)\n *\n * @example\n * // Multiple stega encodings - all removed from cleaned, only first captured in encoded\n * const result = splitStega(\"Part1[U+200E]Part2[U+200E]Part3\");\n * // result.cleaned: \"Part1Part2Part3\" (all stega removed)\n * // result.encoded: \"[U+200E]\" (only first encoding captured)\n */\nexport function splitStega(input: string): ReturnType<typeof vercelStegaSplit> {\n  return vercelStegaSplit(input);\n}\n\n/**\n * Decodes stega-encoded metadata from a string and returns structured information.\n *\n * This function extracts and decodes the FIRST stega-encoded segment found in the input,\n * returning a structured DecodedInfo object containing origin and href information.\n * If the input contains multiple stega encodings, only the first one is decoded.\n *\n * @param {string} input - The string potentially containing stega-encoded data\n * @param {ReturnType<typeof vercelStegaSplit>} [split] - Optional pre-split result from splitStega.\n *   If provided, avoids re-splitting the input. Useful for performance when you've already\n *   called splitStega on the same input.\n * @returns {DecodedInfo | null} The decoded metadata object with `origin` and `href` properties,\n *   or null if:\n *   - Input is empty/falsy\n *   - No stega encoding found\n *   - Decoding fails (invalid encoding)\n *   - Decoded data doesn't match DecodedInfo structure\n *\n * @example\n * // Decode stega from a string\n * const info = decodeStega(\"Hello[U+200E]World\");\n * if (info) {\n *   console.log(info.origin); // e.g., \"https://example.com\"\n *   console.log(info.href);   // e.g., \"/path/to/content\"\n * }\n */\nexport function decodeStega(input: string): DecodedInfo | null {\n  if (!input) {\n    return null;\n  }\n\n  const resolvedSplit = vercelStegaSplit(input);\n  if (!resolvedSplit.encoded) {\n    return null;\n  }\n\n  let decoded: unknown;\n  try {\n    decoded = vercelStegaDecode(resolvedSplit.encoded);\n  } catch {\n    return null;\n  }\n\n  if (!isDecodedInfo(decoded)) {\n    return null;\n  }\n\n  return decoded;\n}\n\n/**\n * Completely removes ALL stega encodings from any JavaScript value.\n *\n * This function works with any data type (strings, objects, arrays, primitives) by:\n * 1. Converting the input to a JSON string\n * 2. Removing all stega-encoded segments using the global VERCEL_STEGA_REGEX\n * 3. Parsing the cleaned JSON back to its original type\n *\n * Unlike splitStega which only works with strings, stripStega handles complex nested\n * structures and removes ALL stega encodings throughout the entire value.\n *\n * @template T - The type of the input value\n * @param {T} input - Any JavaScript value (string, object, array, number, etc.)\n * @returns {T} The same value with all stega encodings removed\n *\n * @example\n * // Works with strings\n * stripStega(\"Hello[U+200E]World\") // \"HelloWorld\"\n *\n * @example\n * // Works with objects\n * stripStega({ name: \"John[U+200E]\", age: 30 })\n *\n * @example\n * // Works with nested structures - removes ALL stega encodings\n * stripStega({\n *   users: [\n *     { name: \"Alice[U+200E]\", email: \"alice[U+200E]@example.com\" },\n *     { name: \"Bob[U+200E]\", email: \"bob[U+200E]@example.com\" }\n *   ]\n * })\n *\n * @example\n * // Works with arrays\n * stripStega([\"First[U+200E]\", \"Second[U+200E]\", \"Third[U+200E]\"])\n */\nexport function stripStega<T>(input: T): T {\n  return vercelStegaClean(input);\n}\n\n/**\n * Replaces invisible stega-encoded segments with visible markers, making it\n * easy to spot which strings in a GraphQL response (or any other value)\n * carry Visual Editing metadata.\n *\n * Works exactly like {@link stripStega} — accepts any JSON-serialisable value\n * (string, object, array, etc.) — but instead of silently removing the hidden\n * characters it replaces each occurrence with a human-readable tag:\n *\n * ```\n * [STEGA:/editor/item_types/123/items/456]\n * ```\n *\n * @template T - The type of the input value\n * @param {T} input - Any JavaScript value (string, object, array, number, etc.)\n * @returns {T} The same value with stega encodings replaced by visible markers\n *\n * @example\n * revealStega(\"Hello world\")\n * // \"Hello [STEGA:/editor/item_types/123/items/456]world\"\n *\n * @example\n * // Works with entire GraphQL responses\n * revealStega(graphqlResponse)\n */\nexport function revealStega<T>(input: T): T {\n  const json = JSON.stringify(input);\n  if (json === undefined) return input;\n\n  const revealed = json.replace(VERCEL_STEGA_REGEX, (match) => {\n    let decoded: unknown;\n    try {\n      decoded = vercelStegaDecode(match);\n    } catch {\n      decoded = null;\n    }\n\n    if (isDecodedInfo(decoded)) {\n      return `[STEGA:${decoded.href}]`;\n    }\n\n    return '[STEGA:?]';\n  });\n\n  return JSON.parse(revealed) as T;\n}\n"]}