{"version":3,"sources":["jsdelivr-header.js","/npm/@contentful/content-source-maps/dist/index.js","/npm/@contentful/live-preview@4.5.16/src/helpers/debug.ts","/npm/@contentful/live-preview@4.5.16/src/helpers/pollUrlChanges.ts","/npm/@contentful/live-preview@4.5.16/src/constants.ts","/npm/@contentful/live-preview@4.5.16/src/helpers/utils.ts","/npm/@contentful/live-preview@4.5.16/src/helpers/uuid.ts","/npm/@contentful/live-preview@4.5.16/src/helpers/validateMessage.ts","/npm/node_modules/lodash.isequal/index.js","/npm/@contentful/live-preview@4.5.16/src/inspectorMode/types.ts","/npm/node_modules/@vercel/stega/dist/index.mjs","/npm/@contentful/live-preview@4.5.16/src/inspectorMode/utils.ts","/npm/@contentful/live-preview@4.5.16/src/inspectorMode/index.ts","/npm/node_modules/flatted/esm/index.js","/npm/@contentful/live-preview@4.5.16/src/messages.ts","/npm/@contentful/live-preview@4.5.16/src/liveUpdates.ts","/npm/@contentful/live-preview@4.5.16/src/saveEvent.ts","/npm/@contentful/live-preview@4.5.16/src/index.ts"],"names":[],"mappings":"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","file":"/npm/@contentful/live-preview@4.5.16/dist/index.js/+esm","sourceRoot":"","sourcesContent":["/**\n * Bundled by jsDelivr using Rollup v4.62.2 and esbuild v0.28.1.\n * Original file: /npm/@contentful/live-preview@4.5.16/dist/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","var R = { 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 }, b = { 0: 8203, 1: 8204, 2: 8205, 3: 65279 }, V = new Array(4).fill(String.fromCodePoint(b[0])).join(\"\"), J = \"\\0\";\nfunction _(e) {\n  let t = JSON.stringify(e);\n  return `${V}${Array.from(t).map((o) => {\n    let n = o.charCodeAt(0);\n    if (n > 255) throw new Error(`Only ASCII edit info can be encoded. Error attempting to encode ${t} on character ${o} (${n})`);\n    return Array.from(n.toString(4).padStart(4, \"0\")).map((r) => String.fromCodePoint(b[r])).join(\"\");\n  }).join(\"\")}`;\n}\nfunction D(e) {\n  return !Number.isNaN(Number(e)) || /[a-z]/i.test(e) && !/\\d+(?:[-:\\/]\\d+){2}(?:T\\d+(?:[-:\\/]\\d+){1,2}(\\.\\d+)?Z?)?/.test(e) ? !1 : !!Date.parse(e);\n}\nfunction Q(e) {\n  try {\n    new URL(e, e.startsWith(\"/\") ? \"https://acme.com\" : void 0);\n  } catch (t) {\n    return !1;\n  }\n  return !0;\n}\nfunction z(e, t, o = \"auto\") {\n  return o === !0 || o === \"auto\" && (D(e) || Q(e)) ? e : `${e}${_(t)}`;\n}\nvar Z = Object.fromEntries(Object.entries(b).map((e) => e.reverse())), k = Object.fromEntries(Object.entries(R).map((e) => e.reverse())), G = `${Object.values(R).map((e) => `\\\\u{${e.toString(16)}}`).join(\"\")}`, O = new RegExp(`[${G}]{4,}`, \"gu\");\nfunction H(e) {\n  let t = e.match(O);\n  if (t) return K(t[0], !0)[0];\n}\nfunction K(e, t = !1) {\n  let o = Array.from(e);\n  if (o.length % 2 === 0) {\n    if (o.length % 4 || !e.startsWith(V)) return X(o, t);\n  } else throw new Error(\"Encoded data has invalid length\");\n  let n = [];\n  for (let r = o.length * 0.25; r--; ) {\n    let s = o.slice(r * 4, r * 4 + 4).map((i) => Z[i.codePointAt(0)]).join(\"\");\n    n.unshift(String.fromCharCode(parseInt(s, 4)));\n  }\n  if (t) {\n    n.shift();\n    let r = n.indexOf(J);\n    return r === -1 && (r = n.length), [JSON.parse(n.slice(0, r).join(\"\"))];\n  }\n  return n.join(\"\").split(J).filter(Boolean).map((r) => JSON.parse(r));\n}\nfunction X(e, t) {\n  var o;\n  let n = [];\n  for (let c = e.length * 0.5; c--; ) {\n    let u = `${k[e[c * 2].codePointAt(0)]}${k[e[c * 2 + 1].codePointAt(0)]}`;\n    n.unshift(String.fromCharCode(parseInt(u, 16)));\n  }\n  let r = [], s = [n.join(\"\")], i = 10;\n  for (; s.length; ) {\n    let c = s.shift();\n    try {\n      if (r.push(JSON.parse(c)), t) return r;\n    } catch (u) {\n      if (!i--) throw u;\n      let f = +((o = u.message.match(/\\sposition\\s(\\d+)$/)) == null ? void 0 : o[1]);\n      if (!f) throw u;\n      s.unshift(c.substring(0, f), c.substring(f));\n    }\n  }\n  return r;\n}\nfunction Y(e) {\n  var t;\n  return { cleaned: e.replace(O, \"\"), encoded: ((t = e.match(O)) == null ? void 0 : t[0]) || \"\" };\n}\nfunction T(e, t) {\n  return z(e, t);\n}\nfunction se(e) {\n  return _(e);\n}\nfunction ce(e) {\n  return H(e);\n}\nfunction ie(e) {\n  return Y(e);\n}\nvar q = Object.prototype.hasOwnProperty, ee = Object.prototype.toString, te = function(t, o, n) {\n  if (ee.call(o) !== \"[object Function]\")\n    throw new TypeError(\"iterator must be a function\");\n  var r = t.length;\n  if (r === +r)\n    for (var s = 0; s < r; s++)\n      o.call(n, t[s], s, t);\n  else\n    for (var i in t)\n      q.call(t, i) && o.call(n, t[i], i, t);\n}, ne = te, y = a;\nfunction a(e, t, o) {\n  if (arguments.length === 3)\n    return a.set(e, t, o);\n  if (arguments.length === 2)\n    return a.get(e, t);\n  var n = a.bind(a, e);\n  for (var r in a)\n    a.hasOwnProperty(r) && (n[r] = a[r].bind(n, e));\n  return n;\n}\na.get = function(t, o) {\n  for (var n = Array.isArray(o) ? o : a.parse(o), r = 0; r < n.length; ++r) {\n    var s = n[r];\n    if (!(typeof t == \"object\" && s in t))\n      throw new Error(\"Invalid reference token: \" + s);\n    t = t[s];\n  }\n  return t;\n};\na.set = function(t, o, n) {\n  var r = Array.isArray(o) ? o : a.parse(o), s = r[0];\n  if (r.length === 0)\n    throw Error(\"Can not set the root object\");\n  for (var i = 0; i < r.length - 1; ++i) {\n    var c = r[i];\n    typeof c != \"string\" && typeof c != \"number\" && (c = String(c)), !(c === \"__proto__\" || c === \"constructor\" || c === \"prototype\") && (c === \"-\" && Array.isArray(t) && (c = t.length), s = r[i + 1], c in t || (s.match(/^(\\d+|-)$/) ? t[c] = [] : t[c] = {}), t = t[c]);\n  }\n  return s === \"-\" && Array.isArray(t) && (s = t.length), t[s] = n, this;\n};\na.remove = function(e, t) {\n  var o = Array.isArray(t) ? t : a.parse(t), n = o[o.length - 1];\n  if (n === void 0)\n    throw new Error('Invalid JSON pointer for remove: \"' + t + '\"');\n  var r = a.get(e, o.slice(0, -1));\n  if (Array.isArray(r)) {\n    var s = +n;\n    if (n === \"\" && isNaN(s))\n      throw new Error('Invalid array index: \"' + n + '\"');\n    Array.prototype.splice.call(r, s, 1);\n  } else\n    delete r[n];\n};\na.dict = function(t, o) {\n  var n = {};\n  return a.walk(t, function(r, s) {\n    n[s] = r;\n  }, o), n;\n};\na.walk = function(t, o, n) {\n  var r = [];\n  n = n || function(s) {\n    var i = Object.prototype.toString.call(s);\n    return i === \"[object Object]\" || i === \"[object Array]\";\n  }, function s(i) {\n    ne(i, function(c, u) {\n      r.push(String(u)), n(c) ? s(c) : o(c, a.compile(r)), r.pop();\n    });\n  }(t);\n};\na.has = function(t, o) {\n  try {\n    a.get(t, o);\n  } catch (n) {\n    return !1;\n  }\n  return !0;\n};\na.escape = function(t) {\n  return t.toString().replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\n};\na.unescape = function(t) {\n  return t.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n};\na.parse = function(t) {\n  if (t === \"\")\n    return [];\n  if (t.charAt(0) !== \"/\")\n    throw new Error(\"Invalid JSON pointer: \" + t);\n  return t.substring(1).split(/\\//).map(a.unescape);\n};\na.compile = function(t) {\n  return t.length === 0 ? \"\" : \"/\" + t.map(a.escape).join(\"/\");\n};\nconst re = ({\n  pointer: e,\n  mappings: t,\n  data: o,\n  hiddenStrings: n\n}) => {\n  const r = t[e];\n  delete t[e];\n  const s = F(o, e);\n  for (const i of s) {\n    t[i] = r;\n    const c = y.get(o, i), u = T(c, n);\n    y.set(o, i, u);\n  }\n}, F = (e, t = \"\") => {\n  const o = [], n = y.get(e, t);\n  if (n.content)\n    for (let r = 0; r < n.content.length; r++)\n      n.content[r].nodeType === \"text\" ? o.push(`${t}/content/${r}/value`) : o.push(...F(e, `${t}/content/${r}`));\n  return o;\n}, x = ({\n  entityId: e,\n  entityType: t,\n  space: o,\n  environment: n,\n  field: r,\n  locale: s,\n  editorInterface: i,\n  fieldType: c,\n  targetOrigin: u,\n  platform: f\n}) => {\n  const d = {\n    origin: \"contentful.com\",\n    href: `${`${u || \"https://app.contentful.com\"}/spaces/${o}/environments/${n}`}/${t === \"Entry\" ? \"entries\" : \"assets\"}/${e}/?focusedField=${r}&focusedLocale=${s}&source=vercel-content-link`,\n    contentful: {\n      editorInterface: i,\n      fieldType: c\n    }\n  };\n  return f === \"vercel\" && delete d.contentful, d;\n}, W = (e) => [\"builtin\", \"sidebar-builtin\", \"editor-builtin\"].includes(e), U = (e) => oe.includes(e);\nfunction j(e) {\n  if (typeof structuredClone == \"function\")\n    return structuredClone(e);\n  try {\n    return JSON.parse(JSON.stringify(e));\n  } catch (t) {\n    return console.warn(\"Failed to clone data:\", e, t), e;\n  }\n}\nconst oe = [\n  \"singleLine\",\n  \"tagEditor\",\n  \"listInput\",\n  \"checkbox\",\n  \"richTextEditor\",\n  \"multipleLine\"\n];\nfunction C(e, t, o, n, r, s, i) {\n  const c = i ? t[i] : t;\n  switch (e) {\n    case \"Symbol\": {\n      const u = T(c, o);\n      y.set(n, r, u);\n      break;\n    }\n    case \"Text\": {\n      const u = T(c, o);\n      y.set(n, r, u);\n      break;\n    }\n    case \"RichText\": {\n      re({\n        pointer: \"\",\n        mappings: s,\n        data: c,\n        hiddenStrings: o\n      });\n      break;\n    }\n    case \"Array\": {\n      const u = c.map((f) => typeof f == \"string\" ? T(f, o) : f);\n      y.set(n, r, u);\n      break;\n    }\n  }\n}\nconst ae = (e, t, o) => {\n  if (!e || !e.extensions || !e.extensions.contentSourceMaps)\n    return console.error(\n      \"GraphQL response does not contain Content Source Maps information.\",\n      e\n    ), e;\n  const n = j(e), {\n    spaces: r,\n    environments: s,\n    editorInterfaces: i,\n    fields: c,\n    locales: u,\n    entries: f,\n    assets: p,\n    mappings: g,\n    fieldTypes: v\n  } = n.extensions.contentSourceMaps, h = n;\n  for (const d in g) {\n    const { source: l } = g[d], m = \"entry\" in l ? f[l.entry] : p[l.asset], P = \"entry\" in l ? \"Entry\" : \"Asset\";\n    if (!m)\n      return n;\n    const S = r[m.space], A = s[m.environment], E = m.id, w = c[l.field], I = u[l.locale], N = i[l.editorInterface], L = v[l.fieldType];\n    if (!(W(N.widgetNamespace) && !U(N.widgetId)) && y.has(h, d)) {\n      const M = y.get(h, d);\n      if (M !== null) {\n        const B = x({\n          entityId: E,\n          entityType: P,\n          space: S,\n          environment: A,\n          field: w,\n          locale: I,\n          editorInterface: N,\n          fieldType: L,\n          targetOrigin: t,\n          platform: o\n        });\n        C(L, M, B, h, d, g);\n      }\n    }\n  }\n  return n;\n}, $ = (e, t, o, n, r) => {\n  if (!e.fields)\n    return;\n  const { contentSourceMaps: s } = e.sys;\n  if (!s) {\n    console.error(\"Content source maps data is missing\");\n    return;\n  }\n  const { mappings: i } = s;\n  for (const c in i) {\n    const { source: u } = i[c], f = e.sys.space.sys.id, p = e.sys.environment.sys.id, g = e.sys.id, v = e.sys.type, h = t[u.fieldType], d = o[u.editorInterface];\n    if (W(d.widgetNamespace) && !U(d.widgetId))\n      continue;\n    const l = c.startsWith(\"/\") ? c : `/${c}`;\n    if (y.has(e, l)) {\n      const m = y.get(e, l);\n      if (m === null)\n        return;\n      const S = l.split(\"/\").pop();\n      if (!S) {\n        console.error(\"Field name could not be extracted from the pointer\", l);\n        return;\n      }\n      const A = e.sys.locale;\n      if (A) {\n        const E = x({\n          entityId: g,\n          entityType: v,\n          space: f,\n          environment: p,\n          field: S,\n          locale: A,\n          editorInterface: d,\n          fieldType: h,\n          targetOrigin: n,\n          platform: r\n        });\n        C(h, m, E, e, l, i);\n      } else\n        Object.keys(m).forEach((w) => {\n          const I = x({\n            entityId: g,\n            entityType: v,\n            space: f,\n            environment: p,\n            field: S,\n            locale: w,\n            editorInterface: d,\n            fieldType: h,\n            targetOrigin: n,\n            platform: r\n          });\n          C(\n            h,\n            m,\n            I,\n            e,\n            `${l}/${w}`,\n            i,\n            w\n          );\n        });\n    }\n  }\n}, ue = (e, t, o) => {\n  var r;\n  const n = j(\n    e\n  );\n  if (n.sys && \"items\" in n) {\n    const s = n;\n    if (!((r = s.sys) != null && r.contentSourceMapsLookup))\n      return console.error(\"Content source maps lookup data is missing\"), s;\n    const {\n      contentSourceMapsLookup: { fieldTypes: i, editorInterfaces: c }\n    } = s.sys, { items: u, includes: f } = s;\n    u.forEach(\n      (p) => $(p, i, c, t, o)\n    ), f && f.Entry && f.Entry.forEach(\n      (p) => $(p, i, c, t, o)\n    ), f && f.Asset && f.Asset.forEach(\n      (p) => $(p, i, c, t, o)\n    );\n  } else {\n    const s = n;\n    if (!s.sys.contentSourceMapsLookup)\n      return console.error(\"Content source maps lookup data is missing\"), s;\n    $(\n      s,\n      s.sys.contentSourceMapsLookup.fieldTypes,\n      s.sys.contentSourceMapsLookup.editorInterfaces,\n      t,\n      o\n    );\n  }\n  return n;\n};\nexport {\n  oe as SUPPORTED_WIDGETS,\n  j as clone,\n  T as combine,\n  x as createSourceMapMetadata,\n  ce as decode,\n  se as encode,\n  ue as encodeCPAResponse,\n  C as encodeField,\n  ae as encodeGraphQLResponse,\n  re as encodeRichTextValue,\n  W as isBuiltinNamespace,\n  U as isSupportedWidget,\n  ie as splitEncoding\n};\n//# sourceMappingURL=index.js.map\n","let DEBUG = false;\n\n/** Enable the internal debug logs for the SDK */\nexport function setDebugMode(flag: boolean): void {\n  DEBUG = flag;\n}\n\nconst log =\n  (level: 'error' | 'log' | 'warn'): typeof console.log =>\n  (...args) => {\n    if (DEBUG) {\n      console[level](...args);\n    }\n  };\n\n/** Wrapper around `console` functions to output only if the debug mode is enabled */\nexport const debug = {\n  error: log('error'),\n  warn: log('warn'),\n  log: log('log'),\n};\n","// TODO: instead of polling could we use MutationObserver to check for dom changes and then compare URL's\nexport function pollUrlChanges(callback: (newUrl: string) => void, interval = 500): () => void {\n  let initialUrl = window.location.href;\n\n  const checkUrlChange = () => {\n    const currentUrl = window.location.href;\n    if (currentUrl !== initialUrl) {\n      initialUrl = currentUrl;\n      callback(currentUrl);\n    }\n  };\n\n  const intervalId = setInterval(checkUrlChange, interval);\n  return () => clearInterval(intervalId);\n}\n","export const LIVE_PREVIEW_EDITOR_SOURCE = 'live-preview-editor' as const;\nexport const LIVE_PREVIEW_SDK_SOURCE = 'live-preview-sdk' as const;\n","import { version } from '../../package.json';\nimport { LIVE_PREVIEW_SDK_SOURCE } from '../constants.js';\nimport type { EditorMessage, MessageFromSDK } from '../messages.js';\nimport { PostMessageMethods } from '../messages.js';\nimport { debug } from './debug.js';\n\n/**\n * Sends the given message to the editor\n * enhances it with the information necessary to be accepted\n */\nexport function sendMessageToEditor(\n  method: PostMessageMethods,\n  data: EditorMessage,\n  targetOrigin: string[],\n): void {\n  const message = {\n    ...data,\n    method,\n    source: LIVE_PREVIEW_SDK_SOURCE,\n    location: window.location.href,\n    version,\n  } as MessageFromSDK;\n\n  debug.log(`Send message`, message);\n\n  targetOrigin.forEach((origin) => {\n    window.top?.postMessage(message, origin);\n  });\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Callback = (...args: any[]) => void;\ntype DebouncedFunction<T extends Callback> = (...args: Parameters<T>) => void;\n\nexport function debounce<T extends Callback>(func: T, timeout = 100): DebouncedFunction<T> {\n  let timer: NodeJS.Timeout;\n\n  return (...args) => {\n    clearTimeout(timer);\n    timer = setTimeout(() => {\n      // @ts-expect-error `this` is untyped\n      func.apply(this, args);\n    }, timeout);\n  };\n}\n\n/** Detects if the current page is shown inside an iframe */\nexport function isInsideIframe(): boolean {\n  try {\n    return window.top?.location.href !== window.location.href;\n  } catch (err) {\n    // window.top.location.href is not accessable for non same origin iframes\n    return true;\n  }\n}\n","/**\n * Cheap solution to generate a unique ID\n */\nexport function generateUID(): string {\n  return `${performance.now()}-${Math.random().toString(36).slice(2)}`;\n}\n","import { LIVE_PREVIEW_EDITOR_SOURCE } from '../constants.js';\n\nexport function isValidMessage(event: MessageEvent<unknown>): boolean {\n  if (typeof event.data !== 'object' || !event.data) {\n    return false;\n  }\n\n  if ('source' in event.data && event.data.source === LIVE_PREVIEW_EDITOR_SOURCE) {\n    return true;\n  }\n\n  return false;\n}\n","/**\n * Lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors <https://js.foundation/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    asyncTag = '[object AsyncFunction]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    nullTag = '[object Null]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    proxyTag = '[object Proxy]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]',\n    undefinedTag = '[object Undefined]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\n/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n  return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n  var index = -1,\n      result = Array(map.size);\n\n  map.forEach(function(value, key) {\n    result[++index] = [key, value];\n  });\n  return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n    funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    Symbol = root.Symbol,\n    Uint8Array = root.Uint8Array,\n    propertyIsEnumerable = objectProto.propertyIsEnumerable,\n    splice = arrayProto.splice,\n    symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n    nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n    nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n    Map = getNative(root, 'Map'),\n    Promise = getNative(root, 'Promise'),\n    Set = getNative(root, 'Set'),\n    WeakMap = getNative(root, 'WeakMap'),\n    nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n  var index = -1,\n      length = values == null ? 0 : values.length;\n\n  this.__data__ = new MapCache;\n  while (++index < length) {\n    this.add(values[index]);\n  }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n  this.__data__.set(value, HASH_UNDEFINED);\n  return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n  return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Unordered comparison\n *  2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = objIsArr ? arrayTag : getTag(object),\n      othTag = othIsArr ? arrayTag : getTag(other);\n\n  objTag = objTag == argsTag ? objectTag : objTag;\n  othTag = othTag == argsTag ? objectTag : othTag;\n\n  var objIsObj = objTag == objectTag,\n      othIsObj = othTag == objectTag,\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && isBuffer(object)) {\n    if (!isBuffer(other)) {\n      return false;\n    }\n    objIsArr = true;\n    objIsObj = false;\n  }\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack);\n    return (objIsArr || isTypedArray(object))\n      ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n      : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n  }\n  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      var objUnwrapped = objIsWrapped ? object.value() : object,\n          othUnwrapped = othIsWrapped ? other.value() : other;\n\n      stack || (stack = new Stack);\n      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack);\n  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\n  // Assume cyclic values are equal.\n  var stacked = stack.get(array);\n  if (stacked && stack.get(other)) {\n    return stacked == other;\n  }\n  var index = -1,\n      result = true,\n      seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n  stack.set(array, other);\n  stack.set(other, array);\n\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, arrValue, index, other, array, stack)\n        : customizer(arrValue, othValue, index, array, other, stack);\n    }\n    if (compared !== undefined) {\n      if (compared) {\n        continue;\n      }\n      result = false;\n      break;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (seen) {\n      if (!arraySome(other, function(othValue, othIndex) {\n            if (!cacheHas(seen, othIndex) &&\n                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n              return seen.push(othIndex);\n            }\n          })) {\n        result = false;\n        break;\n      }\n    } else if (!(\n          arrValue === othValue ||\n            equalFunc(arrValue, othValue, bitmask, customizer, stack)\n        )) {\n      result = false;\n      break;\n    }\n  }\n  stack['delete'](array);\n  stack['delete'](other);\n  return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n  switch (tag) {\n    case dataViewTag:\n      if ((object.byteLength != other.byteLength) ||\n          (object.byteOffset != other.byteOffset)) {\n        return false;\n      }\n      object = object.buffer;\n      other = other.buffer;\n\n    case arrayBufferTag:\n      if ((object.byteLength != other.byteLength) ||\n          !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n        return false;\n      }\n      return true;\n\n    case boolTag:\n    case dateTag:\n    case numberTag:\n      // Coerce booleans to `1` or `0` and dates to milliseconds.\n      // Invalid dates are coerced to `NaN`.\n      return eq(+object, +other);\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings, primitives and objects,\n      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n      // for more details.\n      return object == (other + '');\n\n    case mapTag:\n      var convert = mapToArray;\n\n    case setTag:\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n      convert || (convert = setToArray);\n\n      if (object.size != other.size && !isPartial) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(object);\n      if (stacked) {\n        return stacked == other;\n      }\n      bitmask |= COMPARE_UNORDERED_FLAG;\n\n      // Recursively compare objects (susceptible to call stack limits).\n      stack.set(object, other);\n      var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n      stack['delete'](object);\n      return result;\n\n    case symbolTag:\n      if (symbolValueOf) {\n        return symbolValueOf.call(object) == symbolValueOf.call(other);\n      }\n  }\n  return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      objProps = getAllKeys(object),\n      objLength = objProps.length,\n      othProps = getAllKeys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isPartial) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  // Assume cyclic values are equal.\n  var stacked = stack.get(object);\n  if (stacked && stack.get(other)) {\n    return stacked == other;\n  }\n  var result = true;\n  stack.set(object, other);\n  stack.set(other, object);\n\n  var skipCtor = isPartial;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, objValue, key, other, object, stack)\n        : customizer(objValue, othValue, key, object, other, stack);\n    }\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(compared === undefined\n          ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n          : compared\n        )) {\n      result = false;\n      break;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (result && !skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      result = false;\n    }\n  }\n  stack['delete'](object);\n  stack['delete'](other);\n  return result;\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return !!length &&\n    (typeof value == 'number' || reIsUint.test(value)) &&\n    (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n  return baseIsEqual(value, other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nmodule.exports = isEqual;\n","import type { SetRequired } from 'type-fest';\n\ntype InspectorModeSharedTags = {\n  [InspectorModeDataAttributes.FIELD_ID]: string;\n  [InspectorModeDataAttributes.LOCALE]?: string;\n  [InspectorModeDataAttributes.ENVIRONMENT]?: string;\n  [InspectorModeDataAttributes.SPACE]?: string;\n};\n\nexport type InspectorModeEntryTags = InspectorModeSharedTags & {\n  [InspectorModeDataAttributes.ENTRY_ID]: string;\n};\nexport type InspectorModeAssetTags = InspectorModeSharedTags & {\n  [InspectorModeDataAttributes.ASSET_ID]: string;\n};\nexport type InspectorModeTags = InspectorModeEntryTags | InspectorModeAssetTags | null;\n\nexport const enum InspectorModeDataAttributes {\n  FIELD_ID = 'data-contentful-field-id',\n  ENTRY_ID = 'data-contentful-entry-id',\n  ASSET_ID = 'data-contentful-asset-id',\n  LOCALE = 'data-contentful-locale',\n  SPACE = 'data-contentful-space',\n  ENVIRONMENT = 'data-contentful-environment',\n}\n\nexport enum InspectorModeEventMethods {\n  /** @deprecated handled thorugh `TAGGED_ELEMENTS` */\n  MOUSE_MOVE = 'MOUSE_MOVE',\n  SCROLL_START = 'SCROLL_START',\n  SCROLL_END = 'SCROLL_END',\n  RESIZE_START = 'RESIZE_START',\n  RESIZE_END = 'RESIZE_END',\n  TAGGED_ELEMENTS = 'TAGGED_ELEMENTS',\n  INSPECTOR_MODE_CHANGED = 'INSPECTOR_MODE_CHANGED',\n}\n\nexport type InspectorModeSharedAttributes = {\n  fieldId: string;\n  locale: string;\n  space?: string;\n  environment?: string;\n  manuallyTagged?: boolean;\n};\nexport type InspectorModeEntryAttributes = InspectorModeSharedAttributes & {\n  entryId: string;\n};\nexport type InspectorModeAssetAttributes = InspectorModeSharedAttributes & {\n  assetId: string;\n};\n\nexport type InspectorModeAttributes = InspectorModeEntryAttributes | InspectorModeAssetAttributes;\n\nexport type InspectorModeElement = {\n  attributes?: InspectorModeAttributes | null;\n  coordinates: DOMRect;\n  isVisible: boolean;\n  isHovered: boolean;\n};\n\nexport type InspectorModeScrollMessage = Record<string, never>;\nexport type InspectorModeResizeMessage = Record<string, never>;\n/** @deprecated will be removed in favor of `InspectorModeTaggedElementsMessage` */\nexport type InspectorModeMouseMoveMessage = {\n  element: SetRequired<InspectorModeElement, 'attributes'> | null;\n};\nexport type InspectorModeTaggedElementsMessage = {\n  elements: Array<InspectorModeElement>;\n  manuallyTaggedCount: number;\n  automaticallyTaggedCount: number;\n};\n\nexport type InspectorModeChangedMessage = {\n  /** @deprecated use method instead */\n  action: InspectorModeEventMethods.INSPECTOR_MODE_CHANGED;\n  isInspectorActive: boolean;\n};\n","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","import { decode, type SourceMapMetadata } from '@contentful/content-source-maps';\nimport { VERCEL_STEGA_REGEX } from '@vercel/stega';\n\nimport { debug } from '../helpers/debug.js';\nimport { InspectorModeOptions } from './index.js';\nimport {\n  InspectorModeAssetAttributes,\n  InspectorModeAttributes,\n  InspectorModeDataAttributes,\n  InspectorModeEntryAttributes,\n  InspectorModeSharedAttributes,\n} from './types.js';\n\nexport type AutoTaggedElement<T = Node> = {\n  element: T;\n  sourceMap: SourceMapMetadata;\n};\n\ninterface PrecaulculatedTaggedElement {\n  element: Element;\n  attributes: InspectorModeAttributes | null;\n}\n\nexport interface TaggedElement extends PrecaulculatedTaggedElement {\n  isHovered: boolean;\n  isVisible: boolean;\n  coordinates: DOMRect;\n  isCoveredByOtherElement: boolean;\n}\n\nconst isTaggedElement = (node?: Node | null): boolean => {\n  if (!node) {\n    return false;\n  }\n\n  if (node.nodeType !== Node.ELEMENT_NODE) {\n    return false;\n  }\n\n  const el = node as Element;\n\n  if (!el.hasAttribute(InspectorModeDataAttributes.FIELD_ID)) {\n    return false;\n  }\n\n  if (\n    !el.hasAttribute(InspectorModeDataAttributes.ENTRY_ID) &&\n    !el.hasAttribute(InspectorModeDataAttributes.ASSET_ID)\n  ) {\n    return false;\n  }\n\n  return true;\n};\n\n/**\n * Parses the necessary manually tagged information from the element and returns them.\n * If **one** of the information is missing it returns null\n */\nexport function getManualInspectorModeAttributes(\n  element: Element,\n  fallbackProps: Pick<InspectorModeAttributes, 'environment' | 'locale' | 'space'>,\n): InspectorModeAttributes | null {\n  if (!isTaggedElement(element)) {\n    return null;\n  }\n\n  const sharedProps = {\n    fieldId: element.getAttribute(InspectorModeDataAttributes.FIELD_ID) as string,\n    locale: element.getAttribute(InspectorModeDataAttributes.LOCALE) ?? fallbackProps.locale,\n    environment:\n      element.getAttribute(InspectorModeDataAttributes.ENVIRONMENT) ?? fallbackProps.environment,\n    space: element.getAttribute(InspectorModeDataAttributes.SPACE) ?? fallbackProps.space,\n    manuallyTagged: true,\n  };\n\n  if (!sharedProps.fieldId) {\n    debug.warn('Element is missing field ID attribute and cannot be tagged', {\n      id:\n        element.getAttribute(InspectorModeDataAttributes.ENTRY_ID) ??\n        element.getAttribute(InspectorModeDataAttributes.ASSET_ID),\n      sharedProps,\n    });\n    return null;\n  }\n\n  const entryId = element.getAttribute(InspectorModeDataAttributes.ENTRY_ID);\n  if (entryId) {\n    return { ...sharedProps, entryId };\n  }\n\n  const assetId = element.getAttribute(InspectorModeDataAttributes.ASSET_ID);\n  if (assetId) {\n    return { ...sharedProps, assetId };\n  }\n\n  return null;\n}\n\n/**\n * Check if both sourcemaps are identical\n * Based on how they're generated it's enough to check the URL\n */\nfunction isSameSourceMap(a: SourceMapMetadata, b: SourceMapMetadata): boolean {\n  return a.href === b.href;\n}\n\n/**\n * Validates that both elements & sourceMap informationare the same\n */\nfunction isSameElement(a: AutoTaggedElement, b: AutoTaggedElement): boolean {\n  if (!isSameSourceMap(a.sourceMap, b.sourceMap)) {\n    return false;\n  }\n\n  if (a.element !== b.element) {\n    return false;\n  }\n\n  return true;\n}\n\nexport function findStegaNodes(container: HTMLElement) {\n  let baseArray: HTMLElement[] = [];\n  if (typeof container.matches === 'function' && container.matches('*')) {\n    baseArray = [container];\n  }\n\n  return [\n    ...baseArray,\n    ...Array.from(container.querySelectorAll<HTMLElement>('*:not(script,style,meta,title)')),\n  ]\n    .map((node) => ({ node, text: getNodeText(node) }))\n    .filter(({ text }) => !!(text && text.match(VERCEL_STEGA_REGEX)));\n}\n\nfunction getNodeText(node: HTMLElement): string {\n  if (node.matches('input[type=submit], input[type=button], input[type=reset]')) {\n    return (node as HTMLInputElement).value;\n  }\n\n  if (node.matches('img, video')) {\n    return (node as HTMLImageElement).alt;\n  }\n\n  return Array.from(node.childNodes)\n    .filter((child) => child.nodeType === Node.TEXT_NODE && Boolean(child.textContent))\n    .map((c) => c.textContent)\n    .join('');\n}\n\nfunction hasTaggedParent(\n  node: HTMLElement,\n  taggedElements: PrecaulculatedTaggedElement[],\n): boolean {\n  for (const tagged of taggedElements) {\n    if (tagged.element === node || tagged.element.contains(node)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/**\n * Query the document for all tagged elements\n */\nexport function getAllTaggedElements({\n  root = window.document,\n  options,\n}: {\n  root?: any;\n  options: Omit<InspectorModeOptions, 'targetOrigin'>;\n}): {\n  taggedElements: PrecaulculatedTaggedElement[];\n  manuallyTaggedCount: number;\n  automaticallyTaggedCount: number;\n  autoTaggedElements: AutoTaggedElement<Element>[];\n} {\n  const alreadyTagged = options.ignoreManuallyTaggedElements\n    ? []\n    : root.querySelectorAll(\n        `[${InspectorModeDataAttributes.ASSET_ID}][${InspectorModeDataAttributes.FIELD_ID}], [${InspectorModeDataAttributes.ENTRY_ID}][${InspectorModeDataAttributes.FIELD_ID}]`,\n      );\n\n  // Spread operator is necessary to convert the NodeList to an array\n  const taggedElements: PrecaulculatedTaggedElement[] = [...alreadyTagged]\n    .map((element: Element) => ({\n      element,\n      attributes: getManualInspectorModeAttributes(element, options),\n    }))\n    // Filter out elements that don't have the necessary attributes\n    .filter(({ attributes }) => attributes !== null);\n  const elementsForTagging: AutoTaggedElement<Element>[] = [];\n\n  const stegaNodes = findStegaNodes('body' in root ? root.body : root);\n\n  for (const { node, text } of stegaNodes) {\n    const sourceMap = decode(text);\n    if (!sourceMap || !sourceMap.origin.includes('contentful.com')) {\n      debug.warn(\n        \"Element has missing or invalid ContentSourceMap, please check if you have correctly enabled ContentSourceMaps and that the element's data originates from Contentful\",\n        {\n          node,\n          sourceMap,\n        },\n      );\n      continue;\n    }\n\n    if (\n      hasTaggedParent(node, taggedElements) ||\n      elementsForTagging.some(\n        (et) => et.element.contains(node) && isSameSourceMap(et.sourceMap, sourceMap),\n      )\n    ) {\n      continue;\n    }\n\n    if (node.matches('img')) {\n      const element = node.closest('figure') || node.closest('picture') || node;\n      elementsForTagging.push({ element, sourceMap });\n      continue;\n    }\n\n    elementsForTagging.push({ element: node, sourceMap: sourceMap });\n  }\n\n  // Filter duplicate elements, so we don't tag them again and again\n  const uniqElementsForTagging = elementsForTagging.filter(\n    (el, index) => elementsForTagging.findIndex((et) => isSameElement(el, et)) === index,\n  );\n\n  for (const { element, sourceMap } of uniqElementsForTagging) {\n    let inspectorModeAttributes: InspectorModeAttributes | null = null;\n\n    if (sourceMap.href) {\n      // Newer SDK versions will always have HREF, so we can use that to extract the attributes\n      const attributes = parseAttributesFromHref(sourceMap.href);\n\n      if (!attributes) {\n        // parseAttributesFromHref already logs a warning\n        continue;\n      }\n\n      if (attributes.entityType === 'Asset') {\n        inspectorModeAttributes = {\n          fieldId: attributes.fieldId,\n          locale: attributes.locale,\n          space: attributes.space,\n          environment: attributes.environment,\n          assetId: attributes.entityId,\n        } as InspectorModeAssetAttributes;\n      } else if (attributes.entityType === 'Entry') {\n        inspectorModeAttributes = {\n          fieldId: attributes.fieldId,\n          locale: attributes.locale,\n          space: attributes.space,\n          environment: attributes.environment,\n          entryId: attributes.entityId,\n        } as InspectorModeEntryAttributes;\n      } else {\n        // This should not happen, but adding a warning just in case\n        debug.warn('Unknown entityType', {\n          element,\n          sourceMap,\n        });\n        continue;\n      }\n    } else if (sourceMap.contentful && isLegacyContentfulData(sourceMap.contentful)) {\n      // Older SDK versions might not have HREF (if platform was set to 'contentful'), so we need to extract the attributes from sourceMap.contentful\n      const contentfulData = sourceMap.contentful;\n      if (\n        !contentfulData.entity ||\n        !contentfulData.field ||\n        !contentfulData.locale ||\n        !contentfulData.space ||\n        !contentfulData.environment\n      ) {\n        debug.warn(\n          'Element has missing information in their ContentSourceMap, please check if you have restricted the platform for the encoding. (Missing parameters in `contentful`)',\n          {\n            element,\n            sourceMap,\n          },\n        );\n        continue;\n      }\n\n      const attributes: InspectorModeSharedAttributes = {\n        fieldId: contentfulData.field,\n        locale: contentfulData.locale,\n        space: contentfulData.space,\n        environment: contentfulData.environment,\n      };\n\n      if (contentfulData.entityType === 'Asset') {\n        (attributes as InspectorModeAssetAttributes).assetId = contentfulData.entity;\n        inspectorModeAttributes = attributes as InspectorModeAssetAttributes;\n      } else if (contentfulData.entityType === 'Entry') {\n        (attributes as InspectorModeEntryAttributes).entryId = contentfulData.entity;\n        inspectorModeAttributes = attributes as InspectorModeEntryAttributes;\n      } else {\n        debug.warn('Unknown entityType in contentful data', {\n          element,\n          sourceMap,\n        });\n        continue;\n      }\n    } else {\n      debug.warn(\n        'Element has neither href nor contentful data in their ContentSourceMap, unable to extract attributes.',\n        {\n          element,\n          sourceMap,\n        },\n      );\n      continue;\n    }\n\n    taggedElements.push({\n      element,\n      attributes: inspectorModeAttributes,\n    });\n  }\n\n  const autoTaggedCount = taggedElements.filter(\n    ({ attributes }) => attributes?.manuallyTagged === false || !attributes?.manuallyTagged,\n  ).length;\n\n  return {\n    taggedElements,\n    manuallyTaggedCount: taggedElements.length - autoTaggedCount,\n    automaticallyTaggedCount: autoTaggedCount,\n    autoTaggedElements: uniqElementsForTagging,\n  };\n}\n\n/**\n * Returns a list of tagged entries on the page\n */\nexport function getAllTaggedEntries({\n  options,\n}: {\n  options: Omit<InspectorModeOptions, 'targetOrigin'>;\n}): string[] {\n  return [\n    ...new Set(\n      getAllTaggedElements({ options })\n        .taggedElements.map((element: PrecaulculatedTaggedElement) => {\n          if (element.attributes && 'entryId' in element.attributes) {\n            return element.attributes.entryId;\n          }\n          return null;\n        })\n        .filter(Boolean) as string[],\n    ),\n  ];\n}\n\nconst isElementOverlapped = (element: Element, coordinates: DOMRect, root = window.document) => {\n  const { top, right, bottom, left } = coordinates;\n  const topLeft = root.elementFromPoint(left + 1, top + 1);\n  const topRight = root.elementFromPoint(right - 1, top + 1);\n  const bottomLeft = root.elementFromPoint(left + 1, bottom - 1);\n  const bottomRight = root.elementFromPoint(right - 1, bottom - 1);\n\n  return !(\n    topLeft === element &&\n    topRight === element &&\n    bottomLeft === element &&\n    bottomRight === element\n  );\n};\n\nconst addVisibilityToTaggedElements = (\n  taggedElements: Partial<TaggedElement>[],\n  root = window.document,\n) =>\n  taggedElements.map((taggedElement) => ({\n    ...taggedElement,\n    isVisible: taggedElement.element!.checkVisibility({\n      checkOpacity: true,\n      checkVisibilityCSS: true,\n    }),\n    isCoveredByOtherElement: isElementOverlapped(\n      taggedElement.element!,\n      taggedElement.coordinates!,\n      root,\n    ),\n  }));\n\nconst addCoordinatesToTaggedElements = (\n  taggedElements: Partial<TaggedElement>[],\n): Partial<TaggedElement>[] =>\n  taggedElements.map(({ element, attributes }) => ({\n    element,\n    coordinates: element!.getBoundingClientRect(),\n    attributes,\n  }));\n\n/**\n * Applies the attributes that we cannot simply get from the tagged elements itself\n * but need to calculate based on the current state of the document\n */\nexport const addCalculatedAttributesToTaggedElements = (\n  taggedElements: PrecaulculatedTaggedElement[],\n  root = window.document,\n): TaggedElement[] => {\n  const taggedElementWithCoordinates = addCoordinatesToTaggedElements(taggedElements);\n  return addVisibilityToTaggedElements(taggedElementWithCoordinates, root) as TaggedElement[];\n};\n\n/**\n * Parses a Contentful `href` URL to extract shared attributes, including the entity ID and entity type.\n *\n * @param {string} href - The URL containing Contentful parameters.\n * @returns {InspectorModeSharedAttributes | null} An object containing `entityId`, `entityType`, `fieldId`, `locale`, `space`, and `environment`, or `null` if parsing fails.\n *\n * The function extracts:\n * - `entityId` and `entityType` from the path segments (`entries/` or `assets/`).\n * - `fieldId` from the `focusedField` query parameter.\n * - `locale` from the `focusedLocale` query parameter.\n * - `space` from the path segment following `spaces/`.\n * - `environment` from the path segment following `environments/`.\n *\n * If any of these elements are missing or the URL is malformed, the function logs a warning and returns `null`.\n */\nexport function parseAttributesFromHref(href: string): {\n  entityId: string;\n  entityType: 'Entry' | 'Asset';\n  fieldId: string;\n  locale: string;\n  space: string;\n  environment: string;\n} | null {\n  try {\n    const url = new URL(href);\n\n    // Extract query parameters\n    const fieldId = url.searchParams.get('focusedField');\n    const locale = url.searchParams.get('focusedLocale');\n\n    // Extract path segments\n    const pathSegments = url.pathname.split('/').filter(Boolean);\n\n    const spaceIndex = pathSegments.indexOf('spaces');\n    const environmentIndex = pathSegments.indexOf('environments');\n\n    const space = spaceIndex !== -1 ? pathSegments[spaceIndex + 1] : undefined;\n    const environment = environmentIndex !== -1 ? pathSegments[environmentIndex + 1] : undefined;\n\n    // Determine entityType and entityId\n    let entityType: 'Entry' | 'Asset' | undefined;\n    let entityId: string | undefined;\n\n    const entriesIndex = pathSegments.indexOf('entries');\n    const assetsIndex = pathSegments.indexOf('assets');\n\n    if (entriesIndex !== -1) {\n      entityType = 'Entry';\n      entityId = pathSegments[entriesIndex + 1];\n    } else if (assetsIndex !== -1) {\n      entityType = 'Asset';\n      entityId = pathSegments[assetsIndex + 1];\n    }\n\n    // Check for missing required attributes\n    if (!entityType || !entityId) {\n      console.warn('Unable to determine entityType or entityId from href', { href });\n      return null;\n    }\n\n    if (!fieldId) {\n      console.warn('Missing focusedField query parameter in href', { href });\n      return null;\n    }\n\n    if (!locale) {\n      console.warn('Missing focusedLocale query parameter in href', { href });\n      return null;\n    }\n\n    if (!space || !environment) {\n      console.warn('Missing space or environment in href path', { href });\n      return null;\n    }\n\n    return {\n      entityId,\n      entityType,\n      fieldId,\n      locale,\n      space,\n      environment,\n    };\n  } catch (error) {\n    console.warn('Invalid href URL', { href, error });\n    return null;\n  }\n}\n\nfunction isLegacyContentfulData(data: any): data is {\n  entity: string;\n  field: string;\n  locale: string;\n  space: string;\n  environment: string;\n  entityType: 'Asset' | 'Entry';\n} {\n  return (\n    data &&\n    typeof data.entity === 'string' &&\n    typeof data.field === 'string' &&\n    typeof data.locale === 'string' &&\n    typeof data.space === 'string' &&\n    typeof data.environment === 'string' &&\n    (data.entityType === 'Asset' || data.entityType === 'Entry')\n  );\n}\n","import isEqual from 'lodash.isequal';\n\nimport { debounce, sendMessageToEditor } from '../helpers/index.js';\nimport { type MessageFromEditor } from '../messages.js';\nimport {\n  InspectorModeDataAttributes,\n  InspectorModeEventMethods,\n  type InspectorModeChangedMessage,\n} from './types.js';\nimport {\n  addCalculatedAttributesToTaggedElements,\n  getAllTaggedElements,\n  TaggedElement,\n} from './utils.js';\n\nexport type InspectorModeOptions = {\n  locale: string;\n  space?: string;\n  environment?: string;\n  targetOrigin: string[];\n  ignoreManuallyTaggedElements?: boolean;\n};\n\nexport class InspectorMode {\n  private delay = 300;\n\n  private isScrolling = false;\n  private scrollTimeout?: NodeJS.Timeout;\n\n  private isResizing = false;\n  private resizeTimeout?: NodeJS.Timeout;\n\n  private hoveredElement?: Element;\n  private taggedElements: TaggedElement[] = [];\n  private manuallyTaggedCount: number = 0;\n  private automaticallyTaggedCount: number = 0;\n\n  private intersectionObserver: IntersectionObserver;\n\n  private observersCB: VoidFunction[] = [];\n  private cleanupCB: VoidFunction[] = [];\n\n  constructor(private options: InspectorModeOptions) {\n    this.intersectionObserver = new IntersectionObserver(\n      (entries) => {\n        const taggedElements: TaggedElement[] = this.taggedElements;\n        for (const entry of entries) {\n          if (entry.isIntersecting) {\n            for (const te of taggedElements) {\n              if (te.element === entry.target) {\n                // Update coordinates (in case something is in an scrollable element)\n                te.coordinates = entry.intersectionRect;\n                // Update visibility information\n                te.isVisible = entry.target.checkVisibility({\n                  checkOpacity: true,\n                  checkVisibilityCSS: true,\n                });\n              }\n            }\n          }\n        }\n\n        this.taggedElements = taggedElements;\n        this.sendTaggedElements();\n      },\n      { threshold: 0.15 },\n    );\n  }\n\n  /**\n   * Attaches the event listeners and send the tagged elements once\n   */\n  private init = () => {\n    // Attach interaction listeners\n    this.cleanupCB = [\n      this.addScrollListener(),\n      this.addMutationListener(document.body),\n      this.addResizeListener(),\n      this.addHoverListener(),\n    ];\n\n    // Send the elements once\n    this.updateElements();\n  };\n\n  /**\n   * Cancels all listeners and observers\n   */\n  private cleanup = () => {\n    this.observersCB.forEach((cb) => cb());\n    this.cleanupCB.forEach((cb) => cb());\n  };\n\n  // Handles incoming messages from Contentful\n  public receiveMessage = (data: MessageFromEditor): void => {\n    if (data.method === InspectorModeEventMethods.INSPECTOR_MODE_CHANGED) {\n      const { isInspectorActive } = data as InspectorModeChangedMessage;\n      if (isInspectorActive) {\n        this.init();\n      } else {\n        this.cleanup();\n      }\n    }\n  };\n\n  /** Listen for changes on the element via intersection and mutation observer */\n  private observe = (element: Element) => {\n    this.intersectionObserver.observe(element);\n    const disconnect = this.addMutationListener(element);\n\n    this.observersCB.push(disconnect, () => this.intersectionObserver.unobserve(element));\n  };\n\n  /** Sends scroll start and end event to the editor, on end it also sends the tagged elements again */\n  private addScrollListener = () => {\n    const { targetOrigin } = this.options;\n\n    const onScroll = () => {\n      if (!this.isScrolling) {\n        this.isScrolling = true;\n        sendMessageToEditor(InspectorModeEventMethods.SCROLL_START, {}, targetOrigin);\n      }\n\n      if (this.scrollTimeout) {\n        clearTimeout(this.scrollTimeout);\n      }\n\n      // Start timeout to trigger the `end` event, if there would be another scroll event,\n      // the existing timeout will be canceled and it starts again.\n      // Prevents showing wrong information during scrolling.\n      this.scrollTimeout = setTimeout(() => {\n        this.isScrolling = false;\n        sendMessageToEditor(InspectorModeEventMethods.SCROLL_END, {}, targetOrigin);\n        this.updateElements();\n      }, this.delay);\n    };\n\n    const options = { capture: true, passive: true };\n    window.addEventListener('scroll', onScroll, options);\n\n    return () => window.removeEventListener('scroll', onScroll, options);\n  };\n\n  /** Detects DOM changes and sends the tagged elements to the editor */\n  private addMutationListener = (element: Element) => {\n    const mutationObserver = new MutationObserver(() => {\n      this.updateElements();\n    });\n    mutationObserver.observe(element, {\n      // Content source maps\n      characterData: true,\n      // Manual tagging\n      attributes: true,\n      attributeFilter: [\n        InspectorModeDataAttributes.ENTRY_ID,\n        InspectorModeDataAttributes.FIELD_ID,\n        InspectorModeDataAttributes.LOCALE,\n        InspectorModeDataAttributes.SPACE,\n        InspectorModeDataAttributes.ENVIRONMENT,\n        'class',\n        'style',\n      ],\n      // Adding or removal of new nodes\n      childList: true,\n      // Include children\n      subtree: true,\n    });\n\n    return () => mutationObserver.disconnect();\n  };\n\n  /** Sends resize start and end event to the editor, on end it also sends the tagged elements again */\n  private addResizeListener = () => {\n    const { targetOrigin } = this.options;\n\n    const resizeObserver = new ResizeObserver(() => {\n      if (!this.isResizing) {\n        this.isResizing = true;\n        sendMessageToEditor(InspectorModeEventMethods.RESIZE_START, {}, targetOrigin);\n      }\n\n      if (this.resizeTimeout) {\n        clearTimeout(this.resizeTimeout);\n      }\n\n      // Start timeout to trigger the `end` event, if there would be another resize event,\n      // the existing timeout will be canceled and it starts again.\n      // Prevents showing wrong information during resizing.\n      this.resizeTimeout = setTimeout(() => {\n        this.isResizing = false;\n        sendMessageToEditor(InspectorModeEventMethods.RESIZE_END, {}, targetOrigin);\n        this.updateElements();\n      }, this.delay);\n    });\n\n    resizeObserver.observe(document.body);\n\n    return () => resizeObserver.disconnect();\n  };\n\n  /** Checks if the hovered element is an tagged entry and then sends it to the editor */\n  private addHoverListener = () => {\n    const onMouseOverInternal = debounce((eventTargets: EventTarget[]) => {\n      let match: TaggedElement | undefined;\n\n      for (const eventTarget of eventTargets) {\n        const element = eventTarget as HTMLElement;\n        if (element.nodeName === 'BODY') break;\n\n        const taggedElement = this.taggedElements.find((te) => te.element === element);\n        if (taggedElement) {\n          match = taggedElement;\n          break;\n        }\n      }\n\n      this.hoveredElement = match?.element;\n      this.updateElements();\n    }, this.delay);\n\n    const onMouseOver = (e: MouseEvent) => {\n      // Need to debounce the internal logic,\n      // otherwise the eventTargets would be always an empty array\n      onMouseOverInternal(e.composedPath());\n    };\n\n    window.addEventListener('mouseover', onMouseOver, { passive: true });\n\n    return () => window.removeEventListener('mouseover', onMouseOver);\n  };\n\n  private sendTaggedElements = () => {\n    sendMessageToEditor(\n      InspectorModeEventMethods.TAGGED_ELEMENTS,\n      {\n        elements: this.taggedElements.map((taggedElement) => ({\n          // Important: do not add `element` as it can't be cloned by sendMessage\n          coordinates: taggedElement.coordinates!,\n          isVisible: !!taggedElement.isVisible,\n          attributes: taggedElement.attributes,\n          isHovered: this.hoveredElement === taggedElement.element,\n          isCoveredByOtherElement: !!taggedElement.isCoveredByOtherElement,\n        })),\n        automaticallyTaggedCount: this.automaticallyTaggedCount,\n        manuallyTaggedCount: this.manuallyTaggedCount,\n      },\n      this.options.targetOrigin,\n    );\n  };\n\n  /**\n   * Finds all elements that have all inspector mode attributes\n   * and sends them to the editor\n   */\n  private updateElements = () => {\n    const { taggedElements, manuallyTaggedCount, automaticallyTaggedCount } = getAllTaggedElements({\n      options: this.options,\n    });\n\n    const nextElements = addCalculatedAttributesToTaggedElements(taggedElements);\n\n    if (isEqual(nextElements, this.taggedElements)) {\n      return;\n    }\n\n    // clear previously watched elements\n    this.observersCB.forEach((cb) => cb());\n    this.observersCB = [];\n\n    // update elements and watch them\n    this.taggedElements = nextElements as TaggedElement[];\n    taggedElements.forEach(({ element }) => this.observe(element));\n\n    // update the counters for telemetry\n    this.manuallyTaggedCount = manuallyTaggedCount;\n    this.automaticallyTaggedCount = automaticallyTaggedCount;\n  };\n}\n","/// <reference types=\"../types/index.d.ts\" />\n\n// (c) 2020-present Andrea Giammarchi\n\nconst {parse: $parse, stringify: $stringify} = JSON;\nconst {keys} = Object;\n\nconst Primitive = String;   // it could be Number\nconst primitive = 'string'; // it could be 'number'\n\nconst ignore = {};\nconst object = 'object';\n\nconst noop = (_, value) => value;\n\nconst primitives = value => (\n  value instanceof Primitive ? Primitive(value) : value\n);\n\nconst Primitives = (_, value) => (\n  typeof value === primitive ? new Primitive(value) : value\n);\n\nconst revive = (input, parsed, output, $) => {\n  const lazy = [];\n  for (let ke = keys(output), {length} = ke, y = 0; y < length; y++) {\n    const k = ke[y];\n    const value = output[k];\n    if (value instanceof Primitive) {\n      const tmp = input[value];\n      if (typeof tmp === object && !parsed.has(tmp)) {\n        parsed.add(tmp);\n        output[k] = ignore;\n        lazy.push({k, a: [input, parsed, tmp, $]});\n      }\n      else\n        output[k] = $.call(output, k, tmp);\n    }\n    else if (output[k] !== ignore)\n      output[k] = $.call(output, k, value);\n  }\n  for (let {length} = lazy, i = 0; i < length; i++) {\n    const {k, a} = lazy[i];\n    output[k] = $.call(output, k, revive.apply(null, a));\n  }\n  return output;\n};\n\nconst set = (known, input, value) => {\n  const index = Primitive(input.push(value) - 1);\n  known.set(value, index);\n  return index;\n};\n\n/**\n * Converts a specialized flatted string into a JS value.\n * @param {string} text\n * @param {(this: any, key: string, value: any) => any} [reviver]\n * @returns {any}\n */\nexport const parse = (text, reviver) => {\n  const input = $parse(text, Primitives).map(primitives);\n  const value = input[0];\n  const $ = reviver || noop;\n  const tmp = typeof value === object && value ?\n              revive(input, new Set, value, $) :\n              value;\n  return $.call({'': tmp}, '', tmp);\n};\n\n/**\n * Converts a JS value into a specialized flatted string.\n * @param {any} value\n * @param {((this: any, key: string, value: any) => any) | (string | number)[] | null | undefined} [replacer]\n * @param {string | number | undefined} [space]\n * @returns {string}\n */\nexport const stringify = (value, replacer, space) => {\n  const $ = replacer && typeof replacer === object ?\n            (k, v) => (k === '' || -1 < replacer.indexOf(k) ? v : void 0) :\n            (replacer || noop);\n  const known = new Map;\n  const input = [];\n  const output = [];\n  let i = +set(known, input, $.call({'': value}, '', value));\n  let firstRun = !i;\n  while (i < input.length) {\n    firstRun = true;\n    output[i] = $stringify(input[i++], replace, space);\n  }\n  return '[' + output.join(',') + ']';\n  function replace(key, value) {\n    if (firstRun) {\n      firstRun = !firstRun;\n      return value;\n    }\n    const after = $.call(this, key, value);\n    switch (typeof after) {\n      case object:\n        if (after === null) return after;\n      case primitive:\n        return known.get(after) || set(known, input, after);\n    }\n    return after;\n  }\n};\n\n/**\n * Converts a generic value into a JSON serializable object without losing recursion.\n * @param {any} value\n * @returns {any}\n */\nexport const toJSON = value => $parse(stringify(value));\n\n/**\n * Converts a previously serialized object with recursion into a recursive one.\n * @param {any} value\n * @returns {any}\n */\nexport const fromJSON = value => parse($stringify(value));\n","import type { Asset, Entry } from 'contentful';\n\nimport type { LIVE_PREVIEW_EDITOR_SOURCE, LIVE_PREVIEW_SDK_SOURCE } from './constants.js';\nimport { sendMessageToEditor } from './helpers/index.js';\nimport {\n  InspectorModeEventMethods,\n  type InspectorModeAssetAttributes,\n  type InspectorModeAttributes,\n  type InspectorModeChangedMessage,\n  type InspectorModeEntryAttributes,\n  type InspectorModeMouseMoveMessage,\n  type InspectorModeResizeMessage,\n  type InspectorModeScrollMessage,\n  type InspectorModeTaggedElementsMessage,\n} from './inspectorMode/types.js';\nimport type { Argument, ContentType } from './types.js';\n\nenum LivePreviewPostMessageMethods {\n  CONNECTED = 'CONNECTED',\n  DISCONNECTED = 'DISCONNECTED',\n  ERROR = 'ERROR',\n  TAGGED_FIELD_CLICKED = 'TAGGED_FIELD_CLICKED',\n  URL_CHANGED = 'URL_CHANGED',\n  SUBSCRIBED = 'SUBSCRIBED',\n  UNSUBSCRIBED = 'UNSUBSCRIBED',\n\n  ENTRY_UPDATED = 'ENTRY_UPDATED',\n  ENTRY_SAVED = 'ENTRY_SAVED',\n  DEBUG_MODE_ENABLED = 'DEBUG_MODE_ENABLED',\n}\n\nexport { InspectorModeChangedMessage, InspectorModeEventMethods, LivePreviewPostMessageMethods };\n\nexport type PostMessageMethods = LivePreviewPostMessageMethods | InspectorModeEventMethods;\n\nexport type ConnectedMessage = {\n  connected: true;\n  locale: string;\n  taggedElementCount: number;\n  automaticallyTaggedElementCount: number;\n  manuallyTaggedElementCount: number;\n  isInspectorEnabled: boolean;\n  isLiveUpdatesEnabled: boolean;\n};\n\nexport type TaggedFieldClickMessage = InspectorModeAttributes;\n\nexport type UrlChangedMessage = {\n  taggedElementCount: number;\n};\n\nexport type SubscribedMessage = {\n  /** @deprecated */\n  type?: 'GQL' | 'REST';\n  /** @deprecated */\n  sysIds?: string[];\n  /** @deprecated use sysIds instead */\n  entryId?: string;\n  locale: string;\n  event: 'edit' | 'save';\n  id: string;\n  config: string;\n};\n\nexport type UnsubscribedMessage = {\n  type: 'GQL' | 'REST';\n  sysIds: string[];\n  /** @deprecated use sysIds instead */\n  entryId?: string;\n  locale: string;\n  event: 'edit' | 'save';\n  id: string;\n  config: string;\n};\n\nexport type EditorMessage =\n  | ConnectedMessage\n  | TaggedFieldClickMessage\n  | UrlChangedMessage\n  | SubscribedMessage\n  | UnsubscribedMessage\n  | InspectorModeMouseMoveMessage\n  | InspectorModeScrollMessage\n  | InspectorModeResizeMessage\n  | InspectorModeTaggedElementsMessage;\n\nexport type MessageFromSDK = EditorMessage & {\n  method: PostMessageMethods;\n  source: typeof LIVE_PREVIEW_SDK_SOURCE;\n  location: string;\n  version: string;\n};\n\nexport type EntryUpdatedMessage = {\n  method: LivePreviewPostMessageMethods.ENTRY_UPDATED;\n  data: Entry | Asset;\n  contentType: ContentType;\n  subscriptionId: string;\n};\n\nexport type EntrySavedMessage = {\n  method: LivePreviewPostMessageMethods.ENTRY_SAVED;\n  entity: Entry | Asset;\n  contentType: ContentType;\n};\n\nexport type MessageFromEditor = (\n  | EntryUpdatedMessage\n  | EntrySavedMessage\n  | InspectorModeChangedMessage\n) & {\n  data: Argument;\n  method: PostMessageMethods;\n  source: typeof LIVE_PREVIEW_EDITOR_SOURCE;\n};\n\nexport function openEntryInEditorUtility(\n  props: InspectorModeEntryAttributes,\n  targetOrigin: string[],\n): void {\n  sendMessageToEditor(\n    LivePreviewPostMessageMethods.TAGGED_FIELD_CLICKED,\n    {\n      action: LivePreviewPostMessageMethods.TAGGED_FIELD_CLICKED,\n      ...props,\n    } as TaggedFieldClickMessage,\n    targetOrigin,\n  );\n}\n\nexport function openAssetInEditorUtility(\n  props: InspectorModeAssetAttributes,\n  targetOrigin: string[],\n): void {\n  sendMessageToEditor(\n    LivePreviewPostMessageMethods.TAGGED_FIELD_CLICKED,\n    {\n      action: LivePreviewPostMessageMethods.TAGGED_FIELD_CLICKED,\n      ...props,\n    } as TaggedFieldClickMessage,\n    targetOrigin,\n  );\n}\n","import { stringify } from 'flatted';\n\nimport { debug, generateUID, sendMessageToEditor } from './helpers/index.js';\nimport type {\n  ContentfulSubscribeConfig,\n  EditorMessage,\n  EntryUpdatedMessage,\n  MessageFromEditor,\n  PostMessageMethods,\n  SubscribedMessage,\n  UnsubscribedMessage,\n} from './index.js';\nimport { LivePreviewPostMessageMethods } from './messages.js';\nimport { Subscription } from './types.js';\n\n/**\n * LiveUpdates for the Contentful Live Preview mode\n * receives the updated Entity from the Editor and merges them together with the incoming data\n */\nexport class LiveUpdates {\n  private subscriptions = new Map<string, Subscription>();\n  private defaultLocale: string;\n  private sendMessage: (method: PostMessageMethods, data: EditorMessage) => void;\n\n  constructor({ locale, targetOrigin }: { locale: string; targetOrigin: string[] }) {\n    this.defaultLocale = locale;\n    this.sendMessage = (method, data) => sendMessageToEditor(method, data, targetOrigin);\n  }\n\n  /** Receives the data from the message event handler and calls the subscriptions */\n  public async receiveMessage(message: MessageFromEditor): Promise<void> {\n    if (message.method === LivePreviewPostMessageMethods.ENTRY_UPDATED) {\n      const { data, subscriptionId } = message as EntryUpdatedMessage;\n\n      const subscription = this.subscriptions.get(subscriptionId);\n\n      if (subscription) {\n        subscription.callback(data);\n        subscription.data = data;\n        this.subscriptions.set(subscriptionId, subscription);\n      } else {\n        debug.error('Received an update for an unknown subscription', {\n          subscriptionId,\n          data,\n          subscriptions: this.subscriptions,\n        });\n      }\n    }\n  }\n\n  /**\n   * Subscribe to data changes from the Editor, returns a function to unsubscribe\n   * Will be called once initially for the restored data\n   */\n  public subscribe(config: ContentfulSubscribeConfig): VoidFunction {\n    const id = generateUID();\n    const locale = config.locale ?? this.defaultLocale;\n\n    this.subscriptions.set(id, {\n      ...config,\n    });\n\n    // Tell the editor that there is a subscription\n    // It's possible that the `type` is not 100% accurate as we don't know how it will be merged in the future.\n    const message: Omit<SubscribedMessage, 'action'> | UnsubscribedMessage = {\n      locale,\n      event: 'edit',\n      id,\n      config: stringify(config),\n    };\n\n    this.sendMessage(LivePreviewPostMessageMethods.SUBSCRIBED, message);\n\n    return () => {\n      this.sendMessage(LivePreviewPostMessageMethods.UNSUBSCRIBED, message);\n      this.subscriptions.delete(id);\n    };\n  }\n}\n","import { debug } from './helpers/index.js';\nimport { InspectorModeOptions } from './inspectorMode/index.js';\nimport { getAllTaggedEntries } from './inspectorMode/utils.js';\nimport { EntrySavedMessage, LivePreviewPostMessageMethods, MessageFromEditor } from './messages.js';\nimport { SubscribeCallback } from './types.js';\n\nexport class SaveEvent {\n  locale: string;\n  options: InspectorModeOptions;\n  subscription: SubscribeCallback | undefined;\n\n  constructor({ locale, options }: { locale: string; options: InspectorModeOptions }) {\n    this.locale = locale;\n    this.options = options;\n  }\n\n  public subscribe(cb: SubscribeCallback): VoidFunction {\n    if (this.subscription) {\n      debug.log(\n        'There is already a subscription for the save event, the existing one will be replaced.',\n      );\n    }\n\n    this.subscription = cb;\n\n    // TODO: How would we like to handle this for the subscribe event?\n    // sendMessageToEditor(LivePreviewPostMessageMethods.SUBSCRIBED, {\n    //   action: LivePreviewPostMessageMethods.SUBSCRIBED,\n    //   type: isGQL ? 'GQL' : 'REST', // we don't know that\n    //   locale,\n    //   entryId: sysId, // we don't have that\n    //   event: 'save',\n    // } as SubscribedMessage);\n\n    return () => {\n      this.subscription = undefined;\n    };\n  }\n\n  public receiveMessage(\n    message: Omit<MessageFromEditor, 'from' | 'source'> | EntrySavedMessage,\n  ): void {\n    if (message.method === LivePreviewPostMessageMethods.ENTRY_SAVED && this.subscription) {\n      const { entity } = message as EntrySavedMessage;\n      const entries = getAllTaggedEntries({ options: this.options });\n\n      if (entries.includes(entity.sys.id)) {\n        this.subscription(entity);\n      }\n    }\n  }\n}\n","import {\n  encodeGraphQLResponse,\n  encodeCPAResponse,\n  splitEncoding,\n} from '@contentful/content-source-maps';\nimport { type DocumentNode } from 'graphql';\n\nimport { version } from '../package.json';\nimport {\n  debug,\n  isInsideIframe,\n  pollUrlChanges,\n  sendMessageToEditor,\n  setDebugMode,\n} from './helpers/index.js';\nimport { isValidMessage } from './helpers/validateMessage.js';\nimport { InspectorMode } from './inspectorMode/index.js';\nimport { InspectorModeDataAttributes, type InspectorModeTags } from './inspectorMode/types.js';\nimport {\n  getAllTaggedElements,\n  getAllTaggedEntries,\n  parseAttributesFromHref,\n} from './inspectorMode/utils.js';\nimport { LiveUpdates } from './liveUpdates.js';\nimport {\n  LivePreviewPostMessageMethods,\n  openAssetInEditorUtility,\n  openEntryInEditorUtility,\n  type ConnectedMessage,\n  type EditorMessage,\n  type MessageFromEditor,\n  type PostMessageMethods,\n  type UrlChangedMessage,\n} from './messages.js';\nimport { SaveEvent } from './saveEvent.js';\nimport type {\n  Argument,\n  LivePreviewAssetProps,\n  LivePreviewEntryProps,\n  LivePreviewProps,\n  SubscribeCallback,\n} from './types.js';\n\nexport type { LivePreviewAssetProps, LivePreviewEntryProps, LivePreviewProps };\n\nexport const VERSION = version;\n\nconst DEFAULT_ALLOWED_ORIGINS = [\n  'https://app.contentful.com',\n  'https://app.eu.contentful.com',\n  'http://localhost:3001', // for local debugging for Contentful engineers\n];\n\nexport interface ContentfulLivePreviewInitConfig {\n  locale: string;\n  /** Id of the contentful space */\n  space?: string;\n  /** Id of the contentful environment */\n  environment?: string;\n\n  debugMode?: boolean;\n  enableInspectorMode?: boolean;\n  enableLiveUpdates?: boolean;\n  /**\n   * Contentful host in which the website should be shown\n   * Can be `https://app.contentful.com` or `https://app.eu.contentful.com`\n   */\n  targetOrigin?: string | string[];\n\n  experimental?: {\n    ignoreManuallyTaggedElements?: boolean;\n  };\n}\n\nexport interface ContentfulSubscribeConfig {\n  data: Argument;\n  locale?: string;\n  callback: SubscribeCallback;\n  query?: DocumentNode | string;\n}\n\nexport class ContentfulLivePreview {\n  static initialized = false;\n  static inspectorMode: InspectorMode | null = null;\n  static liveUpdates: LiveUpdates | null = null;\n  static saveEvent: SaveEvent | null = null;\n  static inspectorModeEnabled = true;\n  static liveUpdatesEnabled = true;\n  static locale: string;\n  static space?: string;\n  static environment?: string;\n  static sendMessage: (method: PostMessageMethods, data: EditorMessage) => void;\n  static targetOrigin: string[];\n\n  // Static method to initialize the LivePreview SDK\n  static init(config: ContentfulLivePreviewInitConfig): Promise<InspectorMode | null> | undefined {\n    if (typeof config !== 'object' || !config?.locale) {\n      throw new Error(\n        \"Init function has to be called with a locale configuration (for example: `ContentfulLivePreview.init({ locale: 'en-US'})`)\",\n      );\n    }\n\n    const {\n      debugMode,\n      enableInspectorMode,\n      enableLiveUpdates,\n      locale,\n      environment,\n      space,\n      targetOrigin,\n    } = config;\n\n    // Check if running in a browser environment\n    if (typeof window !== 'undefined') {\n      if (!isInsideIframe()) {\n        // If the SDK is used outside of the LivePreviewIframe it should do nothing\n        this.liveUpdatesEnabled = false;\n\n        return Promise.resolve(null);\n      }\n\n      if (debugMode) {\n        setDebugMode(debugMode);\n      }\n\n      // toggle inspector mode based on flag\n      if (typeof enableInspectorMode === 'boolean') {\n        this.inspectorModeEnabled = enableInspectorMode;\n      }\n\n      // toggle live updates based on flag\n      if (typeof enableLiveUpdates === 'boolean') {\n        this.liveUpdatesEnabled = enableLiveUpdates;\n      }\n\n      this.locale = locale;\n      this.space = space;\n      this.environment = environment;\n\n      this.initTargetOrigin(targetOrigin);\n\n      if (this.initialized) {\n        debug.log('You have already initialized the Live Preview SDK.');\n        return Promise.resolve(ContentfulLivePreview.inspectorMode);\n      }\n\n      // setup the live preview plugins (inspectorMode and liveUpdates)\n      if (this.inspectorModeEnabled) {\n        this.inspectorMode = new InspectorMode({\n          locale,\n          space,\n          environment,\n          targetOrigin: this.targetOrigin,\n          ignoreManuallyTaggedElements: config.experimental?.ignoreManuallyTaggedElements,\n        });\n      }\n\n      if (this.liveUpdatesEnabled) {\n        this.liveUpdates = new LiveUpdates({ locale, targetOrigin: this.targetOrigin });\n        this.saveEvent = new SaveEvent({\n          locale,\n          options: {\n            locale: this.locale,\n            space: this.space,\n            environment: this.environment,\n            targetOrigin: this.targetOrigin,\n          },\n        });\n      }\n\n      // bind event listeners for interactivity\n      window.addEventListener('message', (event: MessageEvent<MessageFromEditor>) => {\n        if (!isValidMessage(event)) {\n          return;\n        }\n\n        debug.log('Received message', event.data);\n\n        if (event.data.method === LivePreviewPostMessageMethods.DEBUG_MODE_ENABLED) {\n          setDebugMode(true);\n          return;\n        }\n\n        if (this.inspectorModeEnabled) {\n          this.inspectorMode?.receiveMessage(event.data);\n        }\n\n        if (this.liveUpdatesEnabled) {\n          this.liveUpdates?.receiveMessage(event.data);\n          this.saveEvent?.receiveMessage(event.data);\n        }\n      });\n\n      // navigation changes\n      pollUrlChanges(() => {\n        sendMessageToEditor(\n          LivePreviewPostMessageMethods.URL_CHANGED,\n          {\n            action: LivePreviewPostMessageMethods.URL_CHANGED,\n            taggedElementCount: document.querySelectorAll(\n              `[${InspectorModeDataAttributes.ENTRY_ID}]`,\n            ).length,\n          } as UrlChangedMessage,\n          this.targetOrigin,\n        );\n      });\n\n      // tell the editor that there's a SDK\n      const { taggedElements, manuallyTaggedCount, automaticallyTaggedCount } = this\n        .inspectorModeEnabled\n        ? getAllTaggedElements({\n            options: {\n              locale: this.locale,\n              space: this.space,\n              environment: this.environment,\n            },\n          })\n        : {\n            taggedElements: [],\n            manuallyTaggedCount: 0,\n            automaticallyTaggedCount: 0,\n          };\n      const taggedElementCount = taggedElements.length;\n\n      sendMessageToEditor(\n        LivePreviewPostMessageMethods.CONNECTED,\n        {\n          action: LivePreviewPostMessageMethods.CONNECTED,\n          connected: true,\n          tags: taggedElementCount,\n          taggedElementCount,\n          locale: this.locale,\n          isInspectorEnabled: this.inspectorModeEnabled,\n          isLiveUpdatesEnabled: this.liveUpdatesEnabled,\n          manuallyTaggedElementCount: manuallyTaggedCount,\n          automaticallyTaggedElementCount: automaticallyTaggedCount,\n        } as ConnectedMessage,\n        this.targetOrigin,\n      );\n\n      // all set up - ready to go\n      this.initialized = true;\n\n      return Promise.resolve(ContentfulLivePreview.inspectorMode);\n    }\n  }\n\n  static initTargetOrigin(targetOrigin?: string | string[]) {\n    if (targetOrigin) {\n      this.targetOrigin = Array.isArray(targetOrigin) ? targetOrigin : [targetOrigin];\n    } else {\n      const ancestorOrigins = window.location.ancestorOrigins;\n      const currentDefaultOrigin = ancestorOrigins\n        ? DEFAULT_ALLOWED_ORIGINS.find((origin) => ancestorOrigins.contains(origin))\n        : //less consistent workaround for Firefox, where ancestorOrigins is not supported\n          DEFAULT_ALLOWED_ORIGINS.find((origin) => document.referrer.includes(origin));\n      if (!currentDefaultOrigin) {\n        throw new Error(\n          `The current origin is not supported. Please provide a targetOrigin in the live preview configuration.`,\n        );\n      }\n      this.targetOrigin = [currentDefaultOrigin];\n    }\n  }\n\n  static subscribe(config: ContentfulSubscribeConfig): VoidFunction;\n  static subscribe(\n    event: 'save',\n    config: Pick<ContentfulSubscribeConfig, 'callback'>,\n  ): VoidFunction;\n  static subscribe(event: 'edit', config: ContentfulSubscribeConfig): VoidFunction;\n  static subscribe(\n    configOrEvent: 'save' | 'edit' | ContentfulSubscribeConfig,\n    config?: ContentfulSubscribeConfig | Pick<ContentfulSubscribeConfig, 'callback'>,\n  ): VoidFunction {\n    if (!this.liveUpdatesEnabled) {\n      return () => {\n        /* noop */\n      };\n    }\n\n    const event = typeof configOrEvent === 'string' ? configOrEvent : 'edit';\n    const subscribeConfig = typeof configOrEvent === 'object' ? configOrEvent : config!;\n\n    if (event === 'save') {\n      if (!this.saveEvent) {\n        throw new Error(\n          'Save event is not initialized, please call `ContentfulLivePreview.init()` first.',\n        );\n      }\n      return this.saveEvent.subscribe(subscribeConfig.callback);\n    }\n\n    if (!this.liveUpdates) {\n      throw new Error(\n        'Live updates are not initialized, please call `ContentfulLivePreview.init()` first.',\n      );\n    }\n\n    return this.liveUpdates.subscribe(subscribeConfig as ContentfulSubscribeConfig);\n  }\n\n  // Static method to render live preview data-attributes to HTML element output\n  static getProps(props: LivePreviewProps): InspectorModeTags {\n    const { fieldId, locale, environment, space } = props;\n\n    if (!this.inspectorModeEnabled) {\n      return null;\n    }\n\n    if (fieldId) {\n      const sharedProps = {\n        ...(locale ? { [InspectorModeDataAttributes.LOCALE]: locale } : {}),\n        ...(environment ? { [InspectorModeDataAttributes.ENVIRONMENT]: environment } : {}),\n        ...(space ? { [InspectorModeDataAttributes.SPACE]: space } : {}),\n        [InspectorModeDataAttributes.FIELD_ID]: fieldId,\n      };\n\n      if (locale) {\n        sharedProps[InspectorModeDataAttributes.LOCALE] = locale;\n      }\n\n      if ((props as LivePreviewAssetProps).assetId !== undefined) {\n        return {\n          ...sharedProps,\n          [InspectorModeDataAttributes.ASSET_ID]: (props as LivePreviewAssetProps).assetId,\n        };\n      }\n\n      if ((props as LivePreviewEntryProps).entryId !== undefined) {\n        return {\n          ...sharedProps,\n          [InspectorModeDataAttributes.ENTRY_ID]: (props as LivePreviewEntryProps).entryId,\n        };\n      }\n    }\n\n    debug.warn('Missing property for inspector mode', { ...props });\n    return null;\n  }\n\n  static toggleInspectorMode(): boolean {\n    this.inspectorModeEnabled = !this.inspectorModeEnabled;\n    return this.inspectorModeEnabled;\n  }\n\n  static toggleLiveUpdatesMode(): boolean {\n    this.liveUpdatesEnabled = !this.liveUpdatesEnabled;\n    return this.liveUpdatesEnabled;\n  }\n\n  //TODO: Rename to openEntityInEditor, as assets can also be opened. Would be breaking change\n  static openEntryInEditor(props: LivePreviewProps): void {\n    const defaultProps = {\n      locale: this.locale,\n      environment: this.environment,\n      space: this.space,\n    };\n\n    if ((props as LivePreviewAssetProps).assetId !== undefined && props.fieldId) {\n      openAssetInEditorUtility(\n        {\n          ...defaultProps,\n          ...(props as LivePreviewAssetProps),\n        },\n        this.targetOrigin,\n      );\n      return;\n    }\n\n    if ((props as LivePreviewEntryProps).entryId !== undefined && props.fieldId) {\n      openEntryInEditorUtility(\n        {\n          ...defaultProps,\n          ...(props as LivePreviewEntryProps),\n        },\n        this.targetOrigin,\n      );\n      return;\n    }\n\n    debug.error('Please provide field id and entry/asset id to openEntryInEditor.', { ...props });\n  }\n\n  /**\n   * Returns a list of tagged entries on the page\n   */\n  static getEntryList(): string[] {\n    return getAllTaggedEntries({\n      options: {\n        locale: this.locale,\n        space: this.space,\n        environment: this.environment,\n      },\n    });\n  }\n}\n\nexport { LIVE_PREVIEW_EDITOR_SOURCE, LIVE_PREVIEW_SDK_SOURCE } from './constants.js';\n\nexport * from './messages.js';\nexport { encodeGraphQLResponse, encodeCPAResponse, splitEncoding, parseAttributesFromHref };\n"]}