{"version":3,"sources":["mod::vue/node_modules/@vue/shared/dist/shared.cjs.prod.js","mod::vue/node_modules/@vue/shared/index.js","/opt/whdata/generated/platform/ap/nudam.beheer/build/https:/raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/generated/decode-data-html.ts","/opt/whdata/generated/platform/ap/nudam.beheer/build/https:/raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/generated/decode-data-xml.ts","/opt/whdata/generated/platform/ap/nudam.beheer/build/https:/raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/decode_codepoint.ts","/opt/whdata/generated/platform/ap/nudam.beheer/build/https:/raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/decode.ts","mod::vue/node_modules/@babel/parser/src/util/location.ts","mod::vue/node_modules/@babel/parser/src/parse-error/module-errors.ts","mod::vue/node_modules/@babel/parser/src/parse-error/to-node-description.ts","mod::vue/node_modules/@babel/parser/src/parse-error/standard-errors.ts","mod::vue/node_modules/@babel/parser/src/parse-error/strict-mode-errors.ts","mod::vue/node_modules/@babel/parser/src/parse-error/parse-expression-errors.ts","mod::vue/node_modules/@babel/parser/src/parse-error/pipeline-operator-errors.ts","mod::vue/node_modules/@babel/parser/src/parse-error.ts","mod::vue/node_modules/@babel/parser/src/options.ts","mod::vue/node_modules/@babel/parser/src/plugins/estree.ts","mod::vue/node_modules/@babel/parser/src/tokenizer/context.ts","mod::vue/node_modules/@babel/parser/src/tokenizer/types.ts","mod::vue/node_modules/@babel/babel-helper-validator-identifier/src/identifier.ts","mod::vue/node_modules/@babel/babel-helper-validator-identifier/src/keyword.ts","mod::vue/node_modules/@babel/parser/src/util/identifier.ts","mod::vue/node_modules/@babel/parser/src/util/scope.ts","mod::vue/node_modules/@babel/parser/src/plugins/flow/scope.ts","mod::vue/node_modules/@babel/parser/src/plugins/flow/index.ts","mod::vue/node_modules/@babel/parser/src/plugins/jsx/xhtml.ts","mod::vue/node_modules/@babel/parser/src/util/whitespace.ts","mod::vue/node_modules/@babel/parser/src/plugins/jsx/index.ts","mod::vue/node_modules/@babel/parser/src/plugins/typescript/scope.ts","mod::vue/node_modules/@babel/parser/src/util/production-parameter.ts","mod::vue/node_modules/@babel/parser/src/parser/base.ts","mod::vue/node_modules/@babel/parser/src/parser/comments.ts","mod::vue/node_modules/@babel/parser/src/tokenizer/state.ts","mod::vue/node_modules/@babel/babel-helper-string-parser/src/index.ts","mod::vue/node_modules/@babel/parser/src/tokenizer/index.ts","mod::vue/node_modules/@babel/parser/src/util/class-scope.ts","mod::vue/node_modules/@babel/parser/src/util/expression-scope.ts","mod::vue/node_modules/@babel/parser/src/parser/util.ts","mod::vue/node_modules/@babel/parser/src/parser/node.ts","mod::vue/node_modules/@babel/parser/src/parser/lval.ts","mod::vue/node_modules/@babel/parser/src/plugins/typescript/index.ts","mod::vue/node_modules/@babel/parser/src/plugins/placeholders.ts","mod::vue/node_modules/@babel/parser/src/plugins/v8intrinsic.ts","mod::vue/node_modules/@babel/parser/src/plugin-utils.ts","mod::vue/node_modules/@babel/parser/src/parser/expression.ts","mod::vue/node_modules/@babel/parser/src/parser/statement.ts","mod::vue/node_modules/@babel/parser/src/parser/index.ts","mod::vue/node_modules/@babel/parser/src/index.ts","mod::vue/node_modules/estree-walker/dist/umd/estree-walker.js","mod::vue/node_modules/source-map-js/lib/base64.js","mod::vue/node_modules/source-map-js/lib/base64-vlq.js","mod::vue/node_modules/source-map-js/lib/util.js","mod::vue/node_modules/source-map-js/lib/array-set.js","mod::vue/node_modules/source-map-js/lib/mapping-list.js","mod::vue/node_modules/source-map-js/lib/source-map-generator.js","mod::vue/node_modules/source-map-js/lib/binary-search.js","mod::vue/node_modules/source-map-js/lib/quick-sort.js","mod::vue/node_modules/source-map-js/lib/source-map-consumer.js","mod::vue/node_modules/source-map-js/lib/source-node.js","mod::vue/node_modules/source-map-js/source-map.js","mod::vue/node_modules/@vue/compiler-core/dist/compiler-core.cjs.prod.js","mod::vue/node_modules/@vue/compiler-core/index.js","mod::vue/node_modules/@vue/compiler-dom/dist/compiler-dom.cjs.prod.js","mod::vue/node_modules/@vue/compiler-dom/index.js","mod::vue/node_modules/@vue/reactivity/dist/reactivity.cjs.prod.js","mod::vue/node_modules/@vue/reactivity/index.js","mod::vue/node_modules/@vue/runtime-core/dist/runtime-core.cjs.prod.js","mod::vue/node_modules/@vue/runtime-core/index.js","mod::vue/node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.prod.js","mod::vue/node_modules/@vue/runtime-dom/index.js","mod::vue/node_modules/vue/dist/vue.cjs.prod.js","mod::vue/node_modules/vue/index.js","mod::vue/node_modules/vue-router/dist/vue-router.prod.cjs","mod::vue/node_modules/vue-router/index.js","@webhare/env/src/envbackend.ts","@webhare/env/src/init-browser.ts","@webhare/dompack/src/tree.ts","@webhare/std/src/quacks.ts","@webhare/std/src/finmath.ts","@webhare/std/src/money.ts","@webhare/std/src/strings.ts","@webhare/std/src/collections.ts","@webhare/std/src/localmutex.ts","@webhare/frontend/src/init.ts","@webhare/tsrun/src/polyfills.ts","mod::publisher/js/internal/polyfills/iterator-helpers.ts","@webhare/env/src/navigation.ts","@webhare/env/src/whglobal.ts","mod::system/js/dompack/src/events.ts","@webhare/dompack/src/busy.ts","mod::system/js/dompack/src/tree.ts","mod::system/js/dompack/src/components.ts","@webhare/dompack/src/storage.ts","@webhare/dompack/src/browser.ts","mod::publisher/js/internal/polyfills/publisher-integration.ts","mod::nudam/webdesigns/beheer/frontend/frontend.ts","node_modules/stacktrace-parser/dist/stack-trace-parser.esm.js","@webhare/js-api-tools/src/stacktracing.ts","@webhare/rpc/src/rpc.ts","@webhare/auth/src/shared.ts","@webhare/frontend/src/auth.ts","@webhare/frontend/src/gtm.ts","@webhare/frontend/src/frontend.ts","mod::nudam/webdesigns/beheer/frontend/lib/router.ts","/opt/whdata/generated/platform/ap/nudam.beheer/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/DashboardView.vue","/opt/whdata/generated/platform/ap/nudam.beheer/build/sfc-script:/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/PageHeader.vue?type=script","/opt/whdata/generated/platform/ap/nudam.beheer/build/sfc-template:/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/PageHeader.vue?type=template","mod::nudam/webdesigns/beheer/frontend/components/PageHeader.vue","mod::nudam/webdesigns/beheer/frontend/lib/api.ts","mod::nudam/webdesigns/beheer/frontend/lib/format.ts","mod::nudam/webdesigns/beheer/frontend/lib/toast.ts","mod::nudam/webdesigns/beheer/frontend/lib/state.ts","/opt/whdata/generated/platform/ap/nudam.beheer/build/sfc-template:/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/DashboardView.vue?type=template","mod::nudam/webdesigns/beheer/frontend/views/DashboardView.vue","/opt/whdata/generated/platform/ap/nudam.beheer/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/ContractenView.vue","/opt/whdata/generated/platform/ap/nudam.beheer/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/ContractModal.vue","/opt/whdata/generated/platform/ap/nudam.beheer/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/ModalShell.vue","/opt/whdata/generated/platform/ap/nudam.beheer/build/sfc-template:/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/ModalShell.vue?type=template","mod::nudam/webdesigns/beheer/frontend/components/ModalShell.vue","/opt/whdata/generated/platform/ap/nudam.beheer/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/ConfirmDialog.vue","/opt/whdata/generated/platform/ap/nudam.beheer/build/sfc-template:/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/ConfirmDialog.vue?type=template","mod::nudam/webdesigns/beheer/frontend/components/ConfirmDialog.vue","mod::nudam/js/calculations.ts","/opt/whdata/generated/platform/ap/nudam.beheer/build/sfc-template:/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/ContractModal.vue?type=template","mod::nudam/webdesigns/beheer/frontend/components/ContractModal.vue","/opt/whdata/generated/platform/ap/nudam.beheer/build/sfc-template:/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/ContractenView.vue?type=template","mod::nudam/webdesigns/beheer/frontend/views/ContractenView.vue","/opt/whdata/generated/platform/ap/nudam.beheer/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/ConceptenView.vue","/opt/whdata/generated/platform/ap/nudam.beheer/build/sfc-template:/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/ConceptenView.vue?type=template","mod::nudam/webdesigns/beheer/frontend/views/ConceptenView.vue","/opt/whdata/generated/platform/ap/nudam.beheer/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/KlantenView.vue","/opt/whdata/generated/platform/ap/nudam.beheer/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/ClientModal.vue","/opt/whdata/generated/platform/ap/nudam.beheer/build/sfc-template:/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/ClientModal.vue?type=template","mod::nudam/webdesigns/beheer/frontend/components/ClientModal.vue","/opt/whdata/generated/platform/ap/nudam.beheer/build/sfc-template:/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/KlantenView.vue?type=template","mod::nudam/webdesigns/beheer/frontend/views/KlantenView.vue","/opt/whdata/generated/platform/ap/nudam.beheer/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/InstellingenView.vue","/opt/whdata/generated/platform/ap/nudam.beheer/build/sfc-template:/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/InstellingenView.vue?type=template","mod::nudam/webdesigns/beheer/frontend/views/InstellingenView.vue","/opt/whdata/generated/platform/ap/nudam.beheer/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/App.vue","/opt/whdata/generated/platform/ap/nudam.beheer/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/LoginForm.vue","/opt/whdata/generated/platform/ap/nudam.beheer/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/PasswordInput.vue","/opt/whdata/generated/platform/ap/nudam.beheer/build/sfc-template:/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/PasswordInput.vue?type=template","mod::nudam/webdesigns/beheer/frontend/components/PasswordInput.vue","/opt/whdata/generated/platform/ap/nudam.beheer/build/sfc-template:/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/LoginForm.vue?type=template","mod::nudam/webdesigns/beheer/frontend/components/LoginForm.vue","/opt/whdata/generated/platform/ap/nudam.beheer/build/sfc-template:/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/ToastStack.vue?type=template","mod::nudam/webdesigns/beheer/frontend/components/ToastStack.vue","mod::nudam/webdesigns/beheer/frontend/lib/useWrdAuthState.ts","/opt/whdata/generated/platform/ap/nudam.beheer/build/sfc-template:/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/App.vue?type=template","mod::nudam/webdesigns/beheer/frontend/App.vue","/entrypoint.js"],"sourcesContent":["/**\n* @vue/shared v3.5.18\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/*! #__NO_SIDE_EFFECTS__ */\n// @__NO_SIDE_EFFECTS__\nfunction makeMap(str) {\n  const map = /* @__PURE__ */ Object.create(null);\n  for (const key of str.split(\",\")) map[key] = 1;\n  return (val) => val in map;\n}\n\nconst EMPTY_OBJ = {};\nconst EMPTY_ARR = [];\nconst NOOP = () => {\n};\nconst NO = () => false;\nconst isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter\n(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97);\nconst isModelListener = (key) => key.startsWith(\"onUpdate:\");\nconst extend = Object.assign;\nconst remove = (arr, el) => {\n  const i = arr.indexOf(el);\n  if (i > -1) {\n    arr.splice(i, 1);\n  }\n};\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\nconst isArray = Array.isArray;\nconst isMap = (val) => toTypeString(val) === \"[object Map]\";\nconst isSet = (val) => toTypeString(val) === \"[object Set]\";\nconst isDate = (val) => toTypeString(val) === \"[object Date]\";\nconst isRegExp = (val) => toTypeString(val) === \"[object RegExp]\";\nconst isFunction = (val) => typeof val === \"function\";\nconst isString = (val) => typeof val === \"string\";\nconst isSymbol = (val) => typeof val === \"symbol\";\nconst isObject = (val) => val !== null && typeof val === \"object\";\nconst isPromise = (val) => {\n  return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch);\n};\nconst objectToString = Object.prototype.toString;\nconst toTypeString = (value) => objectToString.call(value);\nconst toRawType = (value) => {\n  return toTypeString(value).slice(8, -1);\n};\nconst isPlainObject = (val) => toTypeString(val) === \"[object Object]\";\nconst isIntegerKey = (key) => isString(key) && key !== \"NaN\" && key[0] !== \"-\" && \"\" + parseInt(key, 10) === key;\nconst isReservedProp = /* @__PURE__ */ makeMap(\n  // the leading comma is intentional so empty string \"\" is also included\n  \",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"\n);\nconst isBuiltInDirective = /* @__PURE__ */ makeMap(\n  \"bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo\"\n);\nconst cacheStringFunction = (fn) => {\n  const cache = /* @__PURE__ */ Object.create(null);\n  return (str) => {\n    const hit = cache[str];\n    return hit || (cache[str] = fn(str));\n  };\n};\nconst camelizeRE = /-(\\w)/g;\nconst camelize = cacheStringFunction(\n  (str) => {\n    return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n  }\n);\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction(\n  (str) => str.replace(hyphenateRE, \"-$1\").toLowerCase()\n);\nconst capitalize = cacheStringFunction((str) => {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n});\nconst toHandlerKey = cacheStringFunction(\n  (str) => {\n    const s = str ? `on${capitalize(str)}` : ``;\n    return s;\n  }\n);\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\nconst invokeArrayFns = (fns, ...arg) => {\n  for (let i = 0; i < fns.length; i++) {\n    fns[i](...arg);\n  }\n};\nconst def = (obj, key, value, writable = false) => {\n  Object.defineProperty(obj, key, {\n    configurable: true,\n    enumerable: false,\n    writable,\n    value\n  });\n};\nconst looseToNumber = (val) => {\n  const n = parseFloat(val);\n  return isNaN(n) ? val : n;\n};\nconst toNumber = (val) => {\n  const n = isString(val) ? Number(val) : NaN;\n  return isNaN(n) ? val : n;\n};\nlet _globalThis;\nconst getGlobalThis = () => {\n  return _globalThis || (_globalThis = typeof globalThis !== \"undefined\" ? globalThis : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : {});\n};\nconst identRE = /^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/;\nfunction genPropsAccessExp(name) {\n  return identRE.test(name) ? `__props.${name}` : `__props[${JSON.stringify(name)}]`;\n}\nfunction genCacheKey(source, options) {\n  return source + JSON.stringify(\n    options,\n    (_, val) => typeof val === \"function\" ? val.toString() : val\n  );\n}\n\nconst PatchFlags = {\n  \"TEXT\": 1,\n  \"1\": \"TEXT\",\n  \"CLASS\": 2,\n  \"2\": \"CLASS\",\n  \"STYLE\": 4,\n  \"4\": \"STYLE\",\n  \"PROPS\": 8,\n  \"8\": \"PROPS\",\n  \"FULL_PROPS\": 16,\n  \"16\": \"FULL_PROPS\",\n  \"NEED_HYDRATION\": 32,\n  \"32\": \"NEED_HYDRATION\",\n  \"STABLE_FRAGMENT\": 64,\n  \"64\": \"STABLE_FRAGMENT\",\n  \"KEYED_FRAGMENT\": 128,\n  \"128\": \"KEYED_FRAGMENT\",\n  \"UNKEYED_FRAGMENT\": 256,\n  \"256\": \"UNKEYED_FRAGMENT\",\n  \"NEED_PATCH\": 512,\n  \"512\": \"NEED_PATCH\",\n  \"DYNAMIC_SLOTS\": 1024,\n  \"1024\": \"DYNAMIC_SLOTS\",\n  \"DEV_ROOT_FRAGMENT\": 2048,\n  \"2048\": \"DEV_ROOT_FRAGMENT\",\n  \"CACHED\": -1,\n  \"-1\": \"CACHED\",\n  \"BAIL\": -2,\n  \"-2\": \"BAIL\"\n};\nconst PatchFlagNames = {\n  [1]: `TEXT`,\n  [2]: `CLASS`,\n  [4]: `STYLE`,\n  [8]: `PROPS`,\n  [16]: `FULL_PROPS`,\n  [32]: `NEED_HYDRATION`,\n  [64]: `STABLE_FRAGMENT`,\n  [128]: `KEYED_FRAGMENT`,\n  [256]: `UNKEYED_FRAGMENT`,\n  [512]: `NEED_PATCH`,\n  [1024]: `DYNAMIC_SLOTS`,\n  [2048]: `DEV_ROOT_FRAGMENT`,\n  [-1]: `CACHED`,\n  [-2]: `BAIL`\n};\n\nconst ShapeFlags = {\n  \"ELEMENT\": 1,\n  \"1\": \"ELEMENT\",\n  \"FUNCTIONAL_COMPONENT\": 2,\n  \"2\": \"FUNCTIONAL_COMPONENT\",\n  \"STATEFUL_COMPONENT\": 4,\n  \"4\": \"STATEFUL_COMPONENT\",\n  \"TEXT_CHILDREN\": 8,\n  \"8\": \"TEXT_CHILDREN\",\n  \"ARRAY_CHILDREN\": 16,\n  \"16\": \"ARRAY_CHILDREN\",\n  \"SLOTS_CHILDREN\": 32,\n  \"32\": \"SLOTS_CHILDREN\",\n  \"TELEPORT\": 64,\n  \"64\": \"TELEPORT\",\n  \"SUSPENSE\": 128,\n  \"128\": \"SUSPENSE\",\n  \"COMPONENT_SHOULD_KEEP_ALIVE\": 256,\n  \"256\": \"COMPONENT_SHOULD_KEEP_ALIVE\",\n  \"COMPONENT_KEPT_ALIVE\": 512,\n  \"512\": \"COMPONENT_KEPT_ALIVE\",\n  \"COMPONENT\": 6,\n  \"6\": \"COMPONENT\"\n};\n\nconst SlotFlags = {\n  \"STABLE\": 1,\n  \"1\": \"STABLE\",\n  \"DYNAMIC\": 2,\n  \"2\": \"DYNAMIC\",\n  \"FORWARDED\": 3,\n  \"3\": \"FORWARDED\"\n};\nconst slotFlagsText = {\n  [1]: \"STABLE\",\n  [2]: \"DYNAMIC\",\n  [3]: \"FORWARDED\"\n};\n\nconst GLOBALS_ALLOWED = \"Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol\";\nconst isGloballyAllowed = /* @__PURE__ */ makeMap(GLOBALS_ALLOWED);\nconst isGloballyWhitelisted = isGloballyAllowed;\n\nconst range = 2;\nfunction generateCodeFrame(source, start = 0, end = source.length) {\n  start = Math.max(0, Math.min(start, source.length));\n  end = Math.max(0, Math.min(end, source.length));\n  if (start > end) return \"\";\n  let lines = source.split(/(\\r?\\n)/);\n  const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\n  lines = lines.filter((_, idx) => idx % 2 === 0);\n  let count = 0;\n  const res = [];\n  for (let i = 0; i < lines.length; i++) {\n    count += lines[i].length + (newlineSequences[i] && newlineSequences[i].length || 0);\n    if (count >= start) {\n      for (let j = i - range; j <= i + range || end > count; j++) {\n        if (j < 0 || j >= lines.length) continue;\n        const line = j + 1;\n        res.push(\n          `${line}${\" \".repeat(Math.max(3 - String(line).length, 0))}|  ${lines[j]}`\n        );\n        const lineLength = lines[j].length;\n        const newLineSeqLength = newlineSequences[j] && newlineSequences[j].length || 0;\n        if (j === i) {\n          const pad = start - (count - (lineLength + newLineSeqLength));\n          const length = Math.max(\n            1,\n            end > count ? lineLength - pad : end - start\n          );\n          res.push(`   |  ` + \" \".repeat(pad) + \"^\".repeat(length));\n        } else if (j > i) {\n          if (end > count) {\n            const length = Math.max(Math.min(end - count, lineLength), 1);\n            res.push(`   |  ` + \"^\".repeat(length));\n          }\n          count += lineLength + newLineSeqLength;\n        }\n      }\n      break;\n    }\n  }\n  return res.join(\"\\n\");\n}\n\nfunction normalizeStyle(value) {\n  if (isArray(value)) {\n    const res = {};\n    for (let i = 0; i < value.length; i++) {\n      const item = value[i];\n      const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item);\n      if (normalized) {\n        for (const key in normalized) {\n          res[key] = normalized[key];\n        }\n      }\n    }\n    return res;\n  } else if (isString(value) || isObject(value)) {\n    return value;\n  }\n}\nconst listDelimiterRE = /;(?![^(]*\\))/g;\nconst propertyDelimiterRE = /:([^]+)/;\nconst styleCommentRE = /\\/\\*[^]*?\\*\\//g;\nfunction parseStringStyle(cssText) {\n  const ret = {};\n  cssText.replace(styleCommentRE, \"\").split(listDelimiterRE).forEach((item) => {\n    if (item) {\n      const tmp = item.split(propertyDelimiterRE);\n      tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n    }\n  });\n  return ret;\n}\nfunction stringifyStyle(styles) {\n  if (!styles) return \"\";\n  if (isString(styles)) return styles;\n  let ret = \"\";\n  for (const key in styles) {\n    const value = styles[key];\n    if (isString(value) || typeof value === \"number\") {\n      const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\n      ret += `${normalizedKey}:${value};`;\n    }\n  }\n  return ret;\n}\nfunction normalizeClass(value) {\n  let res = \"\";\n  if (isString(value)) {\n    res = value;\n  } else if (isArray(value)) {\n    for (let i = 0; i < value.length; i++) {\n      const normalized = normalizeClass(value[i]);\n      if (normalized) {\n        res += normalized + \" \";\n      }\n    }\n  } else if (isObject(value)) {\n    for (const name in value) {\n      if (value[name]) {\n        res += name + \" \";\n      }\n    }\n  }\n  return res.trim();\n}\nfunction normalizeProps(props) {\n  if (!props) return null;\n  let { class: klass, style } = props;\n  if (klass && !isString(klass)) {\n    props.class = normalizeClass(klass);\n  }\n  if (style) {\n    props.style = normalizeStyle(style);\n  }\n  return props;\n}\n\nconst HTML_TAGS = \"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot\";\nconst SVG_TAGS = \"svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view\";\nconst MATH_TAGS = \"annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics\";\nconst VOID_TAGS = \"area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr\";\nconst isHTMLTag = /* @__PURE__ */ makeMap(HTML_TAGS);\nconst isSVGTag = /* @__PURE__ */ makeMap(SVG_TAGS);\nconst isMathMLTag = /* @__PURE__ */ makeMap(MATH_TAGS);\nconst isVoidTag = /* @__PURE__ */ makeMap(VOID_TAGS);\n\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\nconst isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs);\nconst isBooleanAttr = /* @__PURE__ */ makeMap(\n  specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`\n);\nfunction includeBooleanAttr(value) {\n  return !!value || value === \"\";\n}\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\nconst attrValidationCache = {};\nfunction isSSRSafeAttrName(name) {\n  if (attrValidationCache.hasOwnProperty(name)) {\n    return attrValidationCache[name];\n  }\n  const isUnsafe = unsafeAttrCharRE.test(name);\n  if (isUnsafe) {\n    console.error(`unsafe attribute name: ${name}`);\n  }\n  return attrValidationCache[name] = !isUnsafe;\n}\nconst propsToAttrMap = {\n  acceptCharset: \"accept-charset\",\n  className: \"class\",\n  htmlFor: \"for\",\n  httpEquiv: \"http-equiv\"\n};\nconst isKnownHtmlAttr = /* @__PURE__ */ makeMap(\n  `accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap`\n);\nconst isKnownSvgAttr = /* @__PURE__ */ makeMap(\n  `xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`\n);\nconst isKnownMathMLAttr = /* @__PURE__ */ makeMap(\n  `accent,accentunder,actiontype,align,alignmentscope,altimg,altimg-height,altimg-valign,altimg-width,alttext,bevelled,close,columnsalign,columnlines,columnspan,denomalign,depth,dir,display,displaystyle,encoding,equalcolumns,equalrows,fence,fontstyle,fontweight,form,frame,framespacing,groupalign,height,href,id,indentalign,indentalignfirst,indentalignlast,indentshift,indentshiftfirst,indentshiftlast,indextype,justify,largetop,largeop,lquote,lspace,mathbackground,mathcolor,mathsize,mathvariant,maxsize,minlabelspacing,mode,other,overflow,position,rowalign,rowlines,rowspan,rquote,rspace,scriptlevel,scriptminsize,scriptsizemultiplier,selection,separator,separators,shift,side,src,stackalign,stretchy,subscriptshift,superscriptshift,symmetric,voffset,width,widths,xlink:href,xlink:show,xlink:type,xmlns`\n);\nfunction isRenderableAttrValue(value) {\n  if (value == null) {\n    return false;\n  }\n  const type = typeof value;\n  return type === \"string\" || type === \"number\" || type === \"boolean\";\n}\n\nconst escapeRE = /[\"'&<>]/;\nfunction escapeHtml(string) {\n  const str = \"\" + string;\n  const match = escapeRE.exec(str);\n  if (!match) {\n    return str;\n  }\n  let html = \"\";\n  let escaped;\n  let index;\n  let lastIndex = 0;\n  for (index = match.index; index < str.length; index++) {\n    switch (str.charCodeAt(index)) {\n      case 34:\n        escaped = \"&quot;\";\n        break;\n      case 38:\n        escaped = \"&amp;\";\n        break;\n      case 39:\n        escaped = \"&#39;\";\n        break;\n      case 60:\n        escaped = \"&lt;\";\n        break;\n      case 62:\n        escaped = \"&gt;\";\n        break;\n      default:\n        continue;\n    }\n    if (lastIndex !== index) {\n      html += str.slice(lastIndex, index);\n    }\n    lastIndex = index + 1;\n    html += escaped;\n  }\n  return lastIndex !== index ? html + str.slice(lastIndex, index) : html;\n}\nconst commentStripRE = /^-?>|<!--|-->|--!>|<!-$/g;\nfunction escapeHtmlComment(src) {\n  return src.replace(commentStripRE, \"\");\n}\nconst cssVarNameEscapeSymbolsRE = /[ !\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~]/g;\nfunction getEscapedCssVarName(key, doubleEscape) {\n  return key.replace(\n    cssVarNameEscapeSymbolsRE,\n    (s) => doubleEscape ? s === '\"' ? '\\\\\\\\\\\\\"' : `\\\\\\\\${s}` : `\\\\${s}`\n  );\n}\n\nfunction looseCompareArrays(a, b) {\n  if (a.length !== b.length) return false;\n  let equal = true;\n  for (let i = 0; equal && i < a.length; i++) {\n    equal = looseEqual(a[i], b[i]);\n  }\n  return equal;\n}\nfunction looseEqual(a, b) {\n  if (a === b) return true;\n  let aValidType = isDate(a);\n  let bValidType = isDate(b);\n  if (aValidType || bValidType) {\n    return aValidType && bValidType ? a.getTime() === b.getTime() : false;\n  }\n  aValidType = isSymbol(a);\n  bValidType = isSymbol(b);\n  if (aValidType || bValidType) {\n    return a === b;\n  }\n  aValidType = isArray(a);\n  bValidType = isArray(b);\n  if (aValidType || bValidType) {\n    return aValidType && bValidType ? looseCompareArrays(a, b) : false;\n  }\n  aValidType = isObject(a);\n  bValidType = isObject(b);\n  if (aValidType || bValidType) {\n    if (!aValidType || !bValidType) {\n      return false;\n    }\n    const aKeysCount = Object.keys(a).length;\n    const bKeysCount = Object.keys(b).length;\n    if (aKeysCount !== bKeysCount) {\n      return false;\n    }\n    for (const key in a) {\n      const aHasKey = a.hasOwnProperty(key);\n      const bHasKey = b.hasOwnProperty(key);\n      if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a[key], b[key])) {\n        return false;\n      }\n    }\n  }\n  return String(a) === String(b);\n}\nfunction looseIndexOf(arr, val) {\n  return arr.findIndex((item) => looseEqual(item, val));\n}\n\nconst isRef = (val) => {\n  return !!(val && val[\"__v_isRef\"] === true);\n};\nconst toDisplayString = (val) => {\n  return isString(val) ? val : val == null ? \"\" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? isRef(val) ? toDisplayString(val.value) : JSON.stringify(val, replacer, 2) : String(val);\n};\nconst replacer = (_key, val) => {\n  if (isRef(val)) {\n    return replacer(_key, val.value);\n  } else if (isMap(val)) {\n    return {\n      [`Map(${val.size})`]: [...val.entries()].reduce(\n        (entries, [key, val2], i) => {\n          entries[stringifySymbol(key, i) + \" =>\"] = val2;\n          return entries;\n        },\n        {}\n      )\n    };\n  } else if (isSet(val)) {\n    return {\n      [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v))\n    };\n  } else if (isSymbol(val)) {\n    return stringifySymbol(val);\n  } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\n    return String(val);\n  }\n  return val;\n};\nconst stringifySymbol = (v, i = \"\") => {\n  var _a;\n  return (\n    // Symbol.description in es2019+ so we need to cast here to pass\n    // the lib: es2016 check\n    isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v\n  );\n};\n\nfunction normalizeCssVarValue(value) {\n  if (value == null) {\n    return \"initial\";\n  }\n  if (typeof value === \"string\") {\n    return value === \"\" ? \" \" : value;\n  }\n  return String(value);\n}\n\nexports.EMPTY_ARR = EMPTY_ARR;\nexports.EMPTY_OBJ = EMPTY_OBJ;\nexports.NO = NO;\nexports.NOOP = NOOP;\nexports.PatchFlagNames = PatchFlagNames;\nexports.PatchFlags = PatchFlags;\nexports.ShapeFlags = ShapeFlags;\nexports.SlotFlags = SlotFlags;\nexports.camelize = camelize;\nexports.capitalize = capitalize;\nexports.cssVarNameEscapeSymbolsRE = cssVarNameEscapeSymbolsRE;\nexports.def = def;\nexports.escapeHtml = escapeHtml;\nexports.escapeHtmlComment = escapeHtmlComment;\nexports.extend = extend;\nexports.genCacheKey = genCacheKey;\nexports.genPropsAccessExp = genPropsAccessExp;\nexports.generateCodeFrame = generateCodeFrame;\nexports.getEscapedCssVarName = getEscapedCssVarName;\nexports.getGlobalThis = getGlobalThis;\nexports.hasChanged = hasChanged;\nexports.hasOwn = hasOwn;\nexports.hyphenate = hyphenate;\nexports.includeBooleanAttr = includeBooleanAttr;\nexports.invokeArrayFns = invokeArrayFns;\nexports.isArray = isArray;\nexports.isBooleanAttr = isBooleanAttr;\nexports.isBuiltInDirective = isBuiltInDirective;\nexports.isDate = isDate;\nexports.isFunction = isFunction;\nexports.isGloballyAllowed = isGloballyAllowed;\nexports.isGloballyWhitelisted = isGloballyWhitelisted;\nexports.isHTMLTag = isHTMLTag;\nexports.isIntegerKey = isIntegerKey;\nexports.isKnownHtmlAttr = isKnownHtmlAttr;\nexports.isKnownMathMLAttr = isKnownMathMLAttr;\nexports.isKnownSvgAttr = isKnownSvgAttr;\nexports.isMap = isMap;\nexports.isMathMLTag = isMathMLTag;\nexports.isModelListener = isModelListener;\nexports.isObject = isObject;\nexports.isOn = isOn;\nexports.isPlainObject = isPlainObject;\nexports.isPromise = isPromise;\nexports.isRegExp = isRegExp;\nexports.isRenderableAttrValue = isRenderableAttrValue;\nexports.isReservedProp = isReservedProp;\nexports.isSSRSafeAttrName = isSSRSafeAttrName;\nexports.isSVGTag = isSVGTag;\nexports.isSet = isSet;\nexports.isSpecialBooleanAttr = isSpecialBooleanAttr;\nexports.isString = isString;\nexports.isSymbol = isSymbol;\nexports.isVoidTag = isVoidTag;\nexports.looseEqual = looseEqual;\nexports.looseIndexOf = looseIndexOf;\nexports.looseToNumber = looseToNumber;\nexports.makeMap = makeMap;\nexports.normalizeClass = normalizeClass;\nexports.normalizeCssVarValue = normalizeCssVarValue;\nexports.normalizeProps = normalizeProps;\nexports.normalizeStyle = normalizeStyle;\nexports.objectToString = objectToString;\nexports.parseStringStyle = parseStringStyle;\nexports.propsToAttrMap = propsToAttrMap;\nexports.remove = remove;\nexports.slotFlagsText = slotFlagsText;\nexports.stringifyStyle = stringifyStyle;\nexports.toDisplayString = toDisplayString;\nexports.toHandlerKey = toHandlerKey;\nexports.toNumber = toNumber;\nexports.toRawType = toRawType;\nexports.toTypeString = toTypeString;\n","'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./dist/shared.cjs.prod.js')\n} else {\n  module.exports = require('./dist/shared.cjs.js')\n}\n",null,null,null,null,"export type Pos = {\n  start: number;\n};\n\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\n\nexport class Position {\n  line: number;\n  column: number;\n  index: number;\n\n  constructor(line: number, col: number, index: number) {\n    this.line = line;\n    this.column = col;\n    this.index = index;\n  }\n}\n\nexport class SourceLocation {\n  start: Position;\n  end: Position;\n  filename: string;\n  identifierName: string | undefined | null;\n\n  constructor(start: Position, end?: Position) {\n    this.start = start;\n    // (may start as null, but initialized later)\n    this.end = end;\n  }\n}\n\n/**\n * creates a new position with a non-zero column offset from the given position.\n * This function should be only be used when we create AST node out of the token\n * boundaries, such as TemplateElement ends before tt.templateNonTail. This\n * function does not skip whitespaces.\n */\nexport function createPositionWithColumnOffset(\n  position: Position,\n  columnOffset: number,\n) {\n  const { line, column, index } = position;\n  return new Position(line, column + columnOffset, index + columnOffset);\n}\n","import type { ParseErrorTemplates } from \"../parse-error.ts\";\n\nconst code = \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\";\n\nexport default {\n  ImportMetaOutsideModule: {\n    message: `import.meta may appear only with 'sourceType: \"module\"'`,\n    code,\n  },\n  ImportOutsideModule: {\n    message: `'import' and 'export' may appear only with 'sourceType: \"module\"'`,\n    code,\n  },\n} satisfies ParseErrorTemplates;\n","const NodeDescriptions = {\n  ArrayPattern: \"array destructuring pattern\",\n  AssignmentExpression: \"assignment expression\",\n  AssignmentPattern: \"assignment expression\",\n  ArrowFunctionExpression: \"arrow function expression\",\n  ConditionalExpression: \"conditional expression\",\n  CatchClause: \"catch clause\",\n  ForOfStatement: \"for-of statement\",\n  ForInStatement: \"for-in statement\",\n  ForStatement: \"for-loop\",\n  FormalParameters: \"function parameter list\",\n  Identifier: \"identifier\",\n  ImportSpecifier: \"import specifier\",\n  ImportDefaultSpecifier: \"import default specifier\",\n  ImportNamespaceSpecifier: \"import namespace specifier\",\n  ObjectPattern: \"object destructuring pattern\",\n  ParenthesizedExpression: \"parenthesized expression\",\n  RestElement: \"rest element\",\n  UpdateExpression: {\n    true: \"prefix operation\",\n    false: \"postfix operation\",\n  },\n  VariableDeclarator: \"variable declaration\",\n  YieldExpression: \"yield expression\",\n};\n\ntype NodeTypesWithDescriptions = keyof Omit<\n  typeof NodeDescriptions,\n  \"UpdateExpression\"\n>;\n\ntype NodeWithDescription =\n  | {\n      type: \"UpdateExpression\";\n      prefix: boolean;\n    }\n  | {\n      type: NodeTypesWithDescriptions;\n    };\n\nconst toNodeDescription = (node: NodeWithDescription) =>\n  node.type === \"UpdateExpression\"\n    ? NodeDescriptions.UpdateExpression[`${node.prefix}`]\n    : NodeDescriptions[node.type];\n\nexport default toNodeDescription;\n","import type { ParseErrorTemplates } from \"../parse-error.ts\";\nimport toNodeDescription from \"./to-node-description.ts\";\n\nexport type LValAncestor =\n  | { type: \"UpdateExpression\"; prefix: boolean }\n  | {\n      type:\n        | \"ArrayPattern\"\n        | \"AssignmentExpression\"\n        | \"CatchClause\"\n        | \"ForOfStatement\"\n        | \"FormalParameters\"\n        | \"ForInStatement\"\n        | \"ForStatement\"\n        | \"ImportSpecifier\"\n        | \"ImportNamespaceSpecifier\"\n        | \"ImportDefaultSpecifier\"\n        | \"ParenthesizedExpression\"\n        | \"ObjectPattern\"\n        | \"RestElement\"\n        | \"VariableDeclarator\";\n    };\n\nexport default {\n  AccessorIsGenerator: ({ kind }: { kind: \"get\" | \"set\" }) =>\n    `A ${kind}ter cannot be a generator.`,\n  ArgumentsInClass:\n    \"'arguments' is only allowed in functions and class methods.\",\n  AsyncFunctionInSingleStatementContext:\n    \"Async functions can only be declared at the top level or inside a block.\",\n  AwaitBindingIdentifier:\n    \"Can not use 'await' as identifier inside an async function.\",\n  AwaitBindingIdentifierInStaticBlock:\n    \"Can not use 'await' as identifier inside a static block.\",\n  AwaitExpressionFormalParameter:\n    \"'await' is not allowed in async function parameters.\",\n  AwaitUsingNotInAsyncContext:\n    \"'await using' is only allowed within async functions and at the top levels of modules.\",\n  AwaitNotInAsyncContext:\n    \"'await' is only allowed within async functions and at the top levels of modules.\",\n  BadGetterArity: \"A 'get' accessor must not have any formal parameters.\",\n  BadSetterArity: \"A 'set' accessor must have exactly one formal parameter.\",\n  BadSetterRestParameter:\n    \"A 'set' accessor function argument must not be a rest parameter.\",\n  ConstructorClassField: \"Classes may not have a field named 'constructor'.\",\n  ConstructorClassPrivateField:\n    \"Classes may not have a private field named '#constructor'.\",\n  ConstructorIsAccessor: \"Class constructor may not be an accessor.\",\n  ConstructorIsAsync: \"Constructor can't be an async function.\",\n  ConstructorIsGenerator: \"Constructor can't be a generator.\",\n  DeclarationMissingInitializer: ({\n    kind,\n  }: {\n    kind: \"await using\" | \"const\" | \"destructuring\" | \"using\";\n  }) => `Missing initializer in ${kind} declaration.`,\n  DecoratorArgumentsOutsideParentheses:\n    \"Decorator arguments must be moved inside parentheses: use '@(decorator(args))' instead of '@(decorator)(args)'.\",\n  DecoratorBeforeExport:\n    \"Decorators must be placed *before* the 'export' keyword. Remove the 'decoratorsBeforeExport: true' option to use the 'export @decorator class {}' syntax.\",\n  DecoratorsBeforeAfterExport:\n    \"Decorators can be placed *either* before or after the 'export' keyword, but not in both locations at the same time.\",\n  DecoratorConstructor:\n    \"Decorators can't be used with a constructor. Did you mean '@dec class { ... }'?\",\n  DecoratorExportClass:\n    \"Decorators must be placed *after* the 'export' keyword. Remove the 'decoratorsBeforeExport: false' option to use the '@decorator export class {}' syntax.\",\n  DecoratorSemicolon: \"Decorators must not be followed by a semicolon.\",\n  DecoratorStaticBlock: \"Decorators can't be used with a static block.\",\n  DeferImportRequiresNamespace:\n    'Only `import defer * as x from \"./module\"` is valid.',\n  DeletePrivateField: \"Deleting a private field is not allowed.\",\n  DestructureNamedImport:\n    \"ES2015 named imports do not destructure. Use another statement for destructuring after the import.\",\n  DuplicateConstructor: \"Duplicate constructor in the same class.\",\n  DuplicateDefaultExport: \"Only one default export allowed per module.\",\n  DuplicateExport: ({ exportName }: { exportName: string }) =>\n    `\\`${exportName}\\` has already been exported. Exported identifiers must be unique.`,\n  DuplicateProto: \"Redefinition of __proto__ property.\",\n  DuplicateRegExpFlags: \"Duplicate regular expression flag.\",\n  ElementAfterRest: \"Rest element must be last element.\",\n  EscapedCharNotAnIdentifier: \"Invalid Unicode escape.\",\n  ExportBindingIsString: ({\n    localName,\n    exportName,\n  }: {\n    localName: string;\n    exportName: string;\n  }) =>\n    `A string literal cannot be used as an exported binding without \\`from\\`.\\n- Did you mean \\`export { '${localName}' as '${exportName}' } from 'some-module'\\`?`,\n  ExportDefaultFromAsIdentifier:\n    \"'from' is not allowed as an identifier after 'export default'.\",\n\n  ForInOfLoopInitializer: ({\n    type,\n  }: {\n    type: \"ForInStatement\" | \"ForOfStatement\";\n  }) =>\n    `'${\n      type === \"ForInStatement\" ? \"for-in\" : \"for-of\"\n    }' loop variable declaration may not have an initializer.`,\n  ForInUsing: \"For-in loop may not start with 'using' declaration.\",\n\n  ForOfAsync: \"The left-hand side of a for-of loop may not be 'async'.\",\n  ForOfLet: \"The left-hand side of a for-of loop may not start with 'let'.\",\n  GeneratorInSingleStatementContext:\n    \"Generators can only be declared at the top level or inside a block.\",\n\n  IllegalBreakContinue: ({\n    type,\n  }: {\n    type: \"BreakStatement\" | \"ContinueStatement\";\n  }) => `Unsyntactic ${type === \"BreakStatement\" ? \"break\" : \"continue\"}.`,\n\n  IllegalLanguageModeDirective:\n    \"Illegal 'use strict' directive in function with non-simple parameter list.\",\n  IllegalReturn: \"'return' outside of function.\",\n  ImportAttributesUseAssert:\n    \"The `assert` keyword in import attributes is deprecated and it has been replaced by the `with` keyword. You can enable the `deprecatedImportAssert` parser plugin to suppress this error.\",\n  ImportBindingIsString: ({ importName }: { importName: string }) =>\n    `A string literal cannot be used as an imported binding.\\n- Did you mean \\`import { \"${importName}\" as foo }\\`?`,\n  ImportCallArity: `\\`import()\\` requires exactly one or two arguments.`,\n  ImportCallNotNewExpression: \"Cannot use new with import(...).\",\n  ImportCallSpreadArgument: \"`...` is not allowed in `import()`.\",\n  ImportJSONBindingNotDefault:\n    \"A JSON module can only be imported with `default`.\",\n  ImportReflectionHasAssertion: \"`import module x` cannot have assertions.\",\n  ImportReflectionNotBinding:\n    'Only `import module x from \"./module\"` is valid.',\n  IncompatibleRegExpUVFlags:\n    \"The 'u' and 'v' regular expression flags cannot be enabled at the same time.\",\n  InvalidBigIntLiteral: \"Invalid BigIntLiteral.\",\n  InvalidCodePoint: \"Code point out of bounds.\",\n  InvalidCoverDiscardElement:\n    \"'void' must be followed by an expression when not used in a binding position.\",\n  InvalidCoverInitializedName: \"Invalid shorthand property initializer.\",\n  InvalidDecimal: \"Invalid decimal.\",\n  InvalidDigit: ({ radix }: { radix: number }) =>\n    `Expected number in radix ${radix}.`,\n  InvalidEscapeSequence: \"Bad character escape sequence.\",\n  InvalidEscapeSequenceTemplate: \"Invalid escape sequence in template.\",\n  InvalidEscapedReservedWord: ({ reservedWord }: { reservedWord: string }) =>\n    `Escape sequence in keyword ${reservedWord}.`,\n  InvalidIdentifier: ({ identifierName }: { identifierName: string }) =>\n    `Invalid identifier ${identifierName}.`,\n  InvalidLhs: ({ ancestor }: { ancestor: LValAncestor }) =>\n    `Invalid left-hand side in ${toNodeDescription(ancestor)}.`,\n  InvalidLhsBinding: ({ ancestor }: { ancestor: LValAncestor }) =>\n    `Binding invalid left-hand side in ${toNodeDescription(ancestor)}.`,\n  InvalidLhsOptionalChaining: ({ ancestor }: { ancestor: LValAncestor }) =>\n    `Invalid optional chaining in the left-hand side of ${toNodeDescription(\n      ancestor,\n    )}.`,\n  InvalidNumber: \"Invalid number.\",\n  InvalidOrMissingExponent:\n    \"Floating-point numbers require a valid exponent after the 'e'.\",\n  InvalidOrUnexpectedToken: ({ unexpected }: { unexpected: string }) =>\n    `Unexpected character '${unexpected}'.`,\n  InvalidParenthesizedAssignment: \"Invalid parenthesized assignment pattern.\",\n  InvalidPrivateFieldResolution: ({\n    identifierName,\n  }: {\n    identifierName: string;\n  }) => `Private name #${identifierName} is not defined.`,\n  InvalidPropertyBindingPattern: \"Binding member expression.\",\n  InvalidRecordProperty:\n    \"Only properties and spread elements are allowed in record definitions.\",\n  InvalidRestAssignmentPattern: \"Invalid rest operator's argument.\",\n  LabelRedeclaration: ({ labelName }: { labelName: string }) =>\n    `Label '${labelName}' is already declared.`,\n  LetInLexicalBinding: \"'let' is disallowed as a lexically bound name.\",\n  LineTerminatorBeforeArrow: \"No line break is allowed before '=>'.\",\n  MalformedRegExpFlags: \"Invalid regular expression flag.\",\n  MissingClassName: \"A class name is required.\",\n  MissingEqInAssignment:\n    \"Only '=' operator can be used for specifying default value.\",\n  MissingSemicolon: \"Missing semicolon.\",\n  MissingPlugin: ({ missingPlugin }: { missingPlugin: [string] }) =>\n    `This experimental syntax requires enabling the parser plugin: ${missingPlugin\n      .map(name => JSON.stringify(name))\n      .join(\", \")}.`,\n  // FIXME: Would be nice to make this \"missingPlugins\" instead.\n  // Also, seems like we can drop the \"(s)\" from the message and just make it \"s\".\n  MissingOneOfPlugins: ({ missingPlugin }: { missingPlugin: string[] }) =>\n    `This experimental syntax requires enabling one of the following parser plugin(s): ${missingPlugin\n      .map(name => JSON.stringify(name))\n      .join(\", \")}.`,\n  MissingUnicodeEscape: \"Expecting Unicode escape sequence \\\\uXXXX.\",\n  MixingCoalesceWithLogical:\n    \"Nullish coalescing operator(??) requires parens when mixing with logical operators.\",\n  ModuleAttributeDifferentFromType:\n    \"The only accepted module attribute is `type`.\",\n  ModuleAttributeInvalidValue:\n    \"Only string literals are allowed as module attribute values.\",\n  ModuleAttributesWithDuplicateKeys: ({ key }: { key: string }) =>\n    `Duplicate key \"${key}\" is not allowed in module attributes.`,\n  ModuleExportNameHasLoneSurrogate: ({\n    surrogateCharCode,\n  }: {\n    surrogateCharCode: number;\n  }) =>\n    `An export name cannot include a lone surrogate, found '\\\\u${surrogateCharCode.toString(\n      16,\n    )}'.`,\n  ModuleExportUndefined: ({ localName }: { localName: string }) =>\n    `Export '${localName}' is not defined.`,\n  MultipleDefaultsInSwitch: \"Multiple default clauses.\",\n  NewlineAfterThrow: \"Illegal newline after throw.\",\n  NoCatchOrFinally: \"Missing catch or finally clause.\",\n  NumberIdentifier: \"Identifier directly after number.\",\n  NumericSeparatorInEscapeSequence:\n    \"Numeric separators are not allowed inside unicode escape sequences or hex escape sequences.\",\n  ObsoleteAwaitStar:\n    \"'await*' has been removed from the async functions proposal. Use Promise.all() instead.\",\n  OptionalChainingNoNew:\n    \"Constructors in/after an Optional Chain are not allowed.\",\n  OptionalChainingNoTemplate:\n    \"Tagged Template Literals are not allowed in optionalChain.\",\n  OverrideOnConstructor:\n    \"'override' modifier cannot appear on a constructor declaration.\",\n  ParamDupe: \"Argument name clash.\",\n  PatternHasAccessor: \"Object pattern can't contain getter or setter.\",\n  PatternHasMethod: \"Object pattern can't contain methods.\",\n  PrivateInExpectedIn: ({ identifierName }: { identifierName: string }) =>\n    `Private names are only allowed in property accesses (\\`obj.#${identifierName}\\`) or in \\`in\\` expressions (\\`#${identifierName} in obj\\`).`,\n  PrivateNameRedeclaration: ({ identifierName }: { identifierName: string }) =>\n    `Duplicate private name #${identifierName}.`,\n  RecordExpressionBarIncorrectEndSyntaxType:\n    \"Record expressions ending with '|}' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  RecordExpressionBarIncorrectStartSyntaxType:\n    \"Record expressions starting with '{|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  RecordExpressionHashIncorrectStartSyntaxType:\n    \"Record expressions starting with '#{' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.\",\n  RecordNoProto: \"'__proto__' is not allowed in Record expressions.\",\n  RestTrailingComma: \"Unexpected trailing comma after rest element.\",\n  SloppyFunction:\n    \"In non-strict mode code, functions can only be declared at top level or inside a block.\",\n  SloppyFunctionAnnexB:\n    \"In non-strict mode code, functions can only be declared at top level, inside a block, or as the body of an if statement.\",\n  SourcePhaseImportRequiresDefault:\n    'Only `import source x from \"./module\"` is valid.',\n  StaticPrototype: \"Classes may not have static property named prototype.\",\n  SuperNotAllowed:\n    \"`super()` is only valid inside a class constructor of a subclass. Maybe a typo in the method name ('constructor') or not extending another class?\",\n  SuperPrivateField: \"Private fields can't be accessed on super.\",\n  TrailingDecorator: \"Decorators must be attached to a class element.\",\n  TupleExpressionBarIncorrectEndSyntaxType:\n    \"Tuple expressions ending with '|]' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  TupleExpressionBarIncorrectStartSyntaxType:\n    \"Tuple expressions starting with '[|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  TupleExpressionHashIncorrectStartSyntaxType:\n    \"Tuple expressions starting with '#[' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.\",\n  UnexpectedArgumentPlaceholder: \"Unexpected argument placeholder.\",\n  UnexpectedAwaitAfterPipelineBody:\n    'Unexpected \"await\" after pipeline body; await must have parentheses in minimal proposal.',\n  UnexpectedDigitAfterHash: \"Unexpected digit after hash token.\",\n  UnexpectedImportExport:\n    \"'import' and 'export' may only appear at the top level.\",\n  UnexpectedKeyword: ({ keyword }: { keyword: string }) =>\n    `Unexpected keyword '${keyword}'.`,\n  UnexpectedLeadingDecorator:\n    \"Leading decorators must be attached to a class declaration.\",\n  UnexpectedLexicalDeclaration:\n    \"Lexical declaration cannot appear in a single-statement context.\",\n  UnexpectedNewTarget:\n    \"`new.target` can only be used in functions or class properties.\",\n  UnexpectedNumericSeparator:\n    \"A numeric separator is only allowed between two digits.\",\n  UnexpectedPrivateField: \"Unexpected private name.\",\n  UnexpectedReservedWord: ({ reservedWord }: { reservedWord: string }) =>\n    `Unexpected reserved word '${reservedWord}'.`,\n  UnexpectedSuper: \"'super' is only allowed in object methods and classes.\",\n  UnexpectedToken: ({\n    expected,\n    unexpected,\n  }: {\n    expected?: string | null;\n    unexpected?: string | null;\n  }) =>\n    `Unexpected token${unexpected ? ` '${unexpected}'.` : \"\"}${\n      expected ? `, expected \"${expected}\"` : \"\"\n    }`,\n  UnexpectedTokenUnaryExponentiation:\n    \"Illegal expression. Wrap left hand side or entire exponentiation in parentheses.\",\n  UnexpectedUsingDeclaration:\n    \"Using declaration cannot appear in the top level when source type is `script` or in the bare case statement.\",\n  UnexpectedVoidPattern: \"Unexpected void binding.\",\n  UnsupportedBind: \"Binding should be performed on object property.\",\n  UnsupportedDecoratorExport:\n    \"A decorated export must export a class declaration.\",\n  UnsupportedDefaultExport:\n    \"Only expressions, functions or classes are allowed as the `default` export.\",\n  UnsupportedImport:\n    \"`import` can only be used in `import()` or `import.meta`.\",\n  UnsupportedMetaProperty: ({\n    target,\n    onlyValidPropertyName,\n  }: {\n    target: string;\n    onlyValidPropertyName: string;\n  }) =>\n    `The only valid meta property for ${target} is ${target}.${onlyValidPropertyName}.`,\n  UnsupportedParameterDecorator:\n    \"Decorators cannot be used to decorate parameters.\",\n  UnsupportedPropertyDecorator:\n    \"Decorators cannot be used to decorate object literal properties.\",\n  UnsupportedSuper:\n    \"'super' can only be used with function calls (i.e. super()) or in property accesses (i.e. super.prop or super[prop]).\",\n  UnterminatedComment: \"Unterminated comment.\",\n  UnterminatedRegExp: \"Unterminated regular expression.\",\n  UnterminatedString: \"Unterminated string constant.\",\n  UnterminatedTemplate: \"Unterminated template.\",\n  UsingDeclarationExport: \"Using declaration cannot be exported.\",\n  UsingDeclarationHasBindingPattern:\n    \"Using declaration cannot have destructuring patterns.\",\n  VarRedeclaration: ({ identifierName }: { identifierName: string }) =>\n    `Identifier '${identifierName}' has already been declared.`,\n  VoidPatternCatchClauseParam:\n    \"A void binding can not be the catch clause parameter. Use `try { ... } catch { ... }` if you want to discard the caught error.\",\n  VoidPatternInitializer: \"A void binding may not have an initializer.\",\n  YieldBindingIdentifier:\n    \"Can not use 'yield' as identifier inside a generator.\",\n  YieldInParameter: \"Yield expression is not allowed in formal parameters.\",\n  YieldNotInGeneratorFunction:\n    \"'yield' is only allowed within generator functions.\",\n  ZeroDigitNumericSeparator:\n    \"Numeric separator can not be used after leading 0.\",\n} satisfies ParseErrorTemplates;\n","import type { ParseErrorTemplates } from \"../parse-error\";\n\nexport default {\n  StrictDelete: \"Deleting local variable in strict mode.\",\n\n  // `referenceName` is the StringValue[1] of an IdentifierReference[2], which\n  // is represented as just an `Identifier`[3] in the Babel AST.\n  // 1. https://tc39.es/ecma262/#sec-static-semantics-stringvalue\n  // 2. https://tc39.es/ecma262/#prod-IdentifierReference\n  // 3. https://github.com/babel/babel/blob/main/packages/babel-parser/ast/spec.md#identifier\n  StrictEvalArguments: ({ referenceName }: { referenceName: string }) =>\n    `Assigning to '${referenceName}' in strict mode.`,\n\n  // `bindingName` is the StringValue[1] of a BindingIdentifier[2], which is\n  // represented as just an `Identifier`[3] in the Babel AST.\n  // 1. https://tc39.es/ecma262/#sec-static-semantics-stringvalue\n  // 2. https://tc39.es/ecma262/#prod-BindingIdentifier\n  // 3. https://github.com/babel/babel/blob/main/packages/babel-parser/ast/spec.md#identifier\n  StrictEvalArgumentsBinding: ({ bindingName }: { bindingName: string }) =>\n    `Binding '${bindingName}' in strict mode.`,\n\n  StrictFunction:\n    \"In strict mode code, functions can only be declared at top level or inside a block.\",\n\n  StrictNumericEscape: \"The only valid numeric escape in strict mode is '\\\\0'.\",\n\n  StrictOctalLiteral: \"Legacy octal literals are not allowed in strict mode.\",\n\n  StrictWith: \"'with' in strict mode.\",\n} satisfies ParseErrorTemplates;\n","import type { ParseErrorTemplates } from \"../parse-error.ts\";\n\nexport default {\n  ParseExpressionEmptyInput:\n    \"Unexpected parseExpression() input: The input is empty or contains only comments.\",\n  ParseExpressionExpectsEOF: ({ unexpected }: { unexpected: number }) =>\n    `Unexpected parseExpression() input: The input should contain exactly one expression, but the first expression is followed by the unexpected character \\`${String.fromCodePoint(unexpected)}\\`.`,\n} satisfies ParseErrorTemplates;\n","import type { ParseErrorTemplates } from \"../parse-error.ts\";\nimport toNodeDescription from \"./to-node-description.ts\";\n\nexport const UnparenthesizedPipeBodyDescriptions = new Set([\n  \"ArrowFunctionExpression\",\n  \"AssignmentExpression\",\n  \"ConditionalExpression\",\n  \"YieldExpression\",\n] as const);\n\ntype GetSetMemberType<T extends Set<any>> =\n  T extends Set<infer M> ? M : unknown;\n\nexport type UnparenthesizedPipeBodyTypes = GetSetMemberType<\n  typeof UnparenthesizedPipeBodyDescriptions\n>;\n\nexport default {\n  // This error is only used by the smart-mix proposal\n  PipeBodyIsTighter:\n    \"Unexpected yield after pipeline body; any yield expression acting as Hack-style pipe body must be parenthesized due to its loose operator precedence.\",\n  PipeTopicRequiresHackPipes: process.env.BABEL_8_BREAKING\n    ? 'Topic references are only supported when using the `\"proposal\": \"hack\"` version of the pipeline proposal.'\n    : 'Topic reference is used, but the pipelineOperator plugin was not passed a \"proposal\": \"hack\" or \"smart\" option.',\n  PipeTopicUnbound:\n    \"Topic reference is unbound; it must be inside a pipe body.\",\n  PipeTopicUnconfiguredToken: ({ token }: { token: string }) =>\n    `Invalid topic token ${token}. In order to use ${token} as a topic reference, the pipelineOperator plugin must be configured with { \"proposal\": \"hack\", \"topicToken\": \"${token}\" }.`,\n  PipeTopicUnused:\n    \"Hack-style pipe body does not contain a topic reference; Hack-style pipes must use topic at least once.\",\n  PipeUnparenthesizedBody: ({ type }: { type: UnparenthesizedPipeBodyTypes }) =>\n    `Hack-style pipe body cannot be an unparenthesized ${toNodeDescription({\n      type,\n    })}; please wrap it in parentheses.`,\n\n  ...(process.env.BABEL_8_BREAKING\n    ? {}\n    : {\n        // Messages whose codes start with “Pipeline” or “PrimaryTopic”\n        // are retained for backwards compatibility\n        // with the deprecated smart-mix pipe operator proposal plugin.\n        // They are subject to removal in a future major version.\n        PipelineBodyNoArrow:\n          'Unexpected arrow \"=>\" after pipeline body; arrow function in pipeline body must be parenthesized.',\n        PipelineBodySequenceExpression:\n          \"Pipeline body may not be a comma-separated sequence expression.\",\n        PipelineHeadSequenceExpression:\n          \"Pipeline head should not be a comma-separated sequence expression.\",\n        PipelineTopicUnused:\n          \"Pipeline is in topic style but does not use topic reference.\",\n        PrimaryTopicNotAllowed:\n          \"Topic reference was used in a lexical context without topic binding.\",\n        PrimaryTopicRequiresSmartPipeline:\n          'Topic reference is used, but the pipelineOperator plugin was not passed a \"proposal\": \"hack\" or \"smart\" option.',\n      }),\n} satisfies ParseErrorTemplates;\n","import { Position } from \"./util/location.ts\";\n\ntype SyntaxPlugin =\n  | \"flow\"\n  | \"typescript\"\n  | \"jsx\"\n  | \"pipelineOperator\"\n  | \"placeholders\";\n\ntype ParseErrorCode =\n  | \"BABEL_PARSER_SYNTAX_ERROR\"\n  | \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\";\n\n// Babel uses \"normal\" SyntaxErrors for it's errors, but adds some extra\n// functionality. This functionality is defined in the\n// `ParseErrorSpecification` interface below. We may choose to change to someday\n// give our errors their own full-blown class, but until then this allow us to\n// keep all the desirable properties of SyntaxErrors (like their name in stack\n// traces, etc.), and also allows us to punt on any publicly facing\n// class-hierarchy decisions until Babel 8.\ninterface ParseErrorSpecification<ErrorDetails> {\n  // Look, these *could* be readonly, but then Flow complains when we initially\n  // set them. We could do a whole dance and make a special interface that's not\n  // readonly for when we create the error, then cast it to the readonly\n  // interface for public use, but the previous implementation didn't have them\n  // as readonly, so let's just not worry about it for now.\n  code: ParseErrorCode;\n  reasonCode: string;\n  syntaxPlugin?: SyntaxPlugin;\n  missingPlugin?: string | string[];\n  loc: Position;\n  details: ErrorDetails;\n\n  // We should consider removing this as it now just contains the same\n  // information as `loc.index`.\n  pos: number;\n}\n\nexport type ParseError<ErrorDetails> = SyntaxError &\n  ParseErrorSpecification<ErrorDetails>;\n\n// By `ParseErrorConstructor`, we mean something like the new-less style\n// `ErrorConstructor`[1], since `ParseError`'s are not themselves actually\n// separate classes from `SyntaxError`'s.\n//\n// 1. https://github.com/microsoft/TypeScript/blob/v4.5.5/lib/lib.es5.d.ts#L1027\nexport type ParseErrorConstructor<ErrorDetails> = (\n  loc: Position,\n  details: ErrorDetails,\n) => ParseError<ErrorDetails>;\n\ntype ToMessage<ErrorDetails> = (self: ErrorDetails) => string;\n\ntype ParseErrorCredentials<ErrorDetails> = {\n  code: string;\n  reasonCode: string;\n  syntaxPlugin?: SyntaxPlugin;\n  toMessage: ToMessage<ErrorDetails>;\n};\n\nfunction defineHidden(obj: object, key: string, value: unknown) {\n  Object.defineProperty(obj, key, {\n    enumerable: false,\n    configurable: true,\n    value,\n  });\n}\n\nfunction toParseErrorConstructor<ErrorDetails extends object>({\n  toMessage,\n  code,\n  reasonCode,\n  syntaxPlugin,\n}: ParseErrorCredentials<ErrorDetails>): ParseErrorConstructor<ErrorDetails> {\n  const hasMissingPlugin =\n    reasonCode === \"MissingPlugin\" || reasonCode === \"MissingOneOfPlugins\";\n\n  if (!process.env.BABEL_8_BREAKING) {\n    const oldReasonCodes: Record<string, string> = {\n      AccessorCannotDeclareThisParameter: \"AccesorCannotDeclareThisParameter\",\n      AccessorCannotHaveTypeParameters: \"AccesorCannotHaveTypeParameters\",\n      ConstInitializerMustBeStringOrNumericLiteralOrLiteralEnumReference:\n        \"ConstInitiailizerMustBeStringOrNumericLiteralOrLiteralEnumReference\",\n      SetAccessorCannotHaveOptionalParameter:\n        \"SetAccesorCannotHaveOptionalParameter\",\n      SetAccessorCannotHaveRestParameter: \"SetAccesorCannotHaveRestParameter\",\n      SetAccessorCannotHaveReturnType: \"SetAccesorCannotHaveReturnType\",\n    };\n    if (oldReasonCodes[reasonCode]) {\n      reasonCode = oldReasonCodes[reasonCode];\n    }\n  }\n\n  return function constructor(loc: Position, details: ErrorDetails) {\n    const error: ParseError<ErrorDetails> = new SyntaxError() as any;\n\n    error.code = code as ParseErrorCode;\n    error.reasonCode = reasonCode;\n    error.loc = loc;\n    error.pos = loc.index;\n\n    error.syntaxPlugin = syntaxPlugin;\n    if (hasMissingPlugin) {\n      error.missingPlugin = (details as any).missingPlugin;\n    }\n\n    type Overrides = {\n      loc?: Position;\n      details?: ErrorDetails;\n    };\n    defineHidden(error, \"clone\", function clone(overrides: Overrides = {}) {\n      const { line, column, index } = overrides.loc ?? loc;\n      return constructor(new Position(line, column, index), {\n        ...details,\n        ...overrides.details,\n      });\n    });\n\n    defineHidden(error, \"details\", details);\n\n    Object.defineProperty(error, \"message\", {\n      configurable: true,\n      get(this: ParseError<ErrorDetails>): string {\n        const message = `${toMessage(details)} (${loc.line}:${loc.column})`;\n        this.message = message;\n        return message;\n      },\n      set(value: string) {\n        Object.defineProperty(this, \"message\", { value, writable: true });\n      },\n    });\n\n    return error;\n  };\n}\n\ntype ParseErrorTemplate =\n  | string\n  | ToMessage<any>\n  | { message: string | ToMessage<any>; code?: ParseErrorCode };\n\nexport type ParseErrorTemplates = { [reasonCode: string]: ParseErrorTemplate };\n\n// This is the templated form of `ParseErrorEnum`.\n//\n// Note: We could factor out the return type calculation into something like\n// `ParseErrorConstructor<T extends ParseErrorTemplates>`, and then we could\n// reuse it in the non-templated form of `ParseErrorEnum`, but TypeScript\n// doesn't seem to drill down that far when showing you the computed type of\n// an object in an editor, so we'll leave it inlined for now.\nexport function ParseErrorEnum(a: TemplateStringsArray): <\n  T extends ParseErrorTemplates,\n>(\n  parseErrorTemplates: T,\n) => {\n  [K in keyof T]: ParseErrorConstructor<\n    T[K] extends { message: string | ToMessage<any> }\n      ? T[K][\"message\"] extends ToMessage<any>\n        ? Parameters<T[K][\"message\"]>[0]\n        : object\n      : T[K] extends ToMessage<any>\n        ? Parameters<T[K]>[0]\n        : object\n  >;\n};\n\nexport function ParseErrorEnum<T extends ParseErrorTemplates>(\n  parseErrorTemplates: T,\n  syntaxPlugin?: SyntaxPlugin,\n): {\n  [K in keyof T]: ParseErrorConstructor<\n    T[K] extends { message: string | ToMessage<any> }\n      ? T[K][\"message\"] extends ToMessage<any>\n        ? Parameters<T[K][\"message\"]>[0]\n        : object\n      : T[K] extends ToMessage<any>\n        ? Parameters<T[K]>[0]\n        : object\n  >;\n};\n\n// You call `ParseErrorEnum` with a mapping from `ReasonCode`'s to either:\n//\n// 1. a static error message,\n// 2. `toMessage` functions that define additional necessary `details` needed by\n//    the `ParseError`, or\n// 3. Objects that contain a `message` of one of the above and overridden `code`\n//    and/or `reasonCode`:\n//\n// ParseErrorEnum `optionalSyntaxPlugin` ({\n//   ErrorWithStaticMessage: \"message\",\n//   ErrorWithDynamicMessage: ({ type } : { type: string }) => `${type}`),\n//   ErrorWithOverriddenCodeAndOrReasonCode: {\n//     message: ({ type }: { type: string }) => `${type}`),\n//     code: \"AN_ERROR_CODE\",\n//     ...(BABEL_8_BREAKING ? { } : { reasonCode: \"CustomErrorReasonCode\" })\n//   }\n// });\n//\nexport function ParseErrorEnum(\n  argument: TemplateStringsArray | ParseErrorTemplates,\n  syntaxPlugin?: SyntaxPlugin,\n) {\n  // If the first parameter is an array, that means we were called with a tagged\n  // template literal. Extract the syntaxPlugin from this, and call again in\n  // the \"normalized\" form.\n  if (Array.isArray(argument)) {\n    return (parseErrorTemplates: ParseErrorTemplates) =>\n      ParseErrorEnum(parseErrorTemplates, argument[0]);\n  }\n\n  const ParseErrorConstructors = {} as Record<\n    string,\n    ParseErrorConstructor<unknown>\n  >;\n\n  for (const reasonCode of Object.keys(argument)) {\n    const template = (argument as ParseErrorTemplates)[reasonCode];\n    const { message, ...rest } =\n      typeof template === \"string\"\n        ? { message: () => template }\n        : typeof template === \"function\"\n          ? { message: template }\n          : template;\n    const toMessage = typeof message === \"string\" ? () => message : message;\n\n    ParseErrorConstructors[reasonCode] = toParseErrorConstructor({\n      code: \"BABEL_PARSER_SYNTAX_ERROR\",\n      reasonCode,\n      toMessage,\n      ...(syntaxPlugin ? { syntaxPlugin } : {}),\n      ...rest,\n    });\n  }\n\n  return ParseErrorConstructors;\n}\n\nimport ModuleErrors from \"./parse-error/module-errors.ts\";\nimport StandardErrors from \"./parse-error/standard-errors.ts\";\nimport StrictModeErrors from \"./parse-error/strict-mode-errors.ts\";\nimport ParseExpressionErrors from \"./parse-error/parse-expression-errors.ts\";\nimport PipelineOperatorErrors from \"./parse-error/pipeline-operator-errors.ts\";\n\nexport const Errors = {\n  ...ParseErrorEnum(ModuleErrors),\n  ...ParseErrorEnum(StandardErrors),\n  ...ParseErrorEnum(StrictModeErrors),\n  ...ParseErrorEnum(ParseExpressionErrors),\n  ...ParseErrorEnum`pipelineOperator`(PipelineOperatorErrors),\n};\n\nexport type { LValAncestor } from \"./parse-error/standard-errors.ts\";\n","import type { Plugin } from \"./plugin-utils.ts\";\n\n// A second optional argument can be given to further configure\n// the parser process. These options are recognized:\n\nexport type SourceType = \"script\" | \"commonjs\" | \"module\" | \"unambiguous\";\n\nexport interface Options {\n  /**\n   * By default, import and export declarations can only appear at a program's top level.\n   * Setting this option to true allows them anywhere where a statement is allowed.\n   */\n  allowImportExportEverywhere?: boolean;\n\n  /**\n   * By default, await use is not allowed outside of an async function.\n   * Set this to true to accept such code.\n   */\n  allowAwaitOutsideFunction?: boolean;\n\n  /**\n   * By default, a return statement at the top level raises an error.\n   * Set this to true to accept such code.\n   */\n  allowReturnOutsideFunction?: boolean;\n\n  /**\n   * By default, new.target use is not allowed outside of a function or class.\n   * Set this to true to accept such code.\n   */\n  allowNewTargetOutsideFunction?: boolean;\n\n  allowSuperOutsideMethod?: boolean;\n\n  /**\n   * By default, exported identifiers must refer to a declared variable.\n   * Set this to true to allow export statements to reference undeclared variables.\n   */\n  allowUndeclaredExports?: boolean;\n\n  /**\n   * By default, yield use is not allowed outside of a generator function.\n   * Set this to true to accept such code.\n   */\n\n  allowYieldOutsideFunction?: boolean;\n\n  /**\n   * By default, Babel parser JavaScript code according to Annex B syntax.\n   * Set this to `false` to disable such behavior.\n   */\n  annexB?: boolean;\n\n  /**\n   * By default, Babel attaches comments to adjacent AST nodes.\n   * When this option is set to false, comments are not attached.\n   * It can provide up to 30% performance improvement when the input code has many comments.\n   * @babel/eslint-parser will set it for you.\n   * It is not recommended to use attachComment: false with Babel transform,\n   * as doing so removes all the comments in output code, and renders annotations such as\n   * /* istanbul ignore next *\\/ nonfunctional.\n   */\n  attachComment?: boolean;\n\n  /**\n   * By default, Babel always throws an error when it finds some invalid code.\n   * When this option is set to true, it will store the parsing error and\n   * try to continue parsing the invalid input file.\n   */\n  errorRecovery?: boolean;\n\n  /**\n   * Indicate the mode the code should be parsed in.\n   * Can be one of \"script\", \"commonjs\", \"module\", or \"unambiguous\". Defaults to \"script\".\n   * \"unambiguous\" will make @babel/parser attempt to guess, based on the presence\n   * of ES6 import or export statements.\n   * Files with ES6 imports and exports are considered \"module\" and are otherwise \"script\".\n   *\n   * Use \"commonjs\" to parse code that is intended to be run in a CommonJS environment such as Node.js.\n   */\n  sourceType?: SourceType;\n\n  /**\n   * Correlate output AST nodes with their source filename.\n   * Useful when generating code and source maps from the ASTs of multiple input files.\n   */\n  sourceFilename?: string;\n\n  /**\n   * By default, all source indexes start from 0.\n   * You can provide a start index to alternatively start with.\n   * Useful for integration with other source tools.\n   */\n  startIndex?: number;\n\n  /**\n   * By default, the first line of code parsed is treated as line 1.\n   * You can provide a line number to alternatively start with.\n   * Useful for integration with other source tools.\n   */\n  startLine?: number;\n\n  /**\n   * By default, the parsed code is treated as if it starts from line 1, column 0.\n   * You can provide a column number to alternatively start with.\n   * Useful for integration with other source tools.\n   */\n  startColumn?: number;\n\n  /**\n   * Array containing the plugins that you want to enable.\n   */\n  plugins?: Plugin[];\n\n  /**\n   * Should the parser work in strict mode.\n   * Defaults to true if sourceType === 'module'. Otherwise, false.\n   */\n  strictMode?: boolean;\n\n  /**\n   * Adds a ranges property to each node: [node.start, node.end]\n   */\n  ranges?: boolean;\n\n  /**\n   * Adds all parsed tokens to a tokens property on the File node.\n   */\n  tokens?: boolean;\n\n  /**\n   * By default, the parser adds information about parentheses by setting\n   * `extra.parenthesized` to `true` as needed.\n   * When this option is `true` the parser creates `ParenthesizedExpression`\n   * AST nodes instead of using the `extra` property.\n   */\n  createParenthesizedExpressions?: boolean;\n\n  /**\n   * The default is false in Babel 7 and true in Babel 8\n   * Set this to true to parse it as an `ImportExpression` node.\n   * Otherwise `import(foo)` is parsed as `CallExpression(Import, [Identifier(foo)])`.\n   */\n  createImportExpressions?: boolean;\n}\n\nexport const enum OptionFlags {\n  AllowAwaitOutsideFunction = 1 << 0,\n  AllowReturnOutsideFunction = 1 << 1,\n  AllowNewTargetOutsideFunction = 1 << 2,\n  AllowImportExportEverywhere = 1 << 3,\n  AllowSuperOutsideMethod = 1 << 4,\n  AllowYieldOutsideFunction = 1 << 5,\n  AllowUndeclaredExports = 1 << 6,\n  Ranges = 1 << 7,\n  Tokens = 1 << 8,\n  CreateImportExpressions = 1 << 9,\n  CreateParenthesizedExpressions = 1 << 10,\n  ErrorRecovery = 1 << 11,\n  AttachComment = 1 << 12,\n  AnnexB = 1 << 13,\n}\n\ntype OptionsWithDefaults = Required<Options>;\n\nfunction createDefaultOptions(): OptionsWithDefaults {\n  return {\n    // Source type (\"script\" or \"module\") for different semantics\n    sourceType: \"script\",\n    // Source filename.\n    sourceFilename: undefined,\n    // Index (0-based) from which to start counting source. Useful for\n    // integration with other tools.\n    startIndex: 0,\n    // Column (0-based) from which to start counting source. Useful for\n    // integration with other tools.\n    startColumn: 0,\n    // Line (1-based) from which to start counting source. Useful for\n    // integration with other tools.\n    startLine: 1,\n    // When enabled, await at the top level is not considered an\n    // error.\n    allowAwaitOutsideFunction: false,\n    // When enabled, a return at the top level is not considered an\n    // error.\n    allowReturnOutsideFunction: false,\n    // When enabled, new.target outside a function or class is not\n    // considered an error.\n    allowNewTargetOutsideFunction: false,\n    // When enabled, import/export statements are not constrained to\n    // appearing at the top of the program.\n    allowImportExportEverywhere: false,\n    // TODO\n    allowSuperOutsideMethod: false,\n    // When enabled, export statements can reference undeclared variables.\n    allowUndeclaredExports: false,\n    allowYieldOutsideFunction: false,\n    // An array of plugins to enable\n    plugins: [],\n    // TODO\n    strictMode: null,\n    // Nodes have their start and end characters offsets recorded in\n    // `start` and `end` properties (directly on the node, rather than\n    // the `loc` object, which holds line/column data. To also add a\n    // [semi-standardized][range] `range` property holding a `[start,\n    // end]` array with the same numbers, set the `ranges` option to\n    // `true`.\n    //\n    // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n    ranges: false,\n    // Adds all parsed tokens to a `tokens` property on the `File` node\n    tokens: false,\n    // Whether to create ImportExpression AST nodes (if false\n    // `import(foo)` will be parsed as CallExpression(Import, [Identifier(foo)])\n    createImportExpressions: process.env.BABEL_8_BREAKING ? true : false,\n    // Whether to create ParenthesizedExpression AST nodes (if false\n    // the parser sets extra.parenthesized on the expression nodes instead).\n    createParenthesizedExpressions: false,\n    // When enabled, errors are attached to the AST instead of being directly thrown.\n    // Some errors will still throw, because @babel/parser can't always recover.\n    errorRecovery: false,\n    // When enabled, comments will be attached to adjacent AST nodes as one of\n    // `leadingComments`, `trailingComments` and `innerComments`. The comment attachment\n    // is vital to preserve comments after transform. If you don't print AST back,\n    // consider set this option to `false` for performance\n    attachComment: true,\n    // When enabled, the parser will support Annex B syntax.\n    // https://tc39.es/ecma262/#sec-additional-ecmascript-features-for-web-browsers\n    annexB: true,\n  };\n}\n\n// Interpret and default an options object\n\nexport function getOptions(opts?: Options | null): OptionsWithDefaults {\n  // https://github.com/babel/babel/pull/16918\n  // `options` is accessed frequently, please make sure it is a fast object.\n  // `%ToFastProperties` can make it a fast object, but the performance is the same as the slow object.\n  const options: any = createDefaultOptions();\n\n  if (opts == null) {\n    return options;\n  }\n  if (opts.annexB != null && opts.annexB !== false) {\n    throw new Error(\"The `annexB` option can only be set to `false`.\");\n  }\n\n  for (const key of Object.keys(options) as (keyof Options)[]) {\n    if (opts[key] != null) options[key] = opts[key];\n  }\n\n  if (options.startLine === 1) {\n    if (opts.startIndex == null && options.startColumn > 0) {\n      options.startIndex = options.startColumn;\n    } else if (opts.startColumn == null && options.startIndex > 0) {\n      options.startColumn = options.startIndex;\n    }\n  } else if (opts.startColumn == null || opts.startIndex == null) {\n    if (opts.startIndex != null || process.env.BABEL_8_BREAKING) {\n      throw new Error(\n        \"With a `startLine > 1` you must also specify `startIndex` and `startColumn`.\",\n      );\n    }\n  }\n\n  if (options.sourceType === \"commonjs\") {\n    if (opts.allowAwaitOutsideFunction != null) {\n      throw new Error(\n        \"The `allowAwaitOutsideFunction` option cannot be used with `sourceType: 'commonjs'`.\",\n      );\n    }\n    if (opts.allowReturnOutsideFunction != null) {\n      throw new Error(\n        \"`sourceType: 'commonjs'` implies `allowReturnOutsideFunction: true`, please remove the `allowReturnOutsideFunction` option or use `sourceType: 'script'`.\",\n      );\n    }\n    if (opts.allowNewTargetOutsideFunction != null) {\n      throw new Error(\n        \"`sourceType: 'commonjs'` implies `allowNewTargetOutsideFunction: true`, please remove the `allowNewTargetOutsideFunction` option or use `sourceType: 'script'`.\",\n      );\n    }\n  }\n\n  return options;\n}\n","import type { TokenType } from \"../tokenizer/types.ts\";\nimport type Parser from \"../parser/index.ts\";\nimport type * as N from \"../types.ts\";\nimport type { Node as NodeType, NodeBase, File } from \"../types.ts\";\nimport type { Position } from \"../util/location.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport type { Undone } from \"../parser/node.ts\";\nimport type { BindingFlag } from \"../util/scopeflags.ts\";\nimport { OptionFlags } from \"../options.ts\";\nimport type { ExpressionErrors } from \"../parser/util.ts\";\n\nconst { defineProperty } = Object;\nconst toUnenumerable = (object: any, key: string) => {\n  if (object) {\n    defineProperty(object, key, { enumerable: false, value: object[key] });\n  }\n};\n\nfunction toESTreeLocation(node: any) {\n  toUnenumerable(node.loc.start, \"index\");\n  toUnenumerable(node.loc.end, \"index\");\n\n  return node;\n}\n\nexport default (superClass: typeof Parser) =>\n  class ESTreeParserMixin extends superClass implements Parser {\n    parse(): File {\n      const file = toESTreeLocation(super.parse());\n\n      if (this.optionFlags & OptionFlags.Tokens) {\n        file.tokens = file.tokens.map(toESTreeLocation);\n      }\n\n      return file;\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseRegExpLiteral({ pattern, flags }): N.EstreeRegExpLiteral {\n      let regex: RegExp | null = null;\n      try {\n        regex = new RegExp(pattern, flags);\n      } catch (_) {\n        // In environments that don't support these flags value will\n        // be null as the regex can't be represented natively.\n      }\n      const node = this.estreeParseLiteral<N.EstreeRegExpLiteral>(regex);\n      node.regex = { pattern, flags };\n\n      return node;\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseBigIntLiteral(value: any): N.Node {\n      // https://github.com/estree/estree/blob/master/es2020.md#bigintliteral\n      let bigInt: bigint | null;\n      try {\n        bigInt = BigInt(value);\n      } catch {\n        bigInt = null;\n      }\n      const node = this.estreeParseLiteral<N.EstreeBigIntLiteral>(bigInt);\n      node.bigint = String(node.value || value);\n\n      return node;\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseDecimalLiteral(value: any): N.Node {\n      // https://github.com/estree/estree/blob/master/experimental/decimal.md\n      // todo: use BigDecimal when node supports it.\n      const decimal: null = null;\n      const node = this.estreeParseLiteral(decimal);\n      node.decimal = String(node.value || value);\n\n      return node;\n    }\n\n    estreeParseLiteral<T extends N.EstreeLiteral>(value: any) {\n      // @ts-expect-error ESTree plugin changes node types\n      return this.parseLiteral<T>(value, \"Literal\");\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseStringLiteral(value: any): N.Node {\n      return this.estreeParseLiteral(value);\n    }\n\n    parseNumericLiteral(value: any): any {\n      return this.estreeParseLiteral(value);\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseNullLiteral(): N.Node {\n      return this.estreeParseLiteral(null);\n    }\n\n    parseBooleanLiteral(value: boolean): N.BooleanLiteral {\n      // @ts-expect-error ESTree plugin changes node types\n      return this.estreeParseLiteral(value);\n    }\n\n    // https://github.com/estree/estree/blob/master/es2020.md#chainexpression\n    estreeParseChainExpression(\n      node: N.Expression,\n      endLoc: Position,\n    ): N.EstreeChainExpression {\n      const chain = this.startNodeAtNode<N.EstreeChainExpression>(node);\n      chain.expression = node;\n      return this.finishNodeAt(chain, \"ChainExpression\", endLoc);\n    }\n\n    // Cast a Directive to an ExpressionStatement. Mutates the input Directive.\n    directiveToStmt(directive: N.Directive): N.ExpressionStatement {\n      const expression = directive.value as any as N.EstreeLiteral;\n      delete directive.value;\n\n      this.castNodeTo(expression, \"Literal\");\n      expression.raw = expression.extra.raw;\n      expression.value = expression.extra.expressionValue;\n\n      const stmt = this.castNodeTo(directive, \"ExpressionStatement\");\n      stmt.expression = expression;\n      stmt.directive = expression.extra.rawValue;\n\n      delete expression.extra;\n\n      return stmt;\n    }\n\n    /**\n     * The TS-ESLint always define optional AST properties, here we provide the\n     * default value for such properties immediately after `finishNode` was invoked.\n     * This hook will be implemented by the typescript plugin.\n     *\n     * Note: This hook should be manually invoked when we change the `type` of a given AST\n     * node, to ensure that the optional properties are correctly filled.\n     * @param node The AST node finished by finishNode\n     */\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    fillOptionalPropertiesForTSESLint(node: NodeType) {}\n\n    cloneEstreeStringLiteral(node: N.EstreeLiteral): N.EstreeLiteral {\n      const { start, end, loc, range, raw, value } = node;\n      const cloned = Object.create(node.constructor.prototype);\n      cloned.type = \"Literal\";\n      cloned.start = start;\n      cloned.end = end;\n      cloned.loc = loc;\n      cloned.range = range;\n      cloned.raw = raw;\n      cloned.value = value;\n      return cloned;\n    }\n\n    // ==================================\n    // Overrides\n    // ==================================\n\n    initFunction(node: N.BodilessFunctionOrMethodBase, isAsync: boolean): void {\n      super.initFunction(node, isAsync);\n      node.expression = false;\n    }\n\n    checkDeclaration(node: N.Pattern | N.ObjectProperty): void {\n      if (node != null && this.isObjectProperty(node)) {\n        // @ts-expect-error plugin typings\n        this.checkDeclaration((node as unknown as N.EstreeProperty).value);\n      } else {\n        super.checkDeclaration(node);\n      }\n    }\n\n    getObjectOrClassMethodParams(method: N.ObjectMethod | N.ClassMethod) {\n      return (method as unknown as N.EstreeMethodDefinition).value.params;\n    }\n\n    isValidDirective(stmt: N.Statement): stmt is N.ExpressionStatement {\n      return (\n        stmt.type === \"ExpressionStatement\" &&\n        stmt.expression.type === \"Literal\" &&\n        typeof stmt.expression.value === \"string\" &&\n        !stmt.expression.extra?.parenthesized\n      );\n    }\n\n    parseBlockBody(\n      node: N.BlockStatementLike,\n      allowDirectives: boolean | undefined | null,\n      topLevel: boolean,\n      end: TokenType,\n      afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n    ): void {\n      super.parseBlockBody(\n        node,\n        allowDirectives,\n        topLevel,\n        end,\n        afterBlockParse,\n      );\n\n      const directiveStatements = node.directives.map(d =>\n        this.directiveToStmt(d),\n      );\n      // @ts-expect-error estree plugin typings\n      node.body = directiveStatements.concat(node.body);\n      delete node.directives;\n    }\n\n    parsePrivateName(): any {\n      const node = super.parsePrivateName();\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return node;\n        }\n      }\n      return this.convertPrivateNameToPrivateIdentifier(node);\n    }\n\n    convertPrivateNameToPrivateIdentifier(\n      node: N.PrivateName,\n    ): N.EstreePrivateIdentifier {\n      const name = super.getPrivateNameSV(node);\n      node = node as any;\n      delete node.id;\n      // @ts-expect-error mutate AST types\n      node.name = name;\n      return this.castNodeTo(node, \"PrivateIdentifier\");\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    isPrivateName(node: N.Node): node is N.EstreePrivateIdentifier {\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return super.isPrivateName(node);\n        }\n      }\n      return node.type === \"PrivateIdentifier\";\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    getPrivateNameSV(node: N.EstreePrivateIdentifier): string {\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return super.getPrivateNameSV(node as unknown as N.PrivateName);\n        }\n      }\n      return node.name;\n    }\n\n    // @ts-expect-error plugin may override interfaces\n    parseLiteral<T extends N.Literal>(value: any, type: T[\"type\"]): T {\n      const node = super.parseLiteral<T>(value, type);\n      // @ts-expect-error mutating AST types\n      node.raw = node.extra.raw;\n      delete node.extra;\n\n      return node;\n    }\n\n    parseFunctionBody(\n      node: N.Function,\n      allowExpression?: boolean | null,\n      isMethod: boolean = false,\n    ): void {\n      super.parseFunctionBody(node, allowExpression, isMethod);\n      node.expression = node.body.type !== \"BlockStatement\";\n    }\n\n    // @ts-expect-error plugin may override interfaces\n    parseMethod<\n      T extends N.ClassPrivateMethod | N.ObjectMethod | N.ClassMethod,\n    >(\n      node: Undone<T>,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowDirectSuper: boolean,\n      type: T[\"type\"],\n      inClassScope: boolean = false,\n    ):\n      | N.EstreeProperty\n      | N.EstreeMethodDefinition\n      | N.EstreeTSAbstractMethodDefinition {\n      let funcNode = this.startNode<N.MethodLike>();\n      funcNode.kind = node.kind; // provide kind, so super method correctly sets state\n      funcNode = super.parseMethod(\n        funcNode,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowDirectSuper,\n        type,\n        inClassScope,\n      );\n      delete funcNode.kind;\n      const { typeParameters } = node;\n      if (typeParameters) {\n        delete node.typeParameters;\n        funcNode.typeParameters = typeParameters;\n        this.resetStartLocationFromNode(funcNode, typeParameters);\n      }\n      const valueNode = this.castNodeTo(\n        funcNode as N.MethodLike,\n        process.env.BABEL_8_BREAKING &&\n          this.hasPlugin(\"typescript\") &&\n          !funcNode.body\n          ? \"TSEmptyBodyFunctionExpression\"\n          : \"FunctionExpression\",\n      );\n      (\n        node as unknown as Undone<\n          | N.EstreeProperty\n          | N.EstreeMethodDefinition\n          | N.EstreeTSAbstractMethodDefinition\n        >\n      ).value = valueNode;\n      if (type === \"ClassPrivateMethod\") {\n        node.computed = false;\n      }\n      if (process.env.BABEL_8_BREAKING && this.hasPlugin(\"typescript\")) {\n        // @ts-expect-error todo(flow->ts) property not defined for all types in union\n        if (node.abstract) {\n          // @ts-expect-error remove abstract from TSAbstractMethodDefinition\n          delete node.abstract;\n          return this.finishNode(\n            // @ts-expect-error cast methods to estree types\n            node as Undone<N.EstreeTSAbstractMethodDefinition>,\n            \"TSAbstractMethodDefinition\",\n          );\n        }\n      }\n      if (type === \"ObjectMethod\") {\n        if ((node as any as N.ObjectMethod).kind === \"method\") {\n          (node as any as N.EstreeProperty).kind = \"init\";\n        }\n        (node as any as N.EstreeProperty).shorthand = false;\n        return this.finishNode(\n          // @ts-expect-error cast methods to estree types\n          node as Undone<N.EstreeProperty>,\n          \"Property\",\n        );\n      } else {\n        return this.finishNode(\n          // @ts-expect-error cast methods to estree types\n          node as Undone<N.EstreeMethodDefinition>,\n          \"MethodDefinition\",\n        );\n      }\n    }\n\n    nameIsConstructor(key: N.Expression | N.PrivateName): boolean {\n      if (key.type === \"Literal\") return key.value === \"constructor\";\n      return super.nameIsConstructor(key);\n    }\n\n    parseClassProperty(...args: [N.ClassProperty]): any {\n      const propertyNode = super.parseClassProperty(...args);\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return propertyNode as unknown as N.EstreePropertyDefinition;\n        }\n      }\n      if (\n        process.env.BABEL_8_BREAKING &&\n        propertyNode.abstract &&\n        this.hasPlugin(\"typescript\")\n      ) {\n        delete propertyNode.abstract;\n        this.castNodeTo(propertyNode, \"TSAbstractPropertyDefinition\");\n      } else {\n        this.castNodeTo(propertyNode, \"PropertyDefinition\");\n      }\n      return propertyNode;\n    }\n\n    parseClassPrivateProperty(...args: [N.ClassPrivateProperty]): any {\n      const propertyNode = super.parseClassPrivateProperty(...args);\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return propertyNode as unknown as N.EstreePropertyDefinition;\n        }\n      }\n      if (\n        process.env.BABEL_8_BREAKING &&\n        propertyNode.abstract &&\n        this.hasPlugin(\"typescript\")\n      ) {\n        this.castNodeTo(propertyNode, \"TSAbstractPropertyDefinition\");\n      } else {\n        this.castNodeTo(propertyNode, \"PropertyDefinition\");\n      }\n      propertyNode.computed = false;\n      return propertyNode;\n    }\n\n    parseClassAccessorProperty(\n      this: Parser,\n      node: N.ClassAccessorProperty,\n    ): any {\n      const accessorPropertyNode = super.parseClassAccessorProperty(node);\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return accessorPropertyNode;\n        }\n      }\n      if (accessorPropertyNode.abstract && this.hasPlugin(\"typescript\")) {\n        delete accessorPropertyNode.abstract;\n        this.castNodeTo(accessorPropertyNode, \"TSAbstractAccessorProperty\");\n      } else {\n        this.castNodeTo(accessorPropertyNode, \"AccessorProperty\");\n      }\n      return accessorPropertyNode;\n    }\n\n    parseObjectProperty(\n      prop: N.ObjectProperty,\n      startLoc: Position | undefined | null,\n      isPattern: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.ObjectProperty | undefined | null {\n      const node: N.EstreeProperty = super.parseObjectProperty(\n        prop,\n        startLoc,\n        isPattern,\n        refExpressionErrors,\n      ) as any;\n\n      if (node) {\n        node.kind = \"init\";\n        this.castNodeTo(node, \"Property\");\n      }\n\n      return node as any;\n    }\n\n    finishObjectProperty(node: Undone<N.ObjectProperty>): N.ObjectProperty {\n      (node as unknown as Undone<N.EstreeProperty>).kind = \"init\";\n      return this.finishNode(\n        node as unknown as Undone<N.EstreeProperty>,\n        \"Property\",\n      ) as any;\n    }\n\n    isValidLVal(\n      type: string,\n      isUnparenthesizedInAssign: boolean,\n      binding: BindingFlag,\n    ) {\n      return type === \"Property\"\n        ? \"value\"\n        : super.isValidLVal(type, isUnparenthesizedInAssign, binding);\n    }\n\n    isAssignable(node: N.Node, isBinding?: boolean): boolean {\n      if (node != null && this.isObjectProperty(node)) {\n        return this.isAssignable(node.value, isBinding);\n      }\n      return super.isAssignable(node, isBinding);\n    }\n\n    toAssignable(node: N.Node, isLHS: boolean = false): void {\n      if (node != null && this.isObjectProperty(node)) {\n        const { key, value } = node;\n        if (this.isPrivateName(key)) {\n          this.classScope.usePrivateName(\n            this.getPrivateNameSV(key),\n            key.loc.start,\n          );\n        }\n        this.toAssignable(value, isLHS);\n      } else {\n        super.toAssignable(node, isLHS);\n      }\n    }\n\n    toAssignableObjectExpressionProp(\n      prop: N.Node,\n      isLast: boolean,\n      isLHS: boolean,\n    ) {\n      if (\n        prop.type === \"Property\" &&\n        (prop.kind === \"get\" || prop.kind === \"set\")\n      ) {\n        this.raise(Errors.PatternHasAccessor, prop.key);\n      } else if (prop.type === \"Property\" && prop.method) {\n        this.raise(Errors.PatternHasMethod, prop.key);\n      } else {\n        super.toAssignableObjectExpressionProp(prop, isLast, isLHS);\n      }\n    }\n\n    finishCallExpression<T extends N.CallExpression | N.OptionalCallExpression>(\n      unfinished: Undone<T>,\n      optional: boolean,\n    ): T {\n      const node = super.finishCallExpression(unfinished, optional);\n\n      if (node.callee.type === \"Import\") {\n        this.castNodeTo(node, \"ImportExpression\");\n        (node as N.Node as N.EstreeImportExpression).source = node\n          .arguments[0] as N.Expression;\n        (node as N.Node as N.EstreeImportExpression).options =\n          (node.arguments[1] as N.Expression) ?? null;\n        if (!process.env.BABEL_8_BREAKING) {\n          // compatibility with previous ESTree AST\n          (node as N.Node as N.EstreeImportExpression).attributes =\n            (node.arguments[1] as N.Expression) ?? null;\n        }\n        // arguments isn't optional in the type definition\n        delete node.arguments;\n        // callee isn't optional in the type definition\n        delete node.callee;\n      } else if (node.type === \"OptionalCallExpression\") {\n        this.castNodeTo(node, \"CallExpression\");\n      } else {\n        node.optional = false;\n      }\n\n      return node;\n    }\n\n    toReferencedArguments(\n      node:\n        | N.CallExpression\n        | N.OptionalCallExpression\n        | N.EstreeImportExpression,\n      /* isParenthesizedExpr?: boolean, */\n    ) {\n      // ImportExpressions do not have an arguments array.\n      if (node.type === \"ImportExpression\") {\n        return;\n      }\n\n      super.toReferencedArguments(node);\n    }\n\n    parseExport(\n      unfinished: Undone<N.AnyExport>,\n      decorators: N.Decorator[] | null,\n    ) {\n      const exportStartLoc = this.state.lastTokStartLoc;\n      const node = super.parseExport(unfinished, decorators);\n\n      switch (node.type) {\n        case \"ExportAllDeclaration\":\n          // @ts-expect-error mutating AST types\n          node.exported = null;\n          break;\n\n        case \"ExportNamedDeclaration\":\n          if (\n            node.specifiers.length === 1 &&\n            node.specifiers[0].type === \"ExportNamespaceSpecifier\"\n          ) {\n            this.castNodeTo(node, \"ExportAllDeclaration\");\n            // @ts-expect-error mutating AST types\n            node.exported = node.specifiers[0].exported;\n            delete node.specifiers;\n          }\n\n        // fallthrough\n        case \"ExportDefaultDeclaration\":\n          {\n            const { declaration } = node;\n            if (\n              declaration?.type === \"ClassDeclaration\" &&\n              declaration.decorators?.length > 0 &&\n              // decorator comes before export\n              declaration.start === node.start\n            ) {\n              this.resetStartLocation(\n                node,\n                // For compatibility with ESLint's keyword-spacing rule, which assumes that an\n                // export declaration must start with export.\n                // https://github.com/babel/babel/issues/15085\n                // Here we reset export declaration's start to be the start of the export token\n                exportStartLoc,\n              );\n            }\n          }\n\n          break;\n      }\n\n      return node;\n    }\n\n    stopParseSubscript(base: N.Expression, state: N.ParseSubscriptState) {\n      const node = super.stopParseSubscript(base, state);\n      if (state.optionalChainMember) {\n        return this.estreeParseChainExpression(node, base.loc.end);\n      }\n      return node;\n    }\n\n    parseMember(\n      base: N.Expression,\n      startLoc: Position,\n      state: N.ParseSubscriptState,\n      computed: boolean,\n      optional: boolean,\n    ) {\n      const node = super.parseMember(base, startLoc, state, computed, optional);\n      if (node.type === \"OptionalMemberExpression\") {\n        this.castNodeTo(node, \"MemberExpression\");\n      } else {\n        node.optional = false;\n      }\n      return node;\n    }\n\n    isOptionalMemberExpression(node: N.Node) {\n      if (node.type === \"ChainExpression\") {\n        return node.expression.type === \"MemberExpression\";\n      }\n      return super.isOptionalMemberExpression(node);\n    }\n\n    hasPropertyAsPrivateName(node: N.Node): boolean {\n      if (node.type === \"ChainExpression\") {\n        node = node.expression;\n      }\n      return super.hasPropertyAsPrivateName(node);\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    isObjectProperty(node: N.Node): node is N.EstreeProperty {\n      return node.type === \"Property\" && node.kind === \"init\" && !node.method;\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    isObjectMethod(node: N.Node): node is N.EstreeProperty {\n      return (\n        node.type === \"Property\" &&\n        (node.method || node.kind === \"get\" || node.kind === \"set\")\n      );\n    }\n\n    /* ============================================================ *\n     * parser/node.ts                                               *\n     * ============================================================ */\n\n    castNodeTo<T extends N.Node[\"type\"]>(\n      node: N.Node,\n      type: T,\n    ): Extract<N.Node, { type: T }> {\n      const result = super.castNodeTo(node, type);\n      this.fillOptionalPropertiesForTSESLint(result);\n      return result;\n    }\n\n    cloneIdentifier<T extends N.Identifier | N.Placeholder>(node: T): T {\n      const cloned = super.cloneIdentifier(node);\n      this.fillOptionalPropertiesForTSESLint(cloned);\n      return cloned;\n    }\n\n    cloneStringLiteral<\n      T extends N.EstreeLiteral | N.StringLiteral | N.Placeholder,\n    >(node: T): T {\n      if (node.type === \"Literal\") {\n        return this.cloneEstreeStringLiteral(node) as T;\n      }\n      return super.cloneStringLiteral(node);\n    }\n\n    finishNodeAt<T extends NodeType>(\n      node: Undone<T>,\n      type: T[\"type\"],\n      endLoc: Position,\n    ): T {\n      return toESTreeLocation(super.finishNodeAt(node, type, endLoc));\n    }\n\n    // Override for TS-ESLint that does not allow optional AST properties\n    finishNode<T extends NodeType>(node: Undone<T>, type: T[\"type\"]): T {\n      const result = super.finishNode(node, type);\n      this.fillOptionalPropertiesForTSESLint(result);\n      return result;\n    }\n\n    resetStartLocation(node: N.Node, startLoc: Position) {\n      super.resetStartLocation(node, startLoc);\n      toESTreeLocation(node);\n    }\n\n    resetEndLocation(\n      node: NodeBase,\n      endLoc: Position = this.state.lastTokEndLoc,\n    ): void {\n      super.resetEndLocation(node, endLoc);\n      toESTreeLocation(node);\n    }\n  };\n","// The token context is used in JSX plugin to track\n// jsx tag / jsx text / normal JavaScript expression\n\nexport class TokContext {\n  constructor(token: string, preserveSpace?: boolean) {\n    this.token = token;\n    this.preserveSpace = !!preserveSpace;\n  }\n\n  token: string;\n  preserveSpace: boolean;\n}\n\nconst types: {\n  [key: string]: TokContext;\n} = {\n  brace: new TokContext(\"{\"), // normal JavaScript expression\n  j_oTag: new TokContext(\"<tag\"), // JSX opening tag\n  j_cTag: new TokContext(\"</tag\"), // JSX closing tag\n  j_expr: new TokContext(\"<tag>...</tag>\", true), // JSX expressions\n};\n\nif (!process.env.BABEL_8_BREAKING) {\n  types.template = new TokContext(\"`\", true);\n}\n\nexport { types };\n","import { types as tc, type TokContext } from \"./context.ts\";\n// ## Token types\n\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n\n// The `beforeExpr` property is used to disambiguate between 1) binary\n// expression (<) and JSX Tag start (<name>); 2) object literal and JSX\n// texts. It is set on the `updateContext` function in the JSX plugin.\n\n// The `startsExpr` property is used to determine whether an expression\n// may be the “argument” subexpression of a `yield` expression or\n// `yield` statement. It is set on all token types that may be at the\n// start of a subexpression.\n\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\n\nconst beforeExpr = true;\nconst startsExpr = true;\nconst isLoop = true;\nconst isAssign = true;\nconst prefix = true;\nconst postfix = true;\n\ntype TokenOptions = {\n  keyword?: string;\n  beforeExpr?: boolean;\n  startsExpr?: boolean;\n  rightAssociative?: boolean;\n  isLoop?: boolean;\n  isAssign?: boolean;\n  prefix?: boolean;\n  postfix?: boolean;\n  binop?: number | null;\n};\n\n// Internally the tokenizer stores token as a number\nexport type TokenType = number;\n\n// The `ExportedTokenType` is exported via `tokTypes` and accessible\n// when `tokens: true` is enabled. Unlike internal token type, it provides\n// metadata of the tokens.\nexport class ExportedTokenType {\n  label: string;\n  keyword: string | undefined | null;\n  beforeExpr: boolean;\n  startsExpr: boolean;\n  rightAssociative: boolean;\n  isLoop: boolean;\n  isAssign: boolean;\n  prefix: boolean;\n  postfix: boolean;\n  binop: number | undefined | null;\n  // todo(Babel 8): remove updateContext from exposed token layout\n  declare updateContext:\n    | ((context: Array<TokContext>) => void)\n    | undefined\n    | null;\n\n  constructor(label: string, conf: TokenOptions = {}) {\n    this.label = label;\n    this.keyword = conf.keyword;\n    this.beforeExpr = !!conf.beforeExpr;\n    this.startsExpr = !!conf.startsExpr;\n    this.rightAssociative = !!conf.rightAssociative;\n    this.isLoop = !!conf.isLoop;\n    this.isAssign = !!conf.isAssign;\n    this.prefix = !!conf.prefix;\n    this.postfix = !!conf.postfix;\n    this.binop = conf.binop != null ? conf.binop : null;\n    if (!process.env.BABEL_8_BREAKING) {\n      this.updateContext = null;\n    }\n  }\n}\n\n// A map from keyword/keyword-like string value to the token type\nexport const keywords = new Map<string, TokenType>();\n\nfunction createKeyword(name: string, options: TokenOptions = {}): TokenType {\n  options.keyword = name;\n  const token = createToken(name, options);\n  keywords.set(name, token);\n  return token;\n}\n\nfunction createBinop(name: string, binop: number) {\n  return createToken(name, { beforeExpr, binop });\n}\n\nlet tokenTypeCounter = -1;\nexport const tokenTypes: ExportedTokenType[] = [];\nconst tokenLabels: string[] = [];\nconst tokenBinops: number[] = [];\nconst tokenBeforeExprs: boolean[] = [];\nconst tokenStartsExprs: boolean[] = [];\nconst tokenPrefixes: boolean[] = [];\n\nfunction createToken(name: string, options: TokenOptions = {}): TokenType {\n  ++tokenTypeCounter;\n  tokenLabels.push(name);\n  tokenBinops.push(options.binop ?? -1);\n  tokenBeforeExprs.push(options.beforeExpr ?? false);\n  tokenStartsExprs.push(options.startsExpr ?? false);\n  tokenPrefixes.push(options.prefix ?? false);\n  tokenTypes.push(new ExportedTokenType(name, options));\n\n  return tokenTypeCounter;\n}\n\nfunction createKeywordLike(\n  name: string,\n  options: TokenOptions = {},\n): TokenType {\n  ++tokenTypeCounter;\n  keywords.set(name, tokenTypeCounter);\n  tokenLabels.push(name);\n  tokenBinops.push(options.binop ?? -1);\n  tokenBeforeExprs.push(options.beforeExpr ?? false);\n  tokenStartsExprs.push(options.startsExpr ?? false);\n  tokenPrefixes.push(options.prefix ?? false);\n  // In the exported token type, we set the label as \"name\" for backward compatibility with Babel 7\n  tokenTypes.push(new ExportedTokenType(\"name\", options));\n\n  return tokenTypeCounter;\n}\n\n// For performance the token type helpers depend on the following declarations order.\n// When adding new token types, please also check if the token helpers need update.\n\nexport type InternalTokenTypes = typeof tt;\n\nexport const tt = {\n  // Punctuation token types.\n  bracketL: createToken(\"[\", { beforeExpr, startsExpr }),\n  // TODO: Remove this in Babel 8\n  bracketHashL: createToken(\"#[\", { beforeExpr, startsExpr }),\n  // TODO: Remove this in Babel 8\n  bracketBarL: createToken(\"[|\", { beforeExpr, startsExpr }),\n  bracketR: createToken(\"]\"),\n  // TODO: Remove this in Babel 8\n  bracketBarR: createToken(\"|]\"),\n  braceL: createToken(\"{\", { beforeExpr, startsExpr }),\n  // TODO: Remove this in Babel 8\n  braceBarL: createToken(\"{|\", { beforeExpr, startsExpr }),\n  // TODO: Remove this in Babel 8\n  braceHashL: createToken(\"#{\", { beforeExpr, startsExpr }),\n  braceR: createToken(\"}\"),\n  braceBarR: createToken(\"|}\"),\n  parenL: createToken(\"(\", { beforeExpr, startsExpr }),\n  parenR: createToken(\")\"),\n  comma: createToken(\",\", { beforeExpr }),\n  semi: createToken(\";\", { beforeExpr }),\n  colon: createToken(\":\", { beforeExpr }),\n  doubleColon: createToken(\"::\", { beforeExpr }),\n  dot: createToken(\".\"),\n  question: createToken(\"?\", { beforeExpr }),\n  questionDot: createToken(\"?.\"),\n  arrow: createToken(\"=>\", { beforeExpr }),\n  template: createToken(\"template\"),\n  ellipsis: createToken(\"...\", { beforeExpr }),\n  backQuote: createToken(\"`\", { startsExpr }),\n  dollarBraceL: createToken(\"${\", { beforeExpr, startsExpr }),\n  // start: isTemplate\n  templateTail: createToken(\"...`\", { startsExpr }),\n  templateNonTail: createToken(\"...${\", { beforeExpr, startsExpr }),\n  // end: isTemplate\n  at: createToken(\"@\"),\n  hash: createToken(\"#\", { startsExpr }),\n\n  // Special hashbang token.\n  interpreterDirective: createToken(\"#!...\"),\n\n  // Operators. These carry several kinds of properties to help the\n  // parser use them properly (the presence of these properties is\n  // what categorizes them as operators).\n  //\n  // `binop`, when present, specifies that this operator is a binary\n  // operator, and will refer to its precedence.\n  //\n  // `prefix` and `postfix` mark the operator as a prefix or postfix\n  // unary operator.\n  //\n  // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n  // binary operators with a very low precedence, that should result\n  // in AssignmentExpression nodes.\n\n  // start: isAssign\n  eq: createToken(\"=\", { beforeExpr, isAssign }),\n  assign: createToken(\"_=\", { beforeExpr, isAssign }),\n  slashAssign: createToken(\"_=\", { beforeExpr, isAssign }),\n  // These are only needed to support % and ^ as a Hack-pipe topic token.\n  // When the proposal settles on a token, the others can be merged with\n  // tt.assign.\n  xorAssign: createToken(\"_=\", { beforeExpr, isAssign }),\n  moduloAssign: createToken(\"_=\", { beforeExpr, isAssign }),\n  // end: isAssign\n\n  incDec: createToken(\"++/--\", { prefix, postfix, startsExpr }),\n  bang: createToken(\"!\", { beforeExpr, prefix, startsExpr }),\n  tilde: createToken(\"~\", { beforeExpr, prefix, startsExpr }),\n\n  // More possible topic tokens.\n  // When the proposal settles on a token, at least one of these may be removed.\n  doubleCaret: createToken(\"^^\", { startsExpr }),\n  doubleAt: createToken(\"@@\", { startsExpr }),\n\n  // start: isBinop\n  pipeline: createBinop(\"|>\", 0),\n  nullishCoalescing: createBinop(\"??\", 1),\n  logicalOR: createBinop(\"||\", 1),\n  logicalAND: createBinop(\"&&\", 2),\n  bitwiseOR: createBinop(\"|\", 3),\n  bitwiseXOR: createBinop(\"^\", 4),\n  bitwiseAND: createBinop(\"&\", 5),\n  equality: createBinop(\"==/!=/===/!==\", 6),\n  lt: createBinop(\"</>/<=/>=\", 7),\n  gt: createBinop(\"</>/<=/>=\", 7),\n  relational: createBinop(\"</>/<=/>=\", 7),\n  bitShift: createBinop(\"<</>>/>>>\", 8),\n  bitShiftL: createBinop(\"<</>>/>>>\", 8),\n  bitShiftR: createBinop(\"<</>>/>>>\", 8),\n  plusMin: createToken(\"+/-\", { beforeExpr, binop: 9, prefix, startsExpr }),\n  // startsExpr: required by v8intrinsic plugin\n  modulo: createToken(\"%\", { binop: 10, startsExpr }),\n  // unset `beforeExpr` as it can be `function *`\n  star: createToken(\"*\", { binop: 10 }),\n  slash: createBinop(\"/\", 10),\n  exponent: createToken(\"**\", {\n    beforeExpr,\n    binop: 11,\n    rightAssociative: true,\n  }),\n\n  // Keywords\n  // Don't forget to update packages/babel-helper-validator-identifier/src/keyword.js\n  // when new keywords are added\n  // start: isLiteralPropertyName\n  // start: isKeyword\n  _in: createKeyword(\"in\", { beforeExpr, binop: 7 }),\n  _instanceof: createKeyword(\"instanceof\", { beforeExpr, binop: 7 }),\n  // end: isBinop\n  _break: createKeyword(\"break\"),\n  _case: createKeyword(\"case\", { beforeExpr }),\n  _catch: createKeyword(\"catch\"),\n  _continue: createKeyword(\"continue\"),\n  _debugger: createKeyword(\"debugger\"),\n  _default: createKeyword(\"default\", { beforeExpr }),\n  _else: createKeyword(\"else\", { beforeExpr }),\n  _finally: createKeyword(\"finally\"),\n  _function: createKeyword(\"function\", { startsExpr }),\n  _if: createKeyword(\"if\"),\n  _return: createKeyword(\"return\", { beforeExpr }),\n  _switch: createKeyword(\"switch\"),\n  _throw: createKeyword(\"throw\", { beforeExpr, prefix, startsExpr }),\n  _try: createKeyword(\"try\"),\n  _var: createKeyword(\"var\"),\n  _const: createKeyword(\"const\"),\n  _with: createKeyword(\"with\"),\n  _new: createKeyword(\"new\", { beforeExpr, startsExpr }),\n  _this: createKeyword(\"this\", { startsExpr }),\n  _super: createKeyword(\"super\", { startsExpr }),\n  _class: createKeyword(\"class\", { startsExpr }),\n  _extends: createKeyword(\"extends\", { beforeExpr }),\n  _export: createKeyword(\"export\"),\n  _import: createKeyword(\"import\", { startsExpr }),\n  _null: createKeyword(\"null\", { startsExpr }),\n  _true: createKeyword(\"true\", { startsExpr }),\n  _false: createKeyword(\"false\", { startsExpr }),\n  _typeof: createKeyword(\"typeof\", { beforeExpr, prefix, startsExpr }),\n  _void: createKeyword(\"void\", { beforeExpr, prefix, startsExpr }),\n  _delete: createKeyword(\"delete\", { beforeExpr, prefix, startsExpr }),\n  // start: isLoop\n  _do: createKeyword(\"do\", { isLoop, beforeExpr }),\n  _for: createKeyword(\"for\", { isLoop }),\n  _while: createKeyword(\"while\", { isLoop }),\n  // end: isLoop\n  // end: isKeyword\n\n  // Primary literals\n  // start: isIdentifier\n  _as: createKeywordLike(\"as\", { startsExpr }),\n  _assert: createKeywordLike(\"assert\", { startsExpr }),\n  _async: createKeywordLike(\"async\", { startsExpr }),\n  _await: createKeywordLike(\"await\", { startsExpr }),\n  _defer: createKeywordLike(\"defer\", { startsExpr }),\n  _from: createKeywordLike(\"from\", { startsExpr }),\n  _get: createKeywordLike(\"get\", { startsExpr }),\n  _let: createKeywordLike(\"let\", { startsExpr }),\n  _meta: createKeywordLike(\"meta\", { startsExpr }),\n  _of: createKeywordLike(\"of\", { startsExpr }),\n  _sent: createKeywordLike(\"sent\", { startsExpr }),\n  _set: createKeywordLike(\"set\", { startsExpr }),\n  _source: createKeywordLike(\"source\", { startsExpr }),\n  _static: createKeywordLike(\"static\", { startsExpr }),\n  _using: createKeywordLike(\"using\", { startsExpr }),\n  _yield: createKeywordLike(\"yield\", { startsExpr }),\n\n  // Flow and TypeScript Keywordlike\n  _asserts: createKeywordLike(\"asserts\", { startsExpr }),\n  _checks: createKeywordLike(\"checks\", { startsExpr }),\n  _exports: createKeywordLike(\"exports\", { startsExpr }),\n  _global: createKeywordLike(\"global\", { startsExpr }),\n  _implements: createKeywordLike(\"implements\", { startsExpr }),\n  _intrinsic: createKeywordLike(\"intrinsic\", { startsExpr }),\n  _infer: createKeywordLike(\"infer\", { startsExpr }),\n  _is: createKeywordLike(\"is\", { startsExpr }),\n  _mixins: createKeywordLike(\"mixins\", { startsExpr }),\n  _proto: createKeywordLike(\"proto\", { startsExpr }),\n  _require: createKeywordLike(\"require\", { startsExpr }),\n  _satisfies: createKeywordLike(\"satisfies\", { startsExpr }),\n  // start: isTSTypeOperator\n  _keyof: createKeywordLike(\"keyof\", { startsExpr }),\n  _readonly: createKeywordLike(\"readonly\", { startsExpr }),\n  _unique: createKeywordLike(\"unique\", { startsExpr }),\n  // end: isTSTypeOperator\n  // start: isTSDeclarationStart\n  _abstract: createKeywordLike(\"abstract\", { startsExpr }),\n  _declare: createKeywordLike(\"declare\", { startsExpr }),\n  _enum: createKeywordLike(\"enum\", { startsExpr }),\n  _module: createKeywordLike(\"module\", { startsExpr }),\n  _namespace: createKeywordLike(\"namespace\", { startsExpr }),\n  // start: isFlowInterfaceOrTypeOrOpaque\n  _interface: createKeywordLike(\"interface\", { startsExpr }),\n  _type: createKeywordLike(\"type\", { startsExpr }),\n  // end: isTSDeclarationStart\n  _opaque: createKeywordLike(\"opaque\", { startsExpr }),\n  // end: isFlowInterfaceOrTypeOrOpaque\n  name: createToken(\"name\", { startsExpr }),\n\n  // placeholder plugin\n  placeholder: createToken(\"%%\", { startsExpr }),\n  // end: isIdentifier\n\n  string: createToken(\"string\", { startsExpr }),\n  num: createToken(\"num\", { startsExpr }),\n  bigint: createToken(\"bigint\", { startsExpr }),\n  // TODO: Remove this in Babel 8\n  decimal: createToken(\"decimal\", { startsExpr }),\n  // end: isLiteralPropertyName\n  regexp: createToken(\"regexp\", { startsExpr }),\n  privateName: createToken(\"#name\", { startsExpr }),\n  eof: createToken(\"eof\"),\n\n  // jsx plugin\n  jsxName: createToken(\"jsxName\"),\n  jsxText: createToken(\"jsxText\", { beforeExpr }),\n  jsxTagStart: createToken(\"jsxTagStart\", { startsExpr }),\n  jsxTagEnd: createToken(\"jsxTagEnd\"),\n} as const;\n\nexport function tokenIsIdentifier(token: TokenType): boolean {\n  return token >= tt._as && token <= tt.placeholder;\n}\n\nexport function tokenKeywordOrIdentifierIsKeyword(token: TokenType): boolean {\n  // we can remove the token >= tt._in check when we\n  // know a token is either keyword or identifier\n  return token <= tt._while;\n}\n\nexport function tokenIsKeywordOrIdentifier(token: TokenType): boolean {\n  return token >= tt._in && token <= tt.placeholder;\n}\n\nexport function tokenIsLiteralPropertyName(token: TokenType): boolean {\n  return token >= tt._in && token <= tt.decimal;\n}\n\nexport function tokenComesBeforeExpression(token: TokenType): boolean {\n  return tokenBeforeExprs[token];\n}\n\nexport function tokenCanStartExpression(token: TokenType): boolean {\n  return tokenStartsExprs[token];\n}\n\nexport function tokenIsAssignment(token: TokenType): boolean {\n  return token >= tt.eq && token <= tt.moduloAssign;\n}\n\nexport function tokenIsFlowInterfaceOrTypeOrOpaque(token: TokenType): boolean {\n  return token >= tt._interface && token <= tt._opaque;\n}\n\nexport function tokenIsLoop(token: TokenType): boolean {\n  return token >= tt._do && token <= tt._while;\n}\n\nexport function tokenIsKeyword(token: TokenType): boolean {\n  return token >= tt._in && token <= tt._while;\n}\n\nexport function tokenIsOperator(token: TokenType): boolean {\n  return token >= tt.pipeline && token <= tt._instanceof;\n}\n\nexport function tokenIsPostfix(token: TokenType): boolean {\n  return token === tt.incDec;\n}\n\nexport function tokenIsPrefix(token: TokenType): boolean {\n  return tokenPrefixes[token];\n}\n\nexport function tokenIsTSTypeOperator(token: TokenType): boolean {\n  return token >= tt._keyof && token <= tt._unique;\n}\n\nexport function tokenIsTSDeclarationStart(token: TokenType): boolean {\n  return token >= tt._abstract && token <= tt._type;\n}\n\nexport function tokenLabelName(token: TokenType): string {\n  return tokenLabels[token];\n}\n\nexport function tokenOperatorPrecedence(token: TokenType): number {\n  return tokenBinops[token];\n}\n\nexport function tokenIsBinaryOperator(token: TokenType): boolean {\n  return tokenBinops[token] !== -1;\n}\n\nexport function tokenIsRightAssociative(token: TokenType): boolean {\n  return token === tt.exponent;\n}\n\nexport function tokenIsTemplate(token: TokenType): boolean {\n  return token >= tt.templateTail && token <= tt.templateNonTail;\n}\n\nexport function getExportedToken(token: TokenType): ExportedTokenType {\n  return tokenTypes[token];\n}\n\nexport function isTokenType(obj: any): boolean {\n  return typeof obj === \"number\";\n}\n\nif (!process.env.BABEL_8_BREAKING) {\n  tokenTypes[tt.braceR].updateContext = context => {\n    context.pop();\n  };\n\n  tokenTypes[tt.braceL].updateContext =\n    tokenTypes[tt.braceHashL].updateContext =\n    tokenTypes[tt.dollarBraceL].updateContext =\n      context => {\n        context.push(tc.brace);\n      };\n\n  tokenTypes[tt.backQuote].updateContext = context => {\n    if (context[context.length - 1] === tc.template) {\n      context.pop();\n    } else {\n      context.push(tc.template);\n    }\n  };\n\n  tokenTypes[tt.jsxTagStart].updateContext = context => {\n    context.push(tc.j_expr, tc.j_oTag);\n  };\n}\n","// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport * as charCodes from \"charcodes\";\n\n// ## Character categories\n\n// Big ugly regular expressions that match characters in the\n// whitespace, identifier, and identifier-start categories. These\n// are only applied when a character is found to actually have a\n// code point between 0x80 and 0xffff.\n// Generated by `scripts/generate-identifier-regex.cjs`.\n\n/* prettier-ignore */\nlet nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088e\\u08a0-\\u08c9\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c8a\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7cd\\ua7d0\\ua7d1\\ua7d3\\ua7d5-\\ua7dc\\ua7f2-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n/* prettier-ignore */\nlet nonASCIIidentifierChars = \"\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0897-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1ace\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\u30fb\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\\uff65\";\n\nconst nonASCIIidentifierStart = new RegExp(\n  \"[\" + nonASCIIidentifierStartChars + \"]\",\n);\nconst nonASCIIidentifier = new RegExp(\n  \"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\",\n);\n\nnonASCIIidentifierStartChars = nonASCIIidentifierChars = null;\n\n// These are a run-length and offset-encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range. They were\n// generated by `scripts/generate-identifier-regex.cjs`.\n/* prettier-ignore */\nconst astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,13,10,2,14,2,6,2,1,2,10,2,14,2,6,2,1,4,51,13,310,10,21,11,7,25,5,2,41,2,8,70,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,39,27,10,22,251,41,7,1,17,2,60,28,11,0,9,21,43,17,47,20,28,22,13,52,58,1,3,0,14,44,33,24,27,35,30,0,3,0,9,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,20,1,64,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,31,9,2,0,3,0,2,37,2,0,26,0,2,0,45,52,19,3,21,2,31,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,38,6,186,43,117,63,32,7,3,0,3,7,2,1,2,23,16,0,2,0,95,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,19,72,200,32,32,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,16,0,2,12,2,33,125,0,80,921,103,110,18,195,2637,96,16,1071,18,5,26,3994,6,582,6842,29,1763,568,8,30,18,78,18,29,19,47,17,3,32,20,6,18,433,44,212,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,1237,42,9,8936,3,2,6,2,1,2,290,16,0,30,2,3,0,15,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,1845,30,7,5,262,61,147,44,11,6,17,0,322,29,19,43,485,27,229,29,3,0,496,6,2,3,2,1,2,14,2,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42719,33,4153,7,221,3,5761,15,7472,16,621,2467,541,1507,4938,6,4191];\n/* prettier-ignore */\nconst astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,7,9,32,4,318,1,80,3,71,10,50,3,123,2,54,14,32,10,3,1,11,3,46,10,8,0,46,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,3,0,158,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,68,8,2,0,3,0,2,3,2,4,2,0,15,1,83,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,7,19,58,14,5,9,243,14,166,9,71,5,2,1,3,3,2,0,2,1,13,9,120,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,343,9,54,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,10,1,2,0,49,6,4,4,14,10,5350,0,7,14,11465,27,2343,9,87,9,39,4,60,6,26,9,535,9,470,0,2,54,8,3,82,0,12,1,19628,1,4178,9,519,45,3,22,543,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,101,0,161,6,10,9,357,0,62,13,499,13,245,1,2,9,726,6,110,6,6,9,4759,9,787719,239];\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code: number, set: readonly number[]): boolean {\n  let pos = 0x10000;\n  for (let i = 0, length = set.length; i < length; i += 2) {\n    pos += set[i];\n    if (pos > code) return false;\n\n    pos += set[i + 1];\n    if (pos >= code) return true;\n  }\n  return false;\n}\n\n// Test whether a given character code starts an identifier.\n\nexport function isIdentifierStart(code: number): boolean {\n  if (code < charCodes.uppercaseA) return code === charCodes.dollarSign;\n  if (code <= charCodes.uppercaseZ) return true;\n  if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n  if (code <= charCodes.lowercaseZ) return true;\n  if (code <= 0xffff) {\n    return (\n      code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code))\n    );\n  }\n  return isInAstralSet(code, astralIdentifierStartCodes);\n}\n\n// Test whether a given character is part of an identifier.\n\nexport function isIdentifierChar(code: number): boolean {\n  if (code < charCodes.digit0) return code === charCodes.dollarSign;\n  if (code < charCodes.colon) return true;\n  if (code < charCodes.uppercaseA) return false;\n  if (code <= charCodes.uppercaseZ) return true;\n  if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n  if (code <= charCodes.lowercaseZ) return true;\n  if (code <= 0xffff) {\n    return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n  }\n  return (\n    isInAstralSet(code, astralIdentifierStartCodes) ||\n    isInAstralSet(code, astralIdentifierCodes)\n  );\n}\n\n// Test whether a given string is a valid identifier name\n\nexport function isIdentifierName(name: string): boolean {\n  let isFirst = true;\n  for (let i = 0; i < name.length; i++) {\n    // The implementation is based on\n    // https://source.chromium.org/chromium/chromium/src/+/master:v8/src/builtins/builtins-string-gen.cc;l=1455;drc=221e331b49dfefadbc6fa40b0c68e6f97606d0b3;bpv=0;bpt=1\n    // We reimplement `codePointAt` because `codePointAt` is a V8 builtin which is not inlined by TurboFan (as of M91)\n    // since `name` is mostly ASCII, an inlined `charCodeAt` wins here\n    let cp = name.charCodeAt(i);\n    if ((cp & 0xfc00) === 0xd800 && i + 1 < name.length) {\n      const trail = name.charCodeAt(++i);\n      if ((trail & 0xfc00) === 0xdc00) {\n        cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\n      }\n    }\n    if (isFirst) {\n      isFirst = false;\n      if (!isIdentifierStart(cp)) {\n        return false;\n      }\n    } else if (!isIdentifierChar(cp)) {\n      return false;\n    }\n  }\n  return !isFirst;\n}\n","const reservedWords = {\n  keyword: [\n    \"break\",\n    \"case\",\n    \"catch\",\n    \"continue\",\n    \"debugger\",\n    \"default\",\n    \"do\",\n    \"else\",\n    \"finally\",\n    \"for\",\n    \"function\",\n    \"if\",\n    \"return\",\n    \"switch\",\n    \"throw\",\n    \"try\",\n    \"var\",\n    \"const\",\n    \"while\",\n    \"with\",\n    \"new\",\n    \"this\",\n    \"super\",\n    \"class\",\n    \"extends\",\n    \"export\",\n    \"import\",\n    \"null\",\n    \"true\",\n    \"false\",\n    \"in\",\n    \"instanceof\",\n    \"typeof\",\n    \"void\",\n    \"delete\",\n  ],\n  strict: [\n    \"implements\",\n    \"interface\",\n    \"let\",\n    \"package\",\n    \"private\",\n    \"protected\",\n    \"public\",\n    \"static\",\n    \"yield\",\n  ],\n  strictBind: [\"eval\", \"arguments\"],\n};\nconst keywords = new Set(reservedWords.keyword);\nconst reservedWordsStrictSet = new Set(reservedWords.strict);\nconst reservedWordsStrictBindSet = new Set(reservedWords.strictBind);\n\n/**\n * Checks if word is a reserved word in non-strict mode\n */\nexport function isReservedWord(word: string, inModule: boolean): boolean {\n  return (inModule && word === \"await\") || word === \"enum\";\n}\n\n/**\n * Checks if word is a reserved word in non-binding strict mode\n *\n * Includes non-strict reserved words\n */\nexport function isStrictReservedWord(word: string, inModule: boolean): boolean {\n  return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode, but it is allowed as\n * a normal identifier.\n */\nexport function isStrictBindOnlyReservedWord(word: string): boolean {\n  return reservedWordsStrictBindSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode\n *\n * Includes non-strict reserved words and non-binding strict reserved words\n */\nexport function isStrictBindReservedWord(\n  word: string,\n  inModule: boolean,\n): boolean {\n  return (\n    isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word)\n  );\n}\n\nexport function isKeyword(word: string): boolean {\n  return keywords.has(word);\n}\n","import * as charCodes from \"charcodes\";\nimport { isIdentifierStart } from \"@babel/helper-validator-identifier\";\n\nexport {\n  isIdentifierStart,\n  isIdentifierChar,\n  isReservedWord,\n  isStrictBindOnlyReservedWord,\n  isStrictBindReservedWord,\n  isStrictReservedWord,\n  isKeyword,\n} from \"@babel/helper-validator-identifier\";\n\nexport const keywordRelationalOperator = /^in(stanceof)?$/;\n\n// Test whether a current state character code and next character code is @\n\nexport function isIteratorStart(\n  current: number,\n  next: number,\n  next2: number,\n): boolean {\n  return (\n    current === charCodes.atSign &&\n    next === charCodes.atSign &&\n    isIdentifierStart(next2)\n  );\n}\n\n// This is the comprehensive set of JavaScript reserved words\n// If a word is in this set, it could be a reserved word,\n// depending on sourceType/strictMode/binding info. In other words\n// if a word is not in this set, it is not a reserved word under\n// any circumstance.\nconst reservedWordLikeSet = new Set([\n  \"break\",\n  \"case\",\n  \"catch\",\n  \"continue\",\n  \"debugger\",\n  \"default\",\n  \"do\",\n  \"else\",\n  \"finally\",\n  \"for\",\n  \"function\",\n  \"if\",\n  \"return\",\n  \"switch\",\n  \"throw\",\n  \"try\",\n  \"var\",\n  \"const\",\n  \"while\",\n  \"with\",\n  \"new\",\n  \"this\",\n  \"super\",\n  \"class\",\n  \"extends\",\n  \"export\",\n  \"import\",\n  \"null\",\n  \"true\",\n  \"false\",\n  \"in\",\n  \"instanceof\",\n  \"typeof\",\n  \"void\",\n  \"delete\",\n  // strict\n  \"implements\",\n  \"interface\",\n  \"let\",\n  \"package\",\n  \"private\",\n  \"protected\",\n  \"public\",\n  \"static\",\n  \"yield\",\n  // strictBind\n  \"eval\",\n  \"arguments\",\n  // reservedWorkLike\n  \"enum\",\n  \"await\",\n]);\n\nexport function canBeReservedWord(word: string): boolean {\n  return reservedWordLikeSet.has(word);\n}\n","import { ScopeFlag, BindingFlag } from \"./scopeflags.ts\";\nimport type { Position } from \"./location.ts\";\nimport type * as N from \"../types.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport type Tokenizer from \"../tokenizer/index.ts\";\n\nexport const enum NameType {\n  // var-declared names in the current lexical scope\n  Var = 1 << 0,\n  // lexically-declared names in the current lexical scope\n  Lexical = 1 << 1,\n  // lexically-declared FunctionDeclaration names in the current lexical scope\n  Function = 1 << 2,\n}\n\n// Start an AST node, attaching a start offset.\nexport class Scope {\n  flags: ScopeFlag = 0;\n  names: Map<string, NameType> = new Map();\n  firstLexicalName = \"\";\n\n  constructor(flags: ScopeFlag) {\n    this.flags = flags;\n  }\n}\n\n// The functions in this module keep track of declared variables in the\n// current scope in order to detect duplicate variable names.\nexport default class ScopeHandler<IScope extends Scope = Scope> {\n  parser: Tokenizer;\n  scopeStack: Array<IScope> = [];\n  inModule: boolean;\n  undefinedExports: Map<string, Position> = new Map();\n\n  constructor(parser: Tokenizer, inModule: boolean) {\n    this.parser = parser;\n    this.inModule = inModule;\n  }\n\n  get inTopLevel() {\n    return (this.currentScope().flags & ScopeFlag.PROGRAM) > 0;\n  }\n  get inFunction() {\n    return (this.currentVarScopeFlags() & ScopeFlag.FUNCTION_BASE) > 0;\n  }\n  get allowSuper() {\n    return (this.currentThisScopeFlags() & ScopeFlag.SUPER) > 0;\n  }\n  get allowDirectSuper() {\n    return (this.currentThisScopeFlags() & ScopeFlag.DIRECT_SUPER) > 0;\n  }\n  get allowNewTarget() {\n    return (this.currentThisScopeFlags() & ScopeFlag.NEW_TARGET) > 0;\n  }\n  get inClass() {\n    return (this.currentThisScopeFlags() & ScopeFlag.CLASS_BASE) > 0;\n  }\n  get inClassAndNotInNonArrowFunction() {\n    const flags = this.currentThisScopeFlags();\n    return (\n      (flags & ScopeFlag.CLASS_BASE) > 0 &&\n      (flags & ScopeFlag.FUNCTION_BASE) === 0\n    );\n  }\n  get inStaticBlock() {\n    for (let i = this.scopeStack.length - 1; ; i--) {\n      const { flags } = this.scopeStack[i];\n      if (flags & ScopeFlag.STATIC_BLOCK) {\n        return true;\n      }\n      if (flags & (ScopeFlag.VAR | ScopeFlag.CLASS_BASE)) {\n        // function body, module body, class property initializers\n        return false;\n      }\n    }\n  }\n  get inNonArrowFunction() {\n    return (this.currentThisScopeFlags() & ScopeFlag.FUNCTION_BASE) > 0;\n  }\n  get inBareCaseStatement() {\n    return (this.currentScope().flags & ScopeFlag.SWITCH) > 0;\n  }\n  get treatFunctionsAsVar() {\n    return this.treatFunctionsAsVarInScope(this.currentScope());\n  }\n\n  createScope(flags: ScopeFlag): Scope {\n    return new Scope(flags);\n  }\n\n  enter(flags: ScopeFlag) {\n    /*:: +createScope: (flags:ScopeFlag) => IScope; */\n    // @ts-expect-error This method will be overwritten by subclasses\n    this.scopeStack.push(this.createScope(flags));\n  }\n\n  exit(): ScopeFlag {\n    const scope = this.scopeStack.pop();\n    return scope.flags;\n  }\n\n  // The spec says:\n  // > At the top level of a function, or script, function declarations are\n  // > treated like var declarations rather than like lexical declarations.\n  treatFunctionsAsVarInScope(scope: IScope): boolean {\n    return !!(\n      scope.flags & (ScopeFlag.FUNCTION_BASE | ScopeFlag.STATIC_BLOCK) ||\n      (!this.parser.inModule && scope.flags & ScopeFlag.PROGRAM)\n    );\n  }\n\n  declareName(name: string, bindingType: BindingFlag, loc: Position) {\n    let scope = this.currentScope();\n    if (\n      bindingType & BindingFlag.SCOPE_LEXICAL ||\n      bindingType & BindingFlag.SCOPE_FUNCTION\n    ) {\n      this.checkRedeclarationInScope(scope, name, bindingType, loc);\n\n      let type = scope.names.get(name) || 0;\n\n      if (bindingType & BindingFlag.SCOPE_FUNCTION) {\n        type = type | NameType.Function;\n      } else {\n        if (!scope.firstLexicalName) {\n          scope.firstLexicalName = name;\n        }\n        type = type | NameType.Lexical;\n      }\n\n      scope.names.set(name, type);\n\n      if (bindingType & BindingFlag.SCOPE_LEXICAL) {\n        this.maybeExportDefined(scope, name);\n      }\n    } else if (bindingType & BindingFlag.SCOPE_VAR) {\n      for (let i = this.scopeStack.length - 1; i >= 0; --i) {\n        scope = this.scopeStack[i];\n        this.checkRedeclarationInScope(scope, name, bindingType, loc);\n        scope.names.set(name, (scope.names.get(name) || 0) | NameType.Var);\n        this.maybeExportDefined(scope, name);\n\n        if (scope.flags & ScopeFlag.VAR) break;\n      }\n    }\n    if (this.parser.inModule && scope.flags & ScopeFlag.PROGRAM) {\n      this.undefinedExports.delete(name);\n    }\n  }\n\n  maybeExportDefined(scope: IScope, name: string) {\n    if (this.parser.inModule && scope.flags & ScopeFlag.PROGRAM) {\n      this.undefinedExports.delete(name);\n    }\n  }\n\n  checkRedeclarationInScope(\n    scope: IScope,\n    name: string,\n    bindingType: BindingFlag,\n    loc: Position,\n  ) {\n    if (this.isRedeclaredInScope(scope, name, bindingType)) {\n      this.parser.raise(Errors.VarRedeclaration, loc, {\n        identifierName: name,\n      });\n    }\n  }\n\n  isRedeclaredInScope(\n    scope: IScope,\n    name: string,\n    bindingType: BindingFlag,\n  ): boolean {\n    if (!(bindingType & BindingFlag.KIND_VALUE)) return false;\n\n    if (bindingType & BindingFlag.SCOPE_LEXICAL) {\n      return scope.names.has(name);\n    }\n\n    const type = scope.names.get(name);\n\n    if (bindingType & BindingFlag.SCOPE_FUNCTION) {\n      return (\n        (type & NameType.Lexical) > 0 ||\n        (!this.treatFunctionsAsVarInScope(scope) && (type & NameType.Var) > 0)\n      );\n    }\n\n    return (\n      ((type & NameType.Lexical) > 0 &&\n        // Annex B.3.4\n        // https://tc39.es/ecma262/#sec-variablestatements-in-catch-blocks\n        !(\n          scope.flags & ScopeFlag.SIMPLE_CATCH &&\n          scope.firstLexicalName === name\n        )) ||\n      (!this.treatFunctionsAsVarInScope(scope) &&\n        (type & NameType.Function) > 0)\n    );\n  }\n\n  checkLocalExport(id: N.Identifier) {\n    const { name } = id;\n    const topLevelScope = this.scopeStack[0];\n    if (!topLevelScope.names.has(name)) {\n      this.undefinedExports.set(name, id.loc.start);\n    }\n  }\n\n  currentScope(): IScope {\n    return this.scopeStack[this.scopeStack.length - 1];\n  }\n\n  currentVarScopeFlags(): ScopeFlag {\n    for (let i = this.scopeStack.length - 1; ; i--) {\n      const { flags } = this.scopeStack[i];\n      if (flags & ScopeFlag.VAR) {\n        return flags;\n      }\n    }\n  }\n\n  // Could be useful for `arguments`, `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\n  currentThisScopeFlags(): ScopeFlag {\n    for (let i = this.scopeStack.length - 1; ; i--) {\n      const { flags } = this.scopeStack[i];\n      if (\n        flags & (ScopeFlag.VAR | ScopeFlag.CLASS_BASE) &&\n        !(flags & ScopeFlag.ARROW)\n      ) {\n        return flags;\n      }\n    }\n  }\n}\n","import type { Position } from \"../../util/location.ts\";\nimport ScopeHandler, { NameType, Scope } from \"../../util/scope.ts\";\nimport { BindingFlag, type ScopeFlag } from \"../../util/scopeflags.ts\";\nimport type * as N from \"../../types.ts\";\n\n// Reference implementation: https://github.com/facebook/flow/blob/23aeb2a2ef6eb4241ce178fde5d8f17c5f747fb5/src/typing/env.ml#L536-L584\nclass FlowScope extends Scope {\n  // declare function foo(): type;\n  declareFunctions: Set<string> = new Set();\n}\n\nexport default class FlowScopeHandler extends ScopeHandler<FlowScope> {\n  createScope(flags: ScopeFlag): FlowScope {\n    return new FlowScope(flags);\n  }\n\n  declareName(name: string, bindingType: BindingFlag, loc: Position) {\n    const scope = this.currentScope();\n    if (bindingType & BindingFlag.FLAG_FLOW_DECLARE_FN) {\n      this.checkRedeclarationInScope(scope, name, bindingType, loc);\n      this.maybeExportDefined(scope, name);\n      scope.declareFunctions.add(name);\n      return;\n    }\n\n    super.declareName(name, bindingType, loc);\n  }\n\n  isRedeclaredInScope(\n    scope: FlowScope,\n    name: string,\n    bindingType: BindingFlag,\n  ): boolean {\n    if (super.isRedeclaredInScope(scope, name, bindingType)) return true;\n\n    if (\n      bindingType & BindingFlag.FLAG_FLOW_DECLARE_FN &&\n      !scope.declareFunctions.has(name)\n    ) {\n      const type = scope.names.get(name);\n      return (type & NameType.Function) > 0 || (type & NameType.Lexical) > 0;\n    }\n\n    return false;\n  }\n\n  checkLocalExport(id: N.Identifier) {\n    if (!this.scopeStack[0].declareFunctions.has(id.name)) {\n      super.checkLocalExport(id);\n    }\n  }\n}\n","/*:: declare var invariant; */\n\nimport type Parser from \"../../parser/index.ts\";\nimport {\n  tokenIsIdentifier,\n  tokenIsKeyword,\n  tokenIsKeywordOrIdentifier,\n  tokenIsLiteralPropertyName,\n  tokenLabelName,\n  tt,\n  type TokenType,\n  tokenIsFlowInterfaceOrTypeOrOpaque,\n} from \"../../tokenizer/types.ts\";\nimport type * as N from \"../../types.ts\";\nimport type { Position } from \"../../util/location.ts\";\nimport { types as tc } from \"../../tokenizer/context.ts\";\nimport * as charCodes from \"charcodes\";\nimport { isIteratorStart } from \"../../util/identifier.ts\";\nimport FlowScopeHandler from \"./scope.ts\";\nimport { BindingFlag, ScopeFlag } from \"../../util/scopeflags.ts\";\nimport type { ExpressionErrors } from \"../../parser/util.ts\";\nimport type { ParseStatementFlag } from \"../../parser/statement.ts\";\nimport { Errors, ParseErrorEnum } from \"../../parse-error.ts\";\nimport type { Undone } from \"../../parser/node.ts\";\nimport type { ClassWithMixin, IJSXParserMixin } from \"../jsx/index.ts\";\n\nconst reservedTypes = new Set([\n  \"_\",\n  \"any\",\n  \"bool\",\n  \"boolean\",\n  \"empty\",\n  \"extends\",\n  \"false\",\n  \"interface\",\n  \"mixed\",\n  \"null\",\n  \"number\",\n  \"static\",\n  \"string\",\n  \"true\",\n  \"typeof\",\n  \"void\",\n]);\n\n/* eslint sort-keys: \"error\" */\n// The Errors key follows https://github.com/facebook/flow/blob/master/src/parser/parse_error.ml unless it does not exist\nconst FlowErrors = ParseErrorEnum`flow`({\n  AmbiguousConditionalArrow:\n    \"Ambiguous expression: wrap the arrow functions in parentheses to disambiguate.\",\n  AmbiguousDeclareModuleKind:\n    \"Found both `declare module.exports` and `declare export` in the same module. Modules can only have 1 since they are either an ES module or they are a CommonJS module.\",\n  // TODO: When we get proper string enums in typescript make this ReservedType.\n  // Not really worth it to do the whole $Values dance with reservedTypes set.\n  AssignReservedType: ({ reservedType }: { reservedType: string }) =>\n    `Cannot overwrite reserved type ${reservedType}.`,\n  DeclareClassElement:\n    \"The `declare` modifier can only appear on class fields.\",\n  DeclareClassFieldInitializer:\n    \"Initializers are not allowed in fields with the `declare` modifier.\",\n  DuplicateDeclareModuleExports:\n    \"Duplicate `declare module.exports` statement.\",\n  EnumBooleanMemberNotInitialized: ({\n    memberName,\n    enumName,\n  }: {\n    memberName: string;\n    enumName: string;\n  }) =>\n    `Boolean enum members need to be initialized. Use either \\`${memberName} = true,\\` or \\`${memberName} = false,\\` in enum \\`${enumName}\\`.`,\n  EnumDuplicateMemberName: ({\n    memberName,\n    enumName,\n  }: {\n    memberName: string;\n    enumName: string;\n  }) =>\n    `Enum member names need to be unique, but the name \\`${memberName}\\` has already been used before in enum \\`${enumName}\\`.`,\n  EnumInconsistentMemberValues: ({ enumName }: { enumName: string }) =>\n    `Enum \\`${enumName}\\` has inconsistent member initializers. Either use no initializers, or consistently use literals (either booleans, numbers, or strings) for all member initializers.`,\n  EnumInvalidExplicitType: ({\n    invalidEnumType,\n    enumName,\n  }: {\n    invalidEnumType: string;\n    enumName: string;\n  }) =>\n    `Enum type \\`${invalidEnumType}\\` is not valid. Use one of \\`boolean\\`, \\`number\\`, \\`string\\`, or \\`symbol\\` in enum \\`${enumName}\\`.`,\n  EnumInvalidExplicitTypeUnknownSupplied: ({\n    enumName,\n  }: {\n    enumName: string;\n  }) =>\n    `Supplied enum type is not valid. Use one of \\`boolean\\`, \\`number\\`, \\`string\\`, or \\`symbol\\` in enum \\`${enumName}\\`.`,\n\n  // TODO: When moving to typescript, we should either have each of the\n  // following errors only accept the specific strings they want:\n  //\n  // ...PrimaryType: explicitType: \"string\" | \"number\" | \"boolean\"\n  // ...SymbolType: explicitType: \"symbol\"\n  // ...UnknownType: explicitType: null\n  //\n  // Or, alternatively, merge these three errors together into one\n  // `EnumInvalidMemberInitializer` error that can accept `EnumExplicitType`\n  // without alteration, and then just have its message change based on the\n  // explicitType.\n  EnumInvalidMemberInitializerPrimaryType: ({\n    enumName,\n    memberName,\n    explicitType,\n  }: {\n    enumName: string;\n    memberName: string;\n    explicitType: EnumExplicitType;\n  }) =>\n    `Enum \\`${enumName}\\` has type \\`${explicitType}\\`, so the initializer of \\`${memberName}\\` needs to be a ${explicitType} literal.`,\n  EnumInvalidMemberInitializerSymbolType: ({\n    enumName,\n    memberName,\n  }: {\n    enumName: string;\n    memberName: string;\n    explicitType: EnumExplicitType;\n  }) =>\n    `Symbol enum members cannot be initialized. Use \\`${memberName},\\` in enum \\`${enumName}\\`.`,\n  EnumInvalidMemberInitializerUnknownType: ({\n    enumName,\n    memberName,\n  }: {\n    enumName: string;\n    memberName: string;\n    explicitType: EnumExplicitType;\n  }) =>\n    `The enum member initializer for \\`${memberName}\\` needs to be a literal (either a boolean, number, or string) in enum \\`${enumName}\\`.`,\n  EnumInvalidMemberName: ({\n    enumName,\n    memberName,\n    suggestion,\n  }: {\n    enumName: string;\n    memberName: string;\n    suggestion: string;\n  }) =>\n    `Enum member names cannot start with lowercase 'a' through 'z'. Instead of using \\`${memberName}\\`, consider using \\`${suggestion}\\`, in enum \\`${enumName}\\`.`,\n  EnumNumberMemberNotInitialized: ({\n    enumName,\n    memberName,\n  }: {\n    enumName: string;\n    memberName: string;\n  }) =>\n    `Number enum members need to be initialized, e.g. \\`${memberName} = 1\\` in enum \\`${enumName}\\`.`,\n  EnumStringMemberInconsistentlyInitialized: ({\n    enumName,\n  }: {\n    enumName: string;\n  }) =>\n    `String enum members need to consistently either all use initializers, or use no initializers, in enum \\`${enumName}\\`.`,\n  GetterMayNotHaveThisParam: \"A getter cannot have a `this` parameter.\",\n  ImportReflectionHasImportType:\n    \"An `import module` declaration can not use `type` or `typeof` keyword.\",\n  ImportTypeShorthandOnlyInPureImport:\n    \"The `type` and `typeof` keywords on named imports can only be used on regular `import` statements. It cannot be used with `import type` or `import typeof` statements.\",\n  InexactInsideExact:\n    \"Explicit inexact syntax cannot appear inside an explicit exact object type.\",\n  InexactInsideNonObject:\n    \"Explicit inexact syntax cannot appear in class or interface definitions.\",\n  InexactVariance: \"Explicit inexact syntax cannot have variance.\",\n  InvalidNonTypeImportInDeclareModule:\n    \"Imports within a `declare module` body must always be `import type` or `import typeof`.\",\n  MissingTypeParamDefault:\n    \"Type parameter declaration needs a default, since a preceding type parameter declaration has a default.\",\n  NestedDeclareModule:\n    \"`declare module` cannot be used inside another `declare module`.\",\n  NestedFlowComment: \"Cannot have a flow comment inside another flow comment.\",\n  PatternIsOptional: {\n    message:\n      \"A binding pattern parameter cannot be optional in an implementation signature.\",\n    // For consistency in TypeScript and Flow error codes\n    ...(!process.env.BABEL_8_BREAKING\n      ? { reasonCode: \"OptionalBindingPattern\" }\n      : {}),\n  },\n  SetterMayNotHaveThisParam: \"A setter cannot have a `this` parameter.\",\n  SpreadVariance: \"Spread properties cannot have variance.\",\n  ThisParamAnnotationRequired:\n    \"A type annotation is required for the `this` parameter.\",\n  ThisParamBannedInConstructor:\n    \"Constructors cannot have a `this` parameter; constructors don't bind `this` like other functions.\",\n  ThisParamMayNotBeOptional: \"The `this` parameter cannot be optional.\",\n  ThisParamMustBeFirst:\n    \"The `this` parameter must be the first function parameter.\",\n  ThisParamNoDefault: \"The `this` parameter may not have a default value.\",\n  TypeBeforeInitializer:\n    \"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.\",\n  TypeCastInPattern:\n    \"The type cast expression is expected to be wrapped with parenthesis.\",\n  UnexpectedExplicitInexactInObject:\n    \"Explicit inexact syntax must appear at the end of an inexact object.\",\n  UnexpectedReservedType: ({ reservedType }: { reservedType: string }) =>\n    `Unexpected reserved type ${reservedType}.`,\n  UnexpectedReservedUnderscore:\n    \"`_` is only allowed as a type argument to call or new.\",\n  UnexpectedSpaceBetweenModuloChecks:\n    \"Spaces between `%` and `checks` are not allowed here.\",\n  UnexpectedSpreadType:\n    \"Spread operator cannot appear in class or interface definitions.\",\n  UnexpectedSubtractionOperand:\n    'Unexpected token, expected \"number\" or \"bigint\".',\n  UnexpectedTokenAfterTypeParameter:\n    \"Expected an arrow function after this type parameter declaration.\",\n  UnexpectedTypeParameterBeforeAsyncArrowFunction:\n    \"Type parameters must come after the async keyword, e.g. instead of `<T> async () => {}`, use `async <T>() => {}`.\",\n  UnsupportedDeclareExportKind: ({\n    unsupportedExportKind,\n    suggestion,\n  }: {\n    unsupportedExportKind: string;\n    suggestion: string;\n  }) =>\n    `\\`declare export ${unsupportedExportKind}\\` is not supported. Use \\`${suggestion}\\` instead.`,\n  UnsupportedStatementInDeclareModule:\n    \"Only declares and type imports are allowed inside declare module.\",\n  UnterminatedFlowComment: \"Unterminated flow-comment.\",\n});\n/* eslint-disable sort-keys */\n\nfunction isEsModuleType(bodyElement: N.Node): boolean {\n  return (\n    bodyElement.type === \"DeclareExportAllDeclaration\" ||\n    (bodyElement.type === \"DeclareExportDeclaration\" &&\n      (!bodyElement.declaration ||\n        (bodyElement.declaration.type !== \"TypeAlias\" &&\n          bodyElement.declaration.type !== \"InterfaceDeclaration\")))\n  );\n}\n\nfunction hasTypeImportKind(\n  node: Undone<N.ImportSpecifier | N.ImportDeclaration>,\n): boolean {\n  return node.importKind === \"type\" || node.importKind === \"typeof\";\n}\n\nconst exportSuggestions = {\n  const: \"declare export var\",\n  let: \"declare export var\",\n  type: \"export type\",\n  interface: \"export interface\",\n};\n\n// Like Array#filter, but returns a tuple [ acceptedElements, discardedElements ]\nfunction partition<T>(\n  list: T[],\n  test: (c: T, b: number, a: T[]) => boolean | undefined | null,\n): [T[], T[]] {\n  const list1: T[] = [];\n  const list2: T[] = [];\n  for (let i = 0; i < list.length; i++) {\n    (test(list[i], i, list) ? list1 : list2).push(list[i]);\n  }\n  return [list1, list2];\n}\n\nconst FLOW_PRAGMA_REGEX = /\\*?\\s*@((?:no)?flow)\\b/;\n\n// Flow enums types\ntype EnumExplicitType = null | \"boolean\" | \"number\" | \"string\" | \"symbol\";\n\ntype EnumContext = {\n  enumName: string;\n  explicitType: EnumExplicitType;\n  memberName: string;\n};\n\ntype EnumMemberInit =\n  | {\n      type: \"number\";\n      loc: Position;\n      value: N.Node;\n    }\n  | {\n      type: \"string\";\n      loc: Position;\n      value: N.Node;\n    }\n  | {\n      type: \"boolean\";\n      loc: Position;\n      value: N.Node;\n    }\n  | {\n      type: \"invalid\";\n      loc: Position;\n    }\n  | {\n      type: \"none\";\n      loc: Position;\n    };\n\nexport default (superClass: ClassWithMixin<typeof Parser, IJSXParserMixin>) =>\n  class FlowParserMixin extends superClass implements Parser {\n    // The value of the @flow/@noflow pragma. Initially undefined, transitions\n    // to \"@flow\" or \"@noflow\" if we see a pragma. Transitions to null if we are\n    // past the initial comment.\n    flowPragma: void | null | \"flow\" | \"noflow\" = undefined;\n\n    getScopeHandler(): new (...args: any) => FlowScopeHandler {\n      return FlowScopeHandler;\n    }\n\n    shouldParseTypes(): boolean {\n      return this.getPluginOption(\"flow\", \"all\") || this.flowPragma === \"flow\";\n    }\n\n    finishToken(type: TokenType, val: any): void {\n      if (\n        type !== tt.string &&\n        type !== tt.semi &&\n        type !== tt.interpreterDirective\n      ) {\n        if (this.flowPragma === undefined) {\n          this.flowPragma = null;\n        }\n      }\n      super.finishToken(type, val);\n    }\n\n    addComment(comment: N.Comment): void {\n      if (this.flowPragma === undefined) {\n        // Try to parse a flow pragma.\n        const matches = FLOW_PRAGMA_REGEX.exec(comment.value);\n        if (!matches) {\n          // do nothing\n        } else if (matches[1] === \"flow\") {\n          this.flowPragma = \"flow\";\n        } else if (matches[1] === \"noflow\") {\n          this.flowPragma = \"noflow\";\n        } else {\n          throw new Error(\"Unexpected flow pragma\");\n        }\n      }\n      super.addComment(comment);\n    }\n\n    flowParseTypeInitialiser(tok?: TokenType): N.FlowType {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      this.expect(tok || tt.colon);\n\n      const type = this.flowParseType();\n      this.state.inType = oldInType;\n      return type;\n    }\n\n    flowParsePredicate(): N.FlowPredicate {\n      const node = this.startNode<N.FlowPredicate>();\n      const moduloLoc = this.state.startLoc;\n      this.next(); // eat `%`\n      this.expectContextual(tt._checks);\n      // Force '%' and 'checks' to be adjacent\n      if (this.state.lastTokStartLoc.index > moduloLoc.index + 1) {\n        this.raise(FlowErrors.UnexpectedSpaceBetweenModuloChecks, moduloLoc);\n      }\n      if (this.eat(tt.parenL)) {\n        node.value = super.parseExpression();\n        this.expect(tt.parenR);\n        return this.finishNode(node, \"DeclaredPredicate\");\n      } else {\n        return this.finishNode(node, \"InferredPredicate\");\n      }\n    }\n\n    flowParseTypeAndPredicateInitialiser(): [\n      N.FlowType | undefined | null,\n      N.FlowPredicate | undefined | null,\n    ] {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      this.expect(tt.colon);\n      let type = null;\n      let predicate = null;\n      if (this.match(tt.modulo)) {\n        this.state.inType = oldInType;\n        predicate = this.flowParsePredicate();\n      } else {\n        type = this.flowParseType();\n        this.state.inType = oldInType;\n        if (this.match(tt.modulo)) {\n          predicate = this.flowParsePredicate();\n        }\n      }\n      return [type, predicate];\n    }\n\n    flowParseDeclareClass(\n      node: Undone<N.FlowDeclareClass>,\n    ): N.FlowDeclareClass {\n      this.next();\n      this.flowParseInterfaceish(node, /*isClass*/ true);\n      return this.finishNode(node, \"DeclareClass\");\n    }\n\n    flowParseDeclareFunction(\n      node: Undone<N.FlowDeclareFunction>,\n    ): N.FlowDeclareFunction {\n      this.next();\n\n      const id = (node.id = this.parseIdentifier());\n\n      const typeNode = this.startNode<N.FlowFunctionTypeAnnotation>();\n      const typeContainer = this.startNode<N.TypeAnnotation>();\n\n      if (this.match(tt.lt)) {\n        typeNode.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        typeNode.typeParameters = null;\n      }\n\n      this.expect(tt.parenL);\n      const tmp = this.flowParseFunctionTypeParams();\n      typeNode.params = tmp.params;\n      typeNode.rest = tmp.rest;\n      typeNode.this = tmp._this;\n      this.expect(tt.parenR);\n\n      [typeNode.returnType, node.predicate] =\n        this.flowParseTypeAndPredicateInitialiser();\n\n      typeContainer.typeAnnotation = this.finishNode(\n        typeNode,\n        \"FunctionTypeAnnotation\",\n      );\n\n      id.typeAnnotation = this.finishNode(typeContainer, \"TypeAnnotation\");\n\n      this.resetEndLocation(id);\n      this.semicolon();\n\n      this.scope.declareName(\n        node.id.name,\n        BindingFlag.TYPE_FLOW_DECLARE_FN,\n        node.id.loc.start,\n      );\n\n      return this.finishNode(node, \"DeclareFunction\");\n    }\n\n    flowParseDeclare(\n      node: Undone<N.FlowDeclare>,\n      insideModule?: boolean,\n    ): N.FlowDeclare {\n      if (this.match(tt._class)) {\n        return this.flowParseDeclareClass(node);\n      } else if (this.match(tt._function)) {\n        return this.flowParseDeclareFunction(node);\n      } else if (this.match(tt._var)) {\n        return this.flowParseDeclareVariable(node);\n      } else if (this.eatContextual(tt._module)) {\n        if (this.match(tt.dot)) {\n          return this.flowParseDeclareModuleExports(node);\n        } else {\n          if (insideModule) {\n            this.raise(\n              FlowErrors.NestedDeclareModule,\n              this.state.lastTokStartLoc,\n            );\n          }\n          return this.flowParseDeclareModule(node);\n        }\n      } else if (this.isContextual(tt._type)) {\n        return this.flowParseDeclareTypeAlias(node);\n      } else if (this.isContextual(tt._opaque)) {\n        return this.flowParseDeclareOpaqueType(node);\n      } else if (this.isContextual(tt._interface)) {\n        return this.flowParseDeclareInterface(node);\n      } else if (this.match(tt._export)) {\n        return this.flowParseDeclareExportDeclaration(node, insideModule);\n      } else {\n        this.unexpected();\n      }\n    }\n\n    flowParseDeclareVariable(\n      node: Undone<N.FlowDeclareVariable>,\n    ): N.FlowDeclareVariable {\n      this.next();\n      node.id = this.flowParseTypeAnnotatableIdentifier(\n        /*allowPrimitiveOverride*/ true,\n      );\n      this.scope.declareName(\n        node.id.name,\n        BindingFlag.TYPE_VAR,\n        node.id.loc.start,\n      );\n      this.semicolon();\n      return this.finishNode(node, \"DeclareVariable\");\n    }\n\n    flowParseDeclareModule(\n      node: Undone<N.FlowDeclareModule>,\n    ): N.FlowDeclareModule {\n      this.scope.enter(ScopeFlag.OTHER);\n\n      if (this.match(tt.string)) {\n        node.id = super.parseExprAtom();\n      } else {\n        node.id = this.parseIdentifier();\n      }\n\n      const bodyNode = (node.body = this.startNode<N.BlockStatement>());\n      // @ts-expect-error refine typings\n      const body = (bodyNode.body = []);\n      this.expect(tt.braceL);\n      while (!this.match(tt.braceR)) {\n        let bodyNode = this.startNode<N.ImportDeclaration>();\n\n        if (this.match(tt._import)) {\n          this.next();\n          if (!this.isContextual(tt._type) && !this.match(tt._typeof)) {\n            this.raise(\n              FlowErrors.InvalidNonTypeImportInDeclareModule,\n              this.state.lastTokStartLoc,\n            );\n          }\n          super.parseImport(bodyNode);\n        } else {\n          this.expectContextual(\n            tt._declare,\n            FlowErrors.UnsupportedStatementInDeclareModule,\n          );\n          // @ts-expect-error refine typings\n          bodyNode = this.flowParseDeclare(bodyNode, true);\n        }\n\n        body.push(bodyNode);\n      }\n\n      this.scope.exit();\n\n      this.expect(tt.braceR);\n\n      this.finishNode(bodyNode, \"BlockStatement\");\n\n      let kind: \"CommonJS\" | \"ES\" | null = null;\n      let hasModuleExport = false;\n      body.forEach(bodyElement => {\n        if (isEsModuleType(bodyElement)) {\n          if (kind === \"CommonJS\") {\n            this.raise(FlowErrors.AmbiguousDeclareModuleKind, bodyElement);\n          }\n          kind = \"ES\";\n        } else if (bodyElement.type === \"DeclareModuleExports\") {\n          if (hasModuleExport) {\n            this.raise(FlowErrors.DuplicateDeclareModuleExports, bodyElement);\n          }\n          if (kind === \"ES\") {\n            this.raise(FlowErrors.AmbiguousDeclareModuleKind, bodyElement);\n          }\n          kind = \"CommonJS\";\n          hasModuleExport = true;\n        }\n      });\n\n      node.kind = kind || \"CommonJS\";\n      return this.finishNode(node, \"DeclareModule\");\n    }\n\n    flowParseDeclareExportDeclaration(\n      node: Undone<N.FlowDeclareExportDeclaration>,\n      insideModule?: boolean | null,\n    ): N.FlowDeclareExportDeclaration {\n      this.expect(tt._export);\n\n      if (this.eat(tt._default)) {\n        if (this.match(tt._function) || this.match(tt._class)) {\n          // declare export default class ...\n          // declare export default function ...\n          node.declaration = this.flowParseDeclare(this.startNode());\n        } else {\n          // declare export default [type];\n          node.declaration = this.flowParseType();\n          this.semicolon();\n        }\n        node.default = true;\n\n        return this.finishNode(node, \"DeclareExportDeclaration\");\n      } else {\n        if (\n          this.match(tt._const) ||\n          this.isLet() ||\n          ((this.isContextual(tt._type) || this.isContextual(tt._interface)) &&\n            !insideModule)\n        ) {\n          const label = this.state.value as\n            | \"const\"\n            | \"let\"\n            | \"type\"\n            | \"interface\";\n          throw this.raise(\n            FlowErrors.UnsupportedDeclareExportKind,\n            this.state.startLoc,\n            {\n              unsupportedExportKind: label,\n              suggestion: exportSuggestions[label],\n            },\n          );\n        }\n\n        if (\n          this.match(tt._var) || // declare export var ...\n          this.match(tt._function) || // declare export function ...\n          this.match(tt._class) || // declare export class ...\n          this.isContextual(tt._opaque) // declare export opaque ..\n        ) {\n          node.declaration = this.flowParseDeclare(this.startNode());\n          node.default = false;\n\n          return this.finishNode(node, \"DeclareExportDeclaration\");\n        } else if (\n          this.match(tt.star) || // declare export * from ''\n          this.match(tt.braceL) || // declare export {} ...\n          this.isContextual(tt._interface) || // declare export interface ...\n          this.isContextual(tt._type) || // declare export type ...\n          this.isContextual(tt._opaque) // declare export opaque type ...\n        ) {\n          node = this.parseExport(\n            node as Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>,\n            /* decorators */ null,\n          );\n          if (node.type === \"ExportNamedDeclaration\") {\n            node.default = false;\n            delete node.exportKind;\n            return this.castNodeTo(\n              node as N.ExportNamedDeclaration,\n              \"DeclareExportDeclaration\",\n            );\n          } else {\n            return this.castNodeTo(\n              node as N.ExportAllDeclaration,\n              \"DeclareExportAllDeclaration\",\n            );\n          }\n        }\n      }\n\n      this.unexpected();\n    }\n\n    flowParseDeclareModuleExports(\n      node: Undone<N.FlowDeclareModuleExports>,\n    ): N.FlowDeclareModuleExports {\n      this.next();\n      this.expectContextual(tt._exports);\n      node.typeAnnotation = this.flowParseTypeAnnotation();\n      this.semicolon();\n\n      return this.finishNode(node, \"DeclareModuleExports\");\n    }\n\n    flowParseDeclareTypeAlias(\n      node: Undone<N.FlowDeclareTypeAlias>,\n    ): N.FlowDeclareTypeAlias {\n      this.next();\n      const finished = this.flowParseTypeAlias(\n        node,\n      ) as unknown as N.FlowDeclareTypeAlias;\n      // Don't do finishNode as we don't want to process comments twice\n      this.castNodeTo(finished, \"DeclareTypeAlias\");\n      return finished;\n    }\n\n    flowParseDeclareOpaqueType(\n      node: Undone<N.FlowDeclareOpaqueType>,\n    ): N.FlowDeclareOpaqueType {\n      this.next();\n      const finished = this.flowParseOpaqueType(\n        node,\n        true,\n      ) as unknown as N.FlowDeclareOpaqueType;\n      // Don't do finishNode as we don't want to process comments twice\n      this.castNodeTo(finished, \"DeclareOpaqueType\");\n      return finished;\n    }\n\n    flowParseDeclareInterface(\n      node: Undone<N.FlowDeclareInterface>,\n    ): N.FlowDeclareInterface {\n      this.next();\n      this.flowParseInterfaceish(node, /* isClass */ false);\n      return this.finishNode(node, \"DeclareInterface\");\n    }\n\n    // Interfaces\n\n    flowParseInterfaceish(node: Undone<N.FlowDeclare>, isClass: boolean): void {\n      node.id = this.flowParseRestrictedIdentifier(\n        /* liberal */ !isClass,\n        /* declaration */ true,\n      );\n\n      this.scope.declareName(\n        node.id.name,\n        isClass ? BindingFlag.TYPE_FUNCTION : BindingFlag.TYPE_LEXICAL,\n        node.id.loc.start,\n      );\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        node.typeParameters = null;\n      }\n\n      node.extends = [];\n\n      if (this.eat(tt._extends)) {\n        do {\n          node.extends.push(this.flowParseInterfaceExtends());\n        } while (!isClass && this.eat(tt.comma));\n      }\n\n      if (isClass) {\n        node.implements = [];\n        node.mixins = [];\n\n        if (this.eatContextual(tt._mixins)) {\n          do {\n            node.mixins.push(this.flowParseInterfaceExtends());\n          } while (this.eat(tt.comma));\n        }\n\n        if (this.eatContextual(tt._implements)) {\n          do {\n            node.implements.push(this.flowParseInterfaceExtends());\n          } while (this.eat(tt.comma));\n        }\n      }\n\n      node.body = this.flowParseObjectType({\n        allowStatic: isClass,\n        allowExact: false,\n        allowSpread: false,\n        allowProto: isClass,\n        allowInexact: false,\n      });\n    }\n\n    flowParseInterfaceExtends(): N.FlowInterfaceExtends {\n      const node = this.startNode<N.FlowInterfaceExtends>();\n\n      node.id = this.flowParseQualifiedTypeIdentifier();\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterInstantiation();\n      } else {\n        node.typeParameters = null;\n      }\n\n      return this.finishNode(node, \"InterfaceExtends\");\n    }\n\n    flowParseInterface(node: Undone<N.FlowInterface>): N.FlowInterface {\n      this.flowParseInterfaceish(node, /* isClass */ false);\n      return this.finishNode(node, \"InterfaceDeclaration\");\n    }\n\n    checkNotUnderscore(word: string) {\n      if (word === \"_\") {\n        this.raise(\n          FlowErrors.UnexpectedReservedUnderscore,\n          this.state.startLoc,\n        );\n      }\n    }\n\n    checkReservedType(word: string, startLoc: Position, declaration?: boolean) {\n      if (!reservedTypes.has(word)) return;\n\n      this.raise(\n        declaration\n          ? FlowErrors.AssignReservedType\n          : FlowErrors.UnexpectedReservedType,\n        startLoc,\n        {\n          reservedType: word,\n        },\n      );\n    }\n\n    flowParseRestrictedIdentifier(\n      liberal?: boolean,\n      declaration?: boolean,\n    ): N.Identifier {\n      this.checkReservedType(\n        this.state.value,\n        this.state.startLoc,\n        declaration,\n      );\n      return this.parseIdentifier(liberal);\n    }\n\n    // Type aliases\n\n    flowParseTypeAlias(node: Undone<N.FlowTypeAlias>): N.FlowTypeAlias {\n      node.id = this.flowParseRestrictedIdentifier(\n        /* liberal */ false,\n        /* declaration */ true,\n      );\n      this.scope.declareName(\n        node.id.name,\n        BindingFlag.TYPE_LEXICAL,\n        node.id.loc.start,\n      );\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        node.typeParameters = null;\n      }\n\n      node.right = this.flowParseTypeInitialiser(tt.eq);\n      this.semicolon();\n\n      return this.finishNode(node, \"TypeAlias\");\n    }\n\n    flowParseOpaqueType(\n      node: Undone<N.FlowOpaqueType>,\n      declare: boolean,\n    ): N.FlowOpaqueType {\n      this.expectContextual(tt._type);\n      node.id = this.flowParseRestrictedIdentifier(\n        /* liberal */ true,\n        /* declaration */ true,\n      );\n      this.scope.declareName(\n        node.id.name,\n        BindingFlag.TYPE_LEXICAL,\n        node.id.loc.start,\n      );\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        node.typeParameters = null;\n      }\n\n      // Parse the supertype\n      node.supertype = null;\n      if (this.match(tt.colon)) {\n        node.supertype = this.flowParseTypeInitialiser(tt.colon);\n      }\n\n      node.impltype = null;\n      if (!declare) {\n        node.impltype = this.flowParseTypeInitialiser(tt.eq);\n      }\n      this.semicolon();\n\n      return this.finishNode(node, \"OpaqueType\");\n    }\n\n    // Type annotations\n\n    flowParseTypeParameter(requireDefault: boolean = false): N.TypeParameter {\n      const nodeStartLoc = this.state.startLoc;\n\n      const node = this.startNode<N.TypeParameter>();\n\n      const variance = this.flowParseVariance();\n\n      const ident = this.flowParseTypeAnnotatableIdentifier();\n      node.name = ident.name;\n      // @ts-expect-error migrate to Babel types\n      node.variance = variance;\n      // @ts-expect-error migrate to Babel types\n      node.bound = ident.typeAnnotation;\n\n      if (this.match(tt.eq)) {\n        this.eat(tt.eq);\n        // @ts-expect-error migrate to Babel types\n        node.default = this.flowParseType();\n      } else {\n        if (requireDefault) {\n          this.raise(FlowErrors.MissingTypeParamDefault, nodeStartLoc);\n        }\n      }\n\n      return this.finishNode(node, \"TypeParameter\");\n    }\n\n    flowParseTypeParameterDeclaration(): N.TypeParameterDeclaration {\n      const oldInType = this.state.inType;\n      const node = this.startNode<N.TypeParameterDeclaration>();\n      node.params = [];\n\n      this.state.inType = true;\n\n      // istanbul ignore else: this condition is already checked at all call sites\n      if (this.match(tt.lt) || this.match(tt.jsxTagStart)) {\n        this.next();\n      } else {\n        this.unexpected();\n      }\n\n      let defaultRequired = false;\n\n      do {\n        const typeParameter = this.flowParseTypeParameter(defaultRequired);\n\n        node.params.push(typeParameter);\n\n        if (typeParameter.default) {\n          defaultRequired = true;\n        }\n\n        if (!this.match(tt.gt)) {\n          this.expect(tt.comma);\n        }\n      } while (!this.match(tt.gt));\n      this.expect(tt.gt);\n\n      this.state.inType = oldInType;\n\n      return this.finishNode(node, \"TypeParameterDeclaration\");\n    }\n\n    // Parse in top level normal context if we are in a JSX context\n    flowInTopLevelContext<T>(cb: () => T): T {\n      if (this.curContext() !== tc.brace) {\n        const oldContext = this.state.context;\n        this.state.context = [oldContext[0]];\n        try {\n          return cb();\n        } finally {\n          this.state.context = oldContext;\n        }\n      } else {\n        return cb();\n      }\n    }\n\n    // Used when parsing type arguments from ES or JSX productions, where the first token\n    // has been created without state.inType. Thus we need to re-scan the lt token.\n    flowParseTypeParameterInstantiationInExpression():\n      | N.TypeParameterInstantiation\n      | undefined {\n      if (this.reScan_lt() !== tt.lt) return;\n      return this.flowParseTypeParameterInstantiation();\n    }\n\n    flowParseTypeParameterInstantiation(): N.TypeParameterInstantiation {\n      const node = this.startNode<N.TypeParameterInstantiation>();\n      const oldInType = this.state.inType;\n\n      this.state.inType = true;\n      node.params = [];\n      this.flowInTopLevelContext(() => {\n        this.expect(tt.lt);\n        const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n        this.state.noAnonFunctionType = false;\n        while (!this.match(tt.gt)) {\n          node.params.push(this.flowParseType());\n          if (!this.match(tt.gt)) {\n            this.expect(tt.comma);\n          }\n        }\n        this.state.noAnonFunctionType = oldNoAnonFunctionType;\n      });\n\n      this.state.inType = oldInType;\n      if (!this.state.inType && this.curContext() === tc.brace) {\n        // rescan `>` when we are no longer in type context and JSX parsing context\n        // since it was tokenized when `inType` is `true`.\n        this.reScan_lt_gt();\n      }\n      this.expect(tt.gt);\n\n      return this.finishNode(node, \"TypeParameterInstantiation\");\n    }\n\n    flowParseTypeParameterInstantiationCallOrNew(): N.TypeParameterInstantiation {\n      if (this.reScan_lt() !== tt.lt) return;\n      const node = this.startNode<N.TypeParameterInstantiation>();\n      const oldInType = this.state.inType;\n      node.params = [];\n\n      this.state.inType = true;\n\n      this.expect(tt.lt);\n      while (!this.match(tt.gt)) {\n        node.params.push(this.flowParseTypeOrImplicitInstantiation());\n        if (!this.match(tt.gt)) {\n          this.expect(tt.comma);\n        }\n      }\n      this.expect(tt.gt);\n\n      this.state.inType = oldInType;\n\n      return this.finishNode(node, \"TypeParameterInstantiation\");\n    }\n\n    flowParseInterfaceType(): N.FlowInterfaceType {\n      const node = this.startNode<N.FlowInterfaceType>();\n      this.expectContextual(tt._interface);\n\n      node.extends = [];\n      if (this.eat(tt._extends)) {\n        do {\n          node.extends.push(this.flowParseInterfaceExtends());\n        } while (this.eat(tt.comma));\n      }\n\n      node.body = this.flowParseObjectType({\n        allowStatic: false,\n        allowExact: false,\n        allowSpread: false,\n        allowProto: false,\n        allowInexact: false,\n      });\n\n      return this.finishNode(node, \"InterfaceTypeAnnotation\");\n    }\n\n    flowParseObjectPropertyKey(): N.Expression {\n      return this.match(tt.num) || this.match(tt.string)\n        ? super.parseExprAtom()\n        : this.parseIdentifier(true);\n    }\n\n    flowParseObjectTypeIndexer(\n      node: Undone<N.FlowObjectTypeIndexer>,\n      isStatic: boolean,\n      variance?: N.FlowVariance | null,\n    ): N.FlowObjectTypeIndexer {\n      node.static = isStatic;\n\n      // Note: bracketL has already been consumed\n      if (this.lookahead().type === tt.colon) {\n        node.id = this.flowParseObjectPropertyKey();\n        node.key = this.flowParseTypeInitialiser();\n      } else {\n        node.id = null;\n        node.key = this.flowParseType();\n      }\n      this.expect(tt.bracketR);\n      node.value = this.flowParseTypeInitialiser();\n      node.variance = variance;\n\n      return this.finishNode(node, \"ObjectTypeIndexer\");\n    }\n\n    flowParseObjectTypeInternalSlot(\n      node: Undone<N.FlowObjectTypeInternalSlot>,\n      isStatic: boolean,\n    ): N.FlowObjectTypeInternalSlot {\n      node.static = isStatic;\n      // Note: both bracketL have already been consumed\n      node.id = this.flowParseObjectPropertyKey();\n      this.expect(tt.bracketR);\n      this.expect(tt.bracketR);\n      if (this.match(tt.lt) || this.match(tt.parenL)) {\n        node.method = true;\n        node.optional = false;\n        node.value = this.flowParseObjectTypeMethodish(\n          this.startNodeAt(node.loc.start),\n        );\n      } else {\n        node.method = false;\n        if (this.eat(tt.question)) {\n          node.optional = true;\n        }\n        node.value = this.flowParseTypeInitialiser();\n      }\n      return this.finishNode(node, \"ObjectTypeInternalSlot\");\n    }\n\n    flowParseObjectTypeMethodish(\n      node: Undone<N.FlowFunctionTypeAnnotation>,\n    ): N.FlowFunctionTypeAnnotation {\n      node.params = [];\n      node.rest = null;\n      node.typeParameters = null;\n      node.this = null;\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n\n      this.expect(tt.parenL);\n      if (this.match(tt._this)) {\n        node.this = this.flowParseFunctionTypeParam(/* first */ true);\n        // match Flow parser behavior\n        node.this.name = null;\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n      while (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n        node.params.push(this.flowParseFunctionTypeParam(false));\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n\n      if (this.eat(tt.ellipsis)) {\n        node.rest = this.flowParseFunctionTypeParam(false);\n      }\n      this.expect(tt.parenR);\n      node.returnType = this.flowParseTypeInitialiser();\n\n      return this.finishNode(node, \"FunctionTypeAnnotation\");\n    }\n\n    flowParseObjectTypeCallProperty(\n      node: Undone<N.FlowObjectTypeCallProperty>,\n      isStatic: boolean,\n    ): N.FlowObjectTypeCallProperty {\n      const valueNode = this.startNode();\n      node.static = isStatic;\n      node.value = this.flowParseObjectTypeMethodish(valueNode);\n      return this.finishNode(node, \"ObjectTypeCallProperty\");\n    }\n\n    flowParseObjectType({\n      allowStatic,\n      allowExact,\n      allowSpread,\n      allowProto,\n      allowInexact,\n    }: {\n      allowStatic: boolean;\n      allowExact: boolean;\n      allowSpread: boolean;\n      allowProto: boolean;\n      allowInexact: boolean;\n    }): N.FlowObjectTypeAnnotation {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n\n      const nodeStart = this.startNode<N.FlowObjectTypeAnnotation>();\n\n      nodeStart.callProperties = [];\n      nodeStart.properties = [];\n      nodeStart.indexers = [];\n      nodeStart.internalSlots = [];\n\n      let endDelim;\n      let exact;\n      let inexact = false;\n      if (allowExact && this.match(tt.braceBarL)) {\n        this.expect(tt.braceBarL);\n        endDelim = tt.braceBarR;\n        exact = true;\n      } else {\n        this.expect(tt.braceL);\n        endDelim = tt.braceR;\n        exact = false;\n      }\n\n      nodeStart.exact = exact;\n\n      while (!this.match(endDelim)) {\n        let isStatic = false;\n        let protoStartLoc: Position | undefined | null = null;\n        let inexactStartLoc: Position | undefined | null = null;\n        const node = this.startNode();\n\n        if (allowProto && this.isContextual(tt._proto)) {\n          const lookahead = this.lookahead();\n\n          if (lookahead.type !== tt.colon && lookahead.type !== tt.question) {\n            this.next();\n            protoStartLoc = this.state.startLoc;\n            allowStatic = false;\n          }\n        }\n\n        if (allowStatic && this.isContextual(tt._static)) {\n          const lookahead = this.lookahead();\n\n          // static is a valid identifier name\n          if (lookahead.type !== tt.colon && lookahead.type !== tt.question) {\n            this.next();\n            isStatic = true;\n          }\n        }\n\n        const variance = this.flowParseVariance();\n\n        if (this.eat(tt.bracketL)) {\n          if (protoStartLoc != null) {\n            this.unexpected(protoStartLoc);\n          }\n          if (this.eat(tt.bracketL)) {\n            if (variance) {\n              this.unexpected(variance.loc.start);\n            }\n            nodeStart.internalSlots.push(\n              this.flowParseObjectTypeInternalSlot(node, isStatic),\n            );\n          } else {\n            nodeStart.indexers.push(\n              this.flowParseObjectTypeIndexer(node, isStatic, variance),\n            );\n          }\n        } else if (this.match(tt.parenL) || this.match(tt.lt)) {\n          if (protoStartLoc != null) {\n            this.unexpected(protoStartLoc);\n          }\n          if (variance) {\n            this.unexpected(variance.loc.start);\n          }\n          nodeStart.callProperties.push(\n            this.flowParseObjectTypeCallProperty(node, isStatic),\n          );\n        } else {\n          let kind = \"init\";\n\n          if (this.isContextual(tt._get) || this.isContextual(tt._set)) {\n            const lookahead = this.lookahead();\n            if (tokenIsLiteralPropertyName(lookahead.type)) {\n              kind = this.state.value;\n              this.next();\n            }\n          }\n\n          const propOrInexact = this.flowParseObjectTypeProperty(\n            node,\n            isStatic,\n            protoStartLoc,\n            variance,\n            kind,\n            allowSpread,\n            allowInexact ?? !exact,\n          );\n\n          if (propOrInexact === null) {\n            inexact = true;\n            inexactStartLoc = this.state.lastTokStartLoc;\n          } else {\n            nodeStart.properties.push(propOrInexact);\n          }\n        }\n\n        this.flowObjectTypeSemicolon();\n\n        if (\n          inexactStartLoc &&\n          !this.match(tt.braceR) &&\n          !this.match(tt.braceBarR)\n        ) {\n          this.raise(\n            FlowErrors.UnexpectedExplicitInexactInObject,\n            inexactStartLoc,\n          );\n        }\n      }\n\n      this.expect(endDelim);\n\n      /* The inexact flag should only be added on ObjectTypeAnnotations that\n       * are not the body of an interface, declare interface, or declare class.\n       * Since spreads are only allowed in object types, checking that is\n       * sufficient here.\n       */\n      if (allowSpread) {\n        nodeStart.inexact = inexact;\n      }\n\n      const out = this.finishNode(nodeStart, \"ObjectTypeAnnotation\");\n\n      this.state.inType = oldInType;\n\n      return out;\n    }\n\n    flowParseObjectTypeProperty(\n      node: Undone<N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty>,\n      isStatic: boolean,\n      protoStartLoc: Position | undefined | null,\n      variance: N.FlowVariance | undefined | null,\n      kind: string,\n      allowSpread: boolean,\n      allowInexact: boolean,\n    ): N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty | null {\n      if (this.eat(tt.ellipsis)) {\n        const isInexactToken =\n          this.match(tt.comma) ||\n          this.match(tt.semi) ||\n          this.match(tt.braceR) ||\n          this.match(tt.braceBarR);\n\n        if (isInexactToken) {\n          if (!allowSpread) {\n            this.raise(\n              FlowErrors.InexactInsideNonObject,\n              this.state.lastTokStartLoc,\n            );\n          } else if (!allowInexact) {\n            this.raise(\n              FlowErrors.InexactInsideExact,\n              this.state.lastTokStartLoc,\n            );\n          }\n          if (variance) {\n            this.raise(FlowErrors.InexactVariance, variance);\n          }\n\n          return null;\n        }\n\n        if (!allowSpread) {\n          this.raise(\n            FlowErrors.UnexpectedSpreadType,\n            this.state.lastTokStartLoc,\n          );\n        }\n        if (protoStartLoc != null) {\n          this.unexpected(protoStartLoc);\n        }\n        if (variance) {\n          this.raise(FlowErrors.SpreadVariance, variance);\n        }\n\n        node.argument = this.flowParseType();\n        return this.finishNode(node, \"ObjectTypeSpreadProperty\");\n      } else {\n        node.key = this.flowParseObjectPropertyKey();\n        node.static = isStatic;\n        node.proto = protoStartLoc != null;\n        node.kind = kind;\n\n        let optional = false;\n        if (this.match(tt.lt) || this.match(tt.parenL)) {\n          // This is a method property\n          node.method = true;\n\n          if (protoStartLoc != null) {\n            this.unexpected(protoStartLoc);\n          }\n          if (variance) {\n            this.unexpected(variance.loc.start);\n          }\n\n          node.value = this.flowParseObjectTypeMethodish(\n            this.startNodeAt(node.loc.start),\n          );\n          if (kind === \"get\" || kind === \"set\") {\n            this.flowCheckGetterSetterParams(node);\n          }\n          /** Declared classes/interfaces do not allow spread */\n          if (\n            !allowSpread &&\n            node.key.name === \"constructor\" &&\n            node.value.this\n          ) {\n            this.raise(\n              FlowErrors.ThisParamBannedInConstructor,\n              node.value.this,\n            );\n          }\n        } else {\n          if (kind !== \"init\") this.unexpected();\n\n          node.method = false;\n\n          if (this.eat(tt.question)) {\n            optional = true;\n          }\n          node.value = this.flowParseTypeInitialiser();\n          node.variance = variance;\n        }\n\n        node.optional = optional;\n\n        return this.finishNode(node, \"ObjectTypeProperty\");\n      }\n    }\n\n    // This is similar to checkGetterSetterParams, but as\n    // @babel/parser uses non estree properties we cannot reuse it here\n    flowCheckGetterSetterParams(\n      property: Undone<\n        N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty\n      >,\n    ): void {\n      const paramCount = property.kind === \"get\" ? 0 : 1;\n      const length =\n        property.value.params.length + (property.value.rest ? 1 : 0);\n\n      if (property.value.this) {\n        this.raise(\n          property.kind === \"get\"\n            ? FlowErrors.GetterMayNotHaveThisParam\n            : FlowErrors.SetterMayNotHaveThisParam,\n          property.value.this,\n        );\n      }\n\n      if (length !== paramCount) {\n        this.raise(\n          property.kind === \"get\"\n            ? Errors.BadGetterArity\n            : Errors.BadSetterArity,\n          property,\n        );\n      }\n\n      if (property.kind === \"set\" && property.value.rest) {\n        this.raise(Errors.BadSetterRestParameter, property);\n      }\n    }\n\n    flowObjectTypeSemicolon(): void {\n      if (\n        !this.eat(tt.semi) &&\n        !this.eat(tt.comma) &&\n        !this.match(tt.braceR) &&\n        !this.match(tt.braceBarR)\n      ) {\n        this.unexpected();\n      }\n    }\n\n    flowParseQualifiedTypeIdentifier(\n      startLoc?: Position,\n      id?: N.Identifier,\n    ): N.FlowQualifiedTypeIdentifier | N.Identifier {\n      startLoc ??= this.state.startLoc;\n      let node: N.Identifier | N.FlowQualifiedTypeIdentifier =\n        id || this.flowParseRestrictedIdentifier(true);\n\n      while (this.eat(tt.dot)) {\n        const node2 = this.startNodeAt<N.FlowQualifiedTypeIdentifier>(startLoc);\n        node2.qualification = node;\n        node2.id = this.flowParseRestrictedIdentifier(true);\n        node = this.finishNode(node2, \"QualifiedTypeIdentifier\");\n      }\n\n      return node;\n    }\n\n    flowParseGenericType(\n      startLoc: Position,\n      id: N.Identifier,\n    ): N.FlowGenericTypeAnnotation {\n      const node = this.startNodeAt<N.FlowGenericTypeAnnotation>(startLoc);\n\n      node.typeParameters = null;\n      node.id = this.flowParseQualifiedTypeIdentifier(startLoc, id);\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterInstantiation();\n      }\n\n      return this.finishNode(node, \"GenericTypeAnnotation\");\n    }\n\n    flowParseTypeofType(): N.FlowTypeofTypeAnnotation {\n      const node = this.startNode<N.FlowTypeofTypeAnnotation>();\n      this.expect(tt._typeof);\n      node.argument = this.flowParsePrimaryType();\n      return this.finishNode(node, \"TypeofTypeAnnotation\");\n    }\n\n    flowParseTupleType(): N.FlowTupleTypeAnnotation {\n      const node = this.startNode<N.FlowTupleTypeAnnotation>();\n      node.types = [];\n      this.expect(tt.bracketL);\n      // We allow trailing commas\n      while (this.state.pos < this.length && !this.match(tt.bracketR)) {\n        node.types.push(this.flowParseType());\n        if (this.match(tt.bracketR)) break;\n        this.expect(tt.comma);\n      }\n      this.expect(tt.bracketR);\n      return this.finishNode(node, \"TupleTypeAnnotation\");\n    }\n\n    flowParseFunctionTypeParam(first: boolean): N.FlowFunctionTypeParam {\n      let name = null;\n      let optional = false;\n      let typeAnnotation = null;\n      const node = this.startNode<N.FlowFunctionTypeParam>();\n      const lh = this.lookahead();\n      const isThis = this.state.type === tt._this;\n\n      if (lh.type === tt.colon || lh.type === tt.question) {\n        if (isThis && !first) {\n          this.raise(FlowErrors.ThisParamMustBeFirst, node);\n        }\n        name = this.parseIdentifier(isThis);\n        if (this.eat(tt.question)) {\n          optional = true;\n          if (isThis) {\n            this.raise(FlowErrors.ThisParamMayNotBeOptional, node);\n          }\n        }\n        typeAnnotation = this.flowParseTypeInitialiser();\n      } else {\n        typeAnnotation = this.flowParseType();\n      }\n      node.name = name;\n      node.optional = optional;\n      node.typeAnnotation = typeAnnotation;\n      return this.finishNode(node, \"FunctionTypeParam\");\n    }\n\n    reinterpretTypeAsFunctionTypeParam(\n      type: N.FlowType,\n    ): N.FlowFunctionTypeParam {\n      const node = this.startNodeAt<N.FlowFunctionTypeParam>(type.loc.start);\n      node.name = null;\n      node.optional = false;\n      node.typeAnnotation = type;\n      return this.finishNode(node, \"FunctionTypeParam\");\n    }\n\n    flowParseFunctionTypeParams(params: N.FlowFunctionTypeParam[] = []): {\n      params: N.FlowFunctionTypeParam[];\n      rest: N.FlowFunctionTypeParam | undefined | null;\n      _this: N.FlowFunctionTypeParam | undefined | null;\n    } {\n      let rest: N.FlowFunctionTypeParam | undefined | null = null;\n      let _this: N.FlowFunctionTypeParam | undefined | null = null;\n      if (this.match(tt._this)) {\n        _this = this.flowParseFunctionTypeParam(/* first */ true);\n        // match Flow parser behavior\n        _this.name = null;\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n      while (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n        params.push(this.flowParseFunctionTypeParam(false));\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n      if (this.eat(tt.ellipsis)) {\n        rest = this.flowParseFunctionTypeParam(false);\n      }\n      return { params, rest, _this };\n    }\n\n    flowIdentToTypeAnnotation(\n      startLoc: Position,\n      node: Undone<N.FlowType>,\n      id: N.Identifier,\n    ): N.FlowType {\n      switch (id.name) {\n        case \"any\":\n          return this.finishNode(node, \"AnyTypeAnnotation\");\n\n        case \"bool\":\n        case \"boolean\":\n          return this.finishNode(node, \"BooleanTypeAnnotation\");\n\n        case \"mixed\":\n          return this.finishNode(node, \"MixedTypeAnnotation\");\n\n        case \"empty\":\n          return this.finishNode(node, \"EmptyTypeAnnotation\");\n\n        case \"number\":\n          return this.finishNode(node, \"NumberTypeAnnotation\");\n\n        case \"string\":\n          return this.finishNode(node, \"StringTypeAnnotation\");\n\n        case \"symbol\":\n          return this.finishNode(node, \"SymbolTypeAnnotation\");\n\n        default:\n          this.checkNotUnderscore(id.name);\n          return this.flowParseGenericType(startLoc, id);\n      }\n    }\n\n    // The parsing of types roughly parallels the parsing of expressions, and\n    // primary types are kind of like primary expressions...they're the\n    // primitives with which other types are constructed.\n    flowParsePrimaryType(): N.FlowType {\n      const startLoc = this.state.startLoc;\n      const node = this.startNode<N.FlowOtherTypeAnnotation>();\n      let tmp;\n      let type;\n      let isGroupedType = false;\n      const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n\n      switch (this.state.type) {\n        case tt.braceL:\n          return this.flowParseObjectType({\n            allowStatic: false,\n            allowExact: false,\n            allowSpread: true,\n            allowProto: false,\n            allowInexact: true,\n          });\n\n        case tt.braceBarL:\n          return this.flowParseObjectType({\n            allowStatic: false,\n            allowExact: true,\n            allowSpread: true,\n            allowProto: false,\n            allowInexact: false,\n          });\n\n        case tt.bracketL:\n          this.state.noAnonFunctionType = false;\n          type = this.flowParseTupleType();\n          this.state.noAnonFunctionType = oldNoAnonFunctionType;\n          return type;\n\n        case tt.lt: {\n          const node = this.startNode<N.FlowFunctionTypeAnnotation>();\n          node.typeParameters = this.flowParseTypeParameterDeclaration();\n          this.expect(tt.parenL);\n          tmp = this.flowParseFunctionTypeParams();\n          node.params = tmp.params;\n          node.rest = tmp.rest;\n          node.this = tmp._this;\n          this.expect(tt.parenR);\n\n          this.expect(tt.arrow);\n\n          node.returnType = this.flowParseType();\n\n          return this.finishNode(node, \"FunctionTypeAnnotation\");\n        }\n\n        case tt.parenL: {\n          const node = this.startNode<N.FlowFunctionTypeAnnotation>();\n          this.next();\n\n          // Check to see if this is actually a grouped type\n          if (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n            if (tokenIsIdentifier(this.state.type) || this.match(tt._this)) {\n              const token = this.lookahead().type;\n              isGroupedType = token !== tt.question && token !== tt.colon;\n            } else {\n              isGroupedType = true;\n            }\n          }\n\n          if (isGroupedType) {\n            this.state.noAnonFunctionType = false;\n            type = this.flowParseType();\n            this.state.noAnonFunctionType = oldNoAnonFunctionType;\n\n            // A `,` or a `) =>` means this is an anonymous function type\n            if (\n              this.state.noAnonFunctionType ||\n              !(\n                this.match(tt.comma) ||\n                (this.match(tt.parenR) && this.lookahead().type === tt.arrow)\n              )\n            ) {\n              this.expect(tt.parenR);\n              return type;\n            } else {\n              // Eat a comma if there is one\n              this.eat(tt.comma);\n            }\n          }\n\n          if (type) {\n            tmp = this.flowParseFunctionTypeParams([\n              this.reinterpretTypeAsFunctionTypeParam(type),\n            ]);\n          } else {\n            tmp = this.flowParseFunctionTypeParams();\n          }\n\n          node.params = tmp.params;\n          node.rest = tmp.rest;\n          node.this = tmp._this;\n\n          this.expect(tt.parenR);\n\n          this.expect(tt.arrow);\n\n          node.returnType = this.flowParseType();\n\n          node.typeParameters = null;\n\n          return this.finishNode(node, \"FunctionTypeAnnotation\");\n        }\n\n        case tt.string:\n          return this.parseLiteral<N.StringLiteralTypeAnnotation>(\n            this.state.value,\n            \"StringLiteralTypeAnnotation\",\n          );\n\n        case tt._true:\n        case tt._false:\n          node.value = this.match(tt._true);\n          this.next();\n          return this.finishNode(\n            node as Undone<N.BooleanLiteralTypeAnnotation>,\n            \"BooleanLiteralTypeAnnotation\",\n          );\n\n        case tt.plusMin:\n          if (this.state.value === \"-\") {\n            this.next();\n            if (this.match(tt.num)) {\n              return this.parseLiteralAtNode<N.NumberLiteralTypeAnnotation>(\n                -this.state.value,\n                \"NumberLiteralTypeAnnotation\",\n                node,\n              );\n            }\n\n            if (this.match(tt.bigint)) {\n              return this.parseLiteralAtNode<N.BigIntLiteralTypeAnnotation>(\n                -this.state.value,\n                \"BigIntLiteralTypeAnnotation\",\n                node,\n              );\n            }\n\n            throw this.raise(\n              FlowErrors.UnexpectedSubtractionOperand,\n              this.state.startLoc,\n            );\n          }\n          this.unexpected();\n          return;\n        case tt.num:\n          return this.parseLiteral(\n            this.state.value,\n            \"NumberLiteralTypeAnnotation\",\n          );\n\n        case tt.bigint:\n          return this.parseLiteral(\n            this.state.value,\n            \"BigIntLiteralTypeAnnotation\",\n          );\n\n        case tt._void:\n          this.next();\n          return this.finishNode(node, \"VoidTypeAnnotation\");\n\n        case tt._null:\n          this.next();\n          return this.finishNode(node, \"NullLiteralTypeAnnotation\");\n\n        case tt._this:\n          this.next();\n          return this.finishNode(node, \"ThisTypeAnnotation\");\n\n        case tt.star:\n          this.next();\n          return this.finishNode(node, \"ExistsTypeAnnotation\");\n\n        case tt._typeof:\n          return this.flowParseTypeofType();\n\n        default:\n          if (tokenIsKeyword(this.state.type)) {\n            const label = tokenLabelName(this.state.type);\n            this.next();\n            return super.createIdentifier(node as Undone<N.Identifier>, label);\n          } else if (tokenIsIdentifier(this.state.type)) {\n            if (this.isContextual(tt._interface)) {\n              return this.flowParseInterfaceType();\n            }\n\n            return this.flowIdentToTypeAnnotation(\n              startLoc,\n              node,\n              this.parseIdentifier(),\n            );\n          }\n      }\n\n      this.unexpected();\n    }\n\n    flowParsePostfixType(): N.FlowType {\n      const startLoc = this.state.startLoc;\n      let type = this.flowParsePrimaryType();\n      let seenOptionalIndexedAccess = false;\n      while (\n        (this.match(tt.bracketL) || this.match(tt.questionDot)) &&\n        !this.canInsertSemicolon()\n      ) {\n        const node = this.startNodeAt<N.FlowOtherTypeAnnotation>(startLoc);\n        const optional = this.eat(tt.questionDot);\n        seenOptionalIndexedAccess = seenOptionalIndexedAccess || optional;\n        this.expect(tt.bracketL);\n        if (!optional && this.match(tt.bracketR)) {\n          node.elementType = type;\n          this.next(); // eat `]`\n          type = this.finishNode(node, \"ArrayTypeAnnotation\");\n        } else {\n          node.objectType = type;\n          node.indexType = this.flowParseType();\n          this.expect(tt.bracketR);\n          if (seenOptionalIndexedAccess) {\n            node.optional = optional;\n            type = this.finishNode<N.FlowOptionalIndexedAccessType>(\n              // @ts-expect-error todo(flow->ts)\n              node,\n              \"OptionalIndexedAccessType\",\n            );\n          } else {\n            type = this.finishNode<N.FlowIndexedAccessType>(\n              // @ts-expect-error todo(flow->ts)\n              node,\n              \"IndexedAccessType\",\n            );\n          }\n        }\n      }\n      return type;\n    }\n\n    flowParsePrefixType(): N.FlowType {\n      const node = this.startNode<N.FlowOtherTypeAnnotation>();\n      if (this.eat(tt.question)) {\n        node.typeAnnotation = this.flowParsePrefixType();\n        return this.finishNode(node, \"NullableTypeAnnotation\");\n      } else {\n        return this.flowParsePostfixType();\n      }\n    }\n\n    flowParseAnonFunctionWithoutParens(): N.FlowType {\n      const param = this.flowParsePrefixType();\n      if (!this.state.noAnonFunctionType && this.eat(tt.arrow)) {\n        // TODO: This should be a type error. Passing in a SourceLocation, and it expects a Position.\n        const node = this.startNodeAt<N.FlowFunctionTypeAnnotation>(\n          param.loc.start,\n        );\n        node.params = [this.reinterpretTypeAsFunctionTypeParam(param)];\n        node.rest = null;\n        node.this = null;\n        node.returnType = this.flowParseType();\n        node.typeParameters = null;\n        return this.finishNode(node, \"FunctionTypeAnnotation\");\n      }\n      return param;\n    }\n\n    flowParseIntersectionType(): N.FlowType {\n      const node = this.startNode<N.FlowOtherTypeAnnotation>();\n      this.eat(tt.bitwiseAND);\n      const type = this.flowParseAnonFunctionWithoutParens();\n      node.types = [type];\n      while (this.eat(tt.bitwiseAND)) {\n        node.types.push(this.flowParseAnonFunctionWithoutParens());\n      }\n      return node.types.length === 1\n        ? type\n        : this.finishNode(node, \"IntersectionTypeAnnotation\");\n    }\n\n    flowParseUnionType(): N.FlowType {\n      const node = this.startNode<N.FlowOtherTypeAnnotation>();\n      this.eat(tt.bitwiseOR);\n      const type = this.flowParseIntersectionType();\n      node.types = [type];\n      while (this.eat(tt.bitwiseOR)) {\n        node.types.push(this.flowParseIntersectionType());\n      }\n      return node.types.length === 1\n        ? type\n        : this.finishNode(node, \"UnionTypeAnnotation\");\n    }\n\n    flowParseType(): N.FlowType {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      const type = this.flowParseUnionType();\n      this.state.inType = oldInType;\n      return type;\n    }\n\n    flowParseTypeOrImplicitInstantiation(): N.FlowType {\n      if (this.state.type === tt.name && this.state.value === \"_\") {\n        const startLoc = this.state.startLoc;\n        const node = this.parseIdentifier();\n        return this.flowParseGenericType(startLoc, node);\n      } else {\n        return this.flowParseType();\n      }\n    }\n\n    flowParseTypeAnnotation(): N.TypeAnnotation {\n      const node = this.startNode<N.TypeAnnotation>();\n      node.typeAnnotation = this.flowParseTypeInitialiser();\n      return this.finishNode(node, \"TypeAnnotation\");\n    }\n\n    flowParseTypeAnnotatableIdentifier(\n      allowPrimitiveOverride?: boolean,\n    ): N.Identifier {\n      const ident = allowPrimitiveOverride\n        ? this.parseIdentifier()\n        : this.flowParseRestrictedIdentifier();\n      if (this.match(tt.colon)) {\n        ident.typeAnnotation = this.flowParseTypeAnnotation();\n        this.resetEndLocation(ident);\n      }\n      return ident;\n    }\n\n    typeCastToParameter(node: N.TypeCastExpression): N.Expression {\n      (node.expression as N.Identifier).typeAnnotation = node.typeAnnotation;\n\n      this.resetEndLocation(node.expression, node.typeAnnotation.loc.end);\n\n      return node.expression;\n    }\n\n    flowParseVariance(): N.FlowVariance | undefined | null {\n      let variance = null;\n      if (this.match(tt.plusMin)) {\n        variance = this.startNode<N.FlowVariance>();\n        if (this.state.value === \"+\") {\n          variance.kind = \"plus\";\n        } else {\n          variance.kind = \"minus\";\n        }\n        this.next();\n        return this.finishNode(variance, \"Variance\");\n      }\n      return variance;\n    }\n\n    // ==================================\n    // Overrides\n    // ==================================\n\n    parseFunctionBody(\n      node: N.Function,\n      allowExpressionBody?: boolean | null,\n      isMethod: boolean = false,\n    ): void {\n      if (allowExpressionBody) {\n        this.forwardNoArrowParamsConversionAt(node, () =>\n          super.parseFunctionBody(node, true, isMethod),\n        );\n        return;\n      }\n\n      super.parseFunctionBody(node, false, isMethod);\n    }\n\n    parseFunctionBodyAndFinish<\n      T extends\n        | N.Function\n        | N.TSDeclareMethod\n        | N.TSDeclareFunction\n        | N.ClassPrivateMethod,\n    >(node: Undone<T>, type: T[\"type\"], isMethod: boolean = false): T {\n      if (this.match(tt.colon)) {\n        const typeNode = this.startNode<N.TypeAnnotation>();\n\n        [\n          typeNode.typeAnnotation,\n          // @ts-expect-error predicate may not exist\n          node.predicate,\n        ] = this.flowParseTypeAndPredicateInitialiser();\n\n        node.returnType = typeNode.typeAnnotation\n          ? this.finishNode(typeNode, \"TypeAnnotation\")\n          : null;\n      }\n\n      return super.parseFunctionBodyAndFinish(node, type, isMethod);\n    }\n\n    // interfaces and enums\n    parseStatementLike(flags: ParseStatementFlag): N.Statement {\n      // strict mode handling of `interface` since it's a reserved word\n      if (this.state.strict && this.isContextual(tt._interface)) {\n        const lookahead = this.lookahead();\n        if (tokenIsKeywordOrIdentifier(lookahead.type)) {\n          const node = this.startNode<N.FlowInterface>();\n          this.next();\n          return this.flowParseInterface(node);\n        }\n      } else if (this.isContextual(tt._enum)) {\n        const node = this.startNode();\n        this.next();\n        return this.flowParseEnumDeclaration(node);\n      }\n      const stmt = super.parseStatementLike(flags);\n      // We will parse a flow pragma in any comment before the first statement.\n      if (this.flowPragma === undefined && !this.isValidDirective(stmt)) {\n        this.flowPragma = null;\n      }\n      return stmt;\n    }\n\n    // declares, interfaces and type aliases\n    parseExpressionStatement(\n      node: N.ExpressionStatement,\n      expr: N.Expression,\n      decorators: N.Decorator[] | null,\n    ): N.ExpressionStatement {\n      if (expr.type === \"Identifier\") {\n        if (expr.name === \"declare\") {\n          if (\n            this.match(tt._class) ||\n            tokenIsIdentifier(this.state.type) ||\n            this.match(tt._function) ||\n            this.match(tt._var) ||\n            this.match(tt._export)\n          ) {\n            // @ts-expect-error: refine typings\n            return this.flowParseDeclare(node);\n          }\n        } else if (tokenIsIdentifier(this.state.type)) {\n          if (expr.name === \"interface\") {\n            // @ts-expect-error: refine typings\n            return this.flowParseInterface(node);\n          } else if (expr.name === \"type\") {\n            // @ts-expect-error: refine typings\n            return this.flowParseTypeAlias(node);\n          } else if (expr.name === \"opaque\") {\n            // @ts-expect-error: refine typings\n            return this.flowParseOpaqueType(node, false);\n          }\n        }\n      }\n\n      return super.parseExpressionStatement(node, expr, decorators);\n    }\n\n    // export type\n    shouldParseExportDeclaration(): boolean {\n      const { type } = this.state;\n      if (type === tt._enum || tokenIsFlowInterfaceOrTypeOrOpaque(type)) {\n        return !this.state.containsEsc;\n      }\n      return super.shouldParseExportDeclaration();\n    }\n\n    isExportDefaultSpecifier(): boolean {\n      const { type } = this.state;\n      if (type === tt._enum || tokenIsFlowInterfaceOrTypeOrOpaque(type)) {\n        return this.state.containsEsc;\n      }\n\n      return super.isExportDefaultSpecifier();\n    }\n\n    parseExportDefaultExpression() {\n      if (this.isContextual(tt._enum)) {\n        const node = this.startNode();\n        this.next();\n        return this.flowParseEnumDeclaration(node);\n      }\n      return super.parseExportDefaultExpression();\n    }\n\n    parseConditional(\n      expr: N.Expression,\n\n      startLoc: Position,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.Expression {\n      if (!this.match(tt.question)) return expr;\n\n      if (this.state.maybeInArrowParameters) {\n        const nextCh = this.lookaheadCharCode();\n        // These tokens cannot start an expression, so if one of them follows\n        // ? then we are probably in an arrow function parameters list and we\n        // don't parse the conditional expression.\n        if (\n          nextCh === charCodes.comma || // (a?, b) => c\n          nextCh === charCodes.equalsTo || // (a? = b) => c\n          nextCh === charCodes.colon || // (a?: b) => c\n          nextCh === charCodes.rightParenthesis // (a?) => c\n        ) {\n          /*:: invariant(refExpressionErrors != null) */\n          this.setOptionalParametersError(refExpressionErrors);\n          return expr;\n        }\n      }\n\n      this.expect(tt.question);\n      const state = this.state.clone();\n      const originalNoArrowAt = this.state.noArrowAt;\n      const node = this.startNodeAt<N.ConditionalExpression>(startLoc);\n      let { consequent, failed } = this.tryParseConditionalConsequent();\n      let [valid, invalid] = this.getArrowLikeExpressions(consequent);\n\n      if (failed || invalid.length > 0) {\n        const noArrowAt = [...originalNoArrowAt];\n\n        if (invalid.length > 0) {\n          this.state = state;\n          this.state.noArrowAt = noArrowAt;\n\n          for (let i = 0; i < invalid.length; i++) {\n            noArrowAt.push(invalid[i].start);\n          }\n\n          ({ consequent, failed } = this.tryParseConditionalConsequent());\n          [valid, invalid] = this.getArrowLikeExpressions(consequent);\n        }\n\n        if (failed && valid.length > 1) {\n          // if there are two or more possible correct ways of parsing, throw an\n          // error.\n          // e.g.   Source: a ? (b): c => (d): e => f\n          //      Result 1: a ? b : (c => ((d): e => f))\n          //      Result 2: a ? ((b): c => d) : (e => f)\n          this.raise(FlowErrors.AmbiguousConditionalArrow, state.startLoc);\n        }\n\n        if (failed && valid.length === 1) {\n          this.state = state;\n          noArrowAt.push(valid[0].start);\n          this.state.noArrowAt = noArrowAt;\n          ({ consequent, failed } = this.tryParseConditionalConsequent());\n        }\n      }\n\n      this.getArrowLikeExpressions(consequent, true);\n\n      this.state.noArrowAt = originalNoArrowAt;\n      this.expect(tt.colon);\n\n      node.test = expr;\n      node.consequent = consequent;\n      node.alternate = this.forwardNoArrowParamsConversionAt(node, () =>\n        this.parseMaybeAssign(undefined, undefined),\n      );\n\n      return this.finishNode(node, \"ConditionalExpression\");\n    }\n\n    tryParseConditionalConsequent(): {\n      consequent: N.Expression;\n      failed: boolean;\n    } {\n      this.state.noArrowParamsConversionAt.push(this.state.start);\n\n      const consequent = this.parseMaybeAssignAllowIn();\n      const failed = !this.match(tt.colon);\n\n      this.state.noArrowParamsConversionAt.pop();\n\n      return { consequent, failed };\n    }\n\n    // Given an expression, walks through out its arrow functions whose body is\n    // an expression and through out conditional expressions. It returns every\n    // function which has been parsed with a return type but could have been\n    // parenthesized expressions.\n    // These functions are separated into two arrays: one containing the ones\n    // whose parameters can be converted to assignable lists, one containing the\n    // others.\n    getArrowLikeExpressions(\n      node: N.Expression,\n      disallowInvalid?: boolean,\n    ): [N.ArrowFunctionExpression[], N.ArrowFunctionExpression[]] {\n      const stack = [node];\n      const arrows: N.ArrowFunctionExpression[] = [];\n\n      while (stack.length !== 0) {\n        const node = stack.pop();\n        if (\n          node.type === \"ArrowFunctionExpression\" &&\n          node.body.type !== \"BlockStatement\"\n        ) {\n          if (node.typeParameters || !node.returnType) {\n            // This is an arrow expression without ambiguity, so check its parameters\n            this.finishArrowValidation(node);\n          } else {\n            arrows.push(node);\n          }\n          stack.push(node.body);\n        } else if (node.type === \"ConditionalExpression\") {\n          stack.push(node.consequent);\n          stack.push(node.alternate);\n        }\n      }\n\n      if (disallowInvalid) {\n        arrows.forEach(node => this.finishArrowValidation(node));\n        return [arrows, []];\n      }\n\n      return partition(arrows, node =>\n        node.params.every(param => this.isAssignable(param, true)),\n      );\n    }\n\n    finishArrowValidation(node: N.ArrowFunctionExpression) {\n      this.toAssignableList(\n        // node.params is Expression[] instead of $ReadOnlyArray<Pattern> because it\n        // has not been converted yet.\n        node.params as any as N.Expression[],\n        node.extra?.trailingCommaLoc,\n        /* isLHS */ false,\n      );\n      // Enter scope, as checkParams defines bindings\n      this.scope.enter(ScopeFlag.FUNCTION | ScopeFlag.ARROW);\n      // Use super's method to force the parameters to be checked\n      super.checkParams(node, false, true);\n      this.scope.exit();\n    }\n\n    forwardNoArrowParamsConversionAt<T>(\n      node: Undone<N.Node>,\n      parse: () => T,\n    ): T {\n      let result: T;\n      if (\n        this.state.noArrowParamsConversionAt.includes(\n          this.offsetToSourcePos(node.start),\n        )\n      ) {\n        this.state.noArrowParamsConversionAt.push(this.state.start);\n        result = parse();\n        this.state.noArrowParamsConversionAt.pop();\n      } else {\n        result = parse();\n      }\n\n      return result;\n    }\n\n    parseParenItem<T extends N.Expression | N.RestElement | N.SpreadElement>(\n      node: T,\n      startLoc: Position,\n    ): T | N.TypeCastExpression | N.TsTypeCastExpression {\n      const newNode = super.parseParenItem(node, startLoc);\n      if (this.eat(tt.question)) {\n        (newNode as N.Identifier).optional = true;\n        // Include questionmark in location of node\n        // Don't use this.finishNode() as otherwise we might process comments twice and\n        // include already consumed parens\n        this.resetEndLocation(node);\n      }\n\n      if (this.match(tt.colon)) {\n        const typeCastNode = this.startNodeAt<N.TypeCastExpression>(startLoc);\n        typeCastNode.expression = newNode as N.Expression;\n        typeCastNode.typeAnnotation = this.flowParseTypeAnnotation();\n\n        return this.finishNode(typeCastNode, \"TypeCastExpression\");\n      }\n\n      return newNode;\n    }\n\n    assertModuleNodeAllowed(node: N.Node) {\n      if (\n        (node.type === \"ImportDeclaration\" &&\n          (node.importKind === \"type\" || node.importKind === \"typeof\")) ||\n        (node.type === \"ExportNamedDeclaration\" &&\n          node.exportKind === \"type\") ||\n        (node.type === \"ExportAllDeclaration\" && node.exportKind === \"type\")\n      ) {\n        // Allow Flowtype imports and exports in all conditions because\n        // Flow itself does not care about 'sourceType'.\n        return;\n      }\n\n      super.assertModuleNodeAllowed(node);\n    }\n\n    parseExportDeclaration(\n      node: N.ExportNamedDeclaration,\n    ): N.Declaration | undefined | null {\n      if (this.isContextual(tt._type)) {\n        node.exportKind = \"type\";\n\n        const declarationNode = this.startNode();\n        this.next();\n\n        if (this.match(tt.braceL)) {\n          // export type { foo, bar };\n          node.specifiers = this.parseExportSpecifiers(\n            /* isInTypeExport */ true,\n          );\n          super.parseExportFrom(node);\n          return null;\n        } else {\n          // export type Foo = Bar;\n          // @ts-expect-error: refine typings\n          return this.flowParseTypeAlias(declarationNode);\n        }\n      } else if (this.isContextual(tt._opaque)) {\n        node.exportKind = \"type\";\n\n        const declarationNode = this.startNode();\n        this.next();\n        // export opaque type Foo = Bar;\n        // @ts-expect-error: refine typings\n        return this.flowParseOpaqueType(declarationNode, false);\n      } else if (this.isContextual(tt._interface)) {\n        node.exportKind = \"type\";\n        const declarationNode = this.startNode();\n        this.next();\n        // @ts-expect-error: refine typings\n        return this.flowParseInterface(declarationNode);\n      } else if (this.isContextual(tt._enum)) {\n        node.exportKind = \"value\";\n        const declarationNode = this.startNode();\n        this.next();\n        // @ts-expect-error: refine typings\n        return this.flowParseEnumDeclaration(declarationNode);\n      } else {\n        return super.parseExportDeclaration(node);\n      }\n    }\n\n    eatExportStar(\n      node: Undone<N.Node>,\n    ): node is Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration> {\n      if (super.eatExportStar(node)) return true;\n\n      if (this.isContextual(tt._type) && this.lookahead().type === tt.star) {\n        (\n          node as Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>\n        ).exportKind = \"type\";\n        this.next();\n        this.next();\n        return true;\n      }\n\n      return false;\n    }\n\n    maybeParseExportNamespaceSpecifier(\n      node: Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>,\n    ): node is Undone<N.ExportNamedDeclaration> {\n      const { startLoc } = this.state;\n      const hasNamespace = super.maybeParseExportNamespaceSpecifier(node);\n      if (hasNamespace && node.exportKind === \"type\") {\n        this.unexpected(startLoc);\n      }\n      return hasNamespace;\n    }\n\n    parseClassId(\n      node: N.Class,\n      isStatement: boolean,\n      optionalId?: boolean | null,\n    ) {\n      super.parseClassId(node, isStatement, optionalId);\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n    }\n\n    parseClassMember(\n      classBody: N.ClassBody,\n      member: any,\n      state: N.ParseClassMemberState,\n    ): void {\n      const { startLoc } = this.state;\n      if (this.isContextual(tt._declare)) {\n        if (super.parseClassMemberFromModifier(classBody, member)) {\n          // 'declare' is a class element name\n          return;\n        }\n\n        member.declare = true;\n      }\n\n      super.parseClassMember(classBody, member, state);\n\n      if (member.declare) {\n        if (\n          member.type !== \"ClassProperty\" &&\n          member.type !== \"ClassPrivateProperty\" &&\n          member.type !== \"PropertyDefinition\" // Used by estree plugin\n        ) {\n          this.raise(FlowErrors.DeclareClassElement, startLoc);\n        } else if (member.value) {\n          this.raise(FlowErrors.DeclareClassFieldInitializer, member.value);\n        }\n      }\n    }\n\n    isIterator(word: string): boolean {\n      return word === \"iterator\" || word === \"asyncIterator\";\n    }\n\n    readIterator(): void {\n      const word = super.readWord1();\n      const fullWord = \"@@\" + word;\n\n      // Allow @@iterator and @@asyncIterator as a identifier only inside type\n      if (!this.isIterator(word) || !this.state.inType) {\n        this.raise(Errors.InvalidIdentifier, this.state.curPosition(), {\n          identifierName: fullWord,\n        });\n      }\n\n      this.finishToken(tt.name, fullWord);\n    }\n\n    // ensure that inside flow types, we bypass the jsx parser plugin\n    getTokenFromCode(code: number): void {\n      const next = this.input.charCodeAt(this.state.pos + 1);\n      if (code === charCodes.leftCurlyBrace && next === charCodes.verticalBar) {\n        this.finishOp(tt.braceBarL, 2);\n      } else if (\n        this.state.inType &&\n        (code === charCodes.greaterThan || code === charCodes.lessThan)\n      ) {\n        this.finishOp(code === charCodes.greaterThan ? tt.gt : tt.lt, 1);\n      } else if (this.state.inType && code === charCodes.questionMark) {\n        if (next === charCodes.dot) {\n          this.finishOp(tt.questionDot, 2);\n        } else {\n          // allow double nullable types in Flow: ??string\n          this.finishOp(tt.question, 1);\n        }\n      } else if (\n        isIteratorStart(code, next, this.input.charCodeAt(this.state.pos + 2))\n      ) {\n        this.state.pos += 2; // eat \"@@\"\n        this.readIterator();\n      } else {\n        super.getTokenFromCode(code);\n      }\n    }\n\n    isAssignable(node: N.Node, isBinding?: boolean): boolean {\n      if (node.type === \"TypeCastExpression\") {\n        return this.isAssignable(node.expression, isBinding);\n      } else {\n        return super.isAssignable(node, isBinding);\n      }\n    }\n\n    toAssignable(node: N.Node, isLHS: boolean = false): void {\n      if (\n        !isLHS &&\n        node.type === \"AssignmentExpression\" &&\n        node.left.type === \"TypeCastExpression\"\n      ) {\n        node.left = this.typeCastToParameter(node.left) as N.Assignable;\n      }\n      super.toAssignable(node, isLHS);\n    }\n\n    // turn type casts that we found in function parameter head into type annotated params\n    toAssignableList(\n      exprList: N.Expression[],\n      trailingCommaLoc: Position | undefined | null,\n      isLHS: boolean,\n    ): void {\n      for (let i = 0; i < exprList.length; i++) {\n        const expr = exprList[i];\n        if (expr?.type === \"TypeCastExpression\") {\n          exprList[i] = this.typeCastToParameter(expr);\n        }\n      }\n      super.toAssignableList(exprList, trailingCommaLoc, isLHS);\n    }\n\n    // this is a list of nodes, from something like a call expression, we need to filter the\n    // type casts that we've found that are illegal in this context\n    toReferencedList(\n      exprList:\n        | ReadonlyArray<N.Expression | N.SpreadElement>\n        | ReadonlyArray<N.Expression | N.RestElement>,\n      isParenthesizedExpr?: boolean,\n    ):\n      | ReadonlyArray<N.Expression | N.SpreadElement>\n      | ReadonlyArray<N.Expression | N.RestElement> {\n      for (let i = 0; i < exprList.length; i++) {\n        const expr = exprList[i];\n        if (\n          expr &&\n          expr.type === \"TypeCastExpression\" &&\n          !expr.extra?.parenthesized &&\n          (exprList.length > 1 || !isParenthesizedExpr)\n        ) {\n          this.raise(FlowErrors.TypeCastInPattern, expr.typeAnnotation);\n        }\n      }\n\n      return exprList;\n    }\n\n    parseArrayLike(\n      close: TokenType,\n      canBePattern: boolean,\n      isTuple: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.ArrayExpression | N.TupleExpression {\n      const node = super.parseArrayLike(\n        close,\n        canBePattern,\n        isTuple,\n        refExpressionErrors,\n      );\n\n      // This could be an array pattern:\n      //   ([a: string, b: string]) => {}\n      // In this case, we don't have to call toReferencedList. We will\n      // call it, if needed, when we are sure that it is a parenthesized\n      // expression by calling toReferencedListDeep.\n      if (canBePattern && !this.state.maybeInArrowParameters) {\n        this.toReferencedList(node.elements);\n      }\n\n      return node;\n    }\n\n    isValidLVal(type: string, isParenthesized: boolean, binding: BindingFlag) {\n      return (\n        type === \"TypeCastExpression\" ||\n        super.isValidLVal(type, isParenthesized, binding)\n      );\n    }\n\n    // parse class property type annotations\n    parseClassProperty(node: N.ClassProperty): N.ClassProperty {\n      if (this.match(tt.colon)) {\n        node.typeAnnotation = this.flowParseTypeAnnotation();\n      }\n      return super.parseClassProperty(node);\n    }\n\n    parseClassPrivateProperty(\n      node: N.ClassPrivateProperty,\n    ): N.ClassPrivateProperty {\n      if (this.match(tt.colon)) {\n        node.typeAnnotation = this.flowParseTypeAnnotation();\n      }\n      return super.parseClassPrivateProperty(node);\n    }\n\n    // determine whether or not we're currently in the position where a class method would appear\n    isClassMethod(): boolean {\n      return this.match(tt.lt) || super.isClassMethod();\n    }\n\n    // determine whether or not we're currently in the position where a class property would appear\n    isClassProperty(): boolean {\n      return this.match(tt.colon) || super.isClassProperty();\n    }\n\n    isNonstaticConstructor(method: N.ClassMethod | N.ClassProperty): boolean {\n      return !this.match(tt.colon) && super.isNonstaticConstructor(method);\n    }\n\n    // parse type parameters for class methods\n    pushClassMethod(\n      classBody: N.ClassBody,\n      method: N.ClassMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowsDirectSuper: boolean,\n    ): void {\n      if ((method as any).variance) {\n        this.unexpected((method as any).variance.loc.start);\n      }\n      delete (method as any).variance;\n      if (this.match(tt.lt)) {\n        method.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n\n      super.pushClassMethod(\n        classBody,\n        method,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowsDirectSuper,\n      );\n\n      if (method.params && isConstructor) {\n        const params = method.params;\n        if (params.length > 0 && this.isThisParam(params[0])) {\n          this.raise(FlowErrors.ThisParamBannedInConstructor, method);\n        }\n        // estree support\n      } else if (\n        // @ts-expect-error TS does not know about the fact that estree can replace ClassMethod with MethodDefinition\n        method.type === \"MethodDefinition\" &&\n        isConstructor &&\n        // @ts-expect-error estree\n        method.value.params\n      ) {\n        // @ts-expect-error estree\n        const params = method.value.params;\n        if (params.length > 0 && this.isThisParam(params[0])) {\n          this.raise(FlowErrors.ThisParamBannedInConstructor, method);\n        }\n      }\n    }\n\n    pushClassPrivateMethod(\n      classBody: N.ClassBody,\n      method: N.ClassPrivateMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n    ): void {\n      if ((method as any).variance) {\n        this.unexpected((method as any).variance.loc.start);\n      }\n      delete (method as any).variance;\n      if (this.match(tt.lt)) {\n        method.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n\n      super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n    }\n\n    // parse a the super class type parameters and implements\n    parseClassSuper(node: N.Class): void {\n      super.parseClassSuper(node);\n      if (\n        node.superClass &&\n        (this.match(tt.lt) ||\n          // handles `class extends C<<T>`\n          this.match(tt.bitShiftL))\n      ) {\n        if (process.env.BABEL_8_BREAKING) {\n          node.superTypeArguments =\n            this.flowParseTypeParameterInstantiationInExpression();\n        } else {\n          node.superTypeParameters =\n            this.flowParseTypeParameterInstantiationInExpression();\n        }\n      }\n      if (this.isContextual(tt._implements)) {\n        this.next();\n        const implemented: N.FlowClassImplements[] = (node.implements = []);\n        do {\n          const node = this.startNode<N.FlowClassImplements>();\n          node.id = this.flowParseRestrictedIdentifier(/*liberal*/ true);\n          if (this.match(tt.lt)) {\n            node.typeParameters = this.flowParseTypeParameterInstantiation();\n          } else {\n            node.typeParameters = null;\n          }\n          implemented.push(this.finishNode(node, \"ClassImplements\"));\n        } while (this.eat(tt.comma));\n      }\n    }\n\n    checkGetterSetterParams(method: N.ObjectMethod | N.ClassMethod): void {\n      super.checkGetterSetterParams(method);\n      const params = this.getObjectOrClassMethodParams(method);\n      if (params.length > 0) {\n        const param = params[0];\n        if (this.isThisParam(param) && method.kind === \"get\") {\n          this.raise(FlowErrors.GetterMayNotHaveThisParam, param);\n        } else if (this.isThisParam(param)) {\n          this.raise(FlowErrors.SetterMayNotHaveThisParam, param);\n        }\n      }\n    }\n\n    parsePropertyNamePrefixOperator(\n      node: N.ObjectOrClassMember | N.ClassMember,\n    ): void {\n      node.variance = this.flowParseVariance();\n    }\n\n    // parse type parameters for object method shorthand\n    parseObjPropValue<T extends N.ObjectMember>(\n      prop: Undone<T>,\n      startLoc: Position | undefined | null,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isPattern: boolean,\n      isAccessor: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): T {\n      if ((prop as any).variance) {\n        this.unexpected((prop as any).variance.loc.start);\n      }\n      delete (prop as any).variance;\n\n      let typeParameters;\n\n      // method shorthand\n      if (this.match(tt.lt) && !isAccessor) {\n        typeParameters = this.flowParseTypeParameterDeclaration();\n        if (!this.match(tt.parenL)) this.unexpected();\n      }\n\n      const result = super.parseObjPropValue(\n        prop,\n        startLoc,\n        isGenerator,\n        isAsync,\n        isPattern,\n        isAccessor,\n        refExpressionErrors,\n      );\n\n      // add typeParameters if we found them\n      if (typeParameters) {\n        // @ts-expect-error: refine typings\n        (result.value || result).typeParameters = typeParameters;\n      }\n      return result;\n    }\n\n    parseFunctionParamType(param: N.Pattern): N.Pattern {\n      if (this.eat(tt.question)) {\n        if (param.type !== \"Identifier\") {\n          this.raise(FlowErrors.PatternIsOptional, param);\n        }\n        if (this.isThisParam(param)) {\n          this.raise(FlowErrors.ThisParamMayNotBeOptional, param);\n        }\n\n        (param as any as N.Identifier).optional = true;\n      }\n      if (this.match(tt.colon)) {\n        param.typeAnnotation = this.flowParseTypeAnnotation();\n      } else if (this.isThisParam(param)) {\n        this.raise(FlowErrors.ThisParamAnnotationRequired, param);\n      }\n\n      if (this.match(tt.eq) && this.isThisParam(param)) {\n        this.raise(FlowErrors.ThisParamNoDefault, param);\n      }\n\n      this.resetEndLocation(param);\n      return param;\n    }\n\n    parseMaybeDefault<P extends N.Pattern>(\n      startLoc?: Position | null,\n      left?: P | null,\n    ): P | N.AssignmentPattern {\n      const node = super.parseMaybeDefault(startLoc, left);\n\n      if (\n        node.type === \"AssignmentPattern\" &&\n        node.typeAnnotation &&\n        node.right.start < node.typeAnnotation.start\n      ) {\n        this.raise(FlowErrors.TypeBeforeInitializer, node.typeAnnotation);\n      }\n\n      return node;\n    }\n\n    checkImportReflection(node: Undone<N.ImportDeclaration>) {\n      super.checkImportReflection(node);\n      if (node.module && node.importKind !== \"value\") {\n        this.raise(\n          FlowErrors.ImportReflectionHasImportType,\n          node.specifiers[0].loc.start,\n        );\n      }\n    }\n\n    parseImportSpecifierLocal<\n      T extends\n        | N.ImportSpecifier\n        | N.ImportDefaultSpecifier\n        | N.ImportNamespaceSpecifier,\n    >(node: N.ImportDeclaration, specifier: Undone<T>, type: T[\"type\"]): void {\n      specifier.local = hasTypeImportKind(node)\n        ? this.flowParseRestrictedIdentifier(\n            /* liberal */ true,\n            /* declaration */ true,\n          )\n        : this.parseIdentifier();\n\n      node.specifiers.push(this.finishImportSpecifier(specifier, type));\n    }\n\n    isPotentialImportPhase(isExport: boolean): boolean {\n      if (super.isPotentialImportPhase(isExport)) return true;\n      if (this.isContextual(tt._type)) {\n        if (!isExport) return true;\n        const ch = this.lookaheadCharCode();\n        return ch === charCodes.leftCurlyBrace || ch === charCodes.asterisk;\n      }\n      return !isExport && this.isContextual(tt._typeof);\n    }\n\n    applyImportPhase(\n      node: Undone<N.ImportDeclaration | N.ExportNamedDeclaration>,\n      isExport: boolean,\n      phase: string | null,\n      loc?: Position,\n    ): void {\n      super.applyImportPhase(node, isExport, phase, loc);\n      if (isExport) {\n        if (!phase && this.match(tt._default)) {\n          // TODO: Align with our TS AST and always add .exportKind\n          return;\n        }\n        (node as N.ExportNamedDeclaration).exportKind =\n          phase === \"type\" ? phase : \"value\";\n      } else {\n        if (phase === \"type\" && this.match(tt.star)) this.unexpected();\n        (node as N.ImportDeclaration).importKind =\n          phase === \"type\" || phase === \"typeof\" ? phase : \"value\";\n      }\n    }\n\n    // parse import-type/typeof shorthand\n    parseImportSpecifier(\n      specifier: any,\n      importedIsString: boolean,\n      isInTypeOnlyImport: boolean,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      isMaybeTypeOnly: boolean,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      bindingType: BindingFlag | undefined,\n    ): N.ImportSpecifier {\n      const firstIdent = specifier.imported;\n\n      let specifierTypeKind = null;\n      if (firstIdent.type === \"Identifier\") {\n        if (firstIdent.name === \"type\") {\n          specifierTypeKind = \"type\";\n        } else if (firstIdent.name === \"typeof\") {\n          specifierTypeKind = \"typeof\";\n        }\n      }\n\n      let isBinding = false;\n      if (this.isContextual(tt._as) && !this.isLookaheadContextual(\"as\")) {\n        const as_ident = this.parseIdentifier(true);\n        if (\n          specifierTypeKind !== null &&\n          !tokenIsKeywordOrIdentifier(this.state.type)\n        ) {\n          // `import {type as ,` or `import {type as }`\n          specifier.imported = as_ident;\n          specifier.importKind = specifierTypeKind;\n          specifier.local = this.cloneIdentifier(as_ident);\n        } else {\n          // `import {type as foo`\n          specifier.imported = firstIdent;\n          specifier.importKind = null;\n          specifier.local = this.parseIdentifier();\n        }\n      } else {\n        if (\n          specifierTypeKind !== null &&\n          tokenIsKeywordOrIdentifier(this.state.type)\n        ) {\n          // `import {type foo`\n          specifier.imported = this.parseIdentifier(true);\n          specifier.importKind = specifierTypeKind;\n        } else {\n          if (importedIsString) {\n            /*:: invariant(firstIdent instanceof N.StringLiteral) */\n            throw this.raise(Errors.ImportBindingIsString, specifier, {\n              importName: firstIdent.value,\n            });\n          }\n          /*:: invariant(firstIdent instanceof N.Node) */\n          specifier.imported = firstIdent;\n          specifier.importKind = null;\n        }\n\n        if (this.eatContextual(tt._as)) {\n          specifier.local = this.parseIdentifier();\n        } else {\n          isBinding = true;\n          specifier.local = this.cloneIdentifier(specifier.imported);\n        }\n      }\n\n      const specifierIsTypeImport = hasTypeImportKind(specifier);\n\n      if (isInTypeOnlyImport && specifierIsTypeImport) {\n        this.raise(FlowErrors.ImportTypeShorthandOnlyInPureImport, specifier);\n      }\n\n      if (isInTypeOnlyImport || specifierIsTypeImport) {\n        this.checkReservedType(\n          specifier.local.name,\n          specifier.local.loc.start,\n          /* declaration */ true,\n        );\n      }\n\n      if (isBinding && !isInTypeOnlyImport && !specifierIsTypeImport) {\n        this.checkReservedWord(\n          specifier.local.name,\n          specifier.loc.start,\n          true,\n          true,\n        );\n      }\n\n      return this.finishImportSpecifier(specifier, \"ImportSpecifier\");\n    }\n\n    parseBindingAtom(): N.Pattern {\n      switch (this.state.type) {\n        case tt._this:\n          // \"this\" may be the name of a parameter, so allow it.\n          return this.parseIdentifier(/* liberal */ true);\n        default:\n          return super.parseBindingAtom();\n      }\n    }\n\n    // parse function type parameters - function foo<T>() {}\n    parseFunctionParams(\n      node: Undone<N.Function>,\n      isConstructor: boolean,\n    ): void {\n      // @ts-expect-error kind may not index node\n      const kind = node.kind;\n      if (kind !== \"get\" && kind !== \"set\" && this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n      super.parseFunctionParams(node, isConstructor);\n    }\n\n    // parse flow type annotations on variable declarator heads - let foo: string = bar\n    parseVarId(\n      decl: N.VariableDeclarator,\n      kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n    ): void {\n      super.parseVarId(decl, kind);\n      if (this.match(tt.colon)) {\n        decl.id.typeAnnotation = this.flowParseTypeAnnotation();\n        this.resetEndLocation(decl.id); // set end position to end of type\n      }\n    }\n\n    // parse the return type of an async arrow function - let foo = (async (): number => {});\n    parseAsyncArrowFromCallExpression(\n      node: N.ArrowFunctionExpression,\n      call: N.CallExpression,\n    ): N.ArrowFunctionExpression {\n      if (this.match(tt.colon)) {\n        const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n        this.state.noAnonFunctionType = true;\n        node.returnType = this.flowParseTypeAnnotation();\n        this.state.noAnonFunctionType = oldNoAnonFunctionType;\n      }\n\n      return super.parseAsyncArrowFromCallExpression(node, call);\n    }\n\n    // todo description\n    shouldParseAsyncArrow(): boolean {\n      return this.match(tt.colon) || super.shouldParseAsyncArrow();\n    }\n\n    // We need to support type parameter declarations for arrow functions. This\n    // is tricky. There are three situations we need to handle\n    //\n    // 1. This is either JSX or an arrow function. We'll try JSX first. If that\n    //    fails, we'll try an arrow function. If that fails, we'll throw the JSX\n    //    error.\n    // 2. This is an arrow function. We'll parse the type parameter declaration,\n    //    parse the rest, make sure the rest is an arrow function, and go from\n    //    there\n    // 3. This is neither. Just call the super method\n    parseMaybeAssign(\n      refExpressionErrors?: ExpressionErrors | null,\n      afterLeftParse?: Function,\n    ): N.Expression {\n      let state = null;\n\n      let jsx;\n\n      if (\n        this.hasPlugin(\"jsx\") &&\n        (this.match(tt.jsxTagStart) || this.match(tt.lt))\n      ) {\n        state = this.state.clone();\n\n        jsx = this.tryParse(\n          () => super.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n          state,\n        );\n\n        /*:: invariant(!jsx.aborted) */\n        /*:: invariant(jsx.node != null) */\n        if (!jsx.error) return jsx.node;\n\n        // Remove `tc.j_expr` and `tc.j_oTag` from context added\n        // by parsing `jsxTagStart` to stop the JSX plugin from\n        // messing with the tokens\n        const { context } = this.state;\n        const currentContext = context[context.length - 1];\n        if (currentContext === tc.j_oTag || currentContext === tc.j_expr) {\n          context.pop();\n        }\n      }\n\n      if (jsx?.error || this.match(tt.lt)) {\n        state = state || this.state.clone();\n\n        let typeParameters: N.TypeParameterDeclaration;\n\n        const arrow = this.tryParse((abort: () => never) => {\n          typeParameters = this.flowParseTypeParameterDeclaration();\n\n          const arrowExpression = this.forwardNoArrowParamsConversionAt(\n            typeParameters,\n            () => {\n              const result = super.parseMaybeAssign(\n                refExpressionErrors,\n                afterLeftParse,\n              );\n\n              this.resetStartLocationFromNode(result, typeParameters);\n\n              return result;\n            },\n          );\n\n          // <T>(() => {});\n          // <T>(() => {}: any);\n          if (arrowExpression.extra?.parenthesized) abort();\n\n          // The above can return a TypeCastExpression when the arrow\n          // expression is not wrapped in parens. See also `this.parseParenItem`.\n          // (<T>() => {}: any);\n          const expr = this.maybeUnwrapTypeCastExpression(arrowExpression);\n\n          if (expr.type !== \"ArrowFunctionExpression\") abort();\n\n          expr.typeParameters = typeParameters;\n          this.resetStartLocationFromNode(expr, typeParameters);\n\n          return arrowExpression;\n        }, state);\n\n        let arrowExpression:\n          | N.ArrowFunctionExpression\n          | N.TypeCastExpression\n          | undefined\n          | null = null;\n\n        if (\n          arrow.node &&\n          this.maybeUnwrapTypeCastExpression(arrow.node).type ===\n            \"ArrowFunctionExpression\"\n        ) {\n          if (!arrow.error && !arrow.aborted) {\n            // <T> async () => {}\n            // @ts-expect-error: refine tryParse typings\n            if (arrow.node.async) {\n              /*:: invariant(typeParameters) */\n              this.raise(\n                FlowErrors.UnexpectedTypeParameterBeforeAsyncArrowFunction,\n                typeParameters,\n              );\n            }\n            return arrow.node;\n          }\n\n          // @ts-expect-error: refine typings\n          arrowExpression = arrow.node;\n        }\n\n        // If we are here, both JSX and Flow parsing attempts failed.\n        // Give the precedence to the JSX error, except if JSX had an\n        // unrecoverable error while Flow didn't.\n        // If the error is recoverable, we can only re-report it if there is\n        // a node we can return.\n\n        if (jsx?.node) {\n          /*:: invariant(jsx.failState) */\n          this.state = jsx.failState;\n          return jsx.node;\n        }\n\n        if (arrowExpression) {\n          /*:: invariant(arrow.failState) */\n          this.state = arrow.failState;\n          return arrowExpression;\n        }\n\n        if (jsx?.thrown) throw jsx.error;\n        if (arrow.thrown) throw arrow.error;\n\n        /*:: invariant(typeParameters) */\n        throw this.raise(\n          FlowErrors.UnexpectedTokenAfterTypeParameter,\n          typeParameters,\n        );\n      }\n\n      return super.parseMaybeAssign(refExpressionErrors, afterLeftParse);\n    }\n\n    // handle return types for arrow functions\n    parseArrow(\n      node: Undone<N.ArrowFunctionExpression>,\n    ): Undone<N.ArrowFunctionExpression> | undefined | null {\n      if (this.match(tt.colon)) {\n        // @ts-expect-error todo(flow->ts)\n        const result = this.tryParse<N.TypeAnnotation>(() => {\n          const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n          this.state.noAnonFunctionType = true;\n\n          const typeNode = this.startNode<N.TypeAnnotation>();\n\n          [\n            typeNode.typeAnnotation,\n            // @ts-expect-error (destructuring not supported yet)\n            node.predicate,\n          ] = this.flowParseTypeAndPredicateInitialiser();\n\n          this.state.noAnonFunctionType = oldNoAnonFunctionType;\n\n          if (this.canInsertSemicolon()) this.unexpected();\n          if (!this.match(tt.arrow)) this.unexpected();\n\n          return typeNode;\n        });\n\n        if (result.thrown) return null;\n        /*:: invariant(result.node) */\n\n        if (result.error) this.state = result.failState;\n\n        // assign after it is clear it is an arrow\n        // @ts-expect-error todo(flow->ts)\n        node.returnType = result.node.typeAnnotation\n          ? this.finishNode(result.node, \"TypeAnnotation\")\n          : null;\n      }\n\n      return super.parseArrow(node);\n    }\n\n    shouldParseArrow(params: Array<N.Node>): boolean {\n      return this.match(tt.colon) || super.shouldParseArrow(params);\n    }\n\n    setArrowFunctionParameters(\n      node: Undone<N.ArrowFunctionExpression>,\n      params:\n        | Array<N.Expression | N.SpreadElement>\n        | Array<N.Expression | N.RestElement>,\n    ): void {\n      if (\n        this.state.noArrowParamsConversionAt.includes(\n          this.offsetToSourcePos(node.start),\n        )\n      ) {\n        node.params = params as N.ArrowFunctionExpression[\"params\"];\n      } else {\n        super.setArrowFunctionParameters(node, params);\n      }\n    }\n\n    checkParams(\n      node: N.Function,\n      allowDuplicates: boolean,\n      isArrowFunction?: boolean | null,\n      strictModeChanged: boolean = true,\n    ): void {\n      if (\n        isArrowFunction &&\n        this.state.noArrowParamsConversionAt.includes(\n          this.offsetToSourcePos(node.start),\n        )\n      ) {\n        return;\n      }\n\n      // ensure the `this` param is first, if it exists\n      for (let i = 0; i < node.params.length; i++) {\n        if (this.isThisParam(node.params[i]) && i > 0) {\n          this.raise(FlowErrors.ThisParamMustBeFirst, node.params[i]);\n        }\n      }\n\n      super.checkParams(\n        node,\n        allowDuplicates,\n        isArrowFunction,\n        strictModeChanged,\n      );\n    }\n\n    parseParenAndDistinguishExpression(canBeArrow: boolean): N.Expression {\n      return super.parseParenAndDistinguishExpression(\n        canBeArrow &&\n          !this.state.noArrowAt.includes(\n            this.sourceToOffsetPos(this.state.start),\n          ),\n      );\n    }\n\n    parseSubscripts(\n      base: N.Expression,\n      startLoc: Position,\n      noCalls?: boolean | null,\n    ): N.Expression {\n      if (\n        base.type === \"Identifier\" &&\n        base.name === \"async\" &&\n        this.state.noArrowAt.includes(startLoc.index)\n      ) {\n        this.next();\n\n        const node = this.startNodeAt<N.CallExpression>(startLoc);\n        node.callee = base;\n        node.arguments = super.parseCallExpressionArguments();\n        base = this.finishNode(node, \"CallExpression\");\n      } else if (\n        base.type === \"Identifier\" &&\n        base.name === \"async\" &&\n        this.match(tt.lt)\n      ) {\n        const state = this.state.clone();\n        const arrow = this.tryParse(\n          abort => this.parseAsyncArrowWithTypeParameters(startLoc) || abort(),\n          state,\n        );\n\n        /*:: invariant(arrow.node != null) */\n        // @ts-expect-error: refine tryParse typings\n        if (!arrow.error && !arrow.aborted) return arrow.node;\n\n        const result = this.tryParse(\n          () => super.parseSubscripts(base, startLoc, noCalls),\n          state,\n        );\n\n        if (result.node && !result.error) return result.node;\n\n        if (arrow.node) {\n          this.state = arrow.failState;\n          // @ts-expect-error: refine tryParse typings\n          return arrow.node;\n        }\n\n        if (result.node) {\n          this.state = result.failState;\n          return result.node;\n        }\n\n        throw arrow.error || result.error;\n      }\n\n      return super.parseSubscripts(base, startLoc, noCalls);\n    }\n\n    parseSubscript(\n      base: N.Expression,\n\n      startLoc: Position,\n      noCalls: boolean | undefined | null,\n      subscriptState: N.ParseSubscriptState,\n    ): N.Expression {\n      if (this.match(tt.questionDot) && this.isLookaheadToken_lt()) {\n        subscriptState.optionalChainMember = true;\n        if (noCalls) {\n          subscriptState.stop = true;\n          return base;\n        }\n        this.next();\n        const node = this.startNodeAt<N.OptionalCallExpression>(startLoc);\n        node.callee = base;\n        node.typeArguments =\n          this.flowParseTypeParameterInstantiationInExpression();\n        this.expect(tt.parenL);\n        node.arguments = this.parseCallExpressionArguments();\n        node.optional = true;\n        return this.finishCallExpression(node, /* optional */ true);\n      } else if (\n        !noCalls &&\n        this.shouldParseTypes() &&\n        (this.match(tt.lt) ||\n          // also handles `new C<<T>`\n          this.match(tt.bitShiftL))\n      ) {\n        const node = this.startNodeAt<\n          N.OptionalCallExpression | N.CallExpression\n        >(startLoc);\n        node.callee = base;\n\n        const result = this.tryParse(() => {\n          node.typeArguments =\n            this.flowParseTypeParameterInstantiationCallOrNew();\n          this.expect(tt.parenL);\n          node.arguments = super.parseCallExpressionArguments();\n          if (subscriptState.optionalChainMember) {\n            (node as Undone<N.OptionalCallExpression>).optional = false;\n          }\n          return this.finishCallExpression(\n            node,\n            subscriptState.optionalChainMember,\n          );\n        });\n\n        if (result.node) {\n          if (result.error) this.state = result.failState;\n          return result.node;\n        }\n      }\n\n      return super.parseSubscript(\n        base,\n\n        startLoc,\n        noCalls,\n        subscriptState,\n      );\n    }\n\n    parseNewCallee(node: N.NewExpression): void {\n      super.parseNewCallee(node);\n\n      let targs = null;\n      if (this.shouldParseTypes() && this.match(tt.lt)) {\n        targs = this.tryParse(() =>\n          this.flowParseTypeParameterInstantiationCallOrNew(),\n        ).node;\n      }\n      node.typeArguments = targs;\n    }\n\n    parseAsyncArrowWithTypeParameters(\n      startLoc: Position,\n    ): N.ArrowFunctionExpression | undefined | null {\n      const node = this.startNodeAt<N.ArrowFunctionExpression>(startLoc);\n      this.parseFunctionParams(node, false);\n      if (!this.parseArrow(node)) return;\n      return super.parseArrowExpression(\n        node,\n        /* params */ undefined,\n        /* isAsync */ true,\n      );\n    }\n\n    readToken_mult_modulo(code: number): void {\n      const next = this.input.charCodeAt(this.state.pos + 1);\n      if (\n        code === charCodes.asterisk &&\n        next === charCodes.slash &&\n        this.state.hasFlowComment\n      ) {\n        this.state.hasFlowComment = false;\n        this.state.pos += 2;\n        this.nextToken();\n        return;\n      }\n\n      super.readToken_mult_modulo(code);\n    }\n\n    readToken_pipe_amp(code: number): void {\n      const next = this.input.charCodeAt(this.state.pos + 1);\n      if (\n        code === charCodes.verticalBar &&\n        next === charCodes.rightCurlyBrace\n      ) {\n        // '|}'\n        this.finishOp(tt.braceBarR, 2);\n        return;\n      }\n\n      super.readToken_pipe_amp(code);\n    }\n\n    parseTopLevel(file: N.File, program: N.Program): N.File {\n      const fileNode = super.parseTopLevel(file, program);\n      if (this.state.hasFlowComment) {\n        this.raise(\n          FlowErrors.UnterminatedFlowComment,\n          this.state.curPosition(),\n        );\n      }\n      return fileNode;\n    }\n\n    skipBlockComment(): N.CommentBlock | undefined {\n      if (this.hasPlugin(\"flowComments\") && this.skipFlowComment()) {\n        if (this.state.hasFlowComment) {\n          throw this.raise(FlowErrors.NestedFlowComment, this.state.startLoc);\n        }\n        this.hasFlowCommentCompletion();\n        const commentSkip = this.skipFlowComment();\n        if (commentSkip) {\n          this.state.pos += commentSkip;\n          this.state.hasFlowComment = true;\n        }\n        return;\n      }\n\n      return super.skipBlockComment(this.state.hasFlowComment ? \"*-/\" : \"*/\");\n    }\n\n    skipFlowComment(): number | false {\n      const { pos } = this.state;\n      let shiftToFirstNonWhiteSpace = 2;\n      while (\n        [charCodes.space, charCodes.tab].includes(\n          // @ts-expect-error testing whether a number is included\n          this.input.charCodeAt(pos + shiftToFirstNonWhiteSpace),\n        )\n      ) {\n        shiftToFirstNonWhiteSpace++;\n      }\n\n      const ch2 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos);\n      const ch3 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos + 1);\n\n      if (ch2 === charCodes.colon && ch3 === charCodes.colon) {\n        return shiftToFirstNonWhiteSpace + 2; // check for /*::\n      }\n      if (\n        this.input.slice(\n          shiftToFirstNonWhiteSpace + pos,\n          shiftToFirstNonWhiteSpace + pos + 12,\n        ) === \"flow-include\"\n      ) {\n        return shiftToFirstNonWhiteSpace + 12; // check for /*flow-include\n      }\n      if (ch2 === charCodes.colon && ch3 !== charCodes.colon) {\n        return shiftToFirstNonWhiteSpace; // check for /*:, advance up to :\n      }\n      return false;\n    }\n\n    hasFlowCommentCompletion(): void {\n      const end = this.input.indexOf(\"*/\", this.state.pos);\n      if (end === -1) {\n        throw this.raise(Errors.UnterminatedComment, this.state.curPosition());\n      }\n    }\n\n    // Flow enum parsing\n\n    flowEnumErrorBooleanMemberNotInitialized(\n      loc: Position,\n      {\n        enumName,\n        memberName,\n      }: {\n        enumName: string;\n        memberName: string;\n      },\n    ): void {\n      this.raise(FlowErrors.EnumBooleanMemberNotInitialized, loc, {\n        memberName,\n        enumName,\n      });\n    }\n\n    flowEnumErrorInvalidMemberInitializer(\n      loc: Position,\n      enumContext: EnumContext,\n    ) {\n      return this.raise(\n        !enumContext.explicitType\n          ? FlowErrors.EnumInvalidMemberInitializerUnknownType\n          : enumContext.explicitType === \"symbol\"\n            ? FlowErrors.EnumInvalidMemberInitializerSymbolType\n            : FlowErrors.EnumInvalidMemberInitializerPrimaryType,\n        loc,\n        enumContext,\n      );\n    }\n\n    flowEnumErrorNumberMemberNotInitialized(\n      loc: Position,\n      details: {\n        enumName: string;\n        memberName: string;\n      },\n    ): void {\n      this.raise(FlowErrors.EnumNumberMemberNotInitialized, loc, details);\n    }\n\n    flowEnumErrorStringMemberInconsistentlyInitialized(\n      node: N.Node,\n      details: {\n        enumName: string;\n      },\n    ): void {\n      this.raise(\n        FlowErrors.EnumStringMemberInconsistentlyInitialized,\n        node,\n        details,\n      );\n    }\n\n    flowEnumMemberInit(): EnumMemberInit {\n      const startLoc = this.state.startLoc;\n      const endOfInit = () => this.match(tt.comma) || this.match(tt.braceR);\n      switch (this.state.type) {\n        case tt.num: {\n          const literal = this.parseNumericLiteral(this.state.value);\n          if (endOfInit()) {\n            return { type: \"number\", loc: literal.loc.start, value: literal };\n          }\n          return { type: \"invalid\", loc: startLoc };\n        }\n        case tt.string: {\n          const literal = this.parseStringLiteral(this.state.value);\n          if (endOfInit()) {\n            return { type: \"string\", loc: literal.loc.start, value: literal };\n          }\n          return { type: \"invalid\", loc: startLoc };\n        }\n        case tt._true:\n        case tt._false: {\n          const literal = this.parseBooleanLiteral(this.match(tt._true));\n          if (endOfInit()) {\n            return {\n              type: \"boolean\",\n              loc: literal.loc.start,\n              value: literal,\n            };\n          }\n          return { type: \"invalid\", loc: startLoc };\n        }\n        default:\n          return { type: \"invalid\", loc: startLoc };\n      }\n    }\n\n    flowEnumMemberRaw(): {\n      id: N.Identifier;\n      init: EnumMemberInit;\n    } {\n      const loc = this.state.startLoc;\n      const id = this.parseIdentifier(true);\n      const init = this.eat(tt.eq)\n        ? this.flowEnumMemberInit()\n        : { type: \"none\" as const, loc };\n      return { id, init };\n    }\n\n    flowEnumCheckExplicitTypeMismatch(\n      loc: Position,\n      context: EnumContext,\n      expectedType: EnumExplicitType,\n    ): void {\n      const { explicitType } = context;\n      if (explicitType === null) {\n        return;\n      }\n      if (explicitType !== expectedType) {\n        this.flowEnumErrorInvalidMemberInitializer(loc, context);\n      }\n    }\n\n    flowEnumMembers({\n      enumName,\n      explicitType,\n    }: {\n      enumName: string;\n      explicitType: EnumExplicitType;\n    }): {\n      members: {\n        booleanMembers: Extract<\n          N.FlowEnumMember,\n          { type: \"EnumBooleanMember\" }\n        >[];\n        numberMembers: Extract<\n          N.FlowEnumMember,\n          { type: \"EnumNumberMember\" }\n        >[];\n        stringMembers: Extract<\n          N.FlowEnumMember,\n          { type: \"EnumStringMember\" }\n        >[];\n        defaultedMembers: Extract<\n          N.FlowEnumMember,\n          { type: \"EnumDefaultedMember\" }\n        >[];\n      };\n      hasUnknownMembers: boolean;\n    } {\n      const seenNames = new Set();\n      const members = {\n        // @ts-expect-error: migrate to Babel types\n        booleanMembers: [],\n        // @ts-expect-error: migrate to Babel types\n        numberMembers: [],\n        // @ts-expect-error: migrate to Babel types\n        stringMembers: [],\n        // @ts-expect-error: migrate to Babel types\n        defaultedMembers: [],\n      };\n      let hasUnknownMembers = false;\n      while (!this.match(tt.braceR)) {\n        if (this.eat(tt.ellipsis)) {\n          hasUnknownMembers = true;\n          break;\n        }\n        const memberNode = this.startNode<N.FlowEnumMember>();\n        const { id, init } = this.flowEnumMemberRaw();\n        const memberName = id.name;\n        if (memberName === \"\") {\n          continue;\n        }\n        if (/^[a-z]/.test(memberName)) {\n          this.raise(FlowErrors.EnumInvalidMemberName, id, {\n            memberName,\n            suggestion: memberName[0].toUpperCase() + memberName.slice(1),\n            enumName,\n          });\n        }\n        if (seenNames.has(memberName)) {\n          this.raise(FlowErrors.EnumDuplicateMemberName, id, {\n            memberName,\n            enumName,\n          });\n        }\n        seenNames.add(memberName);\n        const context = { enumName, explicitType, memberName };\n        memberNode.id = id;\n        switch (init.type) {\n          case \"boolean\": {\n            this.flowEnumCheckExplicitTypeMismatch(\n              init.loc,\n              context,\n              \"boolean\",\n            );\n            memberNode.init = init.value;\n            members.booleanMembers.push(\n              this.finishNode(memberNode, \"EnumBooleanMember\"),\n            );\n            break;\n          }\n          case \"number\": {\n            this.flowEnumCheckExplicitTypeMismatch(init.loc, context, \"number\");\n            memberNode.init = init.value;\n            members.numberMembers.push(\n              this.finishNode(memberNode, \"EnumNumberMember\"),\n            );\n            break;\n          }\n          case \"string\": {\n            this.flowEnumCheckExplicitTypeMismatch(init.loc, context, \"string\");\n            memberNode.init = init.value;\n            members.stringMembers.push(\n              this.finishNode(memberNode, \"EnumStringMember\"),\n            );\n            break;\n          }\n          case \"invalid\": {\n            throw this.flowEnumErrorInvalidMemberInitializer(init.loc, context);\n          }\n          case \"none\": {\n            switch (explicitType) {\n              case \"boolean\":\n                this.flowEnumErrorBooleanMemberNotInitialized(\n                  init.loc,\n                  context,\n                );\n                break;\n              case \"number\":\n                this.flowEnumErrorNumberMemberNotInitialized(init.loc, context);\n                break;\n              default:\n                members.defaultedMembers.push(\n                  this.finishNode(memberNode, \"EnumDefaultedMember\"),\n                );\n            }\n          }\n        }\n\n        if (!this.match(tt.braceR)) {\n          this.expect(tt.comma);\n        }\n      }\n      return { members, hasUnknownMembers };\n    }\n\n    flowEnumStringMembers(\n      initializedMembers: Array<N.Node>,\n      defaultedMembers: Array<N.Node>,\n      {\n        enumName,\n      }: {\n        enumName: string;\n      },\n    ): Array<N.Node> {\n      if (initializedMembers.length === 0) {\n        return defaultedMembers;\n      } else if (defaultedMembers.length === 0) {\n        return initializedMembers;\n      } else if (defaultedMembers.length > initializedMembers.length) {\n        for (const member of initializedMembers) {\n          this.flowEnumErrorStringMemberInconsistentlyInitialized(member, {\n            enumName,\n          });\n        }\n        return defaultedMembers;\n      } else {\n        for (const member of defaultedMembers) {\n          this.flowEnumErrorStringMemberInconsistentlyInitialized(member, {\n            enumName,\n          });\n        }\n        return initializedMembers;\n      }\n    }\n\n    flowEnumParseExplicitType({\n      enumName,\n    }: {\n      enumName: string;\n    }): EnumExplicitType {\n      if (!this.eatContextual(tt._of)) return null;\n\n      if (!tokenIsIdentifier(this.state.type)) {\n        throw this.raise(\n          FlowErrors.EnumInvalidExplicitTypeUnknownSupplied,\n          this.state.startLoc,\n          {\n            enumName,\n          },\n        );\n      }\n\n      const { value } = this.state;\n      this.next();\n\n      if (\n        value !== \"boolean\" &&\n        value !== \"number\" &&\n        value !== \"string\" &&\n        value !== \"symbol\"\n      ) {\n        this.raise(FlowErrors.EnumInvalidExplicitType, this.state.startLoc, {\n          enumName,\n          invalidEnumType: value,\n        });\n      }\n\n      return value;\n    }\n\n    flowEnumBody(node: Undone<N.FlowEnumBody>, id: N.Identifier): N.Node {\n      const enumName = id.name;\n      const nameLoc = id.loc.start;\n      const explicitType = this.flowEnumParseExplicitType({ enumName });\n      this.expect(tt.braceL);\n      const { members, hasUnknownMembers } = this.flowEnumMembers({\n        enumName,\n        explicitType,\n      });\n      node.hasUnknownMembers = hasUnknownMembers;\n\n      switch (explicitType) {\n        case \"boolean\":\n          node.explicitType = true;\n          node.members = members.booleanMembers;\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumBooleanBody\");\n        case \"number\":\n          node.explicitType = true;\n          node.members = members.numberMembers;\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumNumberBody\");\n        case \"string\":\n          node.explicitType = true;\n          node.members = this.flowEnumStringMembers(\n            members.stringMembers,\n            members.defaultedMembers,\n            { enumName },\n          );\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumStringBody\");\n        case \"symbol\":\n          node.members = members.defaultedMembers;\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumSymbolBody\");\n        default: {\n          // `explicitType` is `null`\n          const empty = () => {\n            node.members = [];\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumStringBody\");\n          };\n          node.explicitType = false;\n\n          const boolsLen = members.booleanMembers.length;\n          const numsLen = members.numberMembers.length;\n          const strsLen = members.stringMembers.length;\n          const defaultedLen = members.defaultedMembers.length;\n\n          if (!boolsLen && !numsLen && !strsLen && !defaultedLen) {\n            return empty();\n          } else if (!boolsLen && !numsLen) {\n            node.members = this.flowEnumStringMembers(\n              members.stringMembers,\n              members.defaultedMembers,\n              { enumName },\n            );\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumStringBody\");\n          } else if (!numsLen && !strsLen && boolsLen >= defaultedLen) {\n            for (const member of members.defaultedMembers) {\n              this.flowEnumErrorBooleanMemberNotInitialized(member.loc.start, {\n                enumName,\n                memberName: member.id.name,\n              });\n            }\n            node.members = members.booleanMembers;\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumBooleanBody\");\n          } else if (!boolsLen && !strsLen && numsLen >= defaultedLen) {\n            for (const member of members.defaultedMembers) {\n              this.flowEnumErrorNumberMemberNotInitialized(member.loc.start, {\n                enumName,\n                memberName: member.id.name,\n              });\n            }\n            node.members = members.numberMembers;\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumNumberBody\");\n          } else {\n            this.raise(FlowErrors.EnumInconsistentMemberValues, nameLoc, {\n              enumName,\n            });\n            return empty();\n          }\n        }\n      }\n    }\n\n    flowParseEnumDeclaration(\n      node: Undone<N.FlowEnumDeclaration>,\n    ): N.FlowEnumDeclaration {\n      const id = this.parseIdentifier();\n      node.id = id;\n      node.body = this.flowEnumBody(this.startNode(), id);\n      return this.finishNode(node, \"EnumDeclaration\");\n    }\n\n    jsxParseOpeningElementAfterName(\n      node: N.JSXOpeningElement,\n    ): N.JSXOpeningElement {\n      if (this.shouldParseTypes()) {\n        if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n          node.typeArguments =\n            this.flowParseTypeParameterInstantiationInExpression();\n        }\n      }\n\n      return super.jsxParseOpeningElementAfterName(node);\n    }\n\n    // check if the next token is a tt.lt\n    isLookaheadToken_lt(): boolean {\n      const next = this.nextTokenStart();\n      if (this.input.charCodeAt(next) === charCodes.lessThan) {\n        const afterNext = this.input.charCodeAt(next + 1);\n        return (\n          afterNext !== charCodes.lessThan && afterNext !== charCodes.equalsTo\n        );\n      }\n      return false;\n    }\n\n    // used after we have finished parsing types\n    reScan_lt_gt() {\n      const { type } = this.state;\n      if (type === tt.lt) {\n        this.state.pos -= 1;\n        this.readToken_lt();\n      } else if (type === tt.gt) {\n        this.state.pos -= 1;\n        this.readToken_gt();\n      }\n    }\n\n    reScan_lt() {\n      const { type } = this.state;\n      if (type === tt.bitShiftL) {\n        this.state.pos -= 2;\n        this.finishOp(tt.lt, 1);\n        return tt.lt;\n      }\n      return type;\n    }\n\n    maybeUnwrapTypeCastExpression(node: N.Node) {\n      return node.type === \"TypeCastExpression\" ? node.expression : node;\n    }\n  };\n","const entities: { [name: string]: string } = {\n  __proto__: null,\n  quot: \"\\u0022\",\n  amp: \"&\",\n  apos: \"\\u0027\",\n  lt: \"<\",\n  gt: \">\",\n  nbsp: \"\\u00A0\",\n  iexcl: \"\\u00A1\",\n  cent: \"\\u00A2\",\n  pound: \"\\u00A3\",\n  curren: \"\\u00A4\",\n  yen: \"\\u00A5\",\n  brvbar: \"\\u00A6\",\n  sect: \"\\u00A7\",\n  uml: \"\\u00A8\",\n  copy: \"\\u00A9\",\n  ordf: \"\\u00AA\",\n  laquo: \"\\u00AB\",\n  not: \"\\u00AC\",\n  shy: \"\\u00AD\",\n  reg: \"\\u00AE\",\n  macr: \"\\u00AF\",\n  deg: \"\\u00B0\",\n  plusmn: \"\\u00B1\",\n  sup2: \"\\u00B2\",\n  sup3: \"\\u00B3\",\n  acute: \"\\u00B4\",\n  micro: \"\\u00B5\",\n  para: \"\\u00B6\",\n  middot: \"\\u00B7\",\n  cedil: \"\\u00B8\",\n  sup1: \"\\u00B9\",\n  ordm: \"\\u00BA\",\n  raquo: \"\\u00BB\",\n  frac14: \"\\u00BC\",\n  frac12: \"\\u00BD\",\n  frac34: \"\\u00BE\",\n  iquest: \"\\u00BF\",\n  Agrave: \"\\u00C0\",\n  Aacute: \"\\u00C1\",\n  Acirc: \"\\u00C2\",\n  Atilde: \"\\u00C3\",\n  Auml: \"\\u00C4\",\n  Aring: \"\\u00C5\",\n  AElig: \"\\u00C6\",\n  Ccedil: \"\\u00C7\",\n  Egrave: \"\\u00C8\",\n  Eacute: \"\\u00C9\",\n  Ecirc: \"\\u00CA\",\n  Euml: \"\\u00CB\",\n  Igrave: \"\\u00CC\",\n  Iacute: \"\\u00CD\",\n  Icirc: \"\\u00CE\",\n  Iuml: \"\\u00CF\",\n  ETH: \"\\u00D0\",\n  Ntilde: \"\\u00D1\",\n  Ograve: \"\\u00D2\",\n  Oacute: \"\\u00D3\",\n  Ocirc: \"\\u00D4\",\n  Otilde: \"\\u00D5\",\n  Ouml: \"\\u00D6\",\n  times: \"\\u00D7\",\n  Oslash: \"\\u00D8\",\n  Ugrave: \"\\u00D9\",\n  Uacute: \"\\u00DA\",\n  Ucirc: \"\\u00DB\",\n  Uuml: \"\\u00DC\",\n  Yacute: \"\\u00DD\",\n  THORN: \"\\u00DE\",\n  szlig: \"\\u00DF\",\n  agrave: \"\\u00E0\",\n  aacute: \"\\u00E1\",\n  acirc: \"\\u00E2\",\n  atilde: \"\\u00E3\",\n  auml: \"\\u00E4\",\n  aring: \"\\u00E5\",\n  aelig: \"\\u00E6\",\n  ccedil: \"\\u00E7\",\n  egrave: \"\\u00E8\",\n  eacute: \"\\u00E9\",\n  ecirc: \"\\u00EA\",\n  euml: \"\\u00EB\",\n  igrave: \"\\u00EC\",\n  iacute: \"\\u00ED\",\n  icirc: \"\\u00EE\",\n  iuml: \"\\u00EF\",\n  eth: \"\\u00F0\",\n  ntilde: \"\\u00F1\",\n  ograve: \"\\u00F2\",\n  oacute: \"\\u00F3\",\n  ocirc: \"\\u00F4\",\n  otilde: \"\\u00F5\",\n  ouml: \"\\u00F6\",\n  divide: \"\\u00F7\",\n  oslash: \"\\u00F8\",\n  ugrave: \"\\u00F9\",\n  uacute: \"\\u00FA\",\n  ucirc: \"\\u00FB\",\n  uuml: \"\\u00FC\",\n  yacute: \"\\u00FD\",\n  thorn: \"\\u00FE\",\n  yuml: \"\\u00FF\",\n  OElig: \"\\u0152\",\n  oelig: \"\\u0153\",\n  Scaron: \"\\u0160\",\n  scaron: \"\\u0161\",\n  Yuml: \"\\u0178\",\n  fnof: \"\\u0192\",\n  circ: \"\\u02C6\",\n  tilde: \"\\u02DC\",\n  Alpha: \"\\u0391\",\n  Beta: \"\\u0392\",\n  Gamma: \"\\u0393\",\n  Delta: \"\\u0394\",\n  Epsilon: \"\\u0395\",\n  Zeta: \"\\u0396\",\n  Eta: \"\\u0397\",\n  Theta: \"\\u0398\",\n  Iota: \"\\u0399\",\n  Kappa: \"\\u039A\",\n  Lambda: \"\\u039B\",\n  Mu: \"\\u039C\",\n  Nu: \"\\u039D\",\n  Xi: \"\\u039E\",\n  Omicron: \"\\u039F\",\n  Pi: \"\\u03A0\",\n  Rho: \"\\u03A1\",\n  Sigma: \"\\u03A3\",\n  Tau: \"\\u03A4\",\n  Upsilon: \"\\u03A5\",\n  Phi: \"\\u03A6\",\n  Chi: \"\\u03A7\",\n  Psi: \"\\u03A8\",\n  Omega: \"\\u03A9\",\n  alpha: \"\\u03B1\",\n  beta: \"\\u03B2\",\n  gamma: \"\\u03B3\",\n  delta: \"\\u03B4\",\n  epsilon: \"\\u03B5\",\n  zeta: \"\\u03B6\",\n  eta: \"\\u03B7\",\n  theta: \"\\u03B8\",\n  iota: \"\\u03B9\",\n  kappa: \"\\u03BA\",\n  lambda: \"\\u03BB\",\n  mu: \"\\u03BC\",\n  nu: \"\\u03BD\",\n  xi: \"\\u03BE\",\n  omicron: \"\\u03BF\",\n  pi: \"\\u03C0\",\n  rho: \"\\u03C1\",\n  sigmaf: \"\\u03C2\",\n  sigma: \"\\u03C3\",\n  tau: \"\\u03C4\",\n  upsilon: \"\\u03C5\",\n  phi: \"\\u03C6\",\n  chi: \"\\u03C7\",\n  psi: \"\\u03C8\",\n  omega: \"\\u03C9\",\n  thetasym: \"\\u03D1\",\n  upsih: \"\\u03D2\",\n  piv: \"\\u03D6\",\n  ensp: \"\\u2002\",\n  emsp: \"\\u2003\",\n  thinsp: \"\\u2009\",\n  zwnj: \"\\u200C\",\n  zwj: \"\\u200D\",\n  lrm: \"\\u200E\",\n  rlm: \"\\u200F\",\n  ndash: \"\\u2013\",\n  mdash: \"\\u2014\",\n  lsquo: \"\\u2018\",\n  rsquo: \"\\u2019\",\n  sbquo: \"\\u201A\",\n  ldquo: \"\\u201C\",\n  rdquo: \"\\u201D\",\n  bdquo: \"\\u201E\",\n  dagger: \"\\u2020\",\n  Dagger: \"\\u2021\",\n  bull: \"\\u2022\",\n  hellip: \"\\u2026\",\n  permil: \"\\u2030\",\n  prime: \"\\u2032\",\n  Prime: \"\\u2033\",\n  lsaquo: \"\\u2039\",\n  rsaquo: \"\\u203A\",\n  oline: \"\\u203E\",\n  frasl: \"\\u2044\",\n  euro: \"\\u20AC\",\n  image: \"\\u2111\",\n  weierp: \"\\u2118\",\n  real: \"\\u211C\",\n  trade: \"\\u2122\",\n  alefsym: \"\\u2135\",\n  larr: \"\\u2190\",\n  uarr: \"\\u2191\",\n  rarr: \"\\u2192\",\n  darr: \"\\u2193\",\n  harr: \"\\u2194\",\n  crarr: \"\\u21B5\",\n  lArr: \"\\u21D0\",\n  uArr: \"\\u21D1\",\n  rArr: \"\\u21D2\",\n  dArr: \"\\u21D3\",\n  hArr: \"\\u21D4\",\n  forall: \"\\u2200\",\n  part: \"\\u2202\",\n  exist: \"\\u2203\",\n  empty: \"\\u2205\",\n  nabla: \"\\u2207\",\n  isin: \"\\u2208\",\n  notin: \"\\u2209\",\n  ni: \"\\u220B\",\n  prod: \"\\u220F\",\n  sum: \"\\u2211\",\n  minus: \"\\u2212\",\n  lowast: \"\\u2217\",\n  radic: \"\\u221A\",\n  prop: \"\\u221D\",\n  infin: \"\\u221E\",\n  ang: \"\\u2220\",\n  and: \"\\u2227\",\n  or: \"\\u2228\",\n  cap: \"\\u2229\",\n  cup: \"\\u222A\",\n  int: \"\\u222B\",\n  there4: \"\\u2234\",\n  sim: \"\\u223C\",\n  cong: \"\\u2245\",\n  asymp: \"\\u2248\",\n  ne: \"\\u2260\",\n  equiv: \"\\u2261\",\n  le: \"\\u2264\",\n  ge: \"\\u2265\",\n  sub: \"\\u2282\",\n  sup: \"\\u2283\",\n  nsub: \"\\u2284\",\n  sube: \"\\u2286\",\n  supe: \"\\u2287\",\n  oplus: \"\\u2295\",\n  otimes: \"\\u2297\",\n  perp: \"\\u22A5\",\n  sdot: \"\\u22C5\",\n  lceil: \"\\u2308\",\n  rceil: \"\\u2309\",\n  lfloor: \"\\u230A\",\n  rfloor: \"\\u230B\",\n  lang: \"\\u2329\",\n  rang: \"\\u232A\",\n  loz: \"\\u25CA\",\n  spades: \"\\u2660\",\n  clubs: \"\\u2663\",\n  hearts: \"\\u2665\",\n  diams: \"\\u2666\",\n} as const;\nexport default entities;\n","import * as charCodes from \"charcodes\";\n\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\nexport const lineBreak = /\\r\\n|[\\r\\n\\u2028\\u2029]/;\nexport const lineBreakG = new RegExp(lineBreak.source, \"g\");\n\n// https://tc39.github.io/ecma262/#sec-line-terminators\nexport function isNewLine(code: number): boolean {\n  switch (code) {\n    case charCodes.lineFeed:\n    case charCodes.carriageReturn:\n    case charCodes.lineSeparator:\n    case charCodes.paragraphSeparator:\n      return true;\n\n    default:\n      return false;\n  }\n}\n\nexport function hasNewLine(input: string, start: number, end: number): boolean {\n  for (let i = start; i < end; i++) {\n    if (isNewLine(input.charCodeAt(i))) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport const skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\nexport const skipWhiteSpaceInLine =\n  /(?:[^\\S\\n\\r\\u2028\\u2029]|\\/\\/.*|\\/\\*.*?\\*\\/)*/g;\n\n// https://tc39.github.io/ecma262/#sec-white-space\nexport function isWhitespace(code: number): boolean {\n  switch (code) {\n    case 0x0009: // CHARACTER TABULATION\n    case 0x000b: // LINE TABULATION\n    case 0x000c: // FORM FEED\n    case charCodes.space:\n    case charCodes.nonBreakingSpace:\n    case charCodes.oghamSpaceMark:\n    case 0x2000: // EN QUAD\n    case 0x2001: // EM QUAD\n    case 0x2002: // EN SPACE\n    case 0x2003: // EM SPACE\n    case 0x2004: // THREE-PER-EM SPACE\n    case 0x2005: // FOUR-PER-EM SPACE\n    case 0x2006: // SIX-PER-EM SPACE\n    case 0x2007: // FIGURE SPACE\n    case 0x2008: // PUNCTUATION SPACE\n    case 0x2009: // THIN SPACE\n    case 0x200a: // HAIR SPACE\n    case 0x202f: // NARROW NO-BREAK SPACE\n    case 0x205f: // MEDIUM MATHEMATICAL SPACE\n    case 0x3000: // IDEOGRAPHIC SPACE\n    case 0xfeff: // ZERO WIDTH NO-BREAK SPACE\n      return true;\n\n    default:\n      return false;\n  }\n}\n","import * as charCodes from \"charcodes\";\n\nimport XHTMLEntities from \"./xhtml.ts\";\nimport type Parser from \"../../parser/index.ts\";\nimport type { ExpressionErrors } from \"../../parser/util.ts\";\nimport {\n  tokenComesBeforeExpression,\n  tokenIsKeyword,\n  tokenLabelName,\n  type TokenType,\n  tt,\n} from \"../../tokenizer/types.ts\";\nimport type { TokContext } from \"../../tokenizer/context.ts\";\nimport { types as tc } from \"../../tokenizer/context.ts\";\nimport type * as N from \"../../types.ts\";\nimport { isIdentifierChar, isIdentifierStart } from \"../../util/identifier.ts\";\nimport type { Position } from \"../../util/location.ts\";\nimport { isNewLine } from \"../../util/whitespace.ts\";\nimport { Errors, ParseErrorEnum } from \"../../parse-error.ts\";\nimport type { Undone } from \"../../parser/node.ts\";\n\n/* eslint sort-keys: \"error\" */\nconst JsxErrors = ParseErrorEnum`jsx`({\n  AttributeIsEmpty:\n    \"JSX attributes must only be assigned a non-empty expression.\",\n  MissingClosingTagElement: ({ openingTagName }: { openingTagName: string }) =>\n    `Expected corresponding JSX closing tag for <${openingTagName}>.`,\n  MissingClosingTagFragment: \"Expected corresponding JSX closing tag for <>.\",\n  UnexpectedSequenceExpression:\n    \"Sequence expressions cannot be directly nested inside JSX. Did you mean to wrap it in parentheses (...)?\",\n  // FIXME: Unify with Errors.UnexpectedToken\n  UnexpectedToken: ({\n    unexpected,\n    HTMLEntity,\n  }: {\n    unexpected: string;\n    HTMLEntity: string;\n  }) =>\n    `Unexpected token \\`${unexpected}\\`. Did you mean \\`${HTMLEntity}\\` or \\`{'${unexpected}'}\\`?`,\n  UnsupportedJsxValue:\n    \"JSX value should be either an expression or a quoted JSX text.\",\n  UnterminatedJsxContent: \"Unterminated JSX contents.\",\n  UnwrappedAdjacentJSXElements:\n    \"Adjacent JSX elements must be wrapped in an enclosing tag. Did you want a JSX fragment <>...</>?\",\n});\n\n/* eslint-disable sort-keys */\n\nfunction isFragment(object?: N.JSXTag | null): object is N.JSXFragmentTag {\n  return object\n    ? object.type === \"JSXOpeningFragment\" ||\n        object.type === \"JSXClosingFragment\"\n    : false;\n}\n\n// Transforms JSX element name to string.\n\nfunction getQualifiedJSXName(\n  object: N.JSXIdentifier | N.JSXNamespacedName | N.JSXMemberExpression,\n): string {\n  if (object.type === \"JSXIdentifier\") {\n    return object.name;\n  }\n\n  if (object.type === \"JSXNamespacedName\") {\n    return object.namespace.name + \":\" + object.name.name;\n  }\n\n  if (object.type === \"JSXMemberExpression\") {\n    return (\n      getQualifiedJSXName(object.object) +\n      \".\" +\n      getQualifiedJSXName(object.property)\n    );\n  }\n\n  // istanbul ignore next\n  // @ts-expect-error - object is 'never'\n  throw new Error(\"Node had unexpected type: \" + object.type);\n}\n\nexport interface IJSXParserMixin {\n  jsxParseOpeningElementAfterName(\n    node: N.JSXOpeningElement,\n  ): N.JSXOpeningElement;\n}\n\nexport type ClassWithMixin<\n  T extends new (...args: any) => any,\n  M extends object,\n> = T extends new (...args: infer P) => infer I\n  ? new (...args: P) => I & M\n  : never;\n\nexport default (superClass: typeof Parser) =>\n  class JSXParserMixin extends superClass implements Parser, IJSXParserMixin {\n    // Reads inline JSX contents token.\n\n    jsxReadToken(): void {\n      let out = \"\";\n      let chunkStart = this.state.pos;\n      for (;;) {\n        if (this.state.pos >= this.length) {\n          throw this.raise(\n            JsxErrors.UnterminatedJsxContent,\n            this.state.startLoc,\n          );\n        }\n\n        const ch = this.input.charCodeAt(this.state.pos);\n\n        switch (ch) {\n          case charCodes.lessThan:\n          case charCodes.leftCurlyBrace:\n            if (this.state.pos === this.state.start) {\n              if (ch === charCodes.lessThan && this.state.canStartJSXElement) {\n                ++this.state.pos;\n                this.finishToken(tt.jsxTagStart);\n              } else {\n                super.getTokenFromCode(ch);\n              }\n              return;\n            }\n            out += this.input.slice(chunkStart, this.state.pos);\n            this.finishToken(tt.jsxText, out);\n            return;\n\n          case charCodes.ampersand:\n            out += this.input.slice(chunkStart, this.state.pos);\n            out += this.jsxReadEntity();\n            chunkStart = this.state.pos;\n            break;\n\n          case charCodes.greaterThan:\n          case charCodes.rightCurlyBrace:\n            if (process.env.BABEL_8_BREAKING) {\n              this.raise(JsxErrors.UnexpectedToken, this.state.curPosition(), {\n                unexpected: this.input[this.state.pos],\n                HTMLEntity:\n                  ch === charCodes.rightCurlyBrace ? \"&rbrace;\" : \"&gt;\",\n              });\n            }\n          /* falls through */\n\n          default:\n            if (isNewLine(ch)) {\n              out += this.input.slice(chunkStart, this.state.pos);\n              out += this.jsxReadNewLine(true);\n              chunkStart = this.state.pos;\n            } else {\n              ++this.state.pos;\n            }\n        }\n      }\n    }\n\n    jsxReadNewLine(normalizeCRLF: boolean): string {\n      const ch = this.input.charCodeAt(this.state.pos);\n      let out;\n      ++this.state.pos;\n      if (\n        ch === charCodes.carriageReturn &&\n        this.input.charCodeAt(this.state.pos) === charCodes.lineFeed\n      ) {\n        ++this.state.pos;\n        out = normalizeCRLF ? \"\\n\" : \"\\r\\n\";\n      } else {\n        out = String.fromCharCode(ch);\n      }\n      ++this.state.curLine;\n      this.state.lineStart = this.state.pos;\n\n      return out;\n    }\n\n    jsxReadString(quote: number): void {\n      let out = \"\";\n      let chunkStart = ++this.state.pos;\n      for (;;) {\n        if (this.state.pos >= this.length) {\n          throw this.raise(Errors.UnterminatedString, this.state.startLoc);\n        }\n\n        const ch = this.input.charCodeAt(this.state.pos);\n        if (ch === quote) break;\n        if (ch === charCodes.ampersand) {\n          out += this.input.slice(chunkStart, this.state.pos);\n          out += this.jsxReadEntity();\n          chunkStart = this.state.pos;\n        } else if (isNewLine(ch)) {\n          out += this.input.slice(chunkStart, this.state.pos);\n          out += this.jsxReadNewLine(false);\n          chunkStart = this.state.pos;\n        } else {\n          ++this.state.pos;\n        }\n      }\n      out += this.input.slice(chunkStart, this.state.pos++);\n      this.finishToken(tt.string, out);\n    }\n\n    jsxReadEntity(): string {\n      const startPos = ++this.state.pos;\n      if (this.codePointAtPos(this.state.pos) === charCodes.numberSign) {\n        ++this.state.pos;\n\n        let radix = 10;\n        if (this.codePointAtPos(this.state.pos) === charCodes.lowercaseX) {\n          radix = 16;\n          ++this.state.pos;\n        }\n\n        const codePoint = this.readInt(\n          radix,\n          /* len */ undefined,\n          /* forceLen */ false,\n          /* allowNumSeparator */ \"bail\",\n        );\n        if (\n          codePoint !== null &&\n          this.codePointAtPos(this.state.pos) === charCodes.semicolon\n        ) {\n          ++this.state.pos;\n          return String.fromCodePoint(codePoint);\n        }\n      } else {\n        let count = 0;\n        let semi = false;\n        while (\n          count++ < 10 &&\n          this.state.pos < this.length &&\n          !(semi = this.codePointAtPos(this.state.pos) === charCodes.semicolon)\n        ) {\n          ++this.state.pos;\n        }\n\n        if (semi) {\n          const desc = this.input.slice(startPos, this.state.pos);\n          const entity = XHTMLEntities[desc];\n          ++this.state.pos;\n\n          if (entity) {\n            return entity;\n          }\n        }\n      }\n\n      // Not a valid entity\n      this.state.pos = startPos;\n      return \"&\";\n    }\n\n    // Read a JSX identifier (valid tag or attribute name).\n    //\n    // Optimized version since JSX identifiers can\"t contain\n    // escape characters and so can be read as single slice.\n    // Also assumes that first character was already checked\n    // by isIdentifierStart in readToken.\n\n    jsxReadWord(): void {\n      let ch;\n      const start = this.state.pos;\n      do {\n        ch = this.input.charCodeAt(++this.state.pos);\n      } while (isIdentifierChar(ch) || ch === charCodes.dash);\n      this.finishToken(tt.jsxName, this.input.slice(start, this.state.pos));\n    }\n\n    // Parse next token as JSX identifier\n\n    jsxParseIdentifier(): N.JSXIdentifier {\n      const node = this.startNode<N.JSXIdentifier>();\n      if (this.match(tt.jsxName)) {\n        node.name = this.state.value;\n      } else if (tokenIsKeyword(this.state.type)) {\n        node.name = tokenLabelName(this.state.type);\n      } else {\n        this.unexpected();\n      }\n      this.next();\n      return this.finishNode(node, \"JSXIdentifier\");\n    }\n\n    // Parse namespaced identifier.\n\n    jsxParseNamespacedName(): N.JSXNamespacedName | N.JSXIdentifier {\n      const startLoc = this.state.startLoc;\n      const name = this.jsxParseIdentifier();\n      if (!this.eat(tt.colon)) return name;\n\n      const node = this.startNodeAt<N.JSXNamespacedName>(startLoc);\n      node.namespace = name;\n      node.name = this.jsxParseIdentifier();\n      return this.finishNode(node, \"JSXNamespacedName\");\n    }\n\n    // Parses element name in any form - namespaced, member\n    // or single identifier.\n\n    jsxParseElementName():\n      | N.JSXIdentifier\n      | N.JSXNamespacedName\n      | N.JSXMemberExpression {\n      const startLoc = this.state.startLoc;\n      let node: N.JSXIdentifier | N.JSXNamespacedName | N.JSXMemberExpression =\n        this.jsxParseNamespacedName();\n      if (node.type === \"JSXNamespacedName\") {\n        return node;\n      }\n      while (this.eat(tt.dot)) {\n        const newNode = this.startNodeAt<N.JSXMemberExpression>(startLoc);\n        newNode.object = node;\n        newNode.property = this.jsxParseIdentifier();\n        node = this.finishNode(newNode, \"JSXMemberExpression\");\n      }\n      return node;\n    }\n\n    // Parses any type of JSX attribute value.\n\n    jsxParseAttributeValue():\n      | N.JSXExpressionContainer\n      | N.JSXElement\n      | N.StringLiteral {\n      let node;\n      switch (this.state.type) {\n        case tt.braceL:\n          node = this.startNode();\n          this.setContext(tc.brace);\n          this.next();\n          node = this.jsxParseExpressionContainer(node, tc.j_oTag);\n          if (node.expression.type === \"JSXEmptyExpression\") {\n            this.raise(JsxErrors.AttributeIsEmpty, node);\n          }\n          return node;\n\n        case tt.jsxTagStart:\n        case tt.string:\n          return this.parseExprAtom() as N.JSXElement | N.StringLiteral;\n\n        default:\n          throw this.raise(JsxErrors.UnsupportedJsxValue, this.state.startLoc);\n      }\n    }\n\n    // JSXEmptyExpression is unique type since it doesn't actually parse anything,\n    // and so it should start at the end of last read token (left brace) and finish\n    // at the beginning of the next one (right brace).\n\n    jsxParseEmptyExpression(): N.JSXEmptyExpression {\n      const node = this.startNodeAt(this.state.lastTokEndLoc);\n      return this.finishNodeAt(node, \"JSXEmptyExpression\", this.state.startLoc);\n    }\n\n    // Parse JSX spread child\n\n    jsxParseSpreadChild(node: Undone<N.JSXSpreadChild>): N.JSXSpreadChild {\n      this.next(); // ellipsis\n      node.expression = this.parseExpression();\n      this.setContext(tc.j_expr);\n      this.state.canStartJSXElement = true;\n      this.expect(tt.braceR);\n\n      return this.finishNode(node, \"JSXSpreadChild\");\n    }\n\n    // Parses JSX expression enclosed into curly brackets.\n\n    jsxParseExpressionContainer(\n      node: Undone<N.JSXExpressionContainer>,\n      previousContext: TokContext,\n    ): N.JSXExpressionContainer {\n      if (this.match(tt.braceR)) {\n        node.expression = this.jsxParseEmptyExpression();\n      } else {\n        const expression = this.parseExpression();\n\n        if (process.env.BABEL_8_BREAKING) {\n          if (\n            expression.type === \"SequenceExpression\" &&\n            !expression.extra?.parenthesized\n          ) {\n            this.raise(\n              JsxErrors.UnexpectedSequenceExpression,\n              expression.expressions[1],\n            );\n          }\n        }\n\n        node.expression = expression;\n      }\n      this.setContext(previousContext);\n      this.state.canStartJSXElement = true;\n      this.expect(tt.braceR);\n\n      return this.finishNode(node, \"JSXExpressionContainer\");\n    }\n\n    // Parses following JSX attribute name-value pair.\n\n    jsxParseAttribute(): N.JSXAttribute | N.JSXSpreadAttribute {\n      const node = this.startNode<N.JSXAttribute | N.JSXSpreadAttribute>();\n      if (this.match(tt.braceL)) {\n        this.setContext(tc.brace);\n        this.next();\n        this.expect(tt.ellipsis);\n        node.argument = this.parseMaybeAssignAllowIn();\n        this.setContext(tc.j_oTag);\n        this.state.canStartJSXElement = true;\n        this.expect(tt.braceR);\n        return this.finishNode(node, \"JSXSpreadAttribute\");\n      }\n      node.name = this.jsxParseNamespacedName();\n      node.value = this.eat(tt.eq) ? this.jsxParseAttributeValue() : null;\n      return this.finishNode(node, \"JSXAttribute\");\n    }\n\n    // Parses JSX opening tag starting after \"<\".\n\n    jsxParseOpeningElementAt(\n      startLoc: Position,\n    ): N.JSXOpeningElement | N.JSXOpeningFragment {\n      const node = this.startNodeAt<N.JSXOpeningElement | N.JSXOpeningFragment>(\n        startLoc,\n      );\n      if (this.eat(tt.jsxTagEnd)) {\n        return this.finishNode(node, \"JSXOpeningFragment\");\n      }\n      node.name = this.jsxParseElementName();\n      return this.jsxParseOpeningElementAfterName(\n        node as Undone<N.JSXOpeningElement>,\n      );\n    }\n\n    jsxParseOpeningElementAfterName(\n      node: Undone<N.JSXOpeningElement>,\n    ): N.JSXOpeningElement {\n      const attributes: (N.JSXAttribute | N.JSXSpreadAttribute)[] = [];\n      while (!this.match(tt.slash) && !this.match(tt.jsxTagEnd)) {\n        attributes.push(this.jsxParseAttribute());\n      }\n      node.attributes = attributes;\n      node.selfClosing = this.eat(tt.slash);\n      this.expect(tt.jsxTagEnd);\n      return this.finishNode(node, \"JSXOpeningElement\");\n    }\n\n    // Parses JSX closing tag starting after \"</\".\n\n    jsxParseClosingElementAt(\n      startLoc: Position,\n    ): N.JSXClosingElement | N.JSXClosingFragment {\n      const node = this.startNodeAt<N.JSXClosingFragment | N.JSXClosingElement>(\n        startLoc,\n      );\n      if (this.eat(tt.jsxTagEnd)) {\n        return this.finishNode(node, \"JSXClosingFragment\");\n      }\n      node.name = this.jsxParseElementName();\n      this.expect(tt.jsxTagEnd);\n      return this.finishNode(node, \"JSXClosingElement\");\n    }\n\n    // Parses entire JSX element, including it\"s opening tag\n    // (starting after \"<\"), attributes, contents and closing tag.\n\n    jsxParseElementAt(startLoc: Position): N.JSXElement | N.JSXFragment {\n      const node = this.startNodeAt<N.JSXElement | N.JSXFragment>(startLoc);\n      const children = [];\n      const openingElement = this.jsxParseOpeningElementAt(startLoc);\n      let closingElement = null;\n\n      if (!openingElement.selfClosing) {\n        contents: for (;;) {\n          switch (this.state.type) {\n            case tt.jsxTagStart:\n              startLoc = this.state.startLoc;\n              this.next();\n              if (this.eat(tt.slash)) {\n                closingElement = this.jsxParseClosingElementAt(startLoc);\n                break contents;\n              }\n              children.push(this.jsxParseElementAt(startLoc));\n              break;\n\n            case tt.jsxText:\n              children.push(this.parseLiteral(this.state.value, \"JSXText\"));\n              break;\n\n            case tt.braceL: {\n              const node = this.startNode<\n                N.JSXSpreadChild | N.JSXExpressionContainer\n              >();\n              this.setContext(tc.brace);\n              this.next();\n              if (this.match(tt.ellipsis)) {\n                children.push(this.jsxParseSpreadChild(node));\n              } else {\n                children.push(\n                  this.jsxParseExpressionContainer(node, tc.j_expr),\n                );\n              }\n\n              break;\n            }\n            // istanbul ignore next - should never happen\n            default:\n              this.unexpected();\n          }\n        }\n\n        if (\n          isFragment(openingElement) &&\n          !isFragment(closingElement) &&\n          closingElement !== null\n        ) {\n          this.raise(JsxErrors.MissingClosingTagFragment, closingElement);\n        } else if (!isFragment(openingElement) && isFragment(closingElement)) {\n          this.raise(JsxErrors.MissingClosingTagElement, closingElement, {\n            openingTagName: getQualifiedJSXName(openingElement.name),\n          });\n        } else if (!isFragment(openingElement) && !isFragment(closingElement)) {\n          if (\n            getQualifiedJSXName(closingElement.name) !==\n            getQualifiedJSXName(openingElement.name)\n          ) {\n            this.raise(JsxErrors.MissingClosingTagElement, closingElement, {\n              openingTagName: getQualifiedJSXName(openingElement.name),\n            });\n          }\n        }\n      }\n\n      if (isFragment(openingElement)) {\n        node.openingFragment = openingElement;\n        node.closingFragment = closingElement;\n      } else {\n        node.openingElement = openingElement;\n        node.closingElement = closingElement;\n      }\n      node.children = children;\n      if (this.match(tt.lt)) {\n        throw this.raise(\n          JsxErrors.UnwrappedAdjacentJSXElements,\n          this.state.startLoc,\n        );\n      }\n\n      return isFragment(openingElement)\n        ? this.finishNode(node, \"JSXFragment\")\n        : this.finishNode(node, \"JSXElement\");\n    }\n\n    // Parses entire JSX element from current position.\n\n    jsxParseElement(): N.JSXElement | N.JSXFragment {\n      const startLoc = this.state.startLoc;\n      this.next();\n      return this.jsxParseElementAt(startLoc);\n    }\n\n    setContext(newContext: TokContext) {\n      const { context } = this.state;\n      context[context.length - 1] = newContext;\n    }\n\n    // ==================================\n    // Overrides\n    // ==================================\n\n    parseExprAtom(refExpressionErrors?: ExpressionErrors | null): N.Expression {\n      if (this.match(tt.jsxTagStart)) {\n        return this.jsxParseElement();\n      } else if (\n        this.match(tt.lt) &&\n        this.input.charCodeAt(this.state.pos) !== charCodes.exclamationMark\n      ) {\n        // In case we encounter an lt token here it will always be the start of\n        // jsx as the lt sign is not allowed in places that expect an expression\n        this.replaceToken(tt.jsxTagStart);\n        return this.jsxParseElement();\n      } else {\n        return super.parseExprAtom(refExpressionErrors);\n      }\n    }\n\n    skipSpace() {\n      const curContext = this.curContext();\n      if (!curContext.preserveSpace) super.skipSpace();\n    }\n\n    getTokenFromCode(code: number): void {\n      const context = this.curContext();\n\n      if (context === tc.j_expr) {\n        this.jsxReadToken();\n        return;\n      }\n\n      if (context === tc.j_oTag || context === tc.j_cTag) {\n        if (isIdentifierStart(code)) {\n          this.jsxReadWord();\n          return;\n        }\n\n        if (code === charCodes.greaterThan) {\n          ++this.state.pos;\n          this.finishToken(tt.jsxTagEnd);\n          return;\n        }\n\n        if (\n          (code === charCodes.quotationMark || code === charCodes.apostrophe) &&\n          context === tc.j_oTag\n        ) {\n          this.jsxReadString(code);\n          return;\n        }\n      }\n\n      if (\n        code === charCodes.lessThan &&\n        this.state.canStartJSXElement &&\n        this.input.charCodeAt(this.state.pos + 1) !== charCodes.exclamationMark\n      ) {\n        ++this.state.pos;\n        this.finishToken(tt.jsxTagStart);\n        return;\n      }\n\n      super.getTokenFromCode(code);\n    }\n\n    updateContext(prevType: TokenType): void {\n      const { context, type } = this.state;\n      if (type === tt.slash && prevType === tt.jsxTagStart) {\n        // do not consider JSX expr -> JSX open tag -> ... anymore\n        // reconsider as closing tag context\n        context.splice(-2, 2, tc.j_cTag);\n        this.state.canStartJSXElement = false;\n      } else if (type === tt.jsxTagStart) {\n        // start opening tag context\n        context.push(tc.j_oTag);\n      } else if (type === tt.jsxTagEnd) {\n        const out = context[context.length - 1];\n        if ((out === tc.j_oTag && prevType === tt.slash) || out === tc.j_cTag) {\n          context.pop();\n          this.state.canStartJSXElement =\n            context[context.length - 1] === tc.j_expr;\n        } else {\n          this.setContext(tc.j_expr);\n          this.state.canStartJSXElement = true;\n        }\n      } else {\n        this.state.canStartJSXElement = tokenComesBeforeExpression(type);\n      }\n    }\n  };\n","import type { Position } from \"../../util/location.ts\";\nimport ScopeHandler, { NameType, Scope } from \"../../util/scope.ts\";\nimport { BindingFlag, ScopeFlag } from \"../../util/scopeflags.ts\";\nimport type * as N from \"../../types.ts\";\nimport { Errors } from \"../../parse-error.ts\";\n\nconst enum TsNameType {\n  Types = 1 << 0,\n  // enums (which are also in .types)\n  Enums = 1 << 1,\n  // const enums (which are also in .enums and .types)\n  ConstEnums = 1 << 2,\n  // classes (which are also in .lexical) and interface (which are also in .types)\n  Classes = 1 << 3,\n  // namespaces and ambient functions (or classes) are too difficult to track,\n  // especially without type analysis.\n  // We need to track them anyway, to avoid \"X is not defined\" errors\n  // when exporting them.\n  ExportOnlyBindings = 1 << 4,\n}\n\nclass TypeScriptScope extends Scope {\n  tsNames: Map<string, TsNameType> = new Map();\n}\n\n// See https://github.com/babel/babel/pull/9766#discussion_r268920730 for an\n// explanation of how typescript handles scope.\n\nexport default class TypeScriptScopeHandler extends ScopeHandler<TypeScriptScope> {\n  importsStack: Set<string>[] = [];\n\n  createScope(flags: ScopeFlag): TypeScriptScope {\n    this.importsStack.push(new Set()); // Always keep the top-level scope for export checks.\n\n    return new TypeScriptScope(flags);\n  }\n\n  enter(flags: ScopeFlag): void {\n    if (flags === ScopeFlag.TS_MODULE) {\n      this.importsStack.push(new Set());\n    }\n\n    super.enter(flags);\n  }\n\n  exit() {\n    const flags = super.exit();\n\n    if (flags === ScopeFlag.TS_MODULE) {\n      this.importsStack.pop();\n    }\n\n    return flags;\n  }\n\n  hasImport(name: string, allowShadow?: boolean) {\n    const len = this.importsStack.length;\n    if (this.importsStack[len - 1].has(name)) {\n      return true;\n    }\n    if (!allowShadow && len > 1) {\n      for (let i = 0; i < len - 1; i++) {\n        if (this.importsStack[i].has(name)) return true;\n      }\n    }\n    return false;\n  }\n\n  declareName(name: string, bindingType: BindingFlag, loc: Position) {\n    if (bindingType & BindingFlag.FLAG_TS_IMPORT) {\n      if (this.hasImport(name, true)) {\n        this.parser.raise(Errors.VarRedeclaration, loc, {\n          identifierName: name,\n        });\n      }\n      this.importsStack[this.importsStack.length - 1].add(name);\n      return;\n    }\n\n    const scope = this.currentScope();\n    let type = scope.tsNames.get(name) || 0;\n\n    if (bindingType & BindingFlag.FLAG_TS_EXPORT_ONLY) {\n      this.maybeExportDefined(scope, name);\n      scope.tsNames.set(name, type | TsNameType.ExportOnlyBindings);\n      return;\n    }\n\n    super.declareName(name, bindingType, loc);\n\n    if (bindingType & BindingFlag.KIND_TYPE) {\n      if (!(bindingType & BindingFlag.KIND_VALUE)) {\n        // \"Value\" bindings have already been registered by the superclass.\n        this.checkRedeclarationInScope(scope, name, bindingType, loc);\n        this.maybeExportDefined(scope, name);\n      }\n      type = type | TsNameType.Types;\n    }\n    if (bindingType & BindingFlag.FLAG_TS_ENUM) {\n      type = type | TsNameType.Enums;\n    }\n    if (bindingType & BindingFlag.FLAG_TS_CONST_ENUM) {\n      type = type | TsNameType.ConstEnums;\n    }\n    if (bindingType & BindingFlag.FLAG_CLASS) {\n      type = type | TsNameType.Classes;\n    }\n    if (type) scope.tsNames.set(name, type);\n  }\n\n  isRedeclaredInScope(\n    scope: TypeScriptScope,\n    name: string,\n    bindingType: BindingFlag,\n  ): boolean {\n    const type = scope.tsNames.get(name);\n    if ((type & TsNameType.Enums) > 0) {\n      if (bindingType & BindingFlag.FLAG_TS_ENUM) {\n        // Enums can be merged with other enums if they are both\n        //  const or both non-const.\n        const isConst = !!(bindingType & BindingFlag.FLAG_TS_CONST_ENUM);\n        const wasConst = (type & TsNameType.ConstEnums) > 0;\n        return isConst !== wasConst;\n      }\n      return true;\n    }\n    if (\n      bindingType & BindingFlag.FLAG_CLASS &&\n      (type & TsNameType.Classes) > 0\n    ) {\n      if (scope.names.get(name) & NameType.Lexical) {\n        // Classes can be merged with interfaces\n        return !!(bindingType & BindingFlag.KIND_VALUE);\n      } else {\n        // Interface can be merged with other classes or interfaces\n        return false;\n      }\n    }\n    if (bindingType & BindingFlag.KIND_TYPE && (type & TsNameType.Types) > 0) {\n      return true;\n    }\n\n    return super.isRedeclaredInScope(scope, name, bindingType);\n  }\n\n  checkLocalExport(id: N.Identifier) {\n    const { name } = id;\n\n    if (this.hasImport(name)) return;\n\n    const len = this.scopeStack.length;\n    for (let i = len - 1; i >= 0; i--) {\n      const scope = this.scopeStack[i];\n      const type = scope.tsNames.get(name);\n      if (\n        (type & TsNameType.Types) > 0 ||\n        (type & TsNameType.ExportOnlyBindings) > 0\n      ) {\n        return;\n      }\n    }\n\n    super.checkLocalExport(id);\n  }\n}\n","// ProductionParameterHandler is a stack fashioned production parameter tracker\n// https://tc39.es/ecma262/#sec-grammar-notation\n// The tracked parameters are defined above.\n//\n// Whenever [+Await]/[+Yield] appears in the right-hand sides of a production,\n// we must enter a new tracking stack. For example when parsing\n//\n// AsyncFunctionDeclaration [Yield, Await]:\n//   async [no LineTerminator here] function BindingIdentifier[?Yield, ?Await]\n//     ( FormalParameters[~Yield, +Await] ) { AsyncFunctionBody }\n//\n// we must follow such process:\n//\n// 1. parse async keyword\n// 2. parse function keyword\n// 3. parse bindingIdentifier <= inherit current parameters: [?Await]\n// 4. enter new stack with (PARAM_AWAIT)\n// 5. parse formal parameters <= must have [Await] parameter [+Await]\n// 6. parse function body\n// 7. exit current stack\n\nexport const enum ParamKind {\n  // Initial Parameter flags\n  PARAM = 0b0000,\n  // track [Yield] production parameter\n  PARAM_YIELD = 0b0001,\n  // track [Await] production parameter\n  PARAM_AWAIT = 0b0010,\n  // track [Return] production parameter\n  PARAM_RETURN = 0b0100,\n  // track [In] production parameter\n  PARAM_IN = 0b1000,\n}\n\n// todo(flow->ts) - check if more granular type can be used,\n//  type below is not good because things like PARAM_AWAIT|PARAM_YIELD are not included\n// export type ParamKind =\n//   | typeof PARAM\n//   | typeof PARAM_AWAIT\n//   | typeof PARAM_IN\n//   | typeof PARAM_RETURN\n//   | typeof PARAM_YIELD;\n\nexport default class ProductionParameterHandler {\n  stacks: Array<ParamKind> = [];\n  enter(flags: ParamKind) {\n    this.stacks.push(flags);\n  }\n\n  exit() {\n    this.stacks.pop();\n  }\n\n  currentFlags(): ParamKind {\n    return this.stacks[this.stacks.length - 1];\n  }\n\n  get hasAwait(): boolean {\n    return (this.currentFlags() & ParamKind.PARAM_AWAIT) > 0;\n  }\n\n  get hasYield(): boolean {\n    return (this.currentFlags() & ParamKind.PARAM_YIELD) > 0;\n  }\n\n  get hasReturn(): boolean {\n    return (this.currentFlags() & ParamKind.PARAM_RETURN) > 0;\n  }\n\n  get hasIn(): boolean {\n    return (this.currentFlags() & ParamKind.PARAM_IN) > 0;\n  }\n}\n\nexport function functionFlags(\n  isAsync: boolean,\n  isGenerator: boolean,\n): ParamKind {\n  return (\n    (isAsync ? ParamKind.PARAM_AWAIT : 0) |\n    (isGenerator ? ParamKind.PARAM_YIELD : 0)\n  );\n}\n","import type { OptionFlags, Options } from \"../options.ts\";\nimport type State from \"../tokenizer/state.ts\";\nimport type { PluginsMap } from \"./index.ts\";\nimport type ScopeHandler from \"../util/scope.ts\";\nimport type ExpressionScopeHandler from \"../util/expression-scope.ts\";\nimport type ClassScopeHandler from \"../util/class-scope.ts\";\nimport type ProductionParameterHandler from \"../util/production-parameter.ts\";\nimport type {\n  ParserPluginWithOptions,\n  PluginConfig,\n  PluginOptions,\n} from \"../typings.ts\";\nimport type * as N from \"../types.ts\";\n\nexport default class BaseParser {\n  // Properties set by constructor in index.js\n  declare options: Options;\n  declare optionFlags: OptionFlags;\n  declare inModule: boolean;\n  declare scope: ScopeHandler<any>;\n  declare classScope: ClassScopeHandler;\n  declare prodParam: ProductionParameterHandler;\n  declare expressionScope: ExpressionScopeHandler;\n  declare plugins: PluginsMap;\n  declare filename: string | undefined | null;\n  declare startIndex: number;\n  // Names of exports store. `default` is stored as a name for both\n  // `export default foo;` and `export { foo as default };`.\n  declare exportedIdentifiers: Set<string>;\n  sawUnambiguousESM: boolean = false;\n  ambiguousScriptDifferentAst: boolean = false;\n\n  // Initialized by Tokenizer\n  declare state: State;\n  // input and length are not in state as they are constant and we do\n  // not want to ever copy them, which happens if state gets cloned\n  declare input: string;\n  declare length: number;\n  // Comment store for Program.comments\n  declare comments: Array<N.Comment>;\n\n  sourceToOffsetPos(sourcePos: number) {\n    return sourcePos + this.startIndex;\n  }\n\n  offsetToSourcePos(offsetPos: number) {\n    return offsetPos - this.startIndex;\n  }\n\n  // This method accepts either a string (plugin name) or an array pair\n  // (plugin name and options object). If an options object is given,\n  // then each value is non-recursively checked for identity with that\n  // plugin’s actual option value.\n  hasPlugin(pluginConfig: PluginConfig): boolean {\n    if (typeof pluginConfig === \"string\") {\n      return this.plugins.has(pluginConfig);\n    } else {\n      const [pluginName, pluginOptions] = pluginConfig;\n      if (!this.hasPlugin(pluginName)) {\n        return false;\n      }\n      const actualOptions = this.plugins.get(pluginName);\n      for (const key of Object.keys(\n        pluginOptions,\n      ) as (keyof typeof pluginOptions)[]) {\n        if (actualOptions?.[key] !== pluginOptions[key]) {\n          return false;\n        }\n      }\n      return true;\n    }\n  }\n\n  getPluginOption<\n    PluginName extends ParserPluginWithOptions[0],\n    OptionName extends keyof PluginOptions<PluginName>,\n  >(plugin: PluginName, name: OptionName) {\n    return (this.plugins.get(plugin) as null | PluginOptions<PluginName>)?.[\n      name\n    ];\n  }\n}\n","/*:: declare var invariant; */\n\nimport BaseParser from \"./base.ts\";\nimport type { Comment, Node } from \"../types.ts\";\nimport * as charCodes from \"charcodes\";\nimport type { Undone } from \"./node.ts\";\n\n/**\n * A whitespace token containing comments\n */\nexport type CommentWhitespace = {\n  /**\n   * the start of the whitespace token.\n   */\n  start: number;\n  /**\n   * the end of the whitespace token.\n   */\n  end: number;\n  /**\n   * the containing comments\n   */\n  comments: Array<Comment>;\n  /**\n   * the immediately preceding AST node of the whitespace token\n   */\n  leadingNode: Node | null;\n  /**\n   * the immediately following AST node of the whitespace token\n   */\n  trailingNode: Node | null;\n  /**\n   * the innermost AST node containing the whitespace with minimal size (|end - start|)\n   */\n  containingNode: Node | null;\n};\n\n/**\n * Merge comments with node's trailingComments or assign comments to be\n * trailingComments. New comments will be placed before old comments\n * because the commentStack is enumerated reversely.\n */\nfunction setTrailingComments(node: Undone<Node>, comments: Array<Comment>) {\n  if (node.trailingComments === undefined) {\n    node.trailingComments = comments;\n  } else {\n    node.trailingComments.unshift(...comments);\n  }\n}\n\n/**\n * Merge comments with node's leadingComments or assign comments to be\n * leadingComments. New comments will be placed before old comments\n * because the commentStack is enumerated reversely.\n */\nfunction setLeadingComments(node: Undone<Node>, comments: Array<Comment>) {\n  if (node.leadingComments === undefined) {\n    node.leadingComments = comments;\n  } else {\n    node.leadingComments.unshift(...comments);\n  }\n}\n\n/**\n * Merge comments with node's innerComments or assign comments to be\n * innerComments. New comments will be placed before old comments\n * because the commentStack is enumerated reversely.\n */\nexport function setInnerComments(\n  node: Undone<Node>,\n  comments?: Array<Comment>,\n) {\n  if (node.innerComments === undefined) {\n    node.innerComments = comments;\n  } else {\n    node.innerComments.unshift(...comments);\n  }\n}\n\n/**\n * Given node and elements array, if elements has non-null element,\n * merge comments to its trailingComments, otherwise merge comments\n * to node's innerComments\n */\nfunction adjustInnerComments(\n  node: Undone<Node>,\n  elements: Array<Node>,\n  commentWS: CommentWhitespace,\n) {\n  let lastElement = null;\n  let i = elements.length;\n  while (lastElement === null && i > 0) {\n    lastElement = elements[--i];\n  }\n  if (lastElement === null || lastElement.start > commentWS.start) {\n    setInnerComments(node, commentWS.comments);\n  } else {\n    setTrailingComments(lastElement, commentWS.comments);\n  }\n}\n\nexport default class CommentsParser extends BaseParser {\n  addComment(comment: Comment): void {\n    if (this.filename) comment.loc.filename = this.filename;\n    const { commentsLen } = this.state;\n    if (this.comments.length !== commentsLen) {\n      this.comments.length = commentsLen;\n    }\n    this.comments.push(comment);\n    this.state.commentsLen++;\n  }\n\n  /**\n   * Given a newly created AST node _n_, attach _n_ to a comment whitespace _w_ if applicable\n   * {@see {@link CommentWhitespace}}\n   */\n  processComment(node: Node): void {\n    const { commentStack } = this.state;\n    const commentStackLength = commentStack.length;\n    if (commentStackLength === 0) return;\n    let i = commentStackLength - 1;\n    const lastCommentWS = commentStack[i];\n\n    if (lastCommentWS.start === node.end) {\n      lastCommentWS.leadingNode = node;\n      i--;\n    }\n\n    const { start: nodeStart } = node;\n    // invariant: for all 0 <= j <= i, let c = commentStack[j], c must satisfy c.end < node.end\n    for (; i >= 0; i--) {\n      const commentWS = commentStack[i];\n      const commentEnd = commentWS.end;\n      if (commentEnd > nodeStart) {\n        // by definition of commentWhiteSpace, this implies commentWS.start > nodeStart\n        // so node can be a containingNode candidate. At this time we can finalize the comment\n        // whitespace, because\n        // 1) its leadingNode or trailingNode, if exists, will not change\n        // 2) its containingNode have been assigned and will not change because it is the\n        //    innermost minimal-sized AST node\n        commentWS.containingNode = node;\n        this.finalizeComment(commentWS);\n        commentStack.splice(i, 1);\n      } else {\n        if (commentEnd === nodeStart) {\n          commentWS.trailingNode = node;\n        }\n        // stop the loop when commentEnd <= nodeStart\n        break;\n      }\n    }\n  }\n\n  /**\n   * Assign the comments of comment whitespaces to related AST nodes.\n   * Also adjust innerComments following trailing comma.\n   */\n  finalizeComment(commentWS: CommentWhitespace) {\n    const { comments } = commentWS;\n    if (commentWS.leadingNode !== null || commentWS.trailingNode !== null) {\n      if (commentWS.leadingNode !== null) {\n        setTrailingComments(commentWS.leadingNode, comments);\n      }\n      if (commentWS.trailingNode !== null) {\n        setLeadingComments(commentWS.trailingNode, comments);\n      }\n    } else {\n      /*:: invariant(commentWS.containingNode !== null) */\n      const { containingNode: node, start: commentStart } = commentWS;\n      if (\n        this.input.charCodeAt(this.offsetToSourcePos(commentStart) - 1) ===\n        charCodes.comma\n      ) {\n        // If a commentWhitespace follows a comma and the containingNode allows\n        // list structures with trailing comma, merge it to the trailingComment\n        // of the last non-null list element\n        switch (node.type) {\n          case \"ObjectExpression\":\n          case \"ObjectPattern\":\n          case \"RecordExpression\":\n            adjustInnerComments(node, node.properties, commentWS);\n            break;\n          case \"CallExpression\":\n          case \"OptionalCallExpression\":\n            adjustInnerComments(node, node.arguments, commentWS);\n            break;\n          case \"ImportExpression\":\n            adjustInnerComments(\n              node,\n              [node.source, node.options ?? null],\n              commentWS,\n            );\n            break;\n          case \"FunctionDeclaration\":\n          case \"FunctionExpression\":\n          case \"ArrowFunctionExpression\":\n          case \"ObjectMethod\":\n          case \"ClassMethod\":\n          case \"ClassPrivateMethod\":\n            adjustInnerComments(node, node.params, commentWS);\n            break;\n          case \"ArrayExpression\":\n          case \"ArrayPattern\":\n          case \"TupleExpression\":\n            adjustInnerComments(node, node.elements, commentWS);\n            break;\n          case \"ExportNamedDeclaration\":\n          case \"ImportDeclaration\":\n            adjustInnerComments(node, node.specifiers, commentWS);\n            break;\n          case \"TSEnumDeclaration\":\n            if (!process.env.BABEL_8_BREAKING) {\n              adjustInnerComments(node, node.members, commentWS);\n            } else {\n              setInnerComments(node, comments);\n            }\n            break;\n          case \"TSEnumBody\":\n            adjustInnerComments(node, node.members, commentWS);\n            break;\n          default: {\n            setInnerComments(node, comments);\n          }\n        }\n      } else {\n        setInnerComments(node, comments);\n      }\n    }\n  }\n\n  /**\n   * Drains remaining commentStack and applies finalizeComment\n   * to each comment whitespace. Used only in parseExpression\n   * where the top level AST node is _not_ Program\n   * {@see {@link CommentsParser#finalizeComment}}\n   */\n  finalizeRemainingComments() {\n    const { commentStack } = this.state;\n    for (let i = commentStack.length - 1; i >= 0; i--) {\n      this.finalizeComment(commentStack[i]);\n    }\n    this.state.commentStack = [];\n  }\n\n  /* eslint-disable no-irregular-whitespace */\n  /**\n   * Reset previous node trailing comments. Used in object / class\n   * property parsing. We parse `async`, `static`, `set` and `get`\n   * as an identifier but may reinterpret it into an async/static/accessor\n   * method later. In this case the identifier is not part of the AST and we\n   * should sync the knowledge to commentStacks\n   *\n   * For example, when parsing\n   * ```\n   * async /* 1 *​/ function f() {}\n   * ```\n   * the comment whitespace `/* 1 *​/` has leading node Identifier(async). When\n   * we see the function token, we create a Function node and mark `/* 1 *​/` as\n   * inner comments. So `/* 1 *​/` should be detached from the Identifier node.\n   *\n   * @param node the last finished AST node _before_ current token\n   */\n  /* eslint-enable no-irregular-whitespace */\n  resetPreviousNodeTrailingComments(node: Node) {\n    const { commentStack } = this.state;\n    const { length } = commentStack;\n    if (length === 0) return;\n    const commentWS = commentStack[length - 1];\n    if (commentWS.leadingNode === node) {\n      commentWS.leadingNode = null;\n    }\n  }\n\n  /**\n   * Attach a node to the comment whitespaces right before/after\n   * the given range.\n   *\n   * This is used to properly attach comments around parenthesized\n   * expressions as leading/trailing comments of the inner expression.\n   */\n  takeSurroundingComments(node: Node, start: number, end: number) {\n    const { commentStack } = this.state;\n    const commentStackLength = commentStack.length;\n    if (commentStackLength === 0) return;\n    let i = commentStackLength - 1;\n\n    for (; i >= 0; i--) {\n      const commentWS = commentStack[i];\n      const commentEnd = commentWS.end;\n      const commentStart = commentWS.start;\n\n      if (commentStart === end) {\n        commentWS.leadingNode = node;\n      } else if (commentEnd === start) {\n        commentWS.trailingNode = node;\n      } else if (commentEnd < start) {\n        break;\n      }\n    }\n  }\n}\n","import type { Options } from \"../options.ts\";\nimport type { CommentWhitespace } from \"../parser/comments\";\nimport { Position } from \"../util/location.ts\";\n\nimport { types as ct, type TokContext } from \"./context.ts\";\nimport { tt, type TokenType } from \"./types.ts\";\nimport type { Errors } from \"../parse-error.ts\";\nimport type { ParseError } from \"../parse-error.ts\";\n\nexport type DeferredStrictError =\n  | typeof Errors.StrictNumericEscape\n  | typeof Errors.StrictOctalLiteral;\n\ntype TopicContextState = {\n  // When a topic binding has been currently established,\n  // then this is 1. Otherwise, it is 0. This is forwards compatible\n  // with a future plugin for multiple lexical topics.\n  maxNumOfResolvableTopics: number;\n  // When a topic binding has been currently established, and if that binding\n  // has been used as a topic reference `#`, then this is 0. Otherwise, it is\n  // `null`. This is forwards compatible with a future plugin for multiple\n  // lexical topics.\n  maxTopicIndex: null | 0;\n};\n\nexport const enum LoopLabelKind {\n  Loop = 1,\n  Switch = 2,\n}\n\ndeclare const bit: import(\"../../../../scripts/babel-plugin-bit-decorator/types.d.ts\").BitDecorator<State>;\n\nexport default class State {\n  @bit.storage flags: number;\n\n  @bit accessor strict = false;\n\n  startIndex: number;\n  curLine: number;\n  lineStart: number;\n\n  // And, if locations are used, the {line, column} object\n  // corresponding to those offsets\n  startLoc: Position;\n  endLoc: Position;\n\n  init({\n    strictMode,\n    sourceType,\n    startIndex,\n    startLine,\n    startColumn,\n  }: Options): void {\n    this.strict =\n      strictMode === false\n        ? false\n        : strictMode === true\n          ? true\n          : sourceType === \"module\";\n\n    this.startIndex = startIndex;\n    this.curLine = startLine;\n    this.lineStart = -startColumn;\n    this.startLoc = this.endLoc = new Position(\n      startLine,\n      startColumn,\n      startIndex,\n    );\n  }\n\n  errors: ParseError<any>[] = [];\n\n  // Used to signify the start of a potential arrow function\n  potentialArrowAt: number = -1;\n\n  // Used to signify the start of an expression which looks like a\n  // typed arrow function, but it isn't\n  // e.g. a ? (b) : c => d\n  //          ^\n  noArrowAt: number[] = [];\n\n  // Used to signify the start of an expression whose params, if it looks like\n  // an arrow function, shouldn't be converted to assignable nodes.\n  // This is used to defer the validation of typed arrow functions inside\n  // conditional expressions.\n  // e.g. a ? (b) : c => d\n  //          ^\n  noArrowParamsConversionAt: number[] = [];\n\n  // Flags to track\n  @bit accessor maybeInArrowParameters = false;\n  @bit accessor inType = false;\n  @bit accessor noAnonFunctionType = false;\n  @bit accessor hasFlowComment = false;\n  @bit accessor isAmbientContext = false;\n  @bit accessor inAbstractClass = false;\n  @bit accessor inDisallowConditionalTypesContext = false;\n\n  // For the Hack-style pipelines plugin\n  topicContext: TopicContextState = {\n    maxNumOfResolvableTopics: 0,\n    maxTopicIndex: null,\n  };\n\n  // For the F#-style pipelines plugin\n  @bit accessor soloAwait = false;\n  @bit accessor inFSharpPipelineDirectBody = false;\n\n  // Labels in scope.\n  labels: Array<{\n    kind: LoopLabelKind;\n    name?: string | null;\n    statementStart?: number;\n  }> = [];\n\n  commentsLen = 0;\n  // Comment attachment store\n  commentStack: Array<CommentWhitespace> = [];\n\n  // The current position of the tokenizer in the input.\n  pos: number = 0;\n\n  // Properties of the current token:\n  // Its type\n  type: TokenType = tt.eof;\n\n  // For tokens that include more information than their type, the value\n  value: any = null;\n\n  // Its start and end offset\n  start: number = 0;\n  end: number = 0;\n\n  // Position information for the previous token\n  // this is initialized when generating the second token.\n  lastTokEndLoc: Position = null;\n  // this is initialized when generating the second token.\n  lastTokStartLoc: Position = null;\n\n  // The context stack is used to track whether the apostrophe \"`\" starts\n  // or ends a string template\n  context: Array<TokContext> = [ct.brace];\n\n  // Used to track whether a JSX element is allowed to form\n  @bit accessor canStartJSXElement = true;\n\n  // Used to signal to callers of `readWord1` whether the word\n  // contained any escape sequences. This is needed because words with\n  // escape sequences must not be interpreted as keywords.\n  @bit accessor containsEsc = false;\n\n  // Used to track invalid escape sequences in template literals,\n  // that must be reported if the template is not tagged.\n  firstInvalidTemplateEscapePos: null | Position = null;\n\n  @bit accessor hasTopLevelAwait = false;\n\n  // This property is used to track the following errors\n  // - StrictNumericEscape\n  // - StrictOctalLiteral\n  //\n  // in a literal that occurs prior to/immediately after a \"use strict\" directive.\n\n  // todo(JLHwung): set strictErrors to null and avoid recording string errors\n  // after a non-directive is parsed\n  strictErrors: Map<number, [DeferredStrictError, Position]> = new Map();\n\n  // Tokens length in token store\n  tokensLength: number = 0;\n\n  /**\n   * When we add a new property, we must manually update the `clone` method\n   * @see State#clone\n   */\n\n  curPosition(): Position {\n    return new Position(\n      this.curLine,\n      this.pos - this.lineStart,\n      this.pos + this.startIndex,\n    );\n  }\n\n  clone(): State {\n    const state = new State();\n    state.flags = this.flags;\n    state.startIndex = this.startIndex;\n    state.curLine = this.curLine;\n    state.lineStart = this.lineStart;\n    state.startLoc = this.startLoc;\n    state.endLoc = this.endLoc;\n    state.errors = this.errors.slice();\n    state.potentialArrowAt = this.potentialArrowAt;\n    state.noArrowAt = this.noArrowAt.slice();\n    state.noArrowParamsConversionAt = this.noArrowParamsConversionAt.slice();\n    state.topicContext = this.topicContext;\n    state.labels = this.labels.slice();\n    state.commentsLen = this.commentsLen;\n    state.commentStack = this.commentStack.slice();\n    state.pos = this.pos;\n    state.type = this.type;\n    state.value = this.value;\n    state.start = this.start;\n    state.end = this.end;\n    state.lastTokEndLoc = this.lastTokEndLoc;\n    state.lastTokStartLoc = this.lastTokStartLoc;\n    state.context = this.context.slice();\n    state.firstInvalidTemplateEscapePos = this.firstInvalidTemplateEscapePos;\n    state.strictErrors = this.strictErrors;\n    state.tokensLength = this.tokensLength;\n\n    return state;\n  }\n}\n\nexport type LookaheadState = {\n  pos: number;\n  value: any;\n  type: TokenType;\n  start: number;\n  end: number;\n  context: TokContext[];\n  startLoc: Position;\n  lastTokEndLoc: Position;\n  curLine: number;\n  lineStart: number;\n  curPosition: State[\"curPosition\"];\n  /* Used only in readToken_mult_modulo */\n  inType: boolean;\n  // These boolean properties are not initialized in createLookaheadState()\n  // instead they will only be set by the tokenizer\n  containsEsc?: boolean;\n};\n","// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport * as charCodes from \"charcodes\";\n\n// The following character codes are forbidden from being\n// an immediate sibling of NumericLiteralSeparator _\nconst forbiddenNumericSeparatorSiblings = {\n  decBinOct: new Set<number>([\n    charCodes.dot,\n    charCodes.uppercaseB,\n    charCodes.uppercaseE,\n    charCodes.uppercaseO,\n    charCodes.underscore, // multiple separators are not allowed\n    charCodes.lowercaseB,\n    charCodes.lowercaseE,\n    charCodes.lowercaseO,\n  ]),\n  hex: new Set<number>([\n    charCodes.dot,\n    charCodes.uppercaseX,\n    charCodes.underscore, // multiple separators are not allowed\n    charCodes.lowercaseX,\n  ]),\n};\n\nconst isAllowedNumericSeparatorSibling = {\n  // 0 - 1\n  bin: (ch: number) => ch === charCodes.digit0 || ch === charCodes.digit1,\n\n  // 0 - 7\n  oct: (ch: number) => ch >= charCodes.digit0 && ch <= charCodes.digit7,\n\n  // 0 - 9\n  dec: (ch: number) => ch >= charCodes.digit0 && ch <= charCodes.digit9,\n\n  // 0 - 9, A - F, a - f,\n  hex: (ch: number) =>\n    (ch >= charCodes.digit0 && ch <= charCodes.digit9) ||\n    (ch >= charCodes.uppercaseA && ch <= charCodes.uppercaseF) ||\n    (ch >= charCodes.lowercaseA && ch <= charCodes.lowercaseF),\n};\n\nexport type StringContentsErrorHandlers = EscapedCharErrorHandlers & {\n  unterminated(\n    initialPos: number,\n    initialLineStart: number,\n    initialCurLine: number,\n  ): void;\n};\n\nexport function readStringContents(\n  type: \"single\" | \"double\" | \"template\",\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  errors: StringContentsErrorHandlers,\n) {\n  const initialPos = pos;\n  const initialLineStart = lineStart;\n  const initialCurLine = curLine;\n\n  let out = \"\";\n  let firstInvalidLoc = null;\n  let chunkStart = pos;\n  const { length } = input;\n  for (;;) {\n    if (pos >= length) {\n      errors.unterminated(initialPos, initialLineStart, initialCurLine);\n      out += input.slice(chunkStart, pos);\n      break;\n    }\n    const ch = input.charCodeAt(pos);\n    if (isStringEnd(type, ch, input, pos)) {\n      out += input.slice(chunkStart, pos);\n      break;\n    }\n    if (ch === charCodes.backslash) {\n      out += input.slice(chunkStart, pos);\n      const res = readEscapedChar(\n        input,\n        pos,\n        lineStart,\n        curLine,\n        type === \"template\",\n        errors,\n      );\n      if (res.ch === null && !firstInvalidLoc) {\n        firstInvalidLoc = { pos, lineStart, curLine };\n      } else {\n        out += res.ch;\n      }\n      ({ pos, lineStart, curLine } = res);\n      chunkStart = pos;\n    } else if (\n      ch === charCodes.lineSeparator ||\n      ch === charCodes.paragraphSeparator\n    ) {\n      ++pos;\n      ++curLine;\n      lineStart = pos;\n    } else if (ch === charCodes.lineFeed || ch === charCodes.carriageReturn) {\n      if (type === \"template\") {\n        out += input.slice(chunkStart, pos) + \"\\n\";\n        ++pos;\n        if (\n          ch === charCodes.carriageReturn &&\n          input.charCodeAt(pos) === charCodes.lineFeed\n        ) {\n          ++pos;\n        }\n        ++curLine;\n        chunkStart = lineStart = pos;\n      } else {\n        errors.unterminated(initialPos, initialLineStart, initialCurLine);\n      }\n    } else {\n      ++pos;\n    }\n  }\n  return process.env.BABEL_8_BREAKING\n    ? { pos, str: out, firstInvalidLoc, lineStart, curLine }\n    : {\n        pos,\n        str: out,\n        firstInvalidLoc,\n        lineStart,\n        curLine,\n        containsInvalid: !!firstInvalidLoc,\n      };\n}\n\nfunction isStringEnd(\n  type: \"single\" | \"double\" | \"template\",\n  ch: number,\n  input: string,\n  pos: number,\n) {\n  if (type === \"template\") {\n    return (\n      ch === charCodes.graveAccent ||\n      (ch === charCodes.dollarSign &&\n        input.charCodeAt(pos + 1) === charCodes.leftCurlyBrace)\n    );\n  }\n  return (\n    ch === (type === \"double\" ? charCodes.quotationMark : charCodes.apostrophe)\n  );\n}\n\ntype EscapedCharErrorHandlers = HexCharErrorHandlers &\n  CodePointErrorHandlers & {\n    strictNumericEscape(pos: number, lineStart: number, curLine: number): void;\n  };\n\nfunction readEscapedChar(\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  inTemplate: boolean,\n  errors: EscapedCharErrorHandlers,\n) {\n  const throwOnInvalid = !inTemplate;\n  pos++; // skip '\\'\n\n  const res = (ch: string | null) => ({ pos, ch, lineStart, curLine });\n\n  const ch = input.charCodeAt(pos++);\n  switch (ch) {\n    case charCodes.lowercaseN:\n      return res(\"\\n\");\n    case charCodes.lowercaseR:\n      return res(\"\\r\");\n    case charCodes.lowercaseX: {\n      let code;\n      ({ code, pos } = readHexChar(\n        input,\n        pos,\n        lineStart,\n        curLine,\n        2,\n        false,\n        throwOnInvalid,\n        errors,\n      ));\n      return res(code === null ? null : String.fromCharCode(code));\n    }\n    case charCodes.lowercaseU: {\n      let code;\n      ({ code, pos } = readCodePoint(\n        input,\n        pos,\n        lineStart,\n        curLine,\n        throwOnInvalid,\n        errors,\n      ));\n      return res(code === null ? null : String.fromCodePoint(code));\n    }\n    case charCodes.lowercaseT:\n      return res(\"\\t\");\n    case charCodes.lowercaseB:\n      return res(\"\\b\");\n    case charCodes.lowercaseV:\n      return res(\"\\u000b\");\n    case charCodes.lowercaseF:\n      return res(\"\\f\");\n    case charCodes.carriageReturn:\n      if (input.charCodeAt(pos) === charCodes.lineFeed) {\n        ++pos;\n      }\n    // fall through\n    case charCodes.lineFeed:\n      lineStart = pos;\n      ++curLine;\n    // fall through\n    case charCodes.lineSeparator:\n    case charCodes.paragraphSeparator:\n      return res(\"\");\n    case charCodes.digit8:\n    case charCodes.digit9:\n      if (inTemplate) {\n        return res(null);\n      } else {\n        errors.strictNumericEscape(pos - 1, lineStart, curLine);\n      }\n    // fall through\n    default:\n      if (ch >= charCodes.digit0 && ch <= charCodes.digit7) {\n        const startPos = pos - 1;\n        const match = /^[0-7]+/.exec(input.slice(startPos, pos + 2));\n\n        let octalStr = match[0];\n\n        let octal = parseInt(octalStr, 8);\n        if (octal > 255) {\n          octalStr = octalStr.slice(0, -1);\n          octal = parseInt(octalStr, 8);\n        }\n        pos += octalStr.length - 1;\n        const next = input.charCodeAt(pos);\n        if (\n          octalStr !== \"0\" ||\n          next === charCodes.digit8 ||\n          next === charCodes.digit9\n        ) {\n          if (inTemplate) {\n            return res(null);\n          } else {\n            errors.strictNumericEscape(startPos, lineStart, curLine);\n          }\n        }\n\n        return res(String.fromCharCode(octal));\n      }\n\n      return res(String.fromCharCode(ch));\n  }\n}\n\ntype HexCharErrorHandlers = IntErrorHandlers & {\n  invalidEscapeSequence(pos: number, lineStart: number, curLine: number): void;\n};\n\n// Used to read character escape sequences ('\\x', '\\u').\nfunction readHexChar(\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  len: number,\n  forceLen: boolean,\n  throwOnInvalid: boolean,\n  errors: HexCharErrorHandlers,\n) {\n  const initialPos = pos;\n  let n;\n  ({ n, pos } = readInt(\n    input,\n    pos,\n    lineStart,\n    curLine,\n    16,\n    len,\n    forceLen,\n    false,\n    errors,\n    /* bailOnError */ !throwOnInvalid,\n  ));\n  if (n === null) {\n    if (throwOnInvalid) {\n      errors.invalidEscapeSequence(initialPos, lineStart, curLine);\n    } else {\n      pos = initialPos - 1;\n    }\n  }\n  return { code: n, pos };\n}\n\nexport type IntErrorHandlers = {\n  numericSeparatorInEscapeSequence(\n    pos: number,\n    lineStart: number,\n    curLine: number,\n  ): void;\n  unexpectedNumericSeparator(\n    pos: number,\n    lineStart: number,\n    curLine: number,\n  ): void;\n  // It can return \"true\" to indicate that the error was handled\n  // and the int parsing should continue.\n  invalidDigit(\n    pos: number,\n    lineStart: number,\n    curLine: number,\n    radix: number,\n  ): boolean;\n};\n\nexport function readInt(\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  radix: number,\n  len: number | undefined,\n  forceLen: boolean,\n  allowNumSeparator: boolean | \"bail\",\n  errors: IntErrorHandlers,\n  bailOnError: boolean,\n) {\n  const start = pos;\n  const forbiddenSiblings =\n    radix === 16\n      ? forbiddenNumericSeparatorSiblings.hex\n      : forbiddenNumericSeparatorSiblings.decBinOct;\n  const isAllowedSibling =\n    radix === 16\n      ? isAllowedNumericSeparatorSibling.hex\n      : radix === 10\n        ? isAllowedNumericSeparatorSibling.dec\n        : radix === 8\n          ? isAllowedNumericSeparatorSibling.oct\n          : isAllowedNumericSeparatorSibling.bin;\n\n  let invalid = false;\n  let total = 0;\n\n  for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) {\n    const code = input.charCodeAt(pos);\n    let val;\n\n    if (code === charCodes.underscore && allowNumSeparator !== \"bail\") {\n      const prev = input.charCodeAt(pos - 1);\n      const next = input.charCodeAt(pos + 1);\n\n      if (!allowNumSeparator) {\n        if (bailOnError) return { n: null, pos };\n        errors.numericSeparatorInEscapeSequence(pos, lineStart, curLine);\n      } else if (\n        Number.isNaN(next) ||\n        !isAllowedSibling(next) ||\n        forbiddenSiblings.has(prev) ||\n        forbiddenSiblings.has(next)\n      ) {\n        if (bailOnError) return { n: null, pos };\n        errors.unexpectedNumericSeparator(pos, lineStart, curLine);\n      }\n\n      // Ignore this _ character\n      ++pos;\n      continue;\n    }\n\n    if (code >= charCodes.lowercaseA) {\n      val = code - charCodes.lowercaseA + charCodes.lineFeed;\n    } else if (code >= charCodes.uppercaseA) {\n      val = code - charCodes.uppercaseA + charCodes.lineFeed;\n    } else if (charCodes.isDigit(code)) {\n      val = code - charCodes.digit0; // 0-9\n    } else {\n      val = Infinity;\n    }\n    if (val >= radix) {\n      // If we found a digit which is too big, errors.invalidDigit can return true to avoid\n      // breaking the loop (this is used for error recovery).\n      if (val <= 9 && bailOnError) {\n        return { n: null, pos };\n      } else if (\n        val <= 9 &&\n        errors.invalidDigit(pos, lineStart, curLine, radix)\n      ) {\n        val = 0;\n      } else if (forceLen) {\n        val = 0;\n        invalid = true;\n      } else {\n        break;\n      }\n    }\n    ++pos;\n    total = total * radix + val;\n  }\n  if (pos === start || (len != null && pos - start !== len) || invalid) {\n    return { n: null, pos };\n  }\n\n  return { n: total, pos };\n}\n\nexport type CodePointErrorHandlers = HexCharErrorHandlers & {\n  invalidCodePoint(pos: number, lineStart: number, curLine: number): void;\n};\n\nexport function readCodePoint(\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  throwOnInvalid: boolean,\n  errors: CodePointErrorHandlers,\n) {\n  const ch = input.charCodeAt(pos);\n  let code;\n\n  if (ch === charCodes.leftCurlyBrace) {\n    ++pos;\n    ({ code, pos } = readHexChar(\n      input,\n      pos,\n      lineStart,\n      curLine,\n      input.indexOf(\"}\", pos) - pos,\n      true,\n      throwOnInvalid,\n      errors,\n    ));\n    ++pos;\n    if (code !== null && code > 0x10ffff) {\n      if (throwOnInvalid) {\n        errors.invalidCodePoint(pos, lineStart, curLine);\n      } else {\n        return { code: null, pos };\n      }\n    }\n  } else {\n    ({ code, pos } = readHexChar(\n      input,\n      pos,\n      lineStart,\n      curLine,\n      4,\n      false,\n      throwOnInvalid,\n      errors,\n    ));\n  }\n  return { code, pos };\n}\n","/*:: declare var invariant; */\n\nimport { OptionFlags, type Options } from \"../options.ts\";\nimport {\n  Position,\n  SourceLocation,\n  createPositionWithColumnOffset,\n} from \"../util/location.ts\";\nimport CommentsParser, { type CommentWhitespace } from \"../parser/comments.ts\";\nimport type * as N from \"../types.ts\";\nimport * as charCodes from \"charcodes\";\nimport { isIdentifierStart, isIdentifierChar } from \"../util/identifier.ts\";\nimport {\n  tokenIsKeyword,\n  tokenLabelName,\n  tt,\n  keywords as keywordTypes,\n  type TokenType,\n} from \"./types.ts\";\nimport type { TokContext } from \"./context.ts\";\nimport {\n  Errors,\n  type ParseError,\n  type ParseErrorConstructor,\n} from \"../parse-error.ts\";\nimport {\n  lineBreakG,\n  isNewLine,\n  isWhitespace,\n  skipWhiteSpace,\n  skipWhiteSpaceInLine,\n} from \"../util/whitespace.ts\";\nimport State from \"./state.ts\";\nimport type { LookaheadState, DeferredStrictError } from \"./state.ts\";\nimport type { Undone } from \"../parser/node.ts\";\nimport type { Node } from \"../types.ts\";\n\nimport {\n  readInt,\n  readCodePoint,\n  readStringContents,\n  type IntErrorHandlers,\n  type CodePointErrorHandlers,\n  type StringContentsErrorHandlers,\n} from \"@babel/helper-string-parser\";\n\nimport type { Plugin } from \"../typings.ts\";\n\nfunction buildPosition(pos: number, lineStart: number, curLine: number) {\n  return new Position(curLine, pos - lineStart, pos);\n}\n\nconst VALID_REGEX_FLAGS = new Set([\n  charCodes.lowercaseG,\n  charCodes.lowercaseM,\n  charCodes.lowercaseS,\n  charCodes.lowercaseI,\n  charCodes.lowercaseY,\n  charCodes.lowercaseU,\n  charCodes.lowercaseD,\n  charCodes.lowercaseV,\n]);\n\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\n\nexport class Token {\n  constructor(state: State) {\n    const startIndex = state.startIndex || 0;\n    this.type = state.type;\n    this.value = state.value;\n    this.start = startIndex + state.start;\n    this.end = startIndex + state.end;\n    this.loc = new SourceLocation(state.startLoc, state.endLoc);\n  }\n\n  declare type: TokenType;\n  declare value: any;\n  declare start: number;\n  declare end: number;\n  declare loc: SourceLocation;\n}\n\n// ## Tokenizer\n\nexport default abstract class Tokenizer extends CommentsParser {\n  isLookahead: boolean;\n\n  // Token store.\n  tokens: Array<Token | N.Comment> = [];\n\n  constructor(options: Options, input: string) {\n    super();\n    this.state = new State();\n    this.state.init(options);\n    this.input = input;\n    this.length = input.length;\n    this.comments = [];\n    this.isLookahead = false;\n  }\n\n  pushToken(token: Token | N.Comment) {\n    // Pop out invalid tokens trapped by try-catch parsing.\n    // Those parsing branches are mainly created by typescript and flow plugins.\n    this.tokens.length = this.state.tokensLength;\n    this.tokens.push(token);\n    ++this.state.tokensLength;\n  }\n\n  // Move to the next token\n\n  next(): void {\n    this.checkKeywordEscapes();\n    if (this.optionFlags & OptionFlags.Tokens) {\n      this.pushToken(new Token(this.state));\n    }\n\n    this.state.lastTokEndLoc = this.state.endLoc;\n    this.state.lastTokStartLoc = this.state.startLoc;\n    this.nextToken();\n  }\n\n  eat(type: TokenType): boolean {\n    if (this.match(type)) {\n      this.next();\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  /**\n   * Whether current token matches given type\n   */\n  match(type: TokenType): boolean {\n    return this.state.type === type;\n  }\n\n  /**\n   * Create a LookaheadState from current parser state\n   */\n  createLookaheadState(state: State): LookaheadState {\n    return {\n      pos: state.pos,\n      value: null,\n      type: state.type,\n      start: state.start,\n      end: state.end,\n      context: [this.curContext()],\n      inType: state.inType,\n      startLoc: state.startLoc,\n      lastTokEndLoc: state.lastTokEndLoc,\n      curLine: state.curLine,\n      lineStart: state.lineStart,\n      curPosition: state.curPosition,\n    };\n  }\n\n  /**\n   * lookahead peeks the next token, skipping changes to token context and\n   * comment stack. For performance it returns a limited LookaheadState\n   * instead of full parser state.\n   *\n   * The { column, line } Loc info is not included in lookahead since such usage\n   * is rare. Although it may return other location properties e.g. `curLine` and\n   * `lineStart`, these properties are not listed in the LookaheadState interface\n   * and thus the returned value is _NOT_ reliable.\n   *\n   * The tokenizer should make best efforts to avoid using any parser state\n   * other than those defined in LookaheadState\n   */\n  lookahead(): LookaheadState {\n    const old = this.state;\n    // @ts-expect-error For performance we use a simplified tokenizer state structure\n    this.state = this.createLookaheadState(old);\n\n    this.isLookahead = true;\n    this.nextToken();\n    this.isLookahead = false;\n\n    const curr = this.state;\n    this.state = old;\n    return curr;\n  }\n\n  nextTokenStart(): number {\n    return this.nextTokenStartSince(this.state.pos);\n  }\n\n  nextTokenStartSince(pos: number): number {\n    skipWhiteSpace.lastIndex = pos;\n    return skipWhiteSpace.test(this.input) ? skipWhiteSpace.lastIndex : pos;\n  }\n\n  lookaheadCharCode(): number {\n    return this.lookaheadCharCodeSince(this.state.pos);\n  }\n\n  lookaheadCharCodeSince(pos: number): number {\n    return this.input.charCodeAt(this.nextTokenStartSince(pos));\n  }\n\n  /**\n   * Similar to nextToken, but it will stop at line break when it is seen before the next token\n   *\n   * @returns {number} position of the next token start or line break, whichever is seen first.\n   * @memberof Tokenizer\n   */\n  nextTokenInLineStart(): number {\n    return this.nextTokenInLineStartSince(this.state.pos);\n  }\n\n  nextTokenInLineStartSince(pos: number): number {\n    skipWhiteSpaceInLine.lastIndex = pos;\n    return skipWhiteSpaceInLine.test(this.input)\n      ? skipWhiteSpaceInLine.lastIndex\n      : pos;\n  }\n\n  /**\n   * Similar to lookaheadCharCode, but it will return the char code of line break if it is\n   * seen before the next token\n   *\n   * @returns {number} char code of the next token start or line break, whichever is seen first.\n   * @memberof Tokenizer\n   */\n  lookaheadInLineCharCode(): number {\n    return this.input.charCodeAt(this.nextTokenInLineStart());\n  }\n\n  codePointAtPos(pos: number): number {\n    // The implementation is based on\n    // https://source.chromium.org/chromium/chromium/src/+/master:v8/src/builtins/builtins-string-gen.cc;l=1455;drc=221e331b49dfefadbc6fa40b0c68e6f97606d0b3;bpv=0;bpt=1\n    // We reimplement `codePointAt` because `codePointAt` is a V8 builtin which is not inlined by TurboFan (as of M91)\n    // since `input` is mostly ASCII, an inlined `charCodeAt` wins here\n    let cp = this.input.charCodeAt(pos);\n    if ((cp & 0xfc00) === 0xd800 && ++pos < this.input.length) {\n      const trail = this.input.charCodeAt(pos);\n      if ((trail & 0xfc00) === 0xdc00) {\n        cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\n      }\n    }\n    return cp;\n  }\n\n  // Toggle strict mode. Re-reads the next number or string to please\n  // pedantic tests (`\"use strict\"; 010;` should fail).\n\n  setStrict(strict: boolean): void {\n    this.state.strict = strict;\n    if (strict) {\n      // Throw an error for any string decimal escape found before/immediately\n      // after a \"use strict\" directive. Strict mode will be set at parse\n      // time for any literals that occur after the next node of the strict\n      // directive.\n      this.state.strictErrors.forEach(([toParseError, at]) =>\n        this.raise(toParseError, at),\n      );\n      this.state.strictErrors.clear();\n    }\n  }\n\n  curContext(): TokContext {\n    return this.state.context[this.state.context.length - 1];\n  }\n\n  // Read a single token, updating the parser object's token-related properties.\n  nextToken(): void {\n    this.skipSpace();\n    this.state.start = this.state.pos;\n    if (!this.isLookahead) this.state.startLoc = this.state.curPosition();\n    if (this.state.pos >= this.length) {\n      this.finishToken(tt.eof);\n      return;\n    }\n\n    this.getTokenFromCode(this.codePointAtPos(this.state.pos));\n  }\n\n  // Skips a block comment, whose end is marked by commentEnd.\n  // *-/ is used by the Flow plugin, when parsing block comments nested\n  // inside Flow comments.\n  skipBlockComment(commentEnd: \"*/\" | \"*-/\"): N.CommentBlock | undefined {\n    let startLoc;\n    if (!this.isLookahead) startLoc = this.state.curPosition();\n    const start = this.state.pos;\n    const end = this.input.indexOf(commentEnd, start + 2);\n    if (end === -1) {\n      // We have to call this again here because startLoc may not be set...\n      // This seems to be for performance reasons:\n      // https://github.com/babel/babel/commit/acf2a10899f696a8aaf34df78bf9725b5ea7f2da\n      throw this.raise(Errors.UnterminatedComment, this.state.curPosition());\n    }\n\n    this.state.pos = end + commentEnd.length;\n    lineBreakG.lastIndex = start + 2;\n    while (lineBreakG.test(this.input) && lineBreakG.lastIndex <= end) {\n      ++this.state.curLine;\n      this.state.lineStart = lineBreakG.lastIndex;\n    }\n\n    // If we are doing a lookahead right now we need to advance the position (above code)\n    // but we do not want to push the comment to the state.\n    if (this.isLookahead) return;\n    /*:: invariant(startLoc) */\n\n    const comment: N.CommentBlock = {\n      type: \"CommentBlock\",\n      value: this.input.slice(start + 2, end),\n      start: this.sourceToOffsetPos(start),\n      end: this.sourceToOffsetPos(end + commentEnd.length),\n      loc: new SourceLocation(startLoc, this.state.curPosition()),\n    };\n    if (this.optionFlags & OptionFlags.Tokens) this.pushToken(comment);\n    return comment;\n  }\n\n  skipLineComment(startSkip: number): N.CommentLine | undefined {\n    const start = this.state.pos;\n    let startLoc;\n    if (!this.isLookahead) startLoc = this.state.curPosition();\n    let ch = this.input.charCodeAt((this.state.pos += startSkip));\n    if (this.state.pos < this.length) {\n      while (!isNewLine(ch) && ++this.state.pos < this.length) {\n        ch = this.input.charCodeAt(this.state.pos);\n      }\n    }\n\n    // If we are doing a lookahead right now we need to advance the position (above code)\n    // but we do not want to push the comment to the state.\n    if (this.isLookahead) return;\n\n    const end = this.state.pos;\n    const value = this.input.slice(start + startSkip, end);\n\n    const comment: N.CommentLine = {\n      type: \"CommentLine\",\n      value,\n      start: this.sourceToOffsetPos(start),\n      end: this.sourceToOffsetPos(end),\n      loc: new SourceLocation(startLoc, this.state.curPosition()),\n    };\n    if (this.optionFlags & OptionFlags.Tokens) this.pushToken(comment);\n    return comment;\n  }\n\n  // Called at the start of the parse and after every token. Skips\n  // whitespace and comments, and.\n\n  skipSpace(): void {\n    const spaceStart = this.state.pos;\n    const comments: N.Comment[] =\n      this.optionFlags & OptionFlags.AttachComment ? [] : null;\n    loop: while (this.state.pos < this.length) {\n      const ch = this.input.charCodeAt(this.state.pos);\n      switch (ch) {\n        case charCodes.space:\n        case charCodes.nonBreakingSpace:\n        case charCodes.tab:\n          ++this.state.pos;\n          break;\n        case charCodes.carriageReturn:\n          if (\n            this.input.charCodeAt(this.state.pos + 1) === charCodes.lineFeed\n          ) {\n            ++this.state.pos;\n          }\n        // fall through\n        case charCodes.lineFeed:\n        case charCodes.lineSeparator:\n        case charCodes.paragraphSeparator:\n          ++this.state.pos;\n          ++this.state.curLine;\n          this.state.lineStart = this.state.pos;\n          break;\n\n        case charCodes.slash:\n          switch (this.input.charCodeAt(this.state.pos + 1)) {\n            case charCodes.asterisk: {\n              const comment = this.skipBlockComment(\"*/\");\n              if (comment !== undefined) {\n                this.addComment(comment);\n                comments?.push(comment);\n              }\n              break;\n            }\n\n            case charCodes.slash: {\n              const comment = this.skipLineComment(2);\n              if (comment !== undefined) {\n                this.addComment(comment);\n                comments?.push(comment);\n              }\n              break;\n            }\n\n            default:\n              break loop;\n          }\n          break;\n\n        default:\n          if (isWhitespace(ch)) {\n            ++this.state.pos;\n          } else if (\n            ch === charCodes.dash &&\n            !this.inModule &&\n            this.optionFlags & OptionFlags.AnnexB\n          ) {\n            const pos = this.state.pos;\n            if (\n              this.input.charCodeAt(pos + 1) === charCodes.dash &&\n              this.input.charCodeAt(pos + 2) === charCodes.greaterThan &&\n              (spaceStart === 0 || this.state.lineStart > spaceStart)\n            ) {\n              // A `-->` line comment\n              const comment = this.skipLineComment(3);\n              if (comment !== undefined) {\n                this.addComment(comment);\n                comments?.push(comment);\n              }\n            } else {\n              break loop;\n            }\n          } else if (\n            ch === charCodes.lessThan &&\n            !this.inModule &&\n            this.optionFlags & OptionFlags.AnnexB\n          ) {\n            const pos = this.state.pos;\n            if (\n              this.input.charCodeAt(pos + 1) === charCodes.exclamationMark &&\n              this.input.charCodeAt(pos + 2) === charCodes.dash &&\n              this.input.charCodeAt(pos + 3) === charCodes.dash\n            ) {\n              // `<!--`, an XML-style comment that should be interpreted as a line comment\n              const comment = this.skipLineComment(4);\n              if (comment !== undefined) {\n                this.addComment(comment);\n                comments?.push(comment);\n              }\n            } else {\n              break loop;\n            }\n          } else {\n            break loop;\n          }\n      }\n    }\n\n    if (comments?.length > 0) {\n      const end = this.state.pos;\n      const commentWhitespace: CommentWhitespace = {\n        start: this.sourceToOffsetPos(spaceStart),\n        end: this.sourceToOffsetPos(end),\n        comments,\n        leadingNode: null,\n        trailingNode: null,\n        containingNode: null,\n      };\n      this.state.commentStack.push(commentWhitespace);\n    }\n  }\n\n  // Called at the end of every token. Sets `end`, `val`, and\n  // maintains `context` and `canStartJSXElement`, and skips the space after\n  // the token, so that the next one's `start` will point at the\n  // right position.\n\n  finishToken(type: TokenType, val?: any): void {\n    this.state.end = this.state.pos;\n    this.state.endLoc = this.state.curPosition();\n    const prevType = this.state.type;\n    this.state.type = type;\n    this.state.value = val;\n\n    if (!this.isLookahead) {\n      this.updateContext(prevType);\n    }\n  }\n\n  replaceToken(type: TokenType): void {\n    this.state.type = type;\n    // @ts-expect-error the prevType of updateContext is required\n    // only when the new type is tt.slash/tt.jsxTagEnd\n    this.updateContext();\n  }\n\n  // ### Token reading\n\n  // This is the function that is called to fetch the next token. It\n  // is somewhat obscure, because it works in character codes rather\n  // than characters, and because operator parsing has been inlined\n  // into it.\n  //\n  // All in the name of speed.\n\n  // number sign is \"#\"\n  readToken_numberSign(): void {\n    if (this.state.pos === 0 && this.readToken_interpreter()) {\n      return;\n    }\n\n    const nextPos = this.state.pos + 1;\n    const next = this.codePointAtPos(nextPos);\n    if (next >= charCodes.digit0 && next <= charCodes.digit9) {\n      throw this.raise(\n        Errors.UnexpectedDigitAfterHash,\n        this.state.curPosition(),\n      );\n    }\n\n    if (\n      !process.env.BABEL_8_BREAKING &&\n      (next === charCodes.leftCurlyBrace ||\n        (next === charCodes.leftSquareBracket &&\n          this.hasPlugin(\"recordAndTuple\")))\n    ) {\n      // When we see `#{`, it is likely to be a hash record.\n      // However we don't yell at `#[` since users may intend to use \"computed private fields\",\n      // which is not allowed in the spec. Throwing expecting recordAndTuple is\n      // misleading\n      this.expectPlugin(\"recordAndTuple\");\n      if (\n        !process.env.BABEL_8_BREAKING &&\n        this.getPluginOption(\"recordAndTuple\", \"syntaxType\") === \"bar\"\n      ) {\n        throw this.raise(\n          next === charCodes.leftCurlyBrace\n            ? Errors.RecordExpressionHashIncorrectStartSyntaxType\n            : Errors.TupleExpressionHashIncorrectStartSyntaxType,\n          this.state.curPosition(),\n        );\n      }\n\n      this.state.pos += 2;\n      if (next === charCodes.leftCurlyBrace) {\n        // #{\n        this.finishToken(tt.braceHashL);\n      } else {\n        // #[\n        this.finishToken(tt.bracketHashL);\n      }\n    } else if (isIdentifierStart(next)) {\n      ++this.state.pos;\n      this.finishToken(tt.privateName, this.readWord1(next));\n    } else if (next === charCodes.backslash) {\n      ++this.state.pos;\n      this.finishToken(tt.privateName, this.readWord1());\n    } else {\n      this.finishOp(tt.hash, 1);\n    }\n  }\n\n  readToken_dot(): void {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next >= charCodes.digit0 && next <= charCodes.digit9) {\n      this.readNumber(true);\n      return;\n    }\n\n    if (\n      next === charCodes.dot &&\n      this.input.charCodeAt(this.state.pos + 2) === charCodes.dot\n    ) {\n      this.state.pos += 3;\n      this.finishToken(tt.ellipsis);\n    } else {\n      ++this.state.pos;\n      this.finishToken(tt.dot);\n    }\n  }\n\n  readToken_slash(): void {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next === charCodes.equalsTo) {\n      this.finishOp(tt.slashAssign, 2);\n    } else {\n      this.finishOp(tt.slash, 1);\n    }\n  }\n\n  readToken_interpreter(): boolean {\n    if (this.state.pos !== 0 || this.length < 2) return false;\n\n    let ch = this.input.charCodeAt(this.state.pos + 1);\n    if (ch !== charCodes.exclamationMark) return false;\n\n    const start = this.state.pos;\n    this.state.pos += 1;\n\n    while (!isNewLine(ch) && ++this.state.pos < this.length) {\n      ch = this.input.charCodeAt(this.state.pos);\n    }\n\n    const value = this.input.slice(start + 2, this.state.pos);\n\n    this.finishToken(tt.interpreterDirective, value);\n\n    return true;\n  }\n\n  readToken_mult_modulo(code: number): void {\n    // '%' or '*'\n    let type = code === charCodes.asterisk ? tt.star : tt.modulo;\n    let width = 1;\n    let next = this.input.charCodeAt(this.state.pos + 1);\n\n    // Exponentiation operator '**'\n    if (code === charCodes.asterisk && next === charCodes.asterisk) {\n      width++;\n      next = this.input.charCodeAt(this.state.pos + 2);\n      type = tt.exponent;\n    }\n\n    // '%=' or '*='\n    if (next === charCodes.equalsTo && !this.state.inType) {\n      width++;\n      // `tt.moduloAssign` is only needed to support % as a Hack-pipe topic token.\n      // If the proposal ends up choosing a different token,\n      // it can be merged with tt.assign.\n      type = code === charCodes.percentSign ? tt.moduloAssign : tt.assign;\n    }\n\n    this.finishOp(type, width);\n  }\n\n  readToken_pipe_amp(code: number): void {\n    // '||' '&&' '||=' '&&='\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === code) {\n      if (this.input.charCodeAt(this.state.pos + 2) === charCodes.equalsTo) {\n        this.finishOp(tt.assign, 3);\n      } else {\n        this.finishOp(\n          code === charCodes.verticalBar ? tt.logicalOR : tt.logicalAND,\n          2,\n        );\n      }\n      return;\n    }\n\n    if (code === charCodes.verticalBar) {\n      // '|>'\n      if (next === charCodes.greaterThan) {\n        this.finishOp(tt.pipeline, 2);\n        return;\n      }\n      // '|}'\n      if (\n        !process.env.BABEL_8_BREAKING &&\n        this.hasPlugin(\"recordAndTuple\") &&\n        next === charCodes.rightCurlyBrace\n      ) {\n        if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n          throw this.raise(\n            Errors.RecordExpressionBarIncorrectEndSyntaxType,\n            this.state.curPosition(),\n          );\n        }\n        this.state.pos += 2;\n        this.finishToken(tt.braceBarR);\n        return;\n      }\n\n      // '|]'\n      if (\n        !process.env.BABEL_8_BREAKING &&\n        this.hasPlugin(\"recordAndTuple\") &&\n        next === charCodes.rightSquareBracket\n      ) {\n        if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n          throw this.raise(\n            Errors.TupleExpressionBarIncorrectEndSyntaxType,\n            this.state.curPosition(),\n          );\n        }\n        this.state.pos += 2;\n        this.finishToken(tt.bracketBarR);\n        return;\n      }\n    }\n\n    if (next === charCodes.equalsTo) {\n      this.finishOp(tt.assign, 2);\n      return;\n    }\n\n    this.finishOp(\n      code === charCodes.verticalBar ? tt.bitwiseOR : tt.bitwiseAND,\n      1,\n    );\n  }\n\n  readToken_caret(): void {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    // '^='\n    if (next === charCodes.equalsTo && !this.state.inType) {\n      // `tt.xorAssign` is only needed to support ^ as a Hack-pipe topic token.\n      // If the proposal ends up choosing a different token,\n      // it can be merged with tt.assign.\n      this.finishOp(tt.xorAssign, 2);\n    }\n    // '^^'\n    else if (\n      next === charCodes.caret &&\n      // If the ^^ token is not enabled, we don't throw but parse two single ^s\n      // because it could be a ^ hack token followed by a ^ binary operator.\n      this.hasPlugin([\n        \"pipelineOperator\",\n        { proposal: \"hack\", topicToken: \"^^\" },\n      ])\n    ) {\n      this.finishOp(tt.doubleCaret, 2);\n\n      // `^^^` is forbidden and must be separated by a space.\n      const lookaheadCh = this.input.codePointAt(this.state.pos);\n      if (lookaheadCh === charCodes.caret) {\n        this.unexpected();\n      }\n    }\n    // '^'\n    else {\n      this.finishOp(tt.bitwiseXOR, 1);\n    }\n  }\n\n  readToken_atSign(): void {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    // '@@'\n    if (\n      next === charCodes.atSign &&\n      this.hasPlugin([\n        \"pipelineOperator\",\n        { proposal: \"hack\", topicToken: \"@@\" },\n      ])\n    ) {\n      this.finishOp(tt.doubleAt, 2);\n    }\n    // '@'\n    else {\n      this.finishOp(tt.at, 1);\n    }\n  }\n\n  readToken_plus_min(code: number): void {\n    // '+-'\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === code) {\n      this.finishOp(tt.incDec, 2);\n      return;\n    }\n\n    if (next === charCodes.equalsTo) {\n      this.finishOp(tt.assign, 2);\n    } else {\n      this.finishOp(tt.plusMin, 1);\n    }\n  }\n\n  readToken_lt(): void {\n    // '<'\n    const { pos } = this.state;\n    const next = this.input.charCodeAt(pos + 1);\n\n    if (next === charCodes.lessThan) {\n      if (this.input.charCodeAt(pos + 2) === charCodes.equalsTo) {\n        this.finishOp(tt.assign, 3);\n        return;\n      }\n      this.finishOp(tt.bitShiftL, 2);\n      return;\n    }\n\n    if (next === charCodes.equalsTo) {\n      // <=\n      this.finishOp(tt.relational, 2);\n      return;\n    }\n\n    this.finishOp(tt.lt, 1);\n  }\n\n  readToken_gt(): void {\n    // '>'\n    const { pos } = this.state;\n    const next = this.input.charCodeAt(pos + 1);\n\n    if (next === charCodes.greaterThan) {\n      const size =\n        this.input.charCodeAt(pos + 2) === charCodes.greaterThan ? 3 : 2;\n      if (this.input.charCodeAt(pos + size) === charCodes.equalsTo) {\n        this.finishOp(tt.assign, size + 1);\n        return;\n      }\n      this.finishOp(tt.bitShiftR, size);\n      return;\n    }\n\n    if (next === charCodes.equalsTo) {\n      // <= | >=\n      this.finishOp(tt.relational, 2);\n      return;\n    }\n\n    this.finishOp(tt.gt, 1);\n  }\n\n  readToken_eq_excl(code: number): void {\n    // '=!'\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next === charCodes.equalsTo) {\n      this.finishOp(\n        tt.equality,\n        this.input.charCodeAt(this.state.pos + 2) === charCodes.equalsTo\n          ? 3\n          : 2,\n      );\n      return;\n    }\n    if (code === charCodes.equalsTo && next === charCodes.greaterThan) {\n      // '=>'\n      this.state.pos += 2;\n      this.finishToken(tt.arrow);\n      return;\n    }\n    this.finishOp(code === charCodes.equalsTo ? tt.eq : tt.bang, 1);\n  }\n\n  readToken_question(): void {\n    // '?'\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    const next2 = this.input.charCodeAt(this.state.pos + 2);\n    if (next === charCodes.questionMark) {\n      if (next2 === charCodes.equalsTo) {\n        // '??='\n        this.finishOp(tt.assign, 3);\n      } else {\n        // '??'\n        this.finishOp(tt.nullishCoalescing, 2);\n      }\n    } else if (\n      next === charCodes.dot &&\n      !(next2 >= charCodes.digit0 && next2 <= charCodes.digit9)\n    ) {\n      // '.' not followed by a number\n      this.state.pos += 2;\n      this.finishToken(tt.questionDot);\n    } else {\n      ++this.state.pos;\n      this.finishToken(tt.question);\n    }\n  }\n\n  getTokenFromCode(code: number): void {\n    switch (code) {\n      // The interpretation of a dot depends on whether it is followed\n      // by a digit or another two dots.\n\n      case charCodes.dot:\n        this.readToken_dot();\n        return;\n      // Punctuation tokens.\n      case charCodes.leftParenthesis:\n        ++this.state.pos;\n        this.finishToken(tt.parenL);\n        return;\n      case charCodes.rightParenthesis:\n        ++this.state.pos;\n        this.finishToken(tt.parenR);\n        return;\n      case charCodes.semicolon:\n        ++this.state.pos;\n        this.finishToken(tt.semi);\n        return;\n      case charCodes.comma:\n        ++this.state.pos;\n        this.finishToken(tt.comma);\n        return;\n      case charCodes.leftSquareBracket:\n        if (\n          !process.env.BABEL_8_BREAKING &&\n          this.hasPlugin(\"recordAndTuple\") &&\n          this.input.charCodeAt(this.state.pos + 1) === charCodes.verticalBar\n        ) {\n          if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n            throw this.raise(\n              Errors.TupleExpressionBarIncorrectStartSyntaxType,\n              this.state.curPosition(),\n            );\n          }\n\n          // [|\n          this.state.pos += 2;\n          this.finishToken(tt.bracketBarL);\n        } else {\n          ++this.state.pos;\n          this.finishToken(tt.bracketL);\n        }\n        return;\n      case charCodes.rightSquareBracket:\n        ++this.state.pos;\n        this.finishToken(tt.bracketR);\n        return;\n      case charCodes.leftCurlyBrace:\n        if (\n          !process.env.BABEL_8_BREAKING &&\n          this.hasPlugin(\"recordAndTuple\") &&\n          this.input.charCodeAt(this.state.pos + 1) === charCodes.verticalBar\n        ) {\n          if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n            throw this.raise(\n              Errors.RecordExpressionBarIncorrectStartSyntaxType,\n              this.state.curPosition(),\n            );\n          }\n\n          // {|\n          this.state.pos += 2;\n          this.finishToken(tt.braceBarL);\n        } else {\n          ++this.state.pos;\n          this.finishToken(tt.braceL);\n        }\n        return;\n      case charCodes.rightCurlyBrace:\n        ++this.state.pos;\n        this.finishToken(tt.braceR);\n        return;\n\n      case charCodes.colon:\n        if (\n          this.hasPlugin(\"functionBind\") &&\n          this.input.charCodeAt(this.state.pos + 1) === charCodes.colon\n        ) {\n          this.finishOp(tt.doubleColon, 2);\n        } else {\n          ++this.state.pos;\n          this.finishToken(tt.colon);\n        }\n        return;\n\n      case charCodes.questionMark:\n        this.readToken_question();\n        return;\n\n      case charCodes.graveAccent:\n        this.readTemplateToken();\n        return;\n\n      case charCodes.digit0: {\n        const next = this.input.charCodeAt(this.state.pos + 1);\n        // '0x', '0X' - hex number\n        if (next === charCodes.lowercaseX || next === charCodes.uppercaseX) {\n          this.readRadixNumber(16);\n          return;\n        }\n        // '0o', '0O' - octal number\n        if (next === charCodes.lowercaseO || next === charCodes.uppercaseO) {\n          this.readRadixNumber(8);\n          return;\n        }\n        // '0b', '0B' - binary number\n        if (next === charCodes.lowercaseB || next === charCodes.uppercaseB) {\n          this.readRadixNumber(2);\n          return;\n        }\n      }\n      // Anything else beginning with a digit is an integer, octal\n      // number, or float. (fall through)\n      case charCodes.digit1:\n      case charCodes.digit2:\n      case charCodes.digit3:\n      case charCodes.digit4:\n      case charCodes.digit5:\n      case charCodes.digit6:\n      case charCodes.digit7:\n      case charCodes.digit8:\n      case charCodes.digit9:\n        this.readNumber(false);\n        return;\n\n      // Quotes produce strings.\n      case charCodes.quotationMark:\n      case charCodes.apostrophe:\n        this.readString(code);\n        return;\n\n      // Operators are parsed inline in tiny state machines. '=' (charCodes.equalsTo) is\n      // often referred to. `finishOp` simply skips the amount of\n      // characters it is given as second argument, and returns a token\n      // of the type given by its first argument.\n\n      case charCodes.slash:\n        this.readToken_slash();\n        return;\n\n      case charCodes.percentSign:\n      case charCodes.asterisk:\n        this.readToken_mult_modulo(code);\n        return;\n\n      case charCodes.verticalBar:\n      case charCodes.ampersand:\n        this.readToken_pipe_amp(code);\n        return;\n\n      case charCodes.caret:\n        this.readToken_caret();\n        return;\n\n      case charCodes.plusSign:\n      case charCodes.dash:\n        this.readToken_plus_min(code);\n        return;\n\n      case charCodes.lessThan:\n        this.readToken_lt();\n        return;\n\n      case charCodes.greaterThan:\n        this.readToken_gt();\n        return;\n\n      case charCodes.equalsTo:\n      case charCodes.exclamationMark:\n        this.readToken_eq_excl(code);\n        return;\n\n      case charCodes.tilde:\n        this.finishOp(tt.tilde, 1);\n        return;\n\n      case charCodes.atSign:\n        this.readToken_atSign();\n        return;\n\n      case charCodes.numberSign:\n        this.readToken_numberSign();\n        return;\n\n      case charCodes.backslash:\n        this.readWord();\n        return;\n\n      default:\n        if (isIdentifierStart(code)) {\n          this.readWord(code);\n          return;\n        }\n    }\n\n    throw this.raise(\n      Errors.InvalidOrUnexpectedToken,\n      this.state.curPosition(),\n      {\n        unexpected: String.fromCodePoint(code),\n      },\n    );\n  }\n\n  finishOp(type: TokenType, size: number): void {\n    const str = this.input.slice(this.state.pos, this.state.pos + size);\n    this.state.pos += size;\n    this.finishToken(type, str);\n  }\n\n  readRegexp(): void {\n    const startLoc = this.state.startLoc;\n    const start = this.state.start + 1;\n    let escaped, inClass;\n    let { pos } = this.state;\n    for (; ; ++pos) {\n      if (pos >= this.length) {\n        // FIXME: explain\n        throw this.raise(\n          Errors.UnterminatedRegExp,\n          createPositionWithColumnOffset(startLoc, 1),\n        );\n      }\n      const ch = this.input.charCodeAt(pos);\n      if (isNewLine(ch)) {\n        throw this.raise(\n          Errors.UnterminatedRegExp,\n          createPositionWithColumnOffset(startLoc, 1),\n        );\n      }\n      if (escaped) {\n        escaped = false;\n      } else {\n        if (ch === charCodes.leftSquareBracket) {\n          inClass = true;\n        } else if (ch === charCodes.rightSquareBracket && inClass) {\n          inClass = false;\n        } else if (ch === charCodes.slash && !inClass) {\n          break;\n        }\n        escaped = ch === charCodes.backslash;\n      }\n    }\n    const content = this.input.slice(start, pos);\n    ++pos;\n\n    let mods = \"\";\n\n    const nextPos = () =>\n      // (pos + 1) + 1 - start\n      createPositionWithColumnOffset(startLoc, pos + 2 - start);\n\n    while (pos < this.length) {\n      const cp = this.codePointAtPos(pos);\n      // It doesn't matter if cp > 0xffff, the loop will either throw or break because we check on cp\n      const char = String.fromCharCode(cp);\n\n      // @ts-expect-error VALID_REGEX_FLAGS.has should accept expanded type: number\n      if (VALID_REGEX_FLAGS.has(cp)) {\n        if (cp === charCodes.lowercaseV) {\n          if (mods.includes(\"u\")) {\n            this.raise(Errors.IncompatibleRegExpUVFlags, nextPos());\n          }\n        } else if (cp === charCodes.lowercaseU) {\n          if (mods.includes(\"v\")) {\n            this.raise(Errors.IncompatibleRegExpUVFlags, nextPos());\n          }\n        }\n        if (mods.includes(char)) {\n          this.raise(Errors.DuplicateRegExpFlags, nextPos());\n        }\n      } else if (isIdentifierChar(cp) || cp === charCodes.backslash) {\n        this.raise(Errors.MalformedRegExpFlags, nextPos());\n      } else {\n        break;\n      }\n\n      ++pos;\n      mods += char;\n    }\n    this.state.pos = pos;\n\n    this.finishToken(tt.regexp, {\n      pattern: content,\n      flags: mods,\n    });\n  }\n\n  // Read an integer in the given radix. Return null if zero digits\n  // were read, the integer value otherwise. When `len` is given, this\n  // will return `null` unless the integer has exactly `len` digits.\n  // When `forceLen` is `true`, it means that we already know that in case\n  // of a malformed number we have to skip `len` characters anyway, instead\n  // of bailing out early. For example, in \"\\u{123Z}\" we want to read up to }\n  // anyway, while in \"\\u00Z\" we will stop at Z instead of consuming four\n  // characters (and thus the closing quote).\n\n  readInt(\n    radix: number,\n    len?: number,\n    forceLen: boolean = false,\n    allowNumSeparator: boolean | \"bail\" = true,\n  ): number | null {\n    const { n, pos } = readInt(\n      this.input,\n      this.state.pos,\n      this.state.lineStart,\n      this.state.curLine,\n      radix,\n      len,\n      forceLen,\n      allowNumSeparator,\n      this.errorHandlers_readInt,\n      /* bailOnError */ false,\n    );\n    this.state.pos = pos;\n    return n;\n  }\n\n  readRadixNumber(radix: number): void {\n    const start = this.state.pos;\n    const startLoc = this.state.curPosition();\n    let isBigInt = false;\n\n    this.state.pos += 2; // 0x\n    const val = this.readInt(radix);\n    if (val == null) {\n      this.raise(\n        Errors.InvalidDigit,\n        // Numeric literals can't have newlines, so this is safe to do.\n        createPositionWithColumnOffset(startLoc, 2),\n        {\n          radix,\n        },\n      );\n    }\n    const next = this.input.charCodeAt(this.state.pos);\n\n    if (next === charCodes.lowercaseN) {\n      ++this.state.pos;\n      isBigInt = true;\n    } else if (next === charCodes.lowercaseM) {\n      throw this.raise(Errors.InvalidDecimal, startLoc);\n    }\n\n    if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {\n      throw this.raise(Errors.NumberIdentifier, this.state.curPosition());\n    }\n\n    if (isBigInt) {\n      const str = this.input.slice(start, this.state.pos).replace(/[_n]/g, \"\");\n      this.finishToken(tt.bigint, str);\n      return;\n    }\n\n    this.finishToken(tt.num, val);\n  }\n\n  // Read an integer, octal integer, or floating-point number.\n\n  readNumber(startsWithDot: boolean): void {\n    const start = this.state.pos;\n    const startLoc = this.state.curPosition();\n    let isFloat = false;\n    let isBigInt = false;\n    let hasExponent = false;\n    let isOctal = false;\n\n    if (!startsWithDot && this.readInt(10) === null) {\n      this.raise(Errors.InvalidNumber, this.state.curPosition());\n    }\n    const hasLeadingZero =\n      this.state.pos - start >= 2 &&\n      this.input.charCodeAt(start) === charCodes.digit0;\n\n    if (hasLeadingZero) {\n      const integer = this.input.slice(start, this.state.pos);\n      this.recordStrictModeErrors(Errors.StrictOctalLiteral, startLoc);\n      if (!this.state.strict) {\n        // disallow numeric separators in non octal decimals and legacy octal likes\n        const underscorePos = integer.indexOf(\"_\");\n        if (underscorePos > 0) {\n          // Numeric literals can't have newlines, so this is safe to do.\n          this.raise(\n            Errors.ZeroDigitNumericSeparator,\n            createPositionWithColumnOffset(startLoc, underscorePos),\n          );\n        }\n      }\n      isOctal = hasLeadingZero && !/[89]/.test(integer);\n    }\n\n    let next = this.input.charCodeAt(this.state.pos);\n    if (next === charCodes.dot && !isOctal) {\n      ++this.state.pos;\n      this.readInt(10);\n      isFloat = true;\n      next = this.input.charCodeAt(this.state.pos);\n    }\n\n    if (\n      (next === charCodes.uppercaseE || next === charCodes.lowercaseE) &&\n      !isOctal\n    ) {\n      next = this.input.charCodeAt(++this.state.pos);\n      if (next === charCodes.plusSign || next === charCodes.dash) {\n        ++this.state.pos;\n      }\n      if (this.readInt(10) === null) {\n        this.raise(Errors.InvalidOrMissingExponent, startLoc);\n      }\n      isFloat = true;\n      hasExponent = true;\n      next = this.input.charCodeAt(this.state.pos);\n    }\n\n    if (next === charCodes.lowercaseN) {\n      // disallow floats, legacy octal syntax and non octal decimals\n      // new style octal (\"0o\") is handled in this.readRadixNumber\n      if (isFloat || hasLeadingZero) {\n        this.raise(Errors.InvalidBigIntLiteral, startLoc);\n      }\n      ++this.state.pos;\n      isBigInt = true;\n    }\n\n    if (!process.env.BABEL_8_BREAKING && next === charCodes.lowercaseM) {\n      this.expectPlugin(\"decimal\", this.state.curPosition());\n      if (hasExponent || hasLeadingZero) {\n        this.raise(Errors.InvalidDecimal, startLoc);\n      }\n      ++this.state.pos;\n      // eslint-disable-next-line no-var\n      var isDecimal = true;\n    }\n\n    if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {\n      throw this.raise(Errors.NumberIdentifier, this.state.curPosition());\n    }\n\n    // remove \"_\" for numeric literal separator, and trailing `m` or `n`\n    const str = this.input.slice(start, this.state.pos).replace(/[_mn]/g, \"\");\n\n    if (isBigInt) {\n      this.finishToken(tt.bigint, str);\n      return;\n    }\n\n    if (!process.env.BABEL_8_BREAKING && isDecimal) {\n      this.finishToken(tt.decimal, str);\n      return;\n    }\n\n    const val = isOctal ? parseInt(str, 8) : parseFloat(str);\n    this.finishToken(tt.num, val);\n  }\n\n  // Read a string value, interpreting backslash-escapes.\n\n  readCodePoint(throwOnInvalid: boolean): number | null {\n    const { code, pos } = readCodePoint(\n      this.input,\n      this.state.pos,\n      this.state.lineStart,\n      this.state.curLine,\n      throwOnInvalid,\n      this.errorHandlers_readCodePoint,\n    );\n    this.state.pos = pos;\n    return code;\n  }\n\n  readString(quote: number): void {\n    const { str, pos, curLine, lineStart } = readStringContents(\n      quote === charCodes.quotationMark ? \"double\" : \"single\",\n      this.input,\n      this.state.pos + 1, // skip the quote\n      this.state.lineStart,\n      this.state.curLine,\n      this.errorHandlers_readStringContents_string,\n    );\n    this.state.pos = pos + 1; // skip the quote\n    this.state.lineStart = lineStart;\n    this.state.curLine = curLine;\n    this.finishToken(tt.string, str);\n  }\n\n  // Reads template continuation `}...`\n  readTemplateContinuation(): void {\n    if (!this.match(tt.braceR)) {\n      this.unexpected(null, tt.braceR);\n    }\n    // rewind pos to `}`\n    this.state.pos--;\n    this.readTemplateToken();\n  }\n\n  // Reads template string tokens.\n  readTemplateToken(): void {\n    const opening = this.input[this.state.pos];\n    const { str, firstInvalidLoc, pos, curLine, lineStart } =\n      readStringContents(\n        \"template\",\n        this.input,\n        this.state.pos + 1, // skip '`' or `}`\n        this.state.lineStart,\n        this.state.curLine,\n        this.errorHandlers_readStringContents_template,\n      );\n    this.state.pos = pos + 1; // skip '`' or `$`\n    this.state.lineStart = lineStart;\n    this.state.curLine = curLine;\n\n    if (firstInvalidLoc) {\n      this.state.firstInvalidTemplateEscapePos = new Position(\n        firstInvalidLoc.curLine,\n        firstInvalidLoc.pos - firstInvalidLoc.lineStart,\n        this.sourceToOffsetPos(firstInvalidLoc.pos),\n      );\n    }\n\n    if (this.input.codePointAt(pos) === charCodes.graveAccent) {\n      this.finishToken(\n        tt.templateTail,\n        firstInvalidLoc ? null : opening + str + \"`\",\n      );\n    } else {\n      this.state.pos++; // skip '{'\n      this.finishToken(\n        tt.templateNonTail,\n        firstInvalidLoc ? null : opening + str + \"${\",\n      );\n    }\n  }\n\n  recordStrictModeErrors(toParseError: DeferredStrictError, at: Position) {\n    const index = at.index;\n\n    if (this.state.strict && !this.state.strictErrors.has(index)) {\n      this.raise(toParseError, at);\n    } else {\n      this.state.strictErrors.set(index, [toParseError, at]);\n    }\n  }\n\n  // Read an identifier, and return it as a string. Sets `this.state.containsEsc`\n  // to whether the word contained a '\\u' escape.\n  //\n  // Incrementally adds only escaped chars, adding other chunks as-is\n  // as a micro-optimization.\n  //\n  // When `firstCode` is given, it assumes it is always an identifier start and\n  // will skip reading start position again\n\n  readWord1(firstCode?: number): string {\n    this.state.containsEsc = false;\n    let word = \"\";\n    const start = this.state.pos;\n    let chunkStart = this.state.pos;\n    if (firstCode !== undefined) {\n      this.state.pos += firstCode <= 0xffff ? 1 : 2;\n    }\n\n    while (this.state.pos < this.length) {\n      const ch = this.codePointAtPos(this.state.pos);\n      if (isIdentifierChar(ch)) {\n        this.state.pos += ch <= 0xffff ? 1 : 2;\n      } else if (ch === charCodes.backslash) {\n        this.state.containsEsc = true;\n\n        word += this.input.slice(chunkStart, this.state.pos);\n        const escStart = this.state.curPosition();\n        const identifierCheck =\n          this.state.pos === start ? isIdentifierStart : isIdentifierChar;\n\n        if (this.input.charCodeAt(++this.state.pos) !== charCodes.lowercaseU) {\n          this.raise(Errors.MissingUnicodeEscape, this.state.curPosition());\n          chunkStart = this.state.pos - 1;\n          continue;\n        }\n\n        ++this.state.pos;\n        const esc = this.readCodePoint(true);\n        if (esc !== null) {\n          if (!identifierCheck(esc)) {\n            this.raise(Errors.EscapedCharNotAnIdentifier, escStart);\n          }\n\n          word += String.fromCodePoint(esc);\n        }\n        chunkStart = this.state.pos;\n      } else {\n        break;\n      }\n    }\n    return word + this.input.slice(chunkStart, this.state.pos);\n  }\n\n  // Read an identifier or keyword token. Will check for reserved\n  // words when necessary.\n\n  readWord(firstCode?: number): void {\n    const word = this.readWord1(firstCode);\n    const type = keywordTypes.get(word);\n    if (type !== undefined) {\n      // We don't use word as state.value here because word is a dynamic string\n      // while token label is a shared constant string\n      this.finishToken(type, tokenLabelName(type));\n    } else {\n      this.finishToken(tt.name, word);\n    }\n  }\n\n  checkKeywordEscapes(): void {\n    const { type } = this.state;\n    if (tokenIsKeyword(type) && this.state.containsEsc) {\n      this.raise(Errors.InvalidEscapedReservedWord, this.state.startLoc, {\n        reservedWord: tokenLabelName(type),\n      });\n    }\n  }\n\n  /**\n   * Raise a `ParseError` given the appropriate properties. If passed a\n   * `Position` for the `at` property, raises the `ParseError` at that location.\n   * Otherwise, if passed a `Node`, raises the `ParseError` at the start\n   * location of that `Node`.\n   *\n   * If `errorRecovery` is `true`, the error is pushed to the errors array and\n   * returned. If `errorRecovery` is `false`, the error is instead thrown.\n   *\n   * The return type is marked as `never` for simplicity, as error recovery\n   * will create types in an invalid AST shape.\n   */\n  raise<ErrorDetails = object>(\n    toParseError: ParseErrorConstructor<ErrorDetails>,\n    at: Position | Undone<Node>,\n    details: ErrorDetails = {} as ErrorDetails,\n  ): ParseError<ErrorDetails> {\n    const loc = at instanceof Position ? at : at.loc.start;\n    const error = toParseError(loc, details);\n\n    if (!(this.optionFlags & OptionFlags.ErrorRecovery)) throw error;\n    if (!this.isLookahead) this.state.errors.push(error);\n\n    return error;\n  }\n\n  /**\n   * If `errorRecovery` is `false`, this method behaves identically to `raise`.\n   * If `errorRecovery` is `true`, this method will first see if there is\n   * already an error stored at the same `Position`, and replaces it with the\n   * one generated here.\n   */\n  raiseOverwrite<ErrorDetails>(\n    toParseError: ParseErrorConstructor<ErrorDetails>,\n    at: Position | Undone<Node>,\n    details: ErrorDetails = {} as ErrorDetails,\n  ): ParseError<ErrorDetails> | never {\n    const loc = at instanceof Position ? at : at.loc.start;\n    const pos = loc.index;\n    const errors = this.state.errors;\n\n    for (let i = errors.length - 1; i >= 0; i--) {\n      const error = errors[i];\n      if (error.loc.index === pos) {\n        return (errors[i] = toParseError(loc, details));\n      }\n      if (error.loc.index < pos) break;\n    }\n\n    return this.raise(toParseError, at, details);\n  }\n\n  // updateContext is used by the jsx plugin\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  updateContext(prevType: TokenType): void {}\n\n  // Raise an unexpected token error. Can take the expected token type.\n  unexpected(loc?: Position | null, type?: TokenType): void {\n    throw this.raise(\n      Errors.UnexpectedToken,\n      loc != null ? loc : this.state.startLoc,\n      {\n        expected: type ? tokenLabelName(type) : null,\n      },\n    );\n  }\n\n  expectPlugin(pluginName: Plugin, loc?: Position): true {\n    if (this.hasPlugin(pluginName)) {\n      return true;\n    }\n\n    throw this.raise(\n      Errors.MissingPlugin,\n      loc != null ? loc : this.state.startLoc,\n      {\n        missingPlugin: [pluginName],\n      },\n    );\n  }\n\n  expectOnePlugin(pluginNames: Plugin[]): void {\n    if (!pluginNames.some(name => this.hasPlugin(name))) {\n      throw this.raise(Errors.MissingOneOfPlugins, this.state.startLoc, {\n        missingPlugin: pluginNames,\n      });\n    }\n  }\n\n  errorBuilder(error: ParseErrorConstructor<object>) {\n    return (pos: number, lineStart: number, curLine: number) => {\n      this.raise(error, buildPosition(pos, lineStart, curLine));\n    };\n  }\n\n  errorHandlers_readInt: IntErrorHandlers = {\n    invalidDigit: (pos, lineStart, curLine, radix) => {\n      if (!(this.optionFlags & OptionFlags.ErrorRecovery)) return false;\n\n      this.raise(Errors.InvalidDigit, buildPosition(pos, lineStart, curLine), {\n        radix,\n      });\n      // Continue parsing the number as if there was no invalid digit.\n      return true;\n    },\n    numericSeparatorInEscapeSequence: this.errorBuilder(\n      Errors.NumericSeparatorInEscapeSequence,\n    ),\n    unexpectedNumericSeparator: this.errorBuilder(\n      Errors.UnexpectedNumericSeparator,\n    ),\n  };\n\n  errorHandlers_readCodePoint: CodePointErrorHandlers = {\n    ...this.errorHandlers_readInt,\n    invalidEscapeSequence: this.errorBuilder(Errors.InvalidEscapeSequence),\n    invalidCodePoint: this.errorBuilder(Errors.InvalidCodePoint),\n  };\n\n  errorHandlers_readStringContents_string: StringContentsErrorHandlers = {\n    ...this.errorHandlers_readCodePoint,\n    strictNumericEscape: (pos, lineStart, curLine) => {\n      this.recordStrictModeErrors(\n        Errors.StrictNumericEscape,\n        buildPosition(pos, lineStart, curLine),\n      );\n    },\n    unterminated: (pos, lineStart, curLine) => {\n      throw this.raise(\n        Errors.UnterminatedString, // Report the error at the string quote\n        buildPosition(pos - 1, lineStart, curLine),\n      );\n    },\n  };\n\n  errorHandlers_readStringContents_template: StringContentsErrorHandlers = {\n    ...this.errorHandlers_readCodePoint,\n    strictNumericEscape: this.errorBuilder(Errors.StrictNumericEscape),\n    unterminated: (pos, lineStart, curLine) => {\n      throw this.raise(\n        Errors.UnterminatedTemplate,\n        buildPosition(pos, lineStart, curLine),\n      );\n    },\n  };\n}\n","import { ClassElementType } from \"./scopeflags.ts\";\nimport type { Position } from \"./location.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport type Tokenizer from \"../tokenizer/index.ts\";\n\nexport class ClassScope {\n  // A list of private named declared in the current class\n  privateNames: Set<string> = new Set();\n\n  // A list of private getters of setters without their counterpart\n  loneAccessors: Map<string, ClassElementType> = new Map();\n\n  // A list of private names used before being defined, mapping to\n  // their position.\n  undefinedPrivateNames: Map<string, Position> = new Map();\n}\n\nexport default class ClassScopeHandler {\n  parser: Tokenizer;\n  stack: Array<ClassScope> = [];\n  undefinedPrivateNames: Map<string, Position> = new Map();\n\n  constructor(parser: Tokenizer) {\n    this.parser = parser;\n  }\n\n  current(): ClassScope {\n    return this.stack[this.stack.length - 1];\n  }\n\n  enter() {\n    this.stack.push(new ClassScope());\n  }\n\n  exit() {\n    const oldClassScope = this.stack.pop();\n\n    // Migrate the usage of not yet defined private names to the outer\n    // class scope, or raise an error if we reached the top-level scope.\n\n    const current = this.current();\n\n    // Array.from is needed because this is compiled to an array-like for loop\n    for (const [name, loc] of Array.from(oldClassScope.undefinedPrivateNames)) {\n      if (current) {\n        if (!current.undefinedPrivateNames.has(name)) {\n          current.undefinedPrivateNames.set(name, loc);\n        }\n      } else {\n        this.parser.raise(Errors.InvalidPrivateFieldResolution, loc, {\n          identifierName: name,\n        });\n      }\n    }\n  }\n\n  declarePrivateName(\n    name: string,\n    elementType: ClassElementType,\n    loc: Position,\n  ) {\n    const { privateNames, loneAccessors, undefinedPrivateNames } =\n      this.current();\n    let redefined = privateNames.has(name);\n\n    if (elementType & ClassElementType.KIND_ACCESSOR) {\n      const accessor = redefined && loneAccessors.get(name);\n      if (accessor) {\n        const oldStatic = accessor & ClassElementType.FLAG_STATIC;\n        const newStatic = elementType & ClassElementType.FLAG_STATIC;\n\n        const oldKind = accessor & ClassElementType.KIND_ACCESSOR;\n        const newKind = elementType & ClassElementType.KIND_ACCESSOR;\n\n        // The private name can be duplicated only if it is used by\n        // two accessors with different kind (get and set), and if\n        // they have the same placement (static or not).\n        redefined = oldKind === newKind || oldStatic !== newStatic;\n\n        if (!redefined) loneAccessors.delete(name);\n      } else if (!redefined) {\n        loneAccessors.set(name, elementType);\n      }\n    }\n\n    if (redefined) {\n      this.parser.raise(Errors.PrivateNameRedeclaration, loc, {\n        identifierName: name,\n      });\n    }\n\n    privateNames.add(name);\n    undefinedPrivateNames.delete(name);\n  }\n\n  usePrivateName(name: string, loc: Position) {\n    let classScope;\n    for (classScope of this.stack) {\n      if (classScope.privateNames.has(name)) return;\n    }\n\n    if (classScope) {\n      classScope.undefinedPrivateNames.set(name, loc);\n    } else {\n      // top-level\n      this.parser.raise(Errors.InvalidPrivateFieldResolution, loc, {\n        identifierName: name,\n      });\n    }\n  }\n}\n","import { Errors, type ParseErrorConstructor } from \"../parse-error.ts\";\nimport type { Position } from \"./location.ts\";\nimport type { Node } from \"../types.ts\";\nimport type Tokenizer from \"../tokenizer/index.ts\";\nimport type { Undone } from \"../parser/node.ts\";\n\n/**\n * @module util/expression-scope\n\nExpressionScope is used to track declaration errors in these ambiguous patterns:\n\n- CoverParenthesizedExpressionAndArrowParameterList\n  e.g. we don't know if `({ x })` is an parenthesized expression or an\n  arrow function parameters until we see an `=>` after `)`.\n\n- CoverCallExpressionAndAsyncArrowHead\n  e.g. we don't know if `async({ x })` is a call expression or an async arrow\n  function parameters until we see an `=>` after `)`\n\nThe following declaration errors (@see parser-errors/standard) will be recorded in\nsome expression scopes and thrown later when we know what the ambiguous pattern is\n\n- AwaitBindingIdentifier\n- AwaitExpressionFormalParameter\n- YieldInParameter\n- InvalidParenthesizedAssignment when parenthesized is an identifier\n\nThere are four different expression scope\n- Expression\n  A general scope that represents program / function body / static block. No errors\n  will be recorded nor thrown in this scope.\n\n- MaybeArrowParameterDeclaration\n  A scope that represents ambiguous arrow head e.g. `(x)`. Errors will be recorded\n  alongside parent scopes and thrown when `ExpressionScopeHandler#validateAsPattern`\n  is called.\n\n- MaybeAsyncArrowParameterDeclaration\n  A scope that represents ambiguous async arrow head e.g. `async(x)`. Errors will\n  be recorded alongside parent scopes and thrown when\n  `ExpressionScopeHandler#validateAsPattern` is called.\n\n- ParameterDeclaration\n  A scope that represents unambiguous function parameters `function(x)`. Errors\n  recorded in this scope will be thrown immediately. No errors will be recorded in\n  this scope.\n\n// @see {@link https://docs.google.com/document/d/1FAvEp9EUK-G8kHfDIEo_385Hs2SUBCYbJ5H-NnLvq8M | V8 Expression Scope design docs}\n */\n\nconst enum ExpressionScopeType {\n  kExpression = 0,\n  kMaybeArrowParameterDeclaration = 1,\n  kMaybeAsyncArrowParameterDeclaration = 2,\n  kParameterDeclaration = 3,\n}\n\nclass ExpressionScope {\n  declare type: ExpressionScopeType;\n\n  constructor(type: ExpressionScopeType = ExpressionScopeType.kExpression) {\n    this.type = type;\n  }\n\n  canBeArrowParameterDeclaration(): this is ArrowHeadParsingScope {\n    return (\n      this.type === ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration ||\n      this.type === ExpressionScopeType.kMaybeArrowParameterDeclaration\n    );\n  }\n\n  isCertainlyParameterDeclaration() {\n    return this.type === ExpressionScopeType.kParameterDeclaration;\n  }\n}\n\ntype ArrowHeadParsingParameterInitializerError =\n  | typeof Errors.AwaitExpressionFormalParameter\n  | typeof Errors.YieldInParameter;\ntype ArrowHeadParsingDeclarationError =\n  | ArrowHeadParsingParameterInitializerError\n  | typeof Errors.InvalidParenthesizedAssignment\n  | typeof Errors.AwaitBindingIdentifier;\n\nclass ArrowHeadParsingScope extends ExpressionScope {\n  declarationErrors: Map<number, [ParseErrorConstructor<object>, Position]> =\n    new Map();\n  constructor(\n    type:\n      | ExpressionScopeType.kMaybeArrowParameterDeclaration\n      | ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration,\n  ) {\n    super(type);\n  }\n  recordDeclarationError(\n    ParsingErrorClass: ParseErrorConstructor<object>,\n    at: Position,\n  ) {\n    const index = at.index;\n\n    this.declarationErrors.set(index, [ParsingErrorClass, at]);\n  }\n  clearDeclarationError(index: number) {\n    this.declarationErrors.delete(index);\n  }\n  iterateErrors(\n    iterator: (a: [ArrowHeadParsingDeclarationError, Position]) => void,\n  ) {\n    this.declarationErrors.forEach(iterator);\n  }\n}\n\nexport default class ExpressionScopeHandler {\n  parser: Tokenizer;\n  stack: Array<ExpressionScope> = [new ExpressionScope()];\n\n  constructor(parser: Tokenizer) {\n    this.parser = parser;\n  }\n  enter(scope: ExpressionScope) {\n    this.stack.push(scope);\n  }\n\n  exit() {\n    this.stack.pop();\n  }\n\n  /**\n   * Record likely parameter initializer errors\n   *\n   * When current scope is a ParameterDeclaration, the error will be thrown immediately,\n   * otherwise it will be recorded to any ancestry MaybeArrowParameterDeclaration and\n   * MaybeAsyncArrowParameterDeclaration scope until an Expression scope is seen.\n   */\n  recordParameterInitializerError(\n    toParseError: ArrowHeadParsingParameterInitializerError,\n    node: Undone<Node>,\n  ): void {\n    const origin = node.loc.start;\n    const { stack } = this;\n    let i = stack.length - 1;\n    let scope: ExpressionScope = stack[i];\n    while (!scope.isCertainlyParameterDeclaration()) {\n      if (scope.canBeArrowParameterDeclaration()) {\n        scope.recordDeclarationError(toParseError, origin);\n      } else {\n        /*:: invariant(scope.type == ExpressionScopeType.kExpression) */\n        // Type-Expression is the boundary where initializer error can populate to\n        return;\n      }\n      scope = stack[--i];\n    }\n    this.parser.raise(toParseError, origin);\n  }\n\n  /**\n   * Record errors that must be thrown if the current pattern ends up being an arrow\n   * function parameter. This is used to record parenthesized identifiers, and to record\n   * \"a as T\" and \"<T> a\" type assertions when parsing typescript.\n   *\n   * A parenthesized identifier (or type assertion) in LHS can be ambiguous because the assignment\n   * can be transformed to an assignable later, but not vice versa:\n   * For example, in `([(a) = []] = []) => {}`, we think `(a) = []` is an LHS in `[(a) = []]`,\n   * an LHS within `[(a) = []] = []`. However the LHS chain is then transformed by toAssignable,\n   * and we should throw assignment `(a)`, which is only valid in LHS. Hence we record the\n   * location of parenthesized `(a)` to current scope if it is one of MaybeArrowParameterDeclaration\n   * and MaybeAsyncArrowParameterDeclaration\n   *\n   * Unlike `recordParameterInitializerError`, we don't record to ancestry scope because we\n   * validate arrow head parsing scope before exit, and then the LHS will be unambiguous:\n   * For example, in `( x = ( [(a) = []] = [] ) ) => {}`, we should not record `(a)` in `( x = ... ) =>`\n   * arrow scope because when we finish parsing `( [(a) = []] = [] )`, it is an unambiguous assignment\n   * expression and can not be cast to pattern\n   */\n  recordArrowParameterBindingError(\n    error: ParseErrorConstructor<object>,\n    node: Node,\n  ): void {\n    const { stack } = this;\n    const scope: ExpressionScope = stack[stack.length - 1];\n    const origin = node.loc.start;\n    if (scope.isCertainlyParameterDeclaration()) {\n      this.parser.raise(error, origin);\n    } else if (scope.canBeArrowParameterDeclaration()) {\n      scope.recordDeclarationError(error, origin);\n    } else {\n      return;\n    }\n  }\n\n  /**\n   * Record likely async arrow parameter errors\n   *\n   * Errors will be recorded to any ancestry MaybeAsyncArrowParameterDeclaration\n   * scope until an Expression scope is seen.\n   */\n  recordAsyncArrowParametersError(at: Position): void {\n    const { stack } = this;\n    let i = stack.length - 1;\n    let scope: ExpressionScope = stack[i];\n    while (scope.canBeArrowParameterDeclaration()) {\n      if (\n        scope.type === ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration\n      ) {\n        scope.recordDeclarationError(Errors.AwaitBindingIdentifier, at);\n      }\n      scope = stack[--i];\n    }\n  }\n\n  validateAsPattern(): void {\n    const { stack } = this;\n    const currentScope = stack[stack.length - 1];\n    if (!currentScope.canBeArrowParameterDeclaration()) return;\n    currentScope.iterateErrors(([toParseError, loc]) => {\n      this.parser.raise(toParseError, loc);\n      // iterate from parent scope\n      let i = stack.length - 2;\n      let scope = stack[i];\n      while (scope.canBeArrowParameterDeclaration()) {\n        scope.clearDeclarationError(loc.index);\n        scope = stack[--i];\n      }\n    });\n  }\n}\n\nexport function newParameterDeclarationScope() {\n  return new ExpressionScope(ExpressionScopeType.kParameterDeclaration);\n}\n\nexport function newArrowHeadScope() {\n  return new ArrowHeadParsingScope(\n    ExpressionScopeType.kMaybeArrowParameterDeclaration,\n  );\n}\n\nexport function newAsyncArrowScope() {\n  return new ArrowHeadParsingScope(\n    ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration,\n  );\n}\n\nexport function newExpressionScope() {\n  return new ExpressionScope();\n}\n","import type { Position } from \"../util/location.ts\";\nimport {\n  tokenIsLiteralPropertyName,\n  tt,\n  type TokenType,\n} from \"../tokenizer/types.ts\";\nimport Tokenizer from \"../tokenizer/index.ts\";\nimport type State from \"../tokenizer/state.ts\";\nimport type {\n  EstreePropertyDefinition,\n  Node,\n  ObjectMethod,\n  ObjectProperty,\n  PrivateName,\n} from \"../types.d.ts\";\nimport { hasNewLine } from \"../util/whitespace.ts\";\nimport { isIdentifierChar } from \"../util/identifier.ts\";\nimport ClassScopeHandler from \"../util/class-scope.ts\";\nimport ExpressionScopeHandler from \"../util/expression-scope.ts\";\nimport { ScopeFlag } from \"../util/scopeflags.ts\";\nimport ProductionParameterHandler, {\n  ParamKind,\n} from \"../util/production-parameter.ts\";\nimport {\n  Errors,\n  type ParseError,\n  type ParseErrorConstructor,\n} from \"../parse-error.ts\";\nimport type Parser from \"./index.ts\";\n\nimport type ScopeHandler from \"../util/scope.ts\";\nimport { OptionFlags } from \"../options.ts\";\n\ntype TryParse<Node, Error, Thrown, Aborted, FailState> = {\n  node: Node;\n  error: Error;\n  thrown: Thrown;\n  aborted: Aborted;\n  failState: FailState;\n};\n\n// ## Parser utilities\n\nexport default abstract class UtilParser extends Tokenizer {\n  // Forward-declaration: defined in parser/index.js\n  abstract getScopeHandler(): new (...args: any) => ScopeHandler;\n\n  addExtra(\n    node: Partial<Node>,\n    key: string,\n    value: any,\n    enumerable: boolean = true,\n  ): void {\n    if (!node) return;\n\n    let { extra } = node;\n    if (extra == null) {\n      extra = {};\n      node.extra = extra;\n    }\n\n    if (enumerable) {\n      extra[key] = value;\n    } else {\n      Object.defineProperty(extra, key, { enumerable, value });\n    }\n  }\n\n  // Tests whether parsed token is a contextual keyword.\n\n  isContextual(token: TokenType): boolean {\n    return this.state.type === token && !this.state.containsEsc;\n  }\n\n  isUnparsedContextual(nameStart: number, name: string): boolean {\n    if (this.input.startsWith(name, nameStart)) {\n      const nextCh = this.input.charCodeAt(nameStart + name.length);\n      return !(\n        isIdentifierChar(nextCh) ||\n        // check if `nextCh is between 0xd800 - 0xdbff,\n        // if `nextCh` is NaN, `NaN & 0xfc00` is 0, the function\n        // returns true\n        (nextCh & 0xfc00) === 0xd800\n      );\n    }\n    return false;\n  }\n\n  isLookaheadContextual(name: string): boolean {\n    const next = this.nextTokenStart();\n    return this.isUnparsedContextual(next, name);\n  }\n\n  // Consumes contextual keyword if possible.\n\n  eatContextual(token: TokenType): boolean {\n    if (this.isContextual(token)) {\n      this.next();\n      return true;\n    }\n    return false;\n  }\n\n  // Asserts that following token is given contextual keyword.\n\n  expectContextual(\n    token: TokenType,\n    toParseError?: ParseErrorConstructor<any>,\n  ): void {\n    if (!this.eatContextual(token)) {\n      if (toParseError != null) {\n        throw this.raise(toParseError, this.state.startLoc);\n      }\n      this.unexpected(null, token);\n    }\n  }\n\n  // Test whether a semicolon can be inserted at the current position.\n\n  canInsertSemicolon(): boolean {\n    return (\n      this.match(tt.eof) ||\n      this.match(tt.braceR) ||\n      this.hasPrecedingLineBreak()\n    );\n  }\n\n  hasPrecedingLineBreak(): boolean {\n    return hasNewLine(\n      this.input,\n      this.offsetToSourcePos(this.state.lastTokEndLoc.index),\n      this.state.start,\n    );\n  }\n\n  hasFollowingLineBreak(): boolean {\n    return hasNewLine(this.input, this.state.end, this.nextTokenStart());\n  }\n\n  isLineTerminator(): boolean {\n    return this.eat(tt.semi) || this.canInsertSemicolon();\n  }\n\n  // Consume a semicolon, or, failing that, see if we are allowed to\n  // pretend that there is a semicolon at this position.\n\n  semicolon(allowAsi: boolean = true): void {\n    if (allowAsi ? this.isLineTerminator() : this.eat(tt.semi)) return;\n    this.raise(Errors.MissingSemicolon, this.state.lastTokEndLoc);\n  }\n\n  // Expect a token of a given type. If found, consume it, otherwise,\n  // raise an unexpected token error at given pos.\n\n  expect(type: TokenType, loc?: Position | null): void {\n    if (!this.eat(type)) {\n      this.unexpected(loc, type);\n    }\n  }\n\n  // tryParse will clone parser state.\n  // It is expensive and should be used with cautions\n  tryParse<T extends Node | ReadonlyArray<Node>>(\n    fn: (abort: (node?: T) => never) => T,\n    oldState: State = this.state.clone(),\n  ):\n    | TryParse<T, null, false, false, null>\n    | TryParse<T | null, ParseError<any>, boolean, false, State>\n    | TryParse<T | null, null, false, true, State> {\n    const abortSignal: {\n      node: T | null;\n    } = { node: null };\n    try {\n      const node = fn((node = null) => {\n        abortSignal.node = node;\n        // eslint-disable-next-line @typescript-eslint/only-throw-error\n        throw abortSignal;\n      });\n      if (this.state.errors.length > oldState.errors.length) {\n        const failState = this.state;\n        this.state = oldState;\n        // tokensLength should be preserved during error recovery mode\n        // since the parser does not halt and will instead parse the\n        // remaining tokens\n        this.state.tokensLength = failState.tokensLength;\n        return {\n          node,\n          error: failState.errors[oldState.errors.length],\n          thrown: false,\n          aborted: false,\n          failState,\n        };\n      }\n\n      return {\n        node,\n        error: null,\n        thrown: false,\n        aborted: false,\n        failState: null,\n      };\n    } catch (error) {\n      const failState = this.state;\n      this.state = oldState;\n      if (error instanceof SyntaxError) {\n        // @ts-expect-error casting general syntax error to parse error\n        return { node: null, error, thrown: true, aborted: false, failState };\n      }\n      if (error === abortSignal) {\n        return {\n          node: abortSignal.node,\n          error: null,\n          thrown: false,\n          aborted: true,\n          failState,\n        };\n      }\n\n      throw error;\n    }\n  }\n\n  checkExpressionErrors(\n    refExpressionErrors: ExpressionErrors | undefined | null,\n    andThrow: boolean,\n  ) {\n    if (!refExpressionErrors) return false;\n    const {\n      shorthandAssignLoc,\n      doubleProtoLoc,\n      privateKeyLoc,\n      optionalParametersLoc,\n      voidPatternLoc,\n    } = refExpressionErrors;\n\n    const hasErrors =\n      !!shorthandAssignLoc ||\n      !!doubleProtoLoc ||\n      !!optionalParametersLoc ||\n      !!privateKeyLoc ||\n      !!voidPatternLoc;\n\n    if (!andThrow) {\n      return hasErrors;\n    }\n\n    if (shorthandAssignLoc != null) {\n      this.raise(Errors.InvalidCoverInitializedName, shorthandAssignLoc);\n    }\n\n    if (doubleProtoLoc != null) {\n      this.raise(Errors.DuplicateProto, doubleProtoLoc);\n    }\n\n    if (privateKeyLoc != null) {\n      this.raise(Errors.UnexpectedPrivateField, privateKeyLoc);\n    }\n\n    if (optionalParametersLoc != null) {\n      this.unexpected(optionalParametersLoc);\n    }\n\n    if (voidPatternLoc != null) {\n      this.raise(Errors.InvalidCoverDiscardElement, voidPatternLoc);\n    }\n  }\n\n  /**\n   * Test if current token is a literal property name\n   * https://tc39.es/ecma262/#prod-LiteralPropertyName\n   * LiteralPropertyName:\n   *   IdentifierName\n   *   StringLiteral\n   *   NumericLiteral\n   *   BigIntLiteral\n   */\n  isLiteralPropertyName(): boolean {\n    return tokenIsLiteralPropertyName(this.state.type);\n  }\n\n  /**\n   * Test if given node is a PrivateName\n   * will be overridden in ESTree plugin\n   */\n  isPrivateName(node: Node): node is PrivateName {\n    return node.type === \"PrivateName\";\n  }\n\n  /**\n   * Return the string value of a given private name\n   * WITHOUT `#`\n   * @see {@link https://tc39.es/ecma262/#sec-static-semantics-stringvalue}\n   */\n  getPrivateNameSV(node: PrivateName): string {\n    return node.id.name;\n  }\n\n  /**\n   * Return whether the given node is a member/optional chain that\n   * contains a private name as its property\n   * It is overridden in ESTree plugin\n   */\n  hasPropertyAsPrivateName(node: Node): boolean {\n    return (\n      (node.type === \"MemberExpression\" ||\n        node.type === \"OptionalMemberExpression\") &&\n      this.isPrivateName(node.property)\n    );\n  }\n\n  isObjectProperty(\n    node: Node,\n  ): node is ObjectProperty | EstreePropertyDefinition {\n    return node.type === \"ObjectProperty\";\n  }\n\n  isObjectMethod(node: Node): node is ObjectMethod {\n    return node.type === \"ObjectMethod\";\n  }\n\n  initializeScopes(\n    this: Parser,\n    inModule: boolean = this.options.sourceType === \"module\",\n  ): () => void {\n    // Initialize state\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n\n    const oldExportedIdentifiers = this.exportedIdentifiers;\n    this.exportedIdentifiers = new Set();\n\n    // initialize scopes\n    const oldInModule = this.inModule;\n    this.inModule = inModule;\n\n    const oldScope = this.scope;\n    const ScopeHandler = this.getScopeHandler();\n    this.scope = new ScopeHandler(this, inModule);\n\n    const oldProdParam = this.prodParam;\n    this.prodParam = new ProductionParameterHandler();\n\n    const oldClassScope = this.classScope;\n    this.classScope = new ClassScopeHandler(this);\n\n    const oldExpressionScope = this.expressionScope;\n    this.expressionScope = new ExpressionScopeHandler(this);\n\n    return () => {\n      // Revert state\n      this.state.labels = oldLabels;\n      this.exportedIdentifiers = oldExportedIdentifiers;\n\n      // Revert scopes\n      this.inModule = oldInModule;\n      this.scope = oldScope;\n      this.prodParam = oldProdParam;\n      this.classScope = oldClassScope;\n      this.expressionScope = oldExpressionScope;\n    };\n  }\n\n  enterInitialScopes() {\n    let paramFlags = ParamKind.PARAM;\n    if (\n      this.inModule ||\n      this.optionFlags & OptionFlags.AllowAwaitOutsideFunction\n    ) {\n      paramFlags |= ParamKind.PARAM_AWAIT;\n    }\n    if (this.optionFlags & OptionFlags.AllowYieldOutsideFunction) {\n      paramFlags |= ParamKind.PARAM_YIELD;\n    }\n    // The inModule flag ensures that the module block within a CommonJS source\n    // will be treated as an ES module.\n    const isCommonJS = !this.inModule && this.options.sourceType === \"commonjs\";\n    if (\n      isCommonJS ||\n      this.optionFlags & OptionFlags.AllowReturnOutsideFunction\n    ) {\n      paramFlags |= ParamKind.PARAM_RETURN;\n    }\n    this.prodParam.enter(paramFlags);\n    let scopeFlags = isCommonJS ? ScopeFlag.FUNCTION : ScopeFlag.PROGRAM;\n    if (this.optionFlags & OptionFlags.AllowNewTargetOutsideFunction) {\n      scopeFlags |= ScopeFlag.NEW_TARGET;\n    }\n    this.scope.enter(scopeFlags);\n  }\n\n  checkDestructuringPrivate(refExpressionErrors: ExpressionErrors) {\n    const { privateKeyLoc } = refExpressionErrors;\n    if (privateKeyLoc !== null) {\n      this.expectPlugin(\"destructuringPrivate\", privateKeyLoc);\n    }\n  }\n}\n\n/**\n * The ExpressionErrors is a context struct used to track ambiguous patterns\n * When we are sure the parsed pattern is a RHS, which means it is not a pattern,\n * we will throw on this position on invalid assign syntax, otherwise it will be reset to null\n *\n * Types of ExpressionErrors:\n *\n * - **shorthandAssignLoc**: track initializer `=` position\n * - **doubleProtoLoc**: track the duplicate `__proto__` key position\n * - **privateKeyLoc**: track private key `#p` position\n * - **optionalParametersLoc**: track the optional parameter (`?`).\n *   It's only used by typescript and flow plugins\n */\nexport class ExpressionErrors {\n  shorthandAssignLoc: Position | undefined | null = null;\n  doubleProtoLoc: Position | undefined | null = null;\n  privateKeyLoc: Position | undefined | null = null;\n  optionalParametersLoc: Position | undefined | null = null;\n  voidPatternLoc: Position | undefined | null = null;\n}\n","import UtilParser from \"./util.ts\";\nimport { SourceLocation, type Position } from \"../util/location.ts\";\nimport type {\n  Comment,\n  Node as NodeType,\n  NodeBase,\n  EstreeLiteral,\n  Identifier,\n  Placeholder,\n  StringLiteral,\n} from \"../types.ts\";\nimport { OptionFlags } from \"../options.ts\";\n\n// Start an AST node, attaching a start offset.\n\nclass Node implements NodeBase {\n  constructor(parser: UtilParser, pos: number, loc: Position) {\n    this.start = pos;\n    this.end = 0;\n    this.loc = new SourceLocation(loc);\n    if (parser?.optionFlags & OptionFlags.Ranges) this.range = [pos, 0];\n    if (parser?.filename) this.loc.filename = parser.filename;\n  }\n\n  type: string = \"\";\n  declare start: number;\n  declare end: number;\n  declare loc: SourceLocation;\n  declare range: [number, number];\n  declare leadingComments: Array<Comment>;\n  declare trailingComments: Array<Comment>;\n  declare innerComments: Array<Comment>;\n  declare extra: {\n    [key: string]: any;\n  };\n}\nconst NodePrototype = Node.prototype;\n\nif (!process.env.BABEL_8_BREAKING) {\n  // @ts-expect-error __clone is not defined in Node prototype\n  NodePrototype.__clone = function (): Node {\n    const newNode = new Node(undefined, this.start, this.loc.start);\n    const keys = Object.keys(this) as (keyof Node)[];\n    for (let i = 0, length = keys.length; i < length; i++) {\n      const key = keys[i];\n      // Do not clone comments that are already attached to the node\n      if (\n        key !== \"leadingComments\" &&\n        key !== \"trailingComments\" &&\n        key !== \"innerComments\"\n      ) {\n        // @ts-expect-error cloning this to newNode\n        newNode[key] = this[key];\n      }\n    }\n\n    return newNode;\n  };\n}\n\nexport type Undone<T extends NodeType> = Omit<T, \"type\">;\n\nexport abstract class NodeUtils extends UtilParser {\n  startNode<T extends NodeType = never>(): Undone<T> {\n    const loc = this.state.startLoc;\n    return new Node(this, loc.index, loc) as unknown as Undone<T>;\n  }\n\n  startNodeAt<T extends NodeType = never>(loc: Position): Undone<T> {\n    return new Node(this, loc.index, loc) as unknown as Undone<T>;\n  }\n\n  /** Start a new node with a previous node's location. */\n  startNodeAtNode<T extends NodeType = never>(\n    type: Undone<NodeType>,\n  ): Undone<T> {\n    return this.startNodeAt(type.loc.start);\n  }\n\n  // Finish an AST node, adding `type` and `end` properties.\n\n  finishNode<T extends NodeType>(node: Undone<T>, type: T[\"type\"]): T {\n    return this.finishNodeAt(node, type, this.state.lastTokEndLoc);\n  }\n\n  // Finish node at given position\n\n  finishNodeAt<T extends NodeType>(\n    node: Omit<T, \"type\">,\n    type: T[\"type\"],\n    endLoc: Position,\n  ): T {\n    if (process.env.NODE_ENV !== \"production\" && node.end > 0) {\n      throw new Error(\n        \"Do not call finishNode*() twice on the same node.\" +\n          \" Instead use resetEndLocation() or change type directly.\",\n      );\n    }\n    (node as T).type = type;\n    node.end = endLoc.index;\n    node.loc.end = endLoc;\n    if (this.optionFlags & OptionFlags.Ranges) node.range[1] = endLoc.index;\n    if (this.optionFlags & OptionFlags.AttachComment) {\n      this.processComment(node as T);\n    }\n    return node as T;\n  }\n\n  resetStartLocation(node: NodeBase, startLoc: Position): void {\n    node.start = startLoc.index;\n    node.loc.start = startLoc;\n    if (this.optionFlags & OptionFlags.Ranges) node.range[0] = startLoc.index;\n  }\n\n  resetEndLocation(\n    node: NodeBase,\n    endLoc: Position = this.state.lastTokEndLoc,\n  ): void {\n    node.end = endLoc.index;\n    node.loc.end = endLoc;\n    if (this.optionFlags & OptionFlags.Ranges) node.range[1] = endLoc.index;\n  }\n\n  /**\n   * Reset the start location of node to the start location of locationNode\n   */\n  resetStartLocationFromNode(node: NodeBase, locationNode: NodeBase): void {\n    this.resetStartLocation(node, locationNode.loc.start);\n  }\n\n  castNodeTo<T extends NodeType[\"type\"]>(\n    node: NodeType,\n    type: T,\n  ): Extract<NodeType, { type: T }> {\n    node.type = type;\n    return node as Extract<NodeType, { type: T }>;\n  }\n\n  cloneIdentifier<T extends Identifier | Placeholder>(node: T): T {\n    // We don't need to clone `typeAnnotations` and `optional`: because\n    // cloneIdentifier is only used in object shorthand and named import/export.\n    // Neither of them allow type annotations after the identifier or optional identifier\n    const { type, start, end, loc, range, name } = node;\n    const cloned = Object.create(NodePrototype);\n    cloned.type = type;\n    cloned.start = start;\n    cloned.end = end;\n    cloned.loc = loc;\n    cloned.range = range;\n    cloned.name = name;\n    if (node.extra) cloned.extra = node.extra;\n    return cloned;\n  }\n\n  cloneStringLiteral<T extends StringLiteral | EstreeLiteral | Placeholder>(\n    node: T,\n  ): T {\n    const { type, start, end, loc, range, extra } = node;\n    const cloned = Object.create(NodePrototype);\n    cloned.type = type;\n    cloned.start = start;\n    cloned.end = end;\n    cloned.loc = loc;\n    cloned.range = range;\n    cloned.extra = extra;\n    cloned.value = (node as StringLiteral).value;\n    return cloned;\n  }\n}\n","import * as charCodes from \"charcodes\";\nimport { tt, type TokenType } from \"../tokenizer/types.ts\";\nimport type {\n  AssignmentPattern,\n  TSParameterProperty,\n  Decorator,\n  Expression,\n  Identifier,\n  Node,\n  Pattern,\n  RestElement,\n  SpreadElement,\n  ObjectOrClassMember,\n  ClassMember,\n  ObjectMember,\n  TsNamedTypeElementBase,\n  PrivateName,\n  ObjectExpression,\n  ObjectPattern,\n  ArrayPattern,\n  AssignmentProperty,\n  Assignable,\n  VoidPattern,\n} from \"../types.ts\";\nimport type { Position } from \"../util/location.ts\";\nimport {\n  isStrictBindOnlyReservedWord,\n  isStrictBindReservedWord,\n} from \"../util/identifier.ts\";\nimport { NodeUtils, type Undone } from \"./node.ts\";\nimport { BindingFlag } from \"../util/scopeflags.ts\";\nimport type { ExpressionErrors } from \"./util.ts\";\nimport { Errors, type LValAncestor } from \"../parse-error.ts\";\nimport type Parser from \"./index.ts\";\n\nconst unwrapParenthesizedExpression = (node: Node): Node => {\n  return node.type === \"ParenthesizedExpression\"\n    ? unwrapParenthesizedExpression(node.expression)\n    : node;\n};\n\nexport const enum ParseBindingListFlags {\n  ALLOW_EMPTY = 1 << 0,\n  IS_FUNCTION_PARAMS = 1 << 1,\n  IS_CONSTRUCTOR_PARAMS = 1 << 2,\n}\n\nexport default abstract class LValParser extends NodeUtils {\n  // Forward-declaration: defined in expression.js\n  abstract parseIdentifier(liberal?: boolean): Identifier;\n  abstract parseMaybeAssign(\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n  ): Expression;\n\n  abstract parseMaybeAssignAllowIn(\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n  ): Expression;\n\n  abstract parseObjectLike<T extends ObjectPattern | ObjectExpression>(\n    close: TokenType,\n    isPattern: boolean,\n    isRecord?: boolean,\n    refExpressionErrors?: ExpressionErrors,\n  ): T;\n  abstract parseObjPropValue(\n    prop: any,\n    startLoc: Position | null,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isPattern: boolean,\n    isAccessor: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): void;\n  abstract parsePropertyName(\n    prop: ObjectOrClassMember | ClassMember | TsNamedTypeElementBase,\n  ): void;\n  abstract parsePrivateName(): PrivateName;\n  // Forward-declaration: defined in statement.js\n  abstract parseDecorator(): Decorator;\n\n  /**\n   * Convert existing expression atom to assignable pattern\n   * if possible. Also checks invalid destructuring targets:\n   *\n   * - Parenthesized Destructuring patterns\n   * - RestElement is not the last element\n   * - Missing `=` in assignment pattern\n   *\n   * NOTE: There is a corresponding \"isAssignable\" method.\n   * When this one is updated, please check if also that one needs to be updated.\n   *\n   * @param node The expression atom\n   * @param isLHS Whether we are parsing a LeftHandSideExpression.\n   *              If isLHS is `true`, the following cases are allowed: `[(a)] = [0]`, `[(a.b)] = [0]`\n   *              If isLHS is `false`, we are in an arrow function parameters list.\n   */\n  toAssignable(node: Node, isLHS: boolean = false): asserts node is Assignable {\n    let parenthesized = undefined;\n    if (node.type === \"ParenthesizedExpression\" || node.extra?.parenthesized) {\n      parenthesized = unwrapParenthesizedExpression(node);\n      if (isLHS) {\n        // an LHS can be reinterpreted to a binding pattern but not vice versa.\n        // therefore a parenthesized identifier is ambiguous until we are sure it is an assignment expression\n        // i.e. `([(a) = []] = []) => {}`\n        // see also `recordArrowParameterBindingError` signature in packages/babel-parser/src/util/expression-scope.js\n        if (parenthesized.type === \"Identifier\") {\n          this.expressionScope.recordArrowParameterBindingError(\n            Errors.InvalidParenthesizedAssignment,\n            node,\n          );\n        } else if (\n          parenthesized.type !== \"MemberExpression\" &&\n          !this.isOptionalMemberExpression(parenthesized)\n        ) {\n          // A parenthesized member expression can be in LHS but not in pattern.\n          // If the LHS is later interpreted as a pattern, `checkLVal` will throw for member expression binding\n          // i.e. `([(a.b) = []] = []) => {}`\n          this.raise(Errors.InvalidParenthesizedAssignment, node);\n        }\n      } else {\n        this.raise(Errors.InvalidParenthesizedAssignment, node);\n      }\n    }\n\n    switch (node.type) {\n      case \"Identifier\":\n      case \"ObjectPattern\":\n      case \"ArrayPattern\":\n      case \"AssignmentPattern\":\n      case \"RestElement\":\n      case \"VoidPattern\":\n        break;\n\n      case \"ObjectExpression\":\n        this.castNodeTo(node, \"ObjectPattern\");\n        for (\n          let i = 0, length = node.properties.length, last = length - 1;\n          i < length;\n          i++\n        ) {\n          const prop = node.properties[i];\n          const isLast = i === last;\n          this.toAssignableObjectExpressionProp(prop, isLast, isLHS);\n\n          if (\n            isLast &&\n            (prop as Node).type === \"RestElement\" &&\n            node.extra?.trailingCommaLoc\n          ) {\n            this.raise(Errors.RestTrailingComma, node.extra.trailingCommaLoc);\n          }\n        }\n        break;\n\n      case \"ObjectProperty\": {\n        const { key, value } = node;\n        if (this.isPrivateName(key)) {\n          this.classScope.usePrivateName(\n            this.getPrivateNameSV(key),\n            key.loc.start,\n          );\n        }\n        this.toAssignable(value, isLHS);\n        break;\n      }\n\n      case \"SpreadElement\": {\n        throw new Error(\n          \"Internal @babel/parser error (this is a bug, please report it).\" +\n            \" SpreadElement should be converted by .toAssignable's caller.\",\n        );\n      }\n\n      case \"ArrayExpression\":\n        this.castNodeTo(node, \"ArrayPattern\");\n        this.toAssignableList(\n          node.elements,\n          node.extra?.trailingCommaLoc,\n          isLHS,\n        );\n        break;\n\n      case \"AssignmentExpression\":\n        if (node.operator !== \"=\") {\n          this.raise(Errors.MissingEqInAssignment, node.left.loc.end);\n        }\n\n        this.castNodeTo(node, \"AssignmentPattern\");\n        delete node.operator;\n        if (node.left.type === \"VoidPattern\") {\n          this.raise(Errors.VoidPatternInitializer, node.left);\n        }\n        this.toAssignable(node.left, isLHS);\n        break;\n\n      case \"ParenthesizedExpression\":\n        /*::invariant (parenthesized !== undefined) */\n        this.toAssignable(parenthesized, isLHS);\n        break;\n\n      default:\n      // We don't know how to deal with this node. It will\n      // be reported by a later call to checkLVal\n    }\n  }\n\n  toAssignableObjectExpressionProp(\n    prop: Node,\n    isLast: boolean,\n    isLHS: boolean,\n  ) {\n    if (prop.type === \"ObjectMethod\") {\n      this.raise(\n        prop.kind === \"get\" || prop.kind === \"set\"\n          ? Errors.PatternHasAccessor\n          : Errors.PatternHasMethod,\n        prop.key,\n      );\n    } else if (prop.type === \"SpreadElement\") {\n      this.castNodeTo(prop, \"RestElement\");\n      const arg = prop.argument;\n      this.checkToRestConversion(arg, /* allowPattern */ false);\n      this.toAssignable(arg, isLHS);\n\n      if (!isLast) {\n        this.raise(Errors.RestTrailingComma, prop);\n      }\n    } else {\n      this.toAssignable(prop, isLHS);\n    }\n  }\n\n  // Convert list of expression atoms to binding list.\n\n  toAssignableList(\n    exprList: (\n      | Expression\n      | SpreadElement\n      | RestElement\n      | VoidPattern\n      | AssignmentPattern\n      | null\n    )[],\n    trailingCommaLoc: Position | undefined | null,\n    isLHS: boolean,\n  ): void {\n    const end = exprList.length - 1;\n\n    for (let i = 0; i <= end; i++) {\n      const elt = exprList[i];\n      if (!elt) continue;\n\n      this.toAssignableListItem(exprList, i, isLHS);\n\n      if (elt.type === \"RestElement\") {\n        if (i < end) {\n          this.raise(Errors.RestTrailingComma, elt);\n        } else if (trailingCommaLoc) {\n          this.raise(Errors.RestTrailingComma, trailingCommaLoc);\n        }\n      }\n    }\n  }\n\n  toAssignableListItem(\n    exprList: (\n      | Expression\n      | SpreadElement\n      | RestElement\n      | VoidPattern\n      | AssignmentPattern\n    )[],\n    index: number,\n    isLHS: boolean,\n  ): void {\n    const node = exprList[index];\n    if (node.type === \"SpreadElement\") {\n      this.castNodeTo(node, \"RestElement\");\n      const arg = node.argument;\n      this.checkToRestConversion(arg, /* allowPattern */ true);\n      this.toAssignable(arg, isLHS);\n    } else {\n      this.toAssignable(node, isLHS);\n    }\n  }\n\n  isAssignable(node: Node, isBinding?: boolean): boolean {\n    switch (node.type) {\n      case \"Identifier\":\n      case \"ObjectPattern\":\n      case \"ArrayPattern\":\n      case \"AssignmentPattern\":\n      case \"RestElement\":\n      case \"VoidPattern\":\n        return true;\n\n      case \"ObjectExpression\": {\n        const last = node.properties.length - 1;\n        return node.properties.every((prop, i) => {\n          return (\n            prop.type !== \"ObjectMethod\" &&\n            (i === last || prop.type !== \"SpreadElement\") &&\n            this.isAssignable(prop)\n          );\n        });\n      }\n\n      case \"ObjectProperty\":\n        return this.isAssignable(node.value);\n\n      case \"SpreadElement\":\n        return this.isAssignable(node.argument);\n\n      case \"ArrayExpression\":\n        return node.elements.every(\n          element => element === null || this.isAssignable(element),\n        );\n\n      case \"AssignmentExpression\":\n        return node.operator === \"=\";\n\n      case \"ParenthesizedExpression\":\n        return this.isAssignable(node.expression);\n\n      case \"MemberExpression\":\n      case \"OptionalMemberExpression\":\n        return !isBinding;\n\n      default:\n        return false;\n    }\n  }\n\n  // Convert list of expression atoms to a list of\n\n  toReferencedList(\n    exprList:\n      | ReadonlyArray<\n          Expression | SpreadElement | VoidPattern | AssignmentPattern\n        >\n      | ReadonlyArray<\n          Expression | RestElement | VoidPattern | AssignmentPattern\n        >,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    isParenthesizedExpr?: boolean,\n  ):\n    | ReadonlyArray<\n        Expression | SpreadElement | VoidPattern | AssignmentPattern\n      >\n    | ReadonlyArray<\n        Expression | RestElement | VoidPattern | AssignmentPattern\n      > {\n    return exprList;\n  }\n\n  toReferencedListDeep(\n    exprList:\n      | ReadonlyArray<\n          Expression | SpreadElement | VoidPattern | AssignmentPattern\n        >\n      | ReadonlyArray<\n          Expression | RestElement | VoidPattern | AssignmentPattern\n        >,\n    isParenthesizedExpr?: boolean,\n  ): void {\n    this.toReferencedList(exprList, isParenthesizedExpr);\n\n    for (const expr of exprList) {\n      if (expr?.type === \"ArrayExpression\") {\n        this.toReferencedListDeep(expr.elements);\n      }\n    }\n  }\n\n  // Parses spread element.\n\n  parseSpread(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): SpreadElement {\n    const node = this.startNode<SpreadElement>();\n    this.next();\n    node.argument = this.parseMaybeAssignAllowIn(\n      refExpressionErrors,\n      undefined,\n    );\n    return this.finishNode(node, \"SpreadElement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingRestElement\n  parseRestBinding(this: Parser): RestElement {\n    const node = this.startNode<RestElement>();\n    this.next(); // eat `...`\n    const argument = this.parseBindingAtom();\n    if (argument.type === \"VoidPattern\") {\n      this.raise(Errors.UnexpectedVoidPattern, argument);\n    }\n    node.argument = argument;\n    return this.finishNode(node, \"RestElement\");\n  }\n\n  // Parses lvalue (assignable) atom.\n  parseBindingAtom(this: Parser): Pattern {\n    // https://tc39.es/ecma262/#prod-BindingPattern\n    switch (this.state.type) {\n      case tt.bracketL: {\n        const node = this.startNode<ArrayPattern>();\n        this.next();\n        node.elements = this.parseBindingList(\n          tt.bracketR,\n          charCodes.rightSquareBracket,\n          ParseBindingListFlags.ALLOW_EMPTY,\n        );\n        return this.finishNode(node, \"ArrayPattern\");\n      }\n\n      case tt.braceL:\n        return this.parseObjectLike(tt.braceR, true);\n\n      case tt._void:\n        return this.parseVoidPattern(null);\n    }\n\n    // https://tc39.es/ecma262/#prod-BindingIdentifier\n    return this.parseIdentifier();\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingElementList\n  parseBindingList(\n    this: Parser,\n    close: TokenType,\n    closeCharCode: (typeof charCodes)[keyof typeof charCodes],\n    flags: ParseBindingListFlags.ALLOW_EMPTY,\n  ): Array<Pattern>;\n  parseBindingList(\n    this: Parser,\n    close: TokenType,\n    closeCharCode: (typeof charCodes)[keyof typeof charCodes],\n    flags: ParseBindingListFlags.IS_FUNCTION_PARAMS,\n  ): Array<Pattern | TSParameterProperty>;\n  parseBindingList(\n    this: Parser,\n    close: TokenType,\n    closeCharCode: (typeof charCodes)[keyof typeof charCodes],\n    flags: ParseBindingListFlags,\n  ): Array<Pattern | TSParameterProperty> {\n    const allowEmpty = flags & ParseBindingListFlags.ALLOW_EMPTY;\n\n    const elts: Array<Pattern | TSParameterProperty> = [];\n    let first = true;\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n      }\n      if (allowEmpty && this.match(tt.comma)) {\n        elts.push(null);\n      } else if (this.eat(close)) {\n        break;\n      } else if (this.match(tt.ellipsis)) {\n        let rest: Pattern = this.parseRestBinding();\n        if (\n          (!process.env.BABEL_8_BREAKING && this.hasPlugin(\"flow\")) ||\n          flags & ParseBindingListFlags.IS_FUNCTION_PARAMS\n        ) {\n          rest = this.parseFunctionParamType(rest);\n        }\n        elts.push(rest);\n        if (!this.checkCommaAfterRest(closeCharCode)) {\n          this.expect(close);\n          break;\n        }\n      } else {\n        const decorators = [];\n        if (flags & ParseBindingListFlags.IS_FUNCTION_PARAMS) {\n          if (this.match(tt.at) && this.hasPlugin(\"decorators\")) {\n            this.raise(\n              Errors.UnsupportedParameterDecorator,\n              this.state.startLoc,\n            );\n          }\n          // invariant: hasPlugin(\"decorators-legacy\")\n          while (this.match(tt.at)) {\n            decorators.push(this.parseDecorator());\n          }\n        }\n        elts.push(this.parseBindingElement(flags, decorators));\n      }\n    }\n    return elts;\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingRestProperty\n  parseBindingRestProperty(\n    this: Parser,\n    prop: Undone<RestElement>,\n  ): RestElement {\n    this.next(); // eat '...'\n    if (this.hasPlugin(\"discardBinding\") && this.match(tt._void)) {\n      prop.argument = this.parseVoidPattern(null);\n      this.raise(Errors.UnexpectedVoidPattern, prop.argument);\n    } else {\n      // Don't use parseRestBinding() as we only allow Identifier here.\n      prop.argument = this.parseIdentifier();\n    }\n    this.checkCommaAfterRest(charCodes.rightCurlyBrace);\n    return this.finishNode(prop, \"RestElement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingProperty\n  parseBindingProperty(this: Parser): AssignmentProperty | RestElement {\n    const { type, startLoc } = this.state;\n    if (type === tt.ellipsis) {\n      return this.parseBindingRestProperty(this.startNode());\n    }\n\n    const prop = this.startNode<AssignmentProperty>();\n    if (type === tt.privateName) {\n      this.expectPlugin(\"destructuringPrivate\", startLoc);\n      this.classScope.usePrivateName(this.state.value, startLoc);\n      prop.key = this.parsePrivateName();\n    } else {\n      this.parsePropertyName(prop);\n    }\n    prop.method = false;\n    return this.parseObjPropValue(\n      prop,\n      startLoc,\n      false /* isGenerator */,\n      false /* isAsync */,\n      true /* isPattern */,\n      false /* isAccessor */,\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingElement\n  parseBindingElement(\n    this: Parser,\n    flags: ParseBindingListFlags,\n    decorators: Decorator[],\n  ): Pattern | TSParameterProperty {\n    const left = this.parseMaybeDefault();\n    if (\n      (!process.env.BABEL_8_BREAKING && this.hasPlugin(\"flow\")) ||\n      flags & ParseBindingListFlags.IS_FUNCTION_PARAMS\n    ) {\n      this.parseFunctionParamType(left);\n    }\n    if (decorators.length) {\n      left.decorators = decorators;\n      this.resetStartLocationFromNode(left, decorators[0]);\n    }\n    const elt = this.parseMaybeDefault(left.loc.start, left);\n    return elt;\n  }\n\n  // Used by flow/typescript plugin to add type annotations to binding elements\n  parseFunctionParamType(param: Pattern): Pattern {\n    return param;\n  }\n\n  // Parses assignment pattern around given atom if possible.\n  // https://tc39.es/ecma262/#prod-BindingElement\n  parseMaybeDefault<P extends Pattern>(\n    this: Parser,\n    startLoc?: Position | null,\n    left?: P,\n  ): P | AssignmentPattern;\n  parseMaybeDefault(\n    this: Parser,\n    startLoc?: Position | null,\n    left?: Pattern | null,\n  ): Pattern {\n    startLoc ??= this.state.startLoc;\n    left = left ?? this.parseBindingAtom();\n    if (!this.eat(tt.eq)) return left;\n\n    const node = this.startNodeAt<AssignmentPattern>(startLoc);\n    if (left.type === \"VoidPattern\") {\n      this.raise(Errors.VoidPatternInitializer, left);\n    }\n    node.left = left;\n    node.right = this.parseMaybeAssignAllowIn();\n    return this.finishNode(node, \"AssignmentPattern\");\n  }\n  /**\n   * Return information use in determining whether a Node of a given type is an LVal,\n   * possibly given certain additional context information.\n   *\n   * Subclasser notes: This method has kind of a lot of mixed, but related,\n   * responsibilities. If we can definitively determine with the information\n   * provided that this either *is* or *isn't* a valid `LVal`, then the return\n   * value is easy: just return `true` or `false`. However, if it is a valid\n   * LVal *ancestor*, and thus its descendants must be subsequently visited to\n   * continue the \"investigation\", then this method should return the relevant\n   * child key as a `string`. In some special cases, you additionally want to\n   * convey that this node should be treated as if it were parenthesized. In\n   * that case, a tuple of [key: string, parenthesized: boolean] is returned.\n   * The `string`-only return option is actually just a shorthand for:\n   * `[key: string, parenthesized: false]`.\n   *\n   * @param type A Node `type` string\n   * @param isUnparenthesizedInAssign\n   *        Whether the node in question is unparenthesized and its parent\n   *        is either an assignment pattern or an assignment expression.\n   * @param binding\n   *        The binding operation that is being considered for this potential\n   *        LVal.\n   * @returns `true` or `false` if we can immediately determine whether the node\n   *          type in question can be treated as an `LVal`.\n   *          A `string` key to traverse if we must check this child.\n   *          A `[string, boolean]` tuple if we need to check this child and\n   *          treat is as parenthesized.\n   */\n  isValidLVal(\n    type: string,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    isUnparenthesizedInAssign: boolean,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    binding: BindingFlag,\n  ): string | boolean | [string, boolean] {\n    switch (type) {\n      case \"AssignmentPattern\":\n        return \"left\";\n      case \"RestElement\":\n        return \"argument\";\n      case \"ObjectProperty\":\n        return \"value\";\n      case \"ParenthesizedExpression\":\n        return \"expression\";\n      case \"ArrayPattern\":\n        return \"elements\";\n      case \"ObjectPattern\":\n        return \"properties\";\n      case \"VoidPattern\":\n        return true;\n    }\n    return false;\n  }\n\n  // Overridden by the estree plugin\n  isOptionalMemberExpression(expression: Node): boolean {\n    return expression.type === \"OptionalMemberExpression\";\n  }\n\n  /**\n   * Verify that a target expression is an lval (something that can be assigned to).\n   *\n   * @param expression The expression in question to check.\n   * @param ancestor\n   *        The relevant ancestor to provide context information for the error\n   *        if the check fails.\n   * @param binding\n   *        The desired binding type. If the given expression is an identifier\n   *        and `binding` is not `BindingFlag.TYPE_NONE`, `checkLVal` will register binding\n   *        to the parser scope See also `src/util/scopeflags.js`\n   * @param checkClashes\n   *        An optional string set to check if an identifier name is included.\n   *        `checkLVal` will add checked identifier name to `checkClashes` It is\n   *        used in tracking duplicates in function parameter lists. If it is\n   *        false, `checkLVal` will skip duplicate checks\n   * @param strictModeChanged\n   *        Whether an identifier has been parsed in a sloppy context but should\n   *        be reinterpreted as strict-mode. e.g. `(arguments) => { \"use strict \"}`\n   * @param hasParenthesizedAncestor\n   *        This is only used internally during recursive calls, and you should\n   *        not have to set it yourself.\n   */\n\n  checkLVal(\n    expression:\n      | Expression\n      | ObjectMember\n      | RestElement\n      | Pattern\n      | TSParameterProperty,\n    ancestor: LValAncestor,\n    binding: BindingFlag = BindingFlag.TYPE_NONE,\n    checkClashes: Set<string> | false = false,\n    strictModeChanged: boolean = false,\n    hasParenthesizedAncestor: boolean = false,\n  ): void {\n    const type = expression.type;\n\n    // If we find here an ObjectMethod, it's because this was originally\n    // an ObjectExpression which has then been converted.\n    // toAssignable already reported this error with a nicer message.\n    if (this.isObjectMethod(expression)) return;\n\n    const isOptionalMemberExpression =\n      this.isOptionalMemberExpression(expression);\n\n    if (isOptionalMemberExpression || type === \"MemberExpression\") {\n      if (isOptionalMemberExpression) {\n        this.expectPlugin(\"optionalChainingAssign\", expression.loc.start);\n        if (ancestor.type !== \"AssignmentExpression\") {\n          this.raise(Errors.InvalidLhsOptionalChaining, expression, {\n            ancestor,\n          });\n        }\n      }\n\n      if (binding !== BindingFlag.TYPE_NONE) {\n        this.raise(Errors.InvalidPropertyBindingPattern, expression);\n      }\n      return;\n    }\n\n    if (type === \"Identifier\") {\n      this.checkIdentifier(expression, binding, strictModeChanged);\n\n      const { name } = expression;\n\n      if (checkClashes) {\n        if (checkClashes.has(name)) {\n          this.raise(Errors.ParamDupe, expression);\n        } else {\n          checkClashes.add(name);\n        }\n      }\n\n      return;\n    } else if (type === \"VoidPattern\" && ancestor.type === \"CatchClause\") {\n      this.raise(Errors.VoidPatternCatchClauseParam, expression);\n    }\n\n    const validity = this.isValidLVal(\n      type,\n      !(hasParenthesizedAncestor || expression.extra?.parenthesized) &&\n        ancestor.type === \"AssignmentExpression\",\n      binding,\n    );\n\n    if (validity === true) return;\n    if (validity === false) {\n      const ParseErrorClass =\n        binding === BindingFlag.TYPE_NONE\n          ? Errors.InvalidLhs\n          : Errors.InvalidLhsBinding;\n\n      this.raise(ParseErrorClass, expression, { ancestor });\n      return;\n    }\n\n    let key: string, isParenthesizedExpression: boolean;\n    if (typeof validity === \"string\") {\n      key = validity;\n      isParenthesizedExpression = type === \"ParenthesizedExpression\";\n    } else {\n      [key, isParenthesizedExpression] = validity;\n    }\n\n    const nextAncestor =\n      type === \"ArrayPattern\" || type === \"ObjectPattern\"\n        ? ({ type } as const)\n        : ancestor;\n\n    // @ts-expect-error key may not index expression.\n    const val = expression[key];\n    if (Array.isArray(val)) {\n      for (const child of val) {\n        if (child) {\n          this.checkLVal(\n            child,\n            nextAncestor,\n            binding,\n            checkClashes,\n            strictModeChanged,\n            isParenthesizedExpression,\n          );\n        }\n      }\n    } else if (val) {\n      this.checkLVal(\n        val,\n        nextAncestor,\n        binding,\n        checkClashes,\n        strictModeChanged,\n        isParenthesizedExpression,\n      );\n    }\n  }\n\n  checkIdentifier(\n    at: Identifier,\n    bindingType: BindingFlag,\n    strictModeChanged: boolean = false,\n  ) {\n    if (\n      this.state.strict &&\n      (strictModeChanged\n        ? isStrictBindReservedWord(at.name, this.inModule)\n        : isStrictBindOnlyReservedWord(at.name))\n    ) {\n      if (bindingType === BindingFlag.TYPE_NONE) {\n        this.raise(Errors.StrictEvalArguments, at, { referenceName: at.name });\n      } else {\n        this.raise(Errors.StrictEvalArgumentsBinding, at, {\n          bindingName: at.name,\n        });\n      }\n    }\n\n    if (bindingType & BindingFlag.FLAG_NO_LET_IN_LEXICAL && at.name === \"let\") {\n      this.raise(Errors.LetInLexicalBinding, at);\n    }\n\n    if (!(bindingType & BindingFlag.TYPE_NONE)) {\n      this.declareNameFromIdentifier(at, bindingType);\n    }\n  }\n\n  declareNameFromIdentifier(identifier: Identifier, binding: BindingFlag) {\n    this.scope.declareName(identifier.name, binding, identifier.loc.start);\n  }\n\n  checkToRestConversion(node: Node, allowPattern: boolean): void {\n    switch (node.type) {\n      case \"ParenthesizedExpression\":\n        this.checkToRestConversion(node.expression, allowPattern);\n        break;\n      case \"Identifier\":\n      case \"MemberExpression\":\n        break;\n      case \"ArrayExpression\":\n      case \"ObjectExpression\":\n        if (allowPattern) break;\n      /* falls through */\n      default:\n        this.raise(Errors.InvalidRestAssignmentPattern, node);\n    }\n  }\n\n  checkCommaAfterRest(\n    close: (typeof charCodes)[keyof typeof charCodes],\n  ): boolean {\n    if (!this.match(tt.comma)) {\n      return false;\n    }\n\n    this.raise(\n      this.lookaheadCharCode() === close\n        ? Errors.RestTrailingComma\n        : Errors.ElementAfterRest,\n      this.state.startLoc,\n    );\n\n    return true;\n  }\n}\n","import type State from \"../../tokenizer/state.ts\";\nimport {\n  tokenIsIdentifier,\n  tokenIsTSDeclarationStart,\n  tokenIsTSTypeOperator,\n  tokenOperatorPrecedence,\n  tokenIsKeywordOrIdentifier,\n  tt,\n  type TokenType,\n  tokenIsTemplate,\n  tokenCanStartExpression,\n} from \"../../tokenizer/types.ts\";\nimport { types as tc } from \"../../tokenizer/context.ts\";\nimport type * as N from \"../../types.ts\";\nimport type { Position } from \"../../util/location.ts\";\nimport { createPositionWithColumnOffset } from \"../../util/location.ts\";\nimport type Parser from \"../../parser/index.ts\";\nimport { ScopeFlag, BindingFlag } from \"../../util/scopeflags.ts\";\nimport TypeScriptScopeHandler from \"./scope.ts\";\nimport * as charCodes from \"charcodes\";\nimport type { ExpressionErrors } from \"../../parser/util.ts\";\nimport type { ParseStatementFlag } from \"../../parser/statement.ts\";\nimport { ParamKind } from \"../../util/production-parameter.ts\";\nimport { Errors, ParseErrorEnum } from \"../../parse-error.ts\";\nimport type { Undone } from \"../../parser/node.ts\";\nimport type { ClassWithMixin, IJSXParserMixin } from \"../jsx/index.ts\";\nimport { ParseBindingListFlags } from \"../../parser/lval.ts\";\nimport { OptionFlags } from \"../../options.ts\";\n\ntype TsModifier =\n  | \"readonly\"\n  | \"abstract\"\n  | \"declare\"\n  | \"static\"\n  | \"override\"\n  | \"const\"\n  | N.Accessibility\n  | N.VarianceAnnotations;\n\nfunction nonNull<T>(x?: T | null): T {\n  if (x == null) {\n    throw new Error(`Unexpected ${x} value.`);\n  }\n  return x;\n}\n\nfunction assert(x: boolean): void {\n  if (!x) {\n    throw new Error(\"Assert fail\");\n  }\n}\n\ntype ParsingContext =\n  | \"EnumMembers\"\n  | \"HeritageClauseElement\"\n  | \"TupleElementTypes\"\n  | \"TypeMembers\"\n  | \"TypeParametersOrArguments\";\n\ntype ModifierBase = {\n  accessibility?: N.Accessibility;\n} & {\n  [key in TsModifier]?: boolean | undefined | null;\n};\n\n/* eslint sort-keys: \"error\" */\nconst TSErrors = ParseErrorEnum`typescript`({\n  AbstractMethodHasImplementation: ({ methodName }: { methodName: string }) =>\n    `Method '${methodName}' cannot have an implementation because it is marked abstract.`,\n  AbstractPropertyHasInitializer: ({\n    propertyName,\n  }: {\n    propertyName: string;\n  }) =>\n    `Property '${propertyName}' cannot have an initializer because it is marked abstract.`,\n  AccessorCannotBeOptional:\n    \"An 'accessor' property cannot be declared optional.\",\n  AccessorCannotDeclareThisParameter:\n    \"'get' and 'set' accessors cannot declare 'this' parameters.\",\n  AccessorCannotHaveTypeParameters: \"An accessor cannot have type parameters.\",\n  ClassMethodHasDeclare: \"Class methods cannot have the 'declare' modifier.\",\n  ClassMethodHasReadonly: \"Class methods cannot have the 'readonly' modifier.\",\n  ConstInitializerMustBeStringOrNumericLiteralOrLiteralEnumReference:\n    \"A 'const' initializer in an ambient context must be a string or numeric literal or literal enum reference.\",\n  ConstructorHasTypeParameters:\n    \"Type parameters cannot appear on a constructor declaration.\",\n  DeclareAccessor: ({ kind }: { kind: \"get\" | \"set\" }) =>\n    `'declare' is not allowed in ${kind}ters.`,\n  DeclareClassFieldHasInitializer:\n    \"Initializers are not allowed in ambient contexts.\",\n  DeclareFunctionHasImplementation:\n    \"An implementation cannot be declared in ambient contexts.\",\n  DuplicateAccessibilityModifier: ({\n    modifier,\n  }: {\n    modifier: N.Accessibility;\n  }) => `Accessibility modifier already seen: '${modifier}'.`,\n  DuplicateModifier: ({ modifier }: { modifier: TsModifier }) =>\n    `Duplicate modifier: '${modifier}'.`,\n  // `token` matches the terminology used by typescript:\n  // https://github.com/microsoft/TypeScript/blob/main/src/compiler/types.ts#L2915\n  EmptyHeritageClauseType: ({ token }: { token: \"extends\" | \"implements\" }) =>\n    `'${token}' list cannot be empty.`,\n  EmptyTypeArguments: \"Type argument list cannot be empty.\",\n  EmptyTypeParameters: \"Type parameter list cannot be empty.\",\n  ExpectedAmbientAfterExportDeclare:\n    \"'export declare' must be followed by an ambient declaration.\",\n  ImportAliasHasImportType: \"An import alias can not use 'import type'.\",\n  ImportReflectionHasImportType:\n    \"An `import module` declaration can not use `type` modifier\",\n  IncompatibleModifiers: ({\n    modifiers,\n  }: {\n    modifiers: [TsModifier, TsModifier];\n  }) =>\n    `'${modifiers[0]}' modifier cannot be used with '${modifiers[1]}' modifier.`,\n  IndexSignatureHasAbstract:\n    \"Index signatures cannot have the 'abstract' modifier.\",\n  IndexSignatureHasAccessibility: ({\n    modifier,\n  }: {\n    modifier: N.Accessibility;\n  }) =>\n    `Index signatures cannot have an accessibility modifier ('${modifier}').`,\n  IndexSignatureHasDeclare:\n    \"Index signatures cannot have the 'declare' modifier.\",\n  IndexSignatureHasOverride:\n    \"'override' modifier cannot appear on an index signature.\",\n  IndexSignatureHasStatic:\n    \"Index signatures cannot have the 'static' modifier.\",\n  InitializerNotAllowedInAmbientContext:\n    \"Initializers are not allowed in ambient contexts.\",\n  InvalidHeritageClauseType: ({ token }: { token: \"extends\" | \"implements\" }) =>\n    `'${token}' list can only include identifiers or qualified-names with optional type arguments.`,\n  InvalidModifierOnAwaitUsingDeclaration: (modifier: TsModifier) =>\n    `'${modifier}' modifier cannot appear on an await using declaration.`,\n  InvalidModifierOnTypeMember: ({ modifier }: { modifier: TsModifier }) =>\n    `'${modifier}' modifier cannot appear on a type member.`,\n  InvalidModifierOnTypeParameter: ({ modifier }: { modifier: TsModifier }) =>\n    `'${modifier}' modifier cannot appear on a type parameter.`,\n  InvalidModifierOnTypeParameterPositions: ({\n    modifier,\n  }: {\n    modifier: TsModifier;\n  }) =>\n    `'${modifier}' modifier can only appear on a type parameter of a class, interface or type alias.`,\n\n  InvalidModifierOnUsingDeclaration: (modifier: TsModifier) =>\n    `'${modifier}' modifier cannot appear on a using declaration.`,\n  InvalidModifiersOrder: ({\n    orderedModifiers,\n  }: {\n    orderedModifiers: [TsModifier, TsModifier];\n  }) =>\n    `'${orderedModifiers[0]}' modifier must precede '${orderedModifiers[1]}' modifier.`,\n  InvalidPropertyAccessAfterInstantiationExpression:\n    \"Invalid property access after an instantiation expression. \" +\n    \"You can either wrap the instantiation expression in parentheses, or delete the type arguments.\",\n  InvalidTupleMemberLabel:\n    \"Tuple members must be labeled with a simple identifier.\",\n  MissingInterfaceName:\n    \"'interface' declarations must be followed by an identifier.\",\n  NonAbstractClassHasAbstractMethod:\n    \"Abstract methods can only appear within an abstract class.\",\n  NonClassMethodPropertyHasAbstractModifier:\n    \"'abstract' modifier can only appear on a class, method, or property declaration.\",\n  OptionalTypeBeforeRequired:\n    \"A required element cannot follow an optional element.\",\n  OverrideNotInSubClass:\n    \"This member cannot have an 'override' modifier because its containing class does not extend another class.\",\n  PatternIsOptional:\n    \"A binding pattern parameter cannot be optional in an implementation signature.\",\n  PrivateElementHasAbstract:\n    \"Private elements cannot have the 'abstract' modifier.\",\n  PrivateElementHasAccessibility: ({\n    modifier,\n  }: {\n    modifier: N.Accessibility;\n  }) =>\n    `Private elements cannot have an accessibility modifier ('${modifier}').`,\n  ReadonlyForMethodSignature:\n    \"'readonly' modifier can only appear on a property declaration or index signature.\",\n  ReservedArrowTypeParam:\n    \"This syntax is reserved in files with the .mts or .cts extension. Add a trailing comma, as in `<T,>() => ...`.\",\n  ReservedTypeAssertion:\n    \"This syntax is reserved in files with the .mts or .cts extension. Use an `as` expression instead.\",\n  SetAccessorCannotHaveOptionalParameter:\n    \"A 'set' accessor cannot have an optional parameter.\",\n  SetAccessorCannotHaveRestParameter:\n    \"A 'set' accessor cannot have rest parameter.\",\n  SetAccessorCannotHaveReturnType:\n    \"A 'set' accessor cannot have a return type annotation.\",\n  SingleTypeParameterWithoutTrailingComma: ({\n    typeParameterName,\n  }: {\n    typeParameterName: string;\n  }) =>\n    `Single type parameter ${typeParameterName} should have a trailing comma. Example usage: <${typeParameterName},>.`,\n  StaticBlockCannotHaveModifier:\n    \"Static class blocks cannot have any modifier.\",\n  TupleOptionalAfterType:\n    \"A labeled tuple optional element must be declared using a question mark after the name and before the colon (`name?: type`), rather than after the type (`name: type?`).\",\n  TypeAnnotationAfterAssign:\n    \"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.\",\n  TypeImportCannotSpecifyDefaultAndNamed:\n    \"A type-only import can specify a default import or named bindings, but not both.\",\n  TypeModifierIsUsedInTypeExports:\n    \"The 'type' modifier cannot be used on a named export when 'export type' is used on its export statement.\",\n  TypeModifierIsUsedInTypeImports:\n    \"The 'type' modifier cannot be used on a named import when 'import type' is used on its import statement.\",\n  UnexpectedParameterModifier:\n    \"A parameter property is only allowed in a constructor implementation.\",\n  UnexpectedReadonly:\n    \"'readonly' type modifier is only permitted on array and tuple literal types.\",\n  UnexpectedTypeAnnotation: \"Did not expect a type annotation here.\",\n  UnexpectedTypeCastInParameter: \"Unexpected type cast in parameter position.\",\n  UnsupportedImportTypeArgument:\n    \"Argument in a type import must be a string literal.\",\n  UnsupportedParameterPropertyKind:\n    \"A parameter property may not be declared using a binding pattern.\",\n  UnsupportedSignatureParameterKind: ({ type }: { type: string }) =>\n    `Name in a signature must be an Identifier, ObjectPattern or ArrayPattern, instead got ${type}.`,\n  UsingDeclarationInAmbientContext: (kind: \"using\" | \"await using\") =>\n    `'${kind}' declarations are not allowed in ambient contexts.`,\n});\n\n/* eslint-disable sort-keys */\n\n// Doesn't handle \"void\" or \"null\" because those are keywords, not identifiers.\n// It also doesn't handle \"intrinsic\", since usually it's not a keyword.\nfunction keywordTypeFromName(value: string): N.TsKeywordTypeType | undefined {\n  switch (value) {\n    case \"any\":\n      return \"TSAnyKeyword\";\n    case \"boolean\":\n      return \"TSBooleanKeyword\";\n    case \"bigint\":\n      return \"TSBigIntKeyword\";\n    case \"never\":\n      return \"TSNeverKeyword\";\n    case \"number\":\n      return \"TSNumberKeyword\";\n    case \"object\":\n      return \"TSObjectKeyword\";\n    case \"string\":\n      return \"TSStringKeyword\";\n    case \"symbol\":\n      return \"TSSymbolKeyword\";\n    case \"undefined\":\n      return \"TSUndefinedKeyword\";\n    case \"unknown\":\n      return \"TSUnknownKeyword\";\n    default:\n      return undefined;\n  }\n}\n\nfunction tsIsAccessModifier(modifier: string): modifier is N.Accessibility {\n  return (\n    modifier === \"private\" || modifier === \"public\" || modifier === \"protected\"\n  );\n}\n\nfunction tsIsVarianceAnnotations(\n  modifier: string,\n): modifier is N.VarianceAnnotations {\n  return modifier === \"in\" || modifier === \"out\";\n}\n\nfunction tsIsEntityName(\n  node: N.Expression,\n): node is N.MemberExpression | N.Identifier | N.TsInstantiationExpression {\n  if (node.extra?.parenthesized) {\n    return false;\n  }\n  switch (node.type) {\n    case \"Identifier\":\n      return true;\n    case \"MemberExpression\":\n      return !node.computed && tsIsEntityName(node.object);\n    case \"TSInstantiationExpression\":\n      return tsIsEntityName(node.expression);\n    default:\n      return false;\n  }\n}\n\nexport const enum tsParseEntityNameFlags {\n  NONE = 0b00,\n  ALLOW_RESERVED_WORDS = 0b01,\n  LEADING_THIS_AS_IDENTIFIER = 0b10,\n}\n\nexport default (superClass: ClassWithMixin<typeof Parser, IJSXParserMixin>) =>\n  class TypeScriptParserMixin extends superClass implements Parser {\n    getScopeHandler(): new (...args: any) => TypeScriptScopeHandler {\n      return TypeScriptScopeHandler;\n    }\n\n    tsIsIdentifier(): boolean {\n      // TODO: actually a bit more complex in TypeScript, but shouldn't matter.\n      // See https://github.com/Microsoft/TypeScript/issues/15008\n      return tokenIsIdentifier(this.state.type);\n    }\n\n    tsTokenCanFollowModifier() {\n      return (\n        this.match(tt.bracketL) ||\n        this.match(tt.braceL) ||\n        this.match(tt.star) ||\n        this.match(tt.ellipsis) ||\n        this.match(tt.privateName) ||\n        this.isLiteralPropertyName()\n      );\n    }\n\n    tsNextTokenOnSameLineAndCanFollowModifier() {\n      this.next();\n      if (this.hasPrecedingLineBreak()) {\n        return false;\n      }\n      return this.tsTokenCanFollowModifier();\n    }\n\n    tsNextTokenCanFollowModifier() {\n      // Note: TypeScript's implementation is much more complicated because\n      // more things are considered modifiers there.\n      // This implementation only handles modifiers not handled by @babel/parser itself. And \"static\".\n      if (this.match(tt._static)) {\n        this.next();\n        return this.tsTokenCanFollowModifier();\n      }\n      return this.tsNextTokenOnSameLineAndCanFollowModifier();\n    }\n\n    /** Parses a modifier matching one the given modifier names. */\n    tsParseModifier<T extends TsModifier>(\n      allowedModifiers: T[],\n      stopOnStartOfClassStaticBlock?: boolean,\n      hasSeenStaticModifier?: boolean,\n    ): T | undefined | null {\n      if (\n        !tokenIsIdentifier(this.state.type) &&\n        this.state.type !== tt._in &&\n        this.state.type !== tt._const\n      ) {\n        return undefined;\n      }\n\n      const modifier = this.state.value;\n      if (allowedModifiers.includes(modifier)) {\n        if (hasSeenStaticModifier && this.match(tt._static)) {\n          return undefined;\n        }\n        if (stopOnStartOfClassStaticBlock && this.tsIsStartOfStaticBlocks()) {\n          return undefined;\n        }\n        if (this.tsTryParse(this.tsNextTokenCanFollowModifier.bind(this))) {\n          return modifier;\n        }\n      }\n      return undefined;\n    }\n\n    /** Parses a list of modifiers, in any order.\n     *  If you need a specific order, you must call this function multiple times:\n     *    this.tsParseModifiers({ modified: node, allowedModifiers: [\"public\"] });\n     *    this.tsParseModifiers({ modified: node, allowedModifiers: [\"abstract\", \"readonly\"] });\n     */\n    tsParseModifiers<N extends ModifierBase>(\n      {\n        allowedModifiers,\n        disallowedModifiers,\n        stopOnStartOfClassStaticBlock,\n        errorTemplate = TSErrors.InvalidModifierOnTypeMember,\n      }: {\n        allowedModifiers: readonly TsModifier[];\n        disallowedModifiers?: TsModifier[];\n        stopOnStartOfClassStaticBlock?: boolean;\n        errorTemplate?: typeof TSErrors.InvalidModifierOnTypeMember;\n      },\n      modified: N,\n    ): void {\n      const enforceOrder = (\n        loc: Position,\n        modifier: TsModifier,\n        before: TsModifier,\n        after: TsModifier,\n      ) => {\n        if (modifier === before && modified[after]) {\n          this.raise(TSErrors.InvalidModifiersOrder, loc, {\n            orderedModifiers: [before, after],\n          });\n        }\n      };\n      const incompatible = (\n        loc: Position,\n        modifier: TsModifier,\n        mod1: TsModifier,\n        mod2: TsModifier,\n      ) => {\n        if (\n          (modified[mod1] && modifier === mod2) ||\n          (modified[mod2] && modifier === mod1)\n        ) {\n          this.raise(TSErrors.IncompatibleModifiers, loc, {\n            modifiers: [mod1, mod2],\n          });\n        }\n      };\n\n      for (;;) {\n        const { startLoc } = this.state;\n        const modifier: TsModifier | undefined | null = this.tsParseModifier(\n          allowedModifiers.concat(disallowedModifiers ?? []),\n          stopOnStartOfClassStaticBlock,\n          modified.static,\n        );\n\n        if (!modifier) break;\n\n        if (tsIsAccessModifier(modifier)) {\n          if (modified.accessibility) {\n            this.raise(TSErrors.DuplicateAccessibilityModifier, startLoc, {\n              modifier,\n            });\n          } else {\n            enforceOrder(startLoc, modifier, modifier, \"override\");\n            enforceOrder(startLoc, modifier, modifier, \"static\");\n            enforceOrder(startLoc, modifier, modifier, \"readonly\");\n\n            modified.accessibility = modifier;\n          }\n        } else if (tsIsVarianceAnnotations(modifier)) {\n          if (modified[modifier]) {\n            this.raise(TSErrors.DuplicateModifier, startLoc, { modifier });\n          }\n          modified[modifier] = true;\n\n          enforceOrder(startLoc, modifier, \"in\", \"out\");\n        } else {\n          if (Object.hasOwn(modified, modifier)) {\n            this.raise(TSErrors.DuplicateModifier, startLoc, { modifier });\n          } else {\n            enforceOrder(startLoc, modifier, \"static\", \"readonly\");\n            enforceOrder(startLoc, modifier, \"static\", \"override\");\n            enforceOrder(startLoc, modifier, \"override\", \"readonly\");\n            enforceOrder(startLoc, modifier, \"abstract\", \"override\");\n\n            incompatible(startLoc, modifier, \"declare\", \"override\");\n            incompatible(startLoc, modifier, \"static\", \"abstract\");\n          }\n          modified[modifier] = true;\n        }\n\n        if (disallowedModifiers?.includes(modifier)) {\n          this.raise(errorTemplate, startLoc, {\n            modifier,\n          });\n        }\n      }\n    }\n\n    tsIsListTerminator(kind: ParsingContext): boolean {\n      switch (kind) {\n        case \"EnumMembers\":\n        case \"TypeMembers\":\n          return this.match(tt.braceR);\n        case \"HeritageClauseElement\":\n          return this.match(tt.braceL);\n        case \"TupleElementTypes\":\n          return this.match(tt.bracketR);\n        case \"TypeParametersOrArguments\":\n          return this.match(tt.gt);\n      }\n    }\n\n    tsParseList<T extends N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T,\n    ): T[] {\n      const result: T[] = [];\n      while (!this.tsIsListTerminator(kind)) {\n        // Skipping \"parseListElement\" from the TS source since that's just for error handling.\n        result.push(parseElement());\n      }\n      return result;\n    }\n\n    tsParseDelimitedList<T extends N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T,\n      refTrailingCommaPos?: {\n        value: number;\n      },\n    ): T[] {\n      return nonNull(\n        this.tsParseDelimitedListWorker(\n          kind,\n          parseElement,\n          /* expectSuccess */ true,\n          refTrailingCommaPos,\n        ),\n      );\n    }\n\n    /**\n     * If !expectSuccess, returns undefined instead of failing to parse.\n     * If expectSuccess, parseElement should always return a defined value.\n     */\n    tsParseDelimitedListWorker<T extends N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T | undefined,\n      expectSuccess: boolean,\n      refTrailingCommaPos?: {\n        value: number;\n      },\n    ): T[] | undefined {\n      const result: T[] = [];\n      let trailingCommaPos = -1;\n\n      for (;;) {\n        if (this.tsIsListTerminator(kind)) {\n          break;\n        }\n        trailingCommaPos = -1;\n\n        const element = parseElement();\n        if (element == null) {\n          return undefined;\n        }\n        result.push(element);\n\n        if (this.eat(tt.comma)) {\n          trailingCommaPos = this.state.lastTokStartLoc.index;\n          continue;\n        }\n\n        if (this.tsIsListTerminator(kind)) {\n          break;\n        }\n\n        if (expectSuccess) {\n          // This will fail with an error about a missing comma\n          this.expect(tt.comma);\n        }\n        return undefined;\n      }\n\n      if (refTrailingCommaPos) {\n        refTrailingCommaPos.value = trailingCommaPos;\n      }\n\n      return result;\n    }\n\n    tsParseBracketedList<T extends N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T,\n      bracket: boolean,\n      skipFirstToken: boolean,\n      refTrailingCommaPos?: {\n        value: number;\n      },\n    ): T[] {\n      if (!skipFirstToken) {\n        if (bracket) {\n          this.expect(tt.bracketL);\n        } else {\n          this.expect(tt.lt);\n        }\n      }\n\n      const result = this.tsParseDelimitedList(\n        kind,\n        parseElement,\n        refTrailingCommaPos,\n      );\n\n      if (bracket) {\n        this.expect(tt.bracketR);\n      } else {\n        this.expect(tt.gt);\n      }\n\n      return result;\n    }\n\n    tsParseImportType(): N.TsImportType {\n      const node = this.startNode<N.TsImportType>();\n      this.expect(tt._import);\n      this.expect(tt.parenL);\n      if (!this.match(tt.string)) {\n        this.raise(TSErrors.UnsupportedImportTypeArgument, this.state.startLoc);\n        if (process.env.BABEL_8_BREAKING) {\n          // Consume as an non-conditional type so that we can recover from this error\n          node.argument = this.tsParseNonConditionalType() as any;\n        } else {\n          node.argument = super.parseExprAtom() as any;\n        }\n      } else {\n        if (process.env.BABEL_8_BREAKING) {\n          node.argument = this.tsParseLiteralTypeNode();\n        } else {\n          // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n          node.argument = this.parseStringLiteral(this.state.value);\n        }\n      }\n      if (this.eat(tt.comma)) {\n        node.options = this.tsParseImportTypeOptions();\n      } else {\n        node.options = null;\n      }\n      this.expect(tt.parenR);\n\n      if (this.eat(tt.dot)) {\n        // In this instance, the entity name will actually itself be a\n        // qualifier, so allow it to be a reserved word as well.\n        node.qualifier = this.tsParseEntityName(\n          tsParseEntityNameFlags.ALLOW_RESERVED_WORDS |\n            tsParseEntityNameFlags.LEADING_THIS_AS_IDENTIFIER,\n        );\n      }\n      if (this.match(tt.lt)) {\n        if (process.env.BABEL_8_BREAKING) {\n          node.typeArguments = this.tsParseTypeArguments();\n        } else {\n          node.typeParameters = this.tsParseTypeArguments();\n        }\n      }\n      return this.finishNode(node, \"TSImportType\");\n    }\n\n    tsParseImportTypeOptions(): N.ObjectExpression {\n      const node = this.startNode<N.ObjectExpression>();\n      this.expect(tt.braceL);\n      const withProperty = this.startNode<N.ObjectProperty>();\n      if (this.isContextual(tt._with)) {\n        withProperty.method = false;\n        withProperty.key = this.parseIdentifier(true);\n        withProperty.computed = false;\n        withProperty.shorthand = false;\n      } else {\n        this.unexpected(null, tt._with);\n      }\n      this.expect(tt.colon);\n      withProperty.value = this.tsParseImportTypeWithPropertyValue();\n      node.properties = [this.finishObjectProperty(withProperty)];\n      this.eat(tt.comma);\n      this.expect(tt.braceR);\n      return this.finishNode(node, \"ObjectExpression\");\n    }\n\n    tsParseImportTypeWithPropertyValue(): N.ObjectExpression {\n      const node = this.startNode<N.ObjectExpression>();\n      const properties = [];\n      this.expect(tt.braceL);\n      while (!this.match(tt.braceR)) {\n        const type = this.state.type;\n        if (tokenIsIdentifier(type) || type === tt.string) {\n          properties.push(super.parsePropertyDefinition(null));\n        } else {\n          this.unexpected();\n        }\n        this.eat(tt.comma);\n      }\n      node.properties = properties;\n      this.next(); // eat }\n      return this.finishNode(node, \"ObjectExpression\");\n    }\n\n    tsParseEntityName(flags: tsParseEntityNameFlags): N.TsEntityName {\n      let entity: N.TsEntityName;\n      if (\n        flags & tsParseEntityNameFlags.ALLOW_RESERVED_WORDS &&\n        this.match(tt._this)\n      ) {\n        if (flags & tsParseEntityNameFlags.LEADING_THIS_AS_IDENTIFIER) {\n          entity = this.parseIdentifier(true);\n        } else {\n          const node = this.startNode<N.ThisExpression>();\n          this.next();\n          entity = this.finishNode(node, \"ThisExpression\");\n        }\n      } else {\n        entity = this.parseIdentifier(\n          !!(flags & tsParseEntityNameFlags.ALLOW_RESERVED_WORDS),\n        );\n      }\n      while (this.eat(tt.dot)) {\n        const node: Undone<N.TsQualifiedName> =\n          this.startNodeAtNode<N.TsQualifiedName>(entity);\n        node.left = entity;\n        node.right = this.parseIdentifier(\n          !!(flags & tsParseEntityNameFlags.ALLOW_RESERVED_WORDS),\n        );\n        entity = this.finishNode(node, \"TSQualifiedName\");\n      }\n      return entity;\n    }\n\n    tsParseTypeReference(): N.TsTypeReference {\n      const node = this.startNode<N.TsTypeReference>();\n      node.typeName = this.tsParseEntityName(\n        tsParseEntityNameFlags.ALLOW_RESERVED_WORDS,\n      );\n      if (!this.hasPrecedingLineBreak() && this.match(tt.lt)) {\n        if (process.env.BABEL_8_BREAKING) {\n          node.typeArguments = this.tsParseTypeArguments();\n        } else {\n          node.typeParameters = this.tsParseTypeArguments();\n        }\n      }\n      return this.finishNode(node, \"TSTypeReference\");\n    }\n\n    tsParseThisTypePredicate(lhs: N.TsThisType): N.TsTypePredicate {\n      this.next();\n      const node = this.startNodeAtNode<N.TsTypePredicate>(lhs);\n      node.parameterName = lhs;\n      node.typeAnnotation = this.tsParseTypeAnnotation(/* eatColon */ false);\n      node.asserts = false;\n      return this.finishNode(node, \"TSTypePredicate\");\n    }\n\n    tsParseThisTypeNode(): N.TsThisType {\n      const node = this.startNode<N.TsThisType>();\n      this.next();\n      return this.finishNode(node, \"TSThisType\");\n    }\n\n    tsParseTypeQuery(): N.TsTypeQuery {\n      const node = this.startNode<N.TsTypeQuery>();\n      this.expect(tt._typeof);\n      if (this.match(tt._import)) {\n        node.exprName = this.tsParseImportType();\n      } else {\n        if (process.env.BABEL_8_BREAKING) {\n          node.exprName = this.tsParseEntityName(\n            tsParseEntityNameFlags.ALLOW_RESERVED_WORDS,\n          );\n        } else {\n          node.exprName = this.tsParseEntityName(\n            tsParseEntityNameFlags.ALLOW_RESERVED_WORDS |\n              tsParseEntityNameFlags.LEADING_THIS_AS_IDENTIFIER,\n          );\n        }\n      }\n      if (!this.hasPrecedingLineBreak() && this.match(tt.lt)) {\n        if (process.env.BABEL_8_BREAKING) {\n          node.typeArguments = this.tsParseTypeArguments();\n        } else {\n          node.typeParameters = this.tsParseTypeArguments();\n        }\n      }\n      return this.finishNode(node, \"TSTypeQuery\");\n    }\n\n    tsParseInOutModifiers = this.tsParseModifiers.bind(this, {\n      allowedModifiers: [\"in\", \"out\"],\n      disallowedModifiers: [\n        \"const\",\n        \"public\",\n        \"private\",\n        \"protected\",\n        \"readonly\",\n        \"declare\",\n        \"abstract\",\n        \"override\",\n      ],\n      errorTemplate: TSErrors.InvalidModifierOnTypeParameter,\n    });\n\n    tsParseConstModifier = this.tsParseModifiers.bind(this, {\n      allowedModifiers: [\"const\"],\n      // for better error recovery\n      disallowedModifiers: [\"in\", \"out\"],\n      errorTemplate: TSErrors.InvalidModifierOnTypeParameterPositions,\n    });\n\n    tsParseInOutConstModifiers = this.tsParseModifiers.bind(this, {\n      allowedModifiers: [\"in\", \"out\", \"const\"],\n      disallowedModifiers: [\n        \"public\",\n        \"private\",\n        \"protected\",\n        \"readonly\",\n        \"declare\",\n        \"abstract\",\n        \"override\",\n      ],\n      errorTemplate: TSErrors.InvalidModifierOnTypeParameter,\n    });\n\n    tsParseTypeParameter(\n      parseModifiers: (node: Undone<N.TsTypeParameter>) => void,\n    ): N.TsTypeParameter {\n      const node = this.startNode<N.TsTypeParameter>();\n\n      parseModifiers(node);\n\n      node.name = this.tsParseTypeParameterName();\n      node.constraint = this.tsEatThenParseType(tt._extends);\n      node.default = this.tsEatThenParseType(tt.eq);\n      return this.finishNode(node, \"TSTypeParameter\");\n    }\n\n    tsTryParseTypeParameters(\n      parseModifiers: (node: N.TsTypeParameter) => void,\n    ): N.TsTypeParameterDeclaration | undefined | null {\n      if (this.match(tt.lt)) {\n        return this.tsParseTypeParameters(parseModifiers);\n      }\n    }\n\n    tsParseTypeParameters(parseModifiers: (node: N.TsTypeParameter) => void) {\n      const node = this.startNode<N.TsTypeParameterDeclaration>();\n\n      if (this.match(tt.lt) || this.match(tt.jsxTagStart)) {\n        this.next();\n      } else {\n        this.unexpected();\n      }\n\n      const refTrailingCommaPos = { value: -1 };\n\n      node.params = this.tsParseBracketedList(\n        \"TypeParametersOrArguments\",\n        this.tsParseTypeParameter.bind(this, parseModifiers),\n        /* bracket */ false,\n        /* skipFirstToken */ true,\n        refTrailingCommaPos,\n      );\n      if (node.params.length === 0) {\n        this.raise(TSErrors.EmptyTypeParameters, node);\n      }\n      if (refTrailingCommaPos.value !== -1) {\n        this.addExtra(node, \"trailingComma\", refTrailingCommaPos.value);\n      }\n      return this.finishNode(node, \"TSTypeParameterDeclaration\");\n    }\n\n    // Note: In TypeScript implementation we must provide `yieldContext` and `awaitContext`,\n    // but here it's always false, because this is only used for types.\n    tsFillSignature(\n      returnToken: TokenType,\n      signature: Undone<N.TsSignatureDeclaration>,\n    ): void {\n      // Arrow fns *must* have return token (`=>`). Normal functions can omit it.\n      const returnTokenRequired = returnToken === tt.arrow;\n\n      // https://github.com/babel/babel/issues/9231\n      const paramsKey = process.env.BABEL_8_BREAKING ? \"params\" : \"parameters\";\n      const returnTypeKey = process.env.BABEL_8_BREAKING\n        ? \"returnType\"\n        : \"typeAnnotation\";\n\n      signature.typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseConstModifier,\n      );\n      this.expect(tt.parenL);\n      signature[paramsKey] = this.tsParseBindingListForSignature();\n      if (returnTokenRequired) {\n        signature[returnTypeKey] =\n          this.tsParseTypeOrTypePredicateAnnotation(returnToken);\n      } else if (this.match(returnToken)) {\n        signature[returnTypeKey] =\n          this.tsParseTypeOrTypePredicateAnnotation(returnToken);\n      }\n    }\n\n    tsParseBindingListForSignature(): Array<\n      | N.Identifier\n      | N.RestElement\n      | N.ObjectPattern\n      | N.ArrayPattern\n      | N.VoidPattern\n    > {\n      const list = super.parseBindingList(\n        tt.parenR,\n        charCodes.rightParenthesis,\n        ParseBindingListFlags.IS_FUNCTION_PARAMS,\n      );\n      for (const pattern of list) {\n        const { type } = pattern;\n        if (type === \"AssignmentPattern\" || type === \"TSParameterProperty\") {\n          this.raise(TSErrors.UnsupportedSignatureParameterKind, pattern, {\n            type,\n          });\n        }\n      }\n      return list as Exclude<\n        (typeof list)[0],\n        N.AssignmentPattern | N.TSParameterProperty\n      >[];\n    }\n\n    tsParseTypeMemberSemicolon(): void {\n      if (!this.eat(tt.comma) && !this.isLineTerminator()) {\n        this.expect(tt.semi);\n      }\n    }\n\n    tsParseSignatureMember(\n      kind: \"TSCallSignatureDeclaration\" | \"TSConstructSignatureDeclaration\",\n      node: Undone<\n        N.TsCallSignatureDeclaration | N.TsConstructSignatureDeclaration\n      >,\n    ): N.TsCallSignatureDeclaration | N.TsConstructSignatureDeclaration {\n      this.tsFillSignature(tt.colon, node);\n      this.tsParseTypeMemberSemicolon();\n      return this.finishNode(node, kind);\n    }\n\n    tsIsUnambiguouslyIndexSignature() {\n      this.next(); // Skip '{'\n      if (tokenIsIdentifier(this.state.type)) {\n        this.next();\n        return this.match(tt.colon);\n      }\n      return false;\n    }\n\n    tsTryParseIndexSignature(\n      node: Undone<N.TsIndexSignature>,\n    ): N.TsIndexSignature | undefined {\n      if (\n        !(\n          this.match(tt.bracketL) &&\n          this.tsLookAhead(this.tsIsUnambiguouslyIndexSignature.bind(this))\n        )\n      ) {\n        return;\n      }\n\n      this.expect(tt.bracketL);\n      const id = this.parseIdentifier();\n      id.typeAnnotation = this.tsParseTypeAnnotation();\n      this.resetEndLocation(id); // set end position to end of type\n\n      this.expect(tt.bracketR);\n      node.parameters = [id];\n\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) node.typeAnnotation = type;\n      this.tsParseTypeMemberSemicolon();\n      return this.finishNode(node, \"TSIndexSignature\");\n    }\n\n    tsParsePropertyOrMethodSignature(\n      node: Undone<N.TsPropertySignature | N.TsMethodSignature>,\n      readonly: boolean,\n    ): N.TsPropertySignature | N.TsMethodSignature {\n      if (this.eat(tt.question)) node.optional = true;\n\n      if (this.match(tt.parenL) || this.match(tt.lt)) {\n        if (readonly) {\n          this.raise(TSErrors.ReadonlyForMethodSignature, node);\n        }\n        const method = node as Undone<N.TsMethodSignature>;\n        if (method.kind && this.match(tt.lt)) {\n          this.raise(\n            TSErrors.AccessorCannotHaveTypeParameters,\n            this.state.curPosition(),\n          );\n        }\n        this.tsFillSignature(tt.colon, method);\n        this.tsParseTypeMemberSemicolon();\n        const paramsKey = process.env.BABEL_8_BREAKING\n          ? \"params\"\n          : \"parameters\";\n        const returnTypeKey = process.env.BABEL_8_BREAKING\n          ? \"returnType\"\n          : \"typeAnnotation\";\n        if (method.kind === \"get\") {\n          if (method[paramsKey].length > 0) {\n            this.raise(Errors.BadGetterArity, this.state.curPosition());\n            if (this.isThisParam(method[paramsKey][0])) {\n              this.raise(\n                TSErrors.AccessorCannotDeclareThisParameter,\n                this.state.curPosition(),\n              );\n            }\n          }\n        } else if (method.kind === \"set\") {\n          if (method[paramsKey].length !== 1) {\n            this.raise(Errors.BadSetterArity, this.state.curPosition());\n          } else {\n            const firstParameter = method[paramsKey][0];\n            if (this.isThisParam(firstParameter)) {\n              this.raise(\n                TSErrors.AccessorCannotDeclareThisParameter,\n                this.state.curPosition(),\n              );\n            }\n            if (\n              firstParameter.type === \"Identifier\" &&\n              firstParameter.optional\n            ) {\n              this.raise(\n                TSErrors.SetAccessorCannotHaveOptionalParameter,\n                this.state.curPosition(),\n              );\n            }\n            if (firstParameter.type === \"RestElement\") {\n              this.raise(\n                TSErrors.SetAccessorCannotHaveRestParameter,\n                this.state.curPosition(),\n              );\n            }\n          }\n          if (method[returnTypeKey]) {\n            this.raise(\n              TSErrors.SetAccessorCannotHaveReturnType,\n              method[returnTypeKey],\n            );\n          }\n        } else {\n          method.kind = \"method\";\n        }\n        return this.finishNode(method, \"TSMethodSignature\");\n      } else {\n        const property = node as Undone<N.TsPropertySignature>;\n        if (readonly) property.readonly = true;\n        const type = this.tsTryParseTypeAnnotation();\n        if (type) property.typeAnnotation = type;\n        this.tsParseTypeMemberSemicolon();\n        return this.finishNode(property, \"TSPropertySignature\");\n      }\n    }\n\n    tsParseTypeMember(): N.TsTypeElement {\n      const node: any = this.startNode();\n\n      if (this.match(tt.parenL) || this.match(tt.lt)) {\n        return this.tsParseSignatureMember(\"TSCallSignatureDeclaration\", node);\n      }\n\n      if (this.match(tt._new)) {\n        const id = this.startNode<N.Identifier>();\n        this.next();\n        if (this.match(tt.parenL) || this.match(tt.lt)) {\n          return this.tsParseSignatureMember(\n            \"TSConstructSignatureDeclaration\",\n            node,\n          );\n        } else {\n          node.key = this.createIdentifier(id, \"new\");\n          return this.tsParsePropertyOrMethodSignature(node, false);\n        }\n      }\n\n      this.tsParseModifiers(\n        {\n          allowedModifiers: [\"readonly\"],\n          disallowedModifiers: [\n            \"declare\",\n            \"abstract\",\n            \"private\",\n            \"protected\",\n            \"public\",\n            \"static\",\n            \"override\",\n          ],\n        },\n        node,\n      );\n\n      const idx = this.tsTryParseIndexSignature(node);\n      if (idx) {\n        return idx;\n      }\n\n      super.parsePropertyName(node);\n      if (\n        !node.computed &&\n        node.key.type === \"Identifier\" &&\n        (node.key.name === \"get\" || node.key.name === \"set\") &&\n        this.tsTokenCanFollowModifier()\n      ) {\n        node.kind = node.key.name;\n        super.parsePropertyName(node);\n        // Allow < here so that we can recover from get key<T> later\n        if (!this.match(tt.parenL) && !this.match(tt.lt)) {\n          this.unexpected(null, tt.parenL);\n        }\n      }\n      return this.tsParsePropertyOrMethodSignature(node, !!node.readonly);\n    }\n\n    tsParseTypeLiteral(): N.TsTypeLiteral {\n      const node = this.startNode<N.TsTypeLiteral>();\n      node.members = this.tsParseObjectTypeMembers();\n      return this.finishNode(node, \"TSTypeLiteral\");\n    }\n\n    tsParseObjectTypeMembers(): Array<N.TsTypeElement> {\n      this.expect(tt.braceL);\n      const members = this.tsParseList(\n        \"TypeMembers\",\n        this.tsParseTypeMember.bind(this),\n      );\n      this.expect(tt.braceR);\n      return members;\n    }\n\n    tsIsStartOfMappedType(): boolean {\n      this.next();\n      if (this.eat(tt.plusMin)) {\n        return this.isContextual(tt._readonly);\n      }\n      if (this.isContextual(tt._readonly)) {\n        this.next();\n      }\n      if (!this.match(tt.bracketL)) {\n        return false;\n      }\n      this.next();\n      if (!this.tsIsIdentifier()) {\n        return false;\n      }\n      this.next();\n      return this.match(tt._in);\n    }\n\n    tsParseMappedType(): N.TsMappedType {\n      const node = this.startNode<N.TsMappedType>();\n\n      this.expect(tt.braceL);\n\n      if (this.match(tt.plusMin)) {\n        node.readonly = this.state.value;\n        this.next();\n        this.expectContextual(tt._readonly);\n      } else if (this.eatContextual(tt._readonly)) {\n        node.readonly = true;\n      }\n\n      this.expect(tt.bracketL);\n      if (process.env.BABEL_8_BREAKING) {\n        node.key = this.tsParseTypeParameterName() as N.Identifier;\n        node.constraint = this.tsExpectThenParseType(tt._in);\n      } else {\n        const typeParameter = this.startNode<N.TsTypeParameter>();\n        typeParameter.name = this.tsParseTypeParameterName();\n        typeParameter.constraint = this.tsExpectThenParseType(tt._in);\n        // @ts-expect-error for Babel 7\n        node.typeParameter = this.finishNode(typeParameter, \"TSTypeParameter\");\n      }\n      node.nameType = this.eatContextual(tt._as) ? this.tsParseType() : null;\n\n      this.expect(tt.bracketR);\n\n      if (this.match(tt.plusMin)) {\n        node.optional = this.state.value;\n        this.next();\n        this.expect(tt.question);\n      } else if (this.eat(tt.question)) {\n        node.optional = true;\n      }\n\n      node.typeAnnotation = this.tsTryParseType();\n      this.semicolon();\n      this.expect(tt.braceR);\n\n      return this.finishNode(node, \"TSMappedType\");\n    }\n\n    tsParseTupleType(): N.TsTupleType {\n      const node = this.startNode<N.TsTupleType>();\n      node.elementTypes = this.tsParseBracketedList(\n        \"TupleElementTypes\",\n        this.tsParseTupleElementType.bind(this),\n        /* bracket */ true,\n        /* skipFirstToken */ false,\n      );\n\n      // Validate the elementTypes to ensure that no mandatory elements\n      // follow optional elements\n      let seenOptionalElement = false;\n      node.elementTypes.forEach(elementNode => {\n        const { type } = elementNode;\n\n        if (\n          seenOptionalElement &&\n          type !== \"TSRestType\" &&\n          type !== \"TSOptionalType\" &&\n          !(type === \"TSNamedTupleMember\" && elementNode.optional)\n        ) {\n          this.raise(TSErrors.OptionalTypeBeforeRequired, elementNode);\n        }\n\n        seenOptionalElement ||=\n          (type === \"TSNamedTupleMember\" && elementNode.optional) ||\n          type === \"TSOptionalType\";\n      });\n\n      return this.finishNode(node, \"TSTupleType\");\n    }\n\n    tsParseTupleElementType(): N.TsNamedTupleMember | N.TsType {\n      // parses `...TsType[]`\n\n      const restStartLoc = this.state.startLoc;\n\n      const rest = this.eat(tt.ellipsis);\n      const { startLoc } = this.state;\n\n      let labeled: boolean;\n      let label: N.Identifier;\n      let optional: boolean;\n      let type: N.TsNamedTupleMember | N.TsType;\n\n      const isWord = tokenIsKeywordOrIdentifier(this.state.type);\n      const chAfterWord = isWord ? this.lookaheadCharCode() : null;\n      if (chAfterWord === charCodes.colon) {\n        labeled = true;\n        optional = false;\n        label = this.parseIdentifier(true);\n        this.expect(tt.colon);\n        type = this.tsParseType();\n      } else if (chAfterWord === charCodes.questionMark) {\n        optional = true;\n        const wordName = this.state.value;\n        const typeOrLabel = this.tsParseNonArrayType();\n\n        if (this.lookaheadCharCode() === charCodes.colon) {\n          labeled = true;\n          label = this.createIdentifier(\n            this.startNodeAt<N.Identifier>(startLoc),\n            wordName,\n          );\n          this.expect(tt.question);\n          this.expect(tt.colon);\n          type = this.tsParseType();\n        } else {\n          labeled = false;\n          type = typeOrLabel;\n          this.expect(tt.question);\n        }\n      } else {\n        type = this.tsParseType();\n        optional = this.eat(tt.question);\n        // In this case (labeled === true) could be only in invalid label.\n        // E.g. [x.y:type]\n        // An error is raised while processing node.\n        labeled = this.eat(tt.colon);\n      }\n\n      if (labeled) {\n        let labeledNode: Undone<N.TsNamedTupleMember>;\n        if (label) {\n          labeledNode = this.startNodeAt<N.TsNamedTupleMember>(startLoc);\n          labeledNode.optional = optional;\n          labeledNode.label = label;\n          labeledNode.elementType = type;\n\n          if (this.eat(tt.question)) {\n            labeledNode.optional = true;\n            this.raise(\n              TSErrors.TupleOptionalAfterType,\n              this.state.lastTokStartLoc,\n            );\n          }\n        } else {\n          labeledNode = this.startNodeAt<N.TsNamedTupleMember>(startLoc);\n          labeledNode.optional = optional;\n          this.raise(TSErrors.InvalidTupleMemberLabel, type);\n          // @ts-expect-error This produces an invalid AST, but at least we don't drop\n          // nodes representing the invalid source.\n          labeledNode.label = type;\n          labeledNode.elementType = this.tsParseType();\n        }\n        type = this.finishNode(labeledNode, \"TSNamedTupleMember\");\n      } else if (optional) {\n        const optionalTypeNode = this.startNodeAt<N.TsOptionalType>(startLoc);\n        optionalTypeNode.typeAnnotation = type;\n        type = this.finishNode(optionalTypeNode, \"TSOptionalType\");\n      }\n\n      if (rest) {\n        const restNode = this.startNodeAt<N.TsRestType>(restStartLoc);\n        restNode.typeAnnotation = type;\n        type = this.finishNode(restNode, \"TSRestType\");\n      }\n\n      return type;\n    }\n\n    tsParseParenthesizedType(): N.TsParenthesizedType {\n      const node = this.startNode<N.TsParenthesizedType>();\n      this.expect(tt.parenL);\n      node.typeAnnotation = this.tsParseType();\n      this.expect(tt.parenR);\n      return this.finishNode(node, \"TSParenthesizedType\");\n    }\n\n    tsParseFunctionOrConstructorType(\n      type: \"TSFunctionType\" | \"TSConstructorType\",\n      abstract?: boolean,\n    ): N.TsFunctionOrConstructorType {\n      const node = this.startNode<\n        N.TsFunctionOrConstructorType | N.TsConstructorType\n      >();\n      if (type === \"TSConstructorType\") {\n        (node as Undone<N.TsConstructorType>).abstract = !!abstract;\n        if (abstract) this.next();\n        this.next(); // eat `new`\n      }\n      this.tsInAllowConditionalTypesContext(() =>\n        this.tsFillSignature(tt.arrow, node),\n      );\n      return this.finishNode(node, type);\n    }\n\n    tsParseLiteralTypeNode(): N.TsLiteralType {\n      const node = this.startNode<N.TsLiteralType>();\n      switch (this.state.type) {\n        case tt.num:\n        case tt.bigint:\n        case tt.string:\n        case tt._true:\n        case tt._false:\n          // For compatibility to estree we cannot call parseLiteral directly here\n          // @ts-expect-error refine typings\n          node.literal = super.parseExprAtom();\n          break;\n        default:\n          this.unexpected();\n      }\n      return this.finishNode(node, \"TSLiteralType\");\n    }\n\n    tsParseTemplateLiteralType(): N.TsTemplateLiteralType | N.TsLiteralType {\n      if (process.env.BABEL_8_BREAKING) {\n        const startLoc = this.state.startLoc;\n        let curElt = this.parseTemplateElement(false);\n        const quasis = [curElt];\n        if (curElt.tail) {\n          const node = this.startNodeAt<N.TsLiteralType>(startLoc);\n          const literal = this.startNodeAt<N.TemplateLiteral>(startLoc);\n          literal.expressions = [];\n          literal.quasis = quasis;\n          node.literal = this.finishNode(literal, \"TemplateLiteral\");\n          return this.finishNode(node, \"TSLiteralType\");\n        } else {\n          const substitutions: N.TsType[] = [];\n          while (!curElt.tail) {\n            substitutions.push(this.tsParseType());\n            this.readTemplateContinuation();\n            quasis.push((curElt = this.parseTemplateElement(false)));\n          }\n          const node = this.startNodeAt<N.TsTemplateLiteralType>(startLoc);\n          node.types = substitutions;\n          node.quasis = quasis;\n          return this.finishNode(node, \"TSTemplateLiteralType\");\n        }\n      } else {\n        const node = this.startNode<N.TsLiteralType>();\n        node.literal = super.parseTemplate(false);\n        return this.finishNode(node, \"TSLiteralType\");\n      }\n    }\n\n    parseTemplateSubstitution(): N.TsType | N.Expression {\n      if (this.state.inType) return this.tsParseType();\n      return super.parseTemplateSubstitution();\n    }\n\n    tsParseThisTypeOrThisTypePredicate(): N.TsThisType | N.TsTypePredicate {\n      const thisKeyword = this.tsParseThisTypeNode();\n      if (this.isContextual(tt._is) && !this.hasPrecedingLineBreak()) {\n        return this.tsParseThisTypePredicate(thisKeyword);\n      } else {\n        return thisKeyword;\n      }\n    }\n\n    tsParseNonArrayType(): N.TsType {\n      switch (this.state.type) {\n        case tt.string:\n        case tt.num:\n        case tt.bigint:\n        case tt._true:\n        case tt._false:\n          return this.tsParseLiteralTypeNode();\n        case tt.plusMin:\n          if (this.state.value === \"-\") {\n            const node = this.startNode<N.TsLiteralType>();\n            const nextToken = this.lookahead();\n            if (nextToken.type !== tt.num && nextToken.type !== tt.bigint) {\n              this.unexpected();\n            }\n            node.literal = this.parseMaybeUnary() as N.UnaryExpression;\n            return this.finishNode(node, \"TSLiteralType\");\n          }\n          break;\n        case tt._this:\n          return this.tsParseThisTypeOrThisTypePredicate();\n        case tt._typeof:\n          return this.tsParseTypeQuery();\n        case tt._import:\n          return this.tsParseImportType();\n        case tt.braceL:\n          return this.tsLookAhead(this.tsIsStartOfMappedType.bind(this))\n            ? this.tsParseMappedType()\n            : this.tsParseTypeLiteral();\n        case tt.bracketL:\n          return this.tsParseTupleType();\n        case tt.parenL:\n          if (process.env.BABEL_8_BREAKING) {\n            if (\n              !(this.optionFlags & OptionFlags.CreateParenthesizedExpressions)\n            ) {\n              const startLoc = this.state.startLoc;\n              this.next();\n              const type = this.tsParseType();\n              this.expect(tt.parenR);\n              this.addExtra(type, \"parenthesized\", true);\n              this.addExtra(type, \"parenStart\", startLoc.index);\n              return type;\n            }\n          }\n\n          return this.tsParseParenthesizedType();\n        case tt.templateNonTail:\n        case tt.templateTail:\n          return this.tsParseTemplateLiteralType();\n        default: {\n          const { type } = this.state;\n          if (\n            tokenIsIdentifier(type) ||\n            type === tt._void ||\n            type === tt._null\n          ) {\n            const nodeType =\n              type === tt._void\n                ? \"TSVoidKeyword\"\n                : type === tt._null\n                  ? \"TSNullKeyword\"\n                  : keywordTypeFromName(this.state.value);\n            if (\n              nodeType !== undefined &&\n              this.lookaheadCharCode() !== charCodes.dot\n            ) {\n              const node = this.startNode<N.TsKeywordType>();\n              this.next();\n              return this.finishNode(node, nodeType);\n            }\n            return this.tsParseTypeReference();\n          }\n        }\n      }\n\n      this.unexpected();\n    }\n\n    tsParseArrayTypeOrHigher(): N.TsType {\n      const { startLoc } = this.state;\n      let type = this.tsParseNonArrayType();\n      while (!this.hasPrecedingLineBreak() && this.eat(tt.bracketL)) {\n        if (this.match(tt.bracketR)) {\n          const node = this.startNodeAt<N.TsArrayType>(startLoc);\n          node.elementType = type;\n          this.expect(tt.bracketR);\n          type = this.finishNode(node, \"TSArrayType\");\n        } else {\n          const node = this.startNodeAt<N.TsIndexedAccessType>(startLoc);\n          node.objectType = type;\n          node.indexType = this.tsParseType();\n          this.expect(tt.bracketR);\n          type = this.finishNode(node, \"TSIndexedAccessType\");\n        }\n      }\n      return type;\n    }\n\n    tsParseTypeOperator(): N.TsTypeOperator {\n      const node = this.startNode<N.TsTypeOperator>();\n      const operator = this.state.value;\n      this.next(); // eat operator\n      node.operator = operator;\n      node.typeAnnotation = this.tsParseTypeOperatorOrHigher();\n\n      if (operator === \"readonly\") {\n        this.tsCheckTypeAnnotationForReadOnly(node);\n      }\n\n      return this.finishNode(node, \"TSTypeOperator\");\n    }\n\n    tsCheckTypeAnnotationForReadOnly(node: Undone<N.TsTypeOperator>) {\n      switch (node.typeAnnotation.type) {\n        case \"TSTupleType\":\n        case \"TSArrayType\":\n          return;\n        default:\n          this.raise(TSErrors.UnexpectedReadonly, node);\n      }\n    }\n\n    tsParseInferType(): N.TsInferType {\n      const node = this.startNode<N.TsInferType>();\n      this.expectContextual(tt._infer);\n      const typeParameter = this.startNode<N.TsTypeParameter>();\n      typeParameter.name = this.tsParseTypeParameterName();\n      typeParameter.constraint = this.tsTryParse(() =>\n        this.tsParseConstraintForInferType(),\n      );\n      node.typeParameter = this.finishNode(typeParameter, \"TSTypeParameter\");\n      return this.finishNode(node, \"TSInferType\");\n    }\n\n    tsParseConstraintForInferType() {\n      if (this.eat(tt._extends)) {\n        const constraint = this.tsInDisallowConditionalTypesContext(() =>\n          this.tsParseType(),\n        );\n        if (\n          this.state.inDisallowConditionalTypesContext ||\n          !this.match(tt.question)\n        ) {\n          return constraint;\n        }\n      }\n    }\n\n    tsParseTypeOperatorOrHigher(): N.TsType {\n      const isTypeOperator =\n        tokenIsTSTypeOperator(this.state.type) && !this.state.containsEsc;\n      return isTypeOperator\n        ? this.tsParseTypeOperator()\n        : this.isContextual(tt._infer)\n          ? this.tsParseInferType()\n          : this.tsInAllowConditionalTypesContext(() =>\n              this.tsParseArrayTypeOrHigher(),\n            );\n    }\n\n    tsParseUnionOrIntersectionType(\n      kind: \"TSUnionType\" | \"TSIntersectionType\",\n      parseConstituentType: () => N.TsType,\n      operator: TokenType,\n    ): N.TsType {\n      const node = this.startNode<N.TsUnionType | N.TsIntersectionType>();\n      const hasLeadingOperator = this.eat(operator);\n      const types = [];\n      do {\n        types.push(parseConstituentType());\n      } while (this.eat(operator));\n      if (types.length === 1 && !hasLeadingOperator) {\n        return types[0];\n      }\n      node.types = types;\n      return this.finishNode(node, kind);\n    }\n\n    tsParseIntersectionTypeOrHigher(): N.TsType {\n      return this.tsParseUnionOrIntersectionType(\n        \"TSIntersectionType\",\n        this.tsParseTypeOperatorOrHigher.bind(this),\n        tt.bitwiseAND,\n      );\n    }\n\n    tsParseUnionTypeOrHigher() {\n      return this.tsParseUnionOrIntersectionType(\n        \"TSUnionType\",\n        this.tsParseIntersectionTypeOrHigher.bind(this),\n        tt.bitwiseOR,\n      );\n    }\n\n    tsIsStartOfFunctionType() {\n      if (this.match(tt.lt)) {\n        return true;\n      }\n      return (\n        this.match(tt.parenL) &&\n        this.tsLookAhead(this.tsIsUnambiguouslyStartOfFunctionType.bind(this))\n      );\n    }\n\n    tsSkipParameterStart(): boolean {\n      if (tokenIsIdentifier(this.state.type) || this.match(tt._this)) {\n        this.next();\n        return true;\n      }\n\n      if (this.match(tt.braceL)) {\n        // Return true if we can parse an object pattern without errors\n        const { errors } = this.state;\n        const previousErrorCount = errors.length;\n        try {\n          this.parseObjectLike(tt.braceR, true);\n          return errors.length === previousErrorCount;\n        } catch {\n          return false;\n        }\n      }\n\n      if (this.match(tt.bracketL)) {\n        this.next();\n        // Return true if we can parse an array pattern without errors\n        const { errors } = this.state;\n        const previousErrorCount = errors.length;\n        try {\n          super.parseBindingList(\n            tt.bracketR,\n            charCodes.rightSquareBracket,\n            ParseBindingListFlags.ALLOW_EMPTY,\n          );\n          return errors.length === previousErrorCount;\n        } catch {\n          return false;\n        }\n      }\n\n      return false;\n    }\n\n    tsIsUnambiguouslyStartOfFunctionType(): boolean {\n      this.next();\n      if (this.match(tt.parenR) || this.match(tt.ellipsis)) {\n        // ( )\n        // ( ...\n        return true;\n      }\n      if (this.tsSkipParameterStart()) {\n        if (\n          this.match(tt.colon) ||\n          this.match(tt.comma) ||\n          this.match(tt.question) ||\n          this.match(tt.eq)\n        ) {\n          // ( xxx :\n          // ( xxx ,\n          // ( xxx ?\n          // ( xxx =\n          return true;\n        }\n        if (this.match(tt.parenR)) {\n          this.next();\n          if (this.match(tt.arrow)) {\n            // ( xxx ) =>\n            return true;\n          }\n        }\n      }\n      return false;\n    }\n\n    tsParseTypeOrTypePredicateAnnotation(\n      returnToken: TokenType,\n    ): N.TsTypeAnnotation {\n      return this.tsInType(() => {\n        const t = this.startNode<N.TsTypeAnnotation>();\n        this.expect(returnToken);\n\n        const node = this.startNode<N.TsTypePredicate>();\n\n        const asserts = !!this.tsTryParse(\n          this.tsParseTypePredicateAsserts.bind(this),\n        );\n\n        if (asserts && this.match(tt._this)) {\n          // When asserts is false, thisKeyword is handled by tsParseNonArrayType\n          // : asserts this is type\n          let thisTypePredicate = this.tsParseThisTypeOrThisTypePredicate();\n          // if it turns out to be a `TSThisType`, wrap it with `TSTypePredicate`\n          // : asserts this\n          if (thisTypePredicate.type === \"TSThisType\") {\n            node.parameterName = thisTypePredicate;\n            node.asserts = true;\n            (node as N.TsTypePredicate).typeAnnotation = null;\n            thisTypePredicate = this.finishNode(node, \"TSTypePredicate\");\n          } else {\n            this.resetStartLocationFromNode(thisTypePredicate, node);\n            thisTypePredicate.asserts = true;\n          }\n          t.typeAnnotation = thisTypePredicate;\n          return this.finishNode(t, \"TSTypeAnnotation\");\n        }\n\n        const typePredicateVariable =\n          this.tsIsIdentifier() &&\n          this.tsTryParse(this.tsParseTypePredicatePrefix.bind(this));\n\n        if (!typePredicateVariable) {\n          if (!asserts) {\n            // : type\n            return this.tsParseTypeAnnotation(/* eatColon */ false, t);\n          }\n\n          // : asserts foo\n          node.parameterName = this.parseIdentifier();\n          node.asserts = asserts;\n          (node as N.TsTypePredicate).typeAnnotation = null;\n          t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n          return this.finishNode(t, \"TSTypeAnnotation\");\n        }\n\n        // : asserts foo is type\n        const type = this.tsParseTypeAnnotation(/* eatColon */ false);\n        node.parameterName = typePredicateVariable;\n        node.typeAnnotation = type;\n        node.asserts = asserts;\n        t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n        return this.finishNode(t, \"TSTypeAnnotation\");\n      });\n    }\n\n    tsTryParseTypeOrTypePredicateAnnotation(): N.TsTypeAnnotation | undefined {\n      if (this.match(tt.colon)) {\n        return this.tsParseTypeOrTypePredicateAnnotation(tt.colon);\n      }\n    }\n\n    tsTryParseTypeAnnotation(): N.TsTypeAnnotation | undefined {\n      if (this.match(tt.colon)) {\n        return this.tsParseTypeAnnotation();\n      }\n    }\n\n    tsTryParseType(): N.TsType | undefined {\n      return this.tsEatThenParseType(tt.colon);\n    }\n\n    tsParseTypePredicatePrefix(): N.Identifier | undefined {\n      const id = this.parseIdentifier();\n      if (this.isContextual(tt._is) && !this.hasPrecedingLineBreak()) {\n        this.next();\n        return id;\n      }\n    }\n\n    tsParseTypePredicateAsserts(): boolean {\n      if (this.state.type !== tt._asserts) {\n        return false;\n      }\n      const containsEsc = this.state.containsEsc;\n      this.next();\n      if (!tokenIsIdentifier(this.state.type) && !this.match(tt._this)) {\n        return false;\n      }\n\n      if (containsEsc) {\n        this.raise(\n          Errors.InvalidEscapedReservedWord,\n          this.state.lastTokStartLoc,\n          {\n            reservedWord: \"asserts\",\n          },\n        );\n      }\n\n      return true;\n    }\n\n    tsParseTypeAnnotation(\n      eatColon = true,\n      t: Undone<N.TsTypeAnnotation> = this.startNode<N.TsTypeAnnotation>(),\n    ): N.TsTypeAnnotation {\n      this.tsInType(() => {\n        if (eatColon) this.expect(tt.colon);\n        t.typeAnnotation = this.tsParseType();\n      });\n      return this.finishNode(t, \"TSTypeAnnotation\");\n    }\n\n    /** Be sure to be in a type context before calling this, using `tsInType`. */\n    tsParseType(): N.TsType {\n      // Need to set `state.inType` so that we don't parse JSX in a type context.\n      assert(this.state.inType);\n      const type = this.tsParseNonConditionalType();\n\n      if (\n        this.state.inDisallowConditionalTypesContext ||\n        this.hasPrecedingLineBreak() ||\n        !this.eat(tt._extends)\n      ) {\n        return type;\n      }\n      const node = this.startNodeAtNode<N.TsConditionalType>(type);\n      node.checkType = type;\n\n      node.extendsType = this.tsInDisallowConditionalTypesContext(() =>\n        this.tsParseNonConditionalType(),\n      );\n\n      this.expect(tt.question);\n      node.trueType = this.tsInAllowConditionalTypesContext(() =>\n        this.tsParseType(),\n      );\n\n      this.expect(tt.colon);\n      node.falseType = this.tsInAllowConditionalTypesContext(() =>\n        this.tsParseType(),\n      );\n\n      return this.finishNode(node, \"TSConditionalType\");\n    }\n\n    isAbstractConstructorSignature(): boolean {\n      return (\n        this.isContextual(tt._abstract) && this.isLookaheadContextual(\"new\")\n      );\n    }\n\n    tsParseNonConditionalType(): N.TsType {\n      if (this.tsIsStartOfFunctionType()) {\n        return this.tsParseFunctionOrConstructorType(\"TSFunctionType\");\n      }\n      if (this.match(tt._new)) {\n        // As in `new () => Date`\n        return this.tsParseFunctionOrConstructorType(\"TSConstructorType\");\n      } else if (this.isAbstractConstructorSignature()) {\n        // As in `abstract new () => Date`\n        return this.tsParseFunctionOrConstructorType(\n          \"TSConstructorType\",\n          /* abstract */ true,\n        );\n      }\n      return this.tsParseUnionTypeOrHigher();\n    }\n\n    tsParseTypeAssertion(): N.TsTypeAssertion {\n      if (this.getPluginOption(\"typescript\", \"disallowAmbiguousJSXLike\")) {\n        this.raise(TSErrors.ReservedTypeAssertion, this.state.startLoc);\n      }\n\n      const node = this.startNode<N.TsTypeAssertion>();\n      node.typeAnnotation = this.tsInType(() => {\n        this.next(); // \"<\"\n        return this.match(tt._const)\n          ? this.tsParseTypeReference()\n          : this.tsParseType();\n      });\n      this.expect(tt.gt);\n      node.expression = this.parseMaybeUnary();\n      return this.finishNode(node, \"TSTypeAssertion\");\n    }\n\n    tsParseHeritageClause(token: \"extends\"): Array<N.TSInterfaceHeritage>;\n    tsParseHeritageClause(token: \"implements\"): Array<N.TSClassImplements>;\n    tsParseHeritageClause(\n      token: \"extends\" | \"implements\",\n    ): Array<N.TSClassImplements> | Array<N.TSInterfaceHeritage> {\n      const originalStartLoc = this.state.startLoc;\n\n      const delimitedList = this.tsParseDelimitedList(\n        \"HeritageClauseElement\",\n        () => {\n          if (process.env.BABEL_8_BREAKING) {\n            const expression = super.parseExprSubscripts();\n            if (!tsIsEntityName(expression)) {\n              this.raise(\n                TSErrors.InvalidHeritageClauseType,\n                expression.loc.start,\n                { token },\n              );\n            }\n            const nodeType =\n              token === \"extends\" ? \"TSInterfaceHeritage\" : \"TSClassImplements\";\n            if (expression.type === \"TSInstantiationExpression\") {\n              // @ts-expect-error cast TSInstantiationExpression to TSInterfaceHeritage/TSClassImplements\n              expression.type = nodeType;\n              return expression;\n            }\n            const node = this.startNodeAtNode<\n              N.TSInterfaceHeritage | N.TSClassImplements\n            >(expression);\n            node.expression = expression;\n            // The last element can not form a TSInstantiationExpression because of the bail condition in\n            // `parseSubscript`, in this case we have to parse type arguments again\n            if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n              node.typeArguments = this.tsParseTypeArgumentsInExpression();\n            }\n            return this.finishNode(node, nodeType);\n          } else {\n            const node = this.startNode<\n              N.TSInterfaceHeritage | N.TSClassImplements\n            >();\n            // @ts-expect-error Babel 7 vs Babel 8\n            node.expression = this.tsParseEntityName(\n              tsParseEntityNameFlags.ALLOW_RESERVED_WORDS |\n                tsParseEntityNameFlags.LEADING_THIS_AS_IDENTIFIER,\n            );\n            if (this.match(tt.lt)) {\n              // @ts-expect-error Babel 7 vs Babel 8\n              node.typeParameters = this.tsParseTypeArguments();\n            }\n\n            return this.finishNode(\n              node,\n              // @ts-expect-error Babel 7 vs Babel 8\n              \"TSExpressionWithTypeArguments\",\n            );\n          }\n        },\n      );\n\n      if (!delimitedList.length) {\n        this.raise(TSErrors.EmptyHeritageClauseType, originalStartLoc, {\n          token,\n        });\n      }\n\n      return delimitedList as\n        | Array<N.TSClassImplements>\n        | Array<N.TSInterfaceHeritage>;\n    }\n\n    tsParseInterfaceDeclaration(\n      node: Undone<N.TsInterfaceDeclaration>,\n      properties: {\n        declare?: true;\n      } = {},\n    ): N.TsInterfaceDeclaration | null {\n      if (this.hasFollowingLineBreak()) return null;\n      this.expectContextual(tt._interface);\n      if (properties.declare) node.declare = true;\n      if (tokenIsIdentifier(this.state.type)) {\n        node.id = this.parseIdentifier();\n        this.checkIdentifier(node.id, BindingFlag.TYPE_TS_INTERFACE);\n      } else {\n        node.id = null;\n        this.raise(TSErrors.MissingInterfaceName, this.state.startLoc);\n      }\n\n      node.typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseInOutConstModifiers,\n      );\n      if (this.eat(tt._extends)) {\n        node.extends = this.tsParseHeritageClause(\"extends\");\n      }\n      const body = this.startNode<N.TSInterfaceBody>();\n      body.body = this.tsInType(this.tsParseObjectTypeMembers.bind(this));\n      node.body = this.finishNode(body, \"TSInterfaceBody\");\n      return this.finishNode(node, \"TSInterfaceDeclaration\");\n    }\n\n    tsParseTypeAliasDeclaration(\n      node: N.TsTypeAliasDeclaration,\n    ): N.TsTypeAliasDeclaration {\n      node.id = this.parseIdentifier();\n      this.checkIdentifier(node.id, BindingFlag.TYPE_TS_TYPE);\n\n      node.typeAnnotation = this.tsInType(() => {\n        node.typeParameters = this.tsTryParseTypeParameters(\n          this.tsParseInOutModifiers,\n        );\n\n        this.expect(tt.eq);\n\n        if (\n          this.isContextual(tt._intrinsic) &&\n          this.lookaheadCharCode() !== charCodes.dot\n        ) {\n          const node = this.startNode<N.TsKeywordType>();\n          this.next();\n          return this.finishNode(node, \"TSIntrinsicKeyword\");\n        }\n\n        return this.tsParseType();\n      });\n\n      this.semicolon();\n      return this.finishNode(node, \"TSTypeAliasDeclaration\");\n    }\n\n    // Parse in top level normal context if we are in a JSX context\n    tsInTopLevelContext<T>(cb: () => T): T {\n      if (this.curContext() !== tc.brace) {\n        const oldContext = this.state.context;\n        this.state.context = [oldContext[0]];\n        try {\n          return cb();\n        } finally {\n          this.state.context = oldContext;\n        }\n      } else {\n        return cb();\n      }\n    }\n\n    /**\n     * Runs `cb` in a type context.\n     * This should be called one token *before* the first type token,\n     * so that the call to `next()` is run in type context.\n     */\n    tsInType<T>(cb: () => T): T {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      try {\n        return cb();\n      } finally {\n        this.state.inType = oldInType;\n      }\n    }\n\n    tsInDisallowConditionalTypesContext<T>(cb: () => T): T {\n      const oldInDisallowConditionalTypesContext =\n        this.state.inDisallowConditionalTypesContext;\n      this.state.inDisallowConditionalTypesContext = true;\n      try {\n        return cb();\n      } finally {\n        this.state.inDisallowConditionalTypesContext =\n          oldInDisallowConditionalTypesContext;\n      }\n    }\n\n    tsInAllowConditionalTypesContext<T>(cb: () => T): T {\n      const oldInDisallowConditionalTypesContext =\n        this.state.inDisallowConditionalTypesContext;\n      this.state.inDisallowConditionalTypesContext = false;\n      try {\n        return cb();\n      } finally {\n        this.state.inDisallowConditionalTypesContext =\n          oldInDisallowConditionalTypesContext;\n      }\n    }\n\n    tsEatThenParseType(token: TokenType): N.TsType | undefined {\n      if (this.match(token)) {\n        return this.tsNextThenParseType();\n      }\n    }\n\n    tsExpectThenParseType(token: TokenType): N.TsType {\n      return this.tsInType(() => {\n        this.expect(token);\n        return this.tsParseType();\n      });\n    }\n\n    tsNextThenParseType(): N.TsType {\n      return this.tsInType(() => {\n        this.next();\n        return this.tsParseType();\n      });\n    }\n\n    tsParseEnumMember(): N.TsEnumMember {\n      const node = this.startNode<N.TsEnumMember>();\n      // Computed property names are grammar errors in an enum, so accept just string literal or identifier.\n      node.id = this.match(tt.string)\n        ? super.parseStringLiteral(this.state.value)\n        : this.parseIdentifier(/* liberal */ true);\n      if (this.eat(tt.eq)) {\n        node.initializer = super.parseMaybeAssignAllowIn();\n      }\n      return this.finishNode(node, \"TSEnumMember\");\n    }\n\n    tsParseEnumDeclaration(\n      node: Undone<N.TsEnumDeclaration>,\n      properties: {\n        const?: true;\n        declare?: true;\n      } = {},\n    ): N.TsEnumDeclaration {\n      if (properties.const) node.const = true;\n      if (properties.declare) node.declare = true;\n      this.expectContextual(tt._enum);\n      node.id = this.parseIdentifier();\n      this.checkIdentifier(\n        node.id,\n        node.const ? BindingFlag.TYPE_TS_CONST_ENUM : BindingFlag.TYPE_TS_ENUM,\n      );\n\n      if (process.env.BABEL_8_BREAKING) {\n        node.body = this.tsParseEnumBody();\n      } else {\n        this.expect(tt.braceL);\n        node.members = this.tsParseDelimitedList(\n          \"EnumMembers\",\n          this.tsParseEnumMember.bind(this),\n        );\n        this.expect(tt.braceR);\n      }\n      return this.finishNode(node, \"TSEnumDeclaration\");\n    }\n\n    tsParseEnumBody(): N.TsEnumBody {\n      const node = this.startNode<N.TsEnumBody>();\n      this.expect(tt.braceL);\n      node.members = this.tsParseDelimitedList(\n        \"EnumMembers\",\n        this.tsParseEnumMember.bind(this),\n      );\n      this.expect(tt.braceR);\n      return this.finishNode(node, \"TSEnumBody\");\n    }\n\n    tsParseModuleBlock(): N.TsModuleBlock {\n      const node = this.startNode<N.TsModuleBlock>();\n      this.scope.enter(ScopeFlag.OTHER);\n\n      this.expect(tt.braceL);\n      // Inside of a module block is considered \"top-level\", meaning it can have imports and exports.\n      super.parseBlockOrModuleBlockBody(\n        (node.body = []),\n        /* directives */ undefined,\n        /* topLevel */ true,\n        /* end */ tt.braceR,\n      );\n      this.scope.exit();\n      return this.finishNode(node, \"TSModuleBlock\");\n    }\n\n    tsParseModuleOrNamespaceDeclaration(\n      node: Undone<N.TsModuleDeclaration>,\n      nested: boolean = false,\n    ): N.TsModuleDeclaration {\n      node.id = process.env.BABEL_8_BREAKING\n        ? this.tsParseEntityName(tsParseEntityNameFlags.ALLOW_RESERVED_WORDS)\n        : this.parseIdentifier();\n\n      if (\n        process.env.BABEL_8_BREAKING ? node.id.type === \"Identifier\" : !nested\n      ) {\n        // @ts-expect-error checked above\n        this.checkIdentifier(node.id, BindingFlag.TYPE_TS_NAMESPACE);\n      }\n\n      if (!process.env.BABEL_8_BREAKING && this.eat(tt.dot)) {\n        const inner = this.startNode<N.TsModuleDeclaration>();\n        this.tsParseModuleOrNamespaceDeclaration(inner, true);\n        // @ts-expect-error Fixme: refine typings\n        node.body = inner;\n      } else {\n        this.scope.enter(ScopeFlag.TS_MODULE);\n        this.prodParam.enter(ParamKind.PARAM);\n        node.body = this.tsParseModuleBlock();\n        this.prodParam.exit();\n        this.scope.exit();\n      }\n      return this.finishNode(node, \"TSModuleDeclaration\");\n    }\n\n    tsParseAmbientExternalModuleDeclaration(\n      node: N.TsModuleDeclaration,\n    ): N.TsModuleDeclaration {\n      if (this.isContextual(tt._global)) {\n        node.kind = \"global\";\n        if (!process.env.BABEL_8_BREAKING) {\n          node.global = true;\n        }\n        node.id = this.parseIdentifier();\n      } else if (this.match(tt.string)) {\n        node.kind = \"module\";\n        node.id = super.parseStringLiteral(this.state.value);\n      } else {\n        this.unexpected();\n      }\n      if (this.match(tt.braceL)) {\n        this.scope.enter(ScopeFlag.TS_MODULE);\n        this.prodParam.enter(ParamKind.PARAM);\n        node.body = this.tsParseModuleBlock();\n        this.prodParam.exit();\n        this.scope.exit();\n      } else {\n        this.semicolon();\n      }\n\n      return this.finishNode(node, \"TSModuleDeclaration\");\n    }\n\n    tsParseImportEqualsDeclaration(\n      node: Undone<N.TsImportEqualsDeclaration>,\n      maybeDefaultIdentifier?: N.Identifier | null,\n      isExport?: boolean,\n    ): N.TsImportEqualsDeclaration {\n      if (!process.env.BABEL_8_BREAKING) {\n        node.isExport = isExport || false;\n      }\n      node.id = maybeDefaultIdentifier || this.parseIdentifier();\n      this.checkIdentifier(node.id, BindingFlag.TYPE_TS_VALUE_IMPORT);\n      this.expect(tt.eq);\n      const moduleReference = this.tsParseModuleReference();\n      if (\n        node.importKind === \"type\" &&\n        moduleReference.type !== \"TSExternalModuleReference\"\n      ) {\n        this.raise(TSErrors.ImportAliasHasImportType, moduleReference);\n      }\n      node.moduleReference = moduleReference;\n      this.semicolon();\n      return this.finishNode(node, \"TSImportEqualsDeclaration\");\n    }\n\n    tsIsExternalModuleReference(): boolean {\n      return (\n        this.isContextual(tt._require) &&\n        this.lookaheadCharCode() === charCodes.leftParenthesis\n      );\n    }\n\n    tsParseModuleReference(): N.TsModuleReference {\n      return this.tsIsExternalModuleReference()\n        ? this.tsParseExternalModuleReference()\n        : this.tsParseEntityName(tsParseEntityNameFlags.NONE);\n    }\n\n    tsParseExternalModuleReference(): N.TsExternalModuleReference {\n      const node = this.startNode<N.TsExternalModuleReference>();\n      this.expectContextual(tt._require);\n      this.expect(tt.parenL);\n      if (!this.match(tt.string)) {\n        this.unexpected();\n      }\n      // For compatibility to estree we cannot call parseLiteral directly here\n      node.expression = super.parseExprAtom() as N.StringLiteral;\n      this.expect(tt.parenR);\n      this.sawUnambiguousESM = true;\n      return this.finishNode(node, \"TSExternalModuleReference\");\n    }\n\n    // Utilities\n\n    tsLookAhead<T>(f: () => T): T {\n      const state = this.state.clone();\n      const res = f();\n      this.state = state;\n      return res;\n    }\n\n    tsTryParseAndCatch<T extends N.NodeBase | undefined | null>(\n      f: () => T,\n    ): T | undefined | null {\n      const result = this.tryParse(\n        abort =>\n          // @ts-expect-error todo(flow->ts)\n          f() || abort(),\n      );\n\n      if (result.aborted || !result.node) return;\n      if (result.error) this.state = result.failState;\n      // @ts-expect-error refine typings\n      return result.node;\n    }\n\n    tsTryParse<T>(f: () => T | undefined | false): T | undefined {\n      const state = this.state.clone();\n      const result = f();\n      if (result !== undefined && result !== false) {\n        return result;\n      }\n      this.state = state;\n    }\n\n    tsTryParseDeclare(node: any) {\n      if (this.isLineTerminator()) {\n        return;\n      }\n      const startType = this.state.type;\n      return this.tsInAmbientContext(() => {\n        switch (startType) {\n          case tt._function:\n            node.declare = true;\n            return super.parseFunctionStatement(\n              node,\n              /* async */ false,\n              /* isHangingDeclaration */ false,\n            );\n          case tt._class:\n            // While this is also set by tsParseExpressionStatement, we need to set it\n            // before parsing the class declaration to know how to register it in the scope.\n            node.declare = true;\n            return this.parseClass(\n              node as Undone<N.ClassDeclaration>,\n              /* isStatement */ true,\n              /* optionalId */ false,\n            );\n          case tt._enum:\n            return this.tsParseEnumDeclaration(node, { declare: true });\n          case tt._global:\n            return this.tsParseAmbientExternalModuleDeclaration(node);\n          case tt._let:\n            if (this.state.containsEsc) {\n              return;\n            }\n          // fallthrough\n          case tt._const:\n          case tt._var:\n            if (!this.match(tt._const) || !this.isLookaheadContextual(\"enum\")) {\n              node.declare = true;\n              return this.parseVarStatement(node, this.state.value, true);\n            }\n\n            // `const enum = 0;` not allowed because \"enum\" is a strict mode reserved word.\n            this.expect(tt._const);\n            return this.tsParseEnumDeclaration(node, {\n              const: true,\n              declare: true,\n            });\n          case tt._using:\n            if (this.isUsing()) {\n              this.raise(\n                TSErrors.InvalidModifierOnUsingDeclaration,\n                this.state.startLoc,\n                \"declare\",\n              );\n              node.declare = true;\n              return this.parseVarStatement(node, \"using\", true);\n            }\n            break;\n          case tt._await:\n            if (this.isAwaitUsing()) {\n              this.raise(\n                TSErrors.InvalidModifierOnAwaitUsingDeclaration,\n                this.state.startLoc,\n                \"declare\",\n              );\n              node.declare = true;\n              this.next(); // eat 'await'\n              return this.parseVarStatement(node, \"await using\", true);\n            }\n            break;\n          case tt._interface: {\n            const result = this.tsParseInterfaceDeclaration(node, {\n              declare: true,\n            });\n            if (result) return result;\n          }\n          // fallthrough\n          default:\n            if (tokenIsIdentifier(startType)) {\n              return this.tsParseDeclaration(\n                node,\n                this.state.value,\n                /* next */ true,\n                /* decorators */ null,\n              );\n            }\n        }\n      });\n    }\n\n    // Note: this won't be called unless the keyword is allowed in `shouldParseExportDeclaration`.\n    tsTryParseExportDeclaration(): N.Declaration | undefined {\n      return this.tsParseDeclaration(\n        this.startNode(),\n        this.state.value,\n        /* next */ true,\n        /* decorators */ null,\n      );\n    }\n\n    tsParseExpressionStatement(\n      node: Undone<N.TsModuleDeclaration>,\n      expr: N.Identifier,\n      decorators: N.Decorator[] | null,\n    ): N.Declaration | undefined {\n      switch (expr.name) {\n        case \"declare\": {\n          const declaration = this.tsTryParseDeclare(node);\n          if (declaration) {\n            declaration.declare = true;\n          }\n          return declaration;\n        }\n        case \"global\":\n          // `global { }` (with no `declare`) may appear inside an ambient module declaration.\n          // Would like to use tsParseAmbientExternalModuleDeclaration here, but already ran past \"global\".\n          if (this.match(tt.braceL)) {\n            this.scope.enter(ScopeFlag.TS_MODULE);\n            this.prodParam.enter(ParamKind.PARAM);\n            const mod = node;\n            mod.kind = \"global\";\n            if (!process.env.BABEL_8_BREAKING) {\n              node.global = true;\n            }\n            mod.id = expr;\n            mod.body = this.tsParseModuleBlock();\n            this.scope.exit();\n            this.prodParam.exit();\n            return this.finishNode(mod, \"TSModuleDeclaration\");\n          }\n          break;\n\n        default:\n          return this.tsParseDeclaration(\n            node,\n            expr.name,\n            /* next */ false,\n            decorators,\n          );\n      }\n    }\n\n    // Common to tsTryParseDeclare, tsTryParseExportDeclaration, and tsParseExpressionStatement.\n    tsParseDeclaration(\n      node: any,\n      value: string,\n      next: boolean,\n      decorators: N.Decorator[] | null,\n    ) {\n      // no declaration apart from enum can be followed by a line break.\n      switch (value) {\n        case \"abstract\":\n          if (\n            this.tsCheckLineTerminator(next) &&\n            (this.match(tt._class) || tokenIsIdentifier(this.state.type))\n          ) {\n            return this.tsParseAbstractDeclaration(node, decorators);\n          }\n          break;\n\n        case \"module\":\n          if (this.tsCheckLineTerminator(next)) {\n            if (this.match(tt.string)) {\n              return this.tsParseAmbientExternalModuleDeclaration(node);\n            } else if (tokenIsIdentifier(this.state.type)) {\n              node.kind = \"module\";\n              return this.tsParseModuleOrNamespaceDeclaration(node);\n            }\n          }\n          break;\n\n        case \"namespace\":\n          if (\n            this.tsCheckLineTerminator(next) &&\n            tokenIsIdentifier(this.state.type)\n          ) {\n            node.kind = \"namespace\";\n            return this.tsParseModuleOrNamespaceDeclaration(node);\n          }\n          break;\n\n        case \"type\":\n          if (\n            this.tsCheckLineTerminator(next) &&\n            tokenIsIdentifier(this.state.type)\n          ) {\n            return this.tsParseTypeAliasDeclaration(node);\n          }\n          break;\n      }\n    }\n\n    tsCheckLineTerminator(next: boolean) {\n      if (next) {\n        if (this.hasFollowingLineBreak()) return false;\n        this.next();\n        return true;\n      }\n      return !this.isLineTerminator();\n    }\n\n    tsTryParseGenericAsyncArrowFunction(\n      startLoc: Position,\n    ): N.ArrowFunctionExpression | undefined {\n      if (!this.match(tt.lt)) return;\n\n      const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n      this.state.maybeInArrowParameters = true;\n\n      const res: Undone<N.ArrowFunctionExpression> | undefined =\n        this.tsTryParseAndCatch(() => {\n          const node = this.startNodeAt<N.ArrowFunctionExpression>(startLoc);\n          node.typeParameters = this.tsParseTypeParameters(\n            this.tsParseConstModifier,\n          );\n          // Don't use overloaded parseFunctionParams which would look for \"<\" again.\n          super.parseFunctionParams(node);\n          node.returnType = this.tsTryParseTypeOrTypePredicateAnnotation();\n          this.expect(tt.arrow);\n          return node;\n        });\n\n      this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n      if (!res) return;\n\n      return super.parseArrowExpression(\n        res,\n        /* params are already set */ null,\n        /* async */ true,\n      );\n    }\n\n    // Used when parsing type arguments from ES or JSX productions, where the first token\n    // has been created without state.inType. Thus we need to re-scan the lt token.\n    tsParseTypeArgumentsInExpression():\n      | N.TsTypeParameterInstantiation\n      | undefined {\n      if (this.reScan_lt() !== tt.lt) return;\n      return this.tsParseTypeArguments();\n    }\n\n    tsParseTypeArguments(): N.TsTypeParameterInstantiation {\n      const node = this.startNode<N.TsTypeParameterInstantiation>();\n      node.params = this.tsInType(() =>\n        this.tsInTopLevelContext(() => {\n          this.expect(tt.lt);\n          return this.tsParseDelimitedList(\n            \"TypeParametersOrArguments\",\n            this.tsParseType.bind(this),\n          );\n        }),\n      );\n      if (node.params.length === 0) {\n        this.raise(TSErrors.EmptyTypeArguments, node);\n      } else if (!this.state.inType && this.curContext() === tc.brace) {\n        // rescan `>` when we are no longer in type context and JSX parsing context\n        // since it was tokenized when `inType` is `true`.\n        this.reScan_lt_gt();\n      }\n      this.expect(tt.gt);\n      return this.finishNode(node, \"TSTypeParameterInstantiation\");\n    }\n\n    tsIsDeclarationStart(): boolean {\n      return tokenIsTSDeclarationStart(this.state.type);\n    }\n\n    // ======================================================\n    // OVERRIDES\n    // ======================================================\n\n    isExportDefaultSpecifier(): boolean {\n      if (this.tsIsDeclarationStart()) return false;\n      return super.isExportDefaultSpecifier();\n    }\n\n    parseBindingElement(\n      flags: ParseBindingListFlags,\n      decorators: N.Decorator[],\n    ): N.Pattern | N.TSParameterProperty {\n      // Store original location to include decorators/modifiers in range\n      const startLoc = decorators.length\n        ? decorators[0].loc.start\n        : this.state.startLoc;\n\n      const modified: ModifierBase = {};\n      this.tsParseModifiers(\n        {\n          allowedModifiers: [\n            \"public\",\n            \"private\",\n            \"protected\",\n            \"override\",\n            \"readonly\",\n          ],\n        },\n        modified,\n      );\n      const accessibility = modified.accessibility;\n      const override = modified.override;\n      const readonly = modified.readonly;\n      if (\n        !(flags & ParseBindingListFlags.IS_CONSTRUCTOR_PARAMS) &&\n        (accessibility || readonly || override)\n      ) {\n        this.raise(TSErrors.UnexpectedParameterModifier, startLoc);\n      }\n\n      const left = this.parseMaybeDefault();\n      if (flags & ParseBindingListFlags.IS_FUNCTION_PARAMS) {\n        this.parseFunctionParamType(left);\n      }\n      const elt = this.parseMaybeDefault(left.loc.start, left);\n      if (accessibility || readonly || override) {\n        const pp = this.startNodeAt<N.TSParameterProperty>(startLoc);\n        if (decorators.length) {\n          pp.decorators = decorators;\n        }\n        if (accessibility) pp.accessibility = accessibility;\n        if (readonly) pp.readonly = readonly;\n        if (override) pp.override = override;\n        if (elt.type !== \"Identifier\" && elt.type !== \"AssignmentPattern\") {\n          this.raise(TSErrors.UnsupportedParameterPropertyKind, pp);\n        }\n        pp.parameter = elt as any as N.Identifier | N.AssignmentPattern;\n        return this.finishNode(pp, \"TSParameterProperty\");\n      }\n\n      if (decorators.length) {\n        left.decorators = decorators;\n      }\n\n      return elt;\n    }\n\n    isSimpleParameter(node: N.Pattern | N.TSParameterProperty): boolean {\n      return (\n        (node.type === \"TSParameterProperty\" &&\n          super.isSimpleParameter(node.parameter)) ||\n        super.isSimpleParameter(node)\n      );\n    }\n\n    tsDisallowOptionalPattern(node: Undone<N.Function>) {\n      for (const param of node.params) {\n        if (\n          param.type !== \"Identifier\" &&\n          (param as any).optional &&\n          !this.state.isAmbientContext\n        ) {\n          this.raise(TSErrors.PatternIsOptional, param);\n        }\n      }\n    }\n\n    setArrowFunctionParameters(\n      node: Undone<N.ArrowFunctionExpression>,\n      params: N.Expression[],\n      trailingCommaLoc?: Position | null,\n    ): void {\n      super.setArrowFunctionParameters(node, params, trailingCommaLoc);\n      this.tsDisallowOptionalPattern(node);\n    }\n\n    parseFunctionBodyAndFinish<\n      T extends\n        | N.Function\n        | N.TSDeclareMethod\n        | N.TSDeclareFunction\n        | N.ClassPrivateMethod,\n    >(node: Undone<T>, type: T[\"type\"], isMethod: boolean = false): T {\n      if (this.match(tt.colon)) {\n        node.returnType = this.tsParseTypeOrTypePredicateAnnotation(tt.colon);\n      }\n\n      const bodilessType =\n        type === \"FunctionDeclaration\"\n          ? \"TSDeclareFunction\"\n          : type === \"ClassMethod\" || type === \"ClassPrivateMethod\"\n            ? \"TSDeclareMethod\"\n            : undefined;\n      if (bodilessType && !this.match(tt.braceL) && this.isLineTerminator()) {\n        return this.finishNode(node, bodilessType);\n      }\n      if (bodilessType === \"TSDeclareFunction\" && this.state.isAmbientContext) {\n        this.raise(TSErrors.DeclareFunctionHasImplementation, node);\n        if ((node as Undone<N.FunctionDeclaration>).declare) {\n          return super.parseFunctionBodyAndFinish(node, bodilessType, isMethod);\n        }\n      }\n      this.tsDisallowOptionalPattern(node);\n\n      return super.parseFunctionBodyAndFinish(node, type, isMethod);\n    }\n\n    registerFunctionStatementId(node: N.Function): void {\n      if (!node.body && node.id) {\n        // Function ids are validated after parsing their body.\n        // For bodiless function, we need to do it here.\n        this.checkIdentifier(node.id, BindingFlag.TYPE_TS_AMBIENT);\n      } else {\n        super.registerFunctionStatementId(node);\n      }\n    }\n\n    tsCheckForInvalidTypeCasts(items: Array<N.Expression | N.SpreadElement>) {\n      items.forEach(node => {\n        if (node?.type === \"TSTypeCastExpression\") {\n          this.raise(TSErrors.UnexpectedTypeAnnotation, node.typeAnnotation);\n        }\n      });\n    }\n\n    toReferencedList(\n      exprList: Array<N.Expression | undefined | null>,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      isInParens?: boolean,\n    ): Array<N.Expression | undefined | null> {\n      // Handles invalid scenarios like: `f(a:b)`, `(a:b);`, and `(a:b,c:d)`.\n      //\n      // Note that `f<T>(a:b)` goes through a different path and is handled\n      // in `parseSubscript` directly.\n      this.tsCheckForInvalidTypeCasts(exprList);\n      return exprList;\n    }\n\n    parseArrayLike(\n      close: TokenType,\n      canBePattern: boolean,\n      isTuple: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.ArrayExpression | N.TupleExpression {\n      const node = super.parseArrayLike(\n        close,\n        canBePattern,\n        isTuple,\n        refExpressionErrors,\n      );\n\n      if (node.type === \"ArrayExpression\") {\n        this.tsCheckForInvalidTypeCasts(node.elements);\n      }\n\n      return node;\n    }\n\n    parseSubscript(\n      base: N.Expression,\n\n      startLoc: Position,\n      noCalls: boolean | undefined | null,\n      state: N.ParseSubscriptState,\n    ): N.Expression {\n      if (!this.hasPrecedingLineBreak() && this.match(tt.bang)) {\n        // When ! is consumed as a postfix operator (non-null assertion),\n        // disallow JSX tag forming after. e.g. When parsing `p! < n.p!`\n        // `<n.p` can not be a start of JSX tag\n        this.state.canStartJSXElement = false;\n        this.next();\n\n        const nonNullExpression =\n          this.startNodeAt<N.TsNonNullExpression>(startLoc);\n        nonNullExpression.expression = base;\n        return this.finishNode(nonNullExpression, \"TSNonNullExpression\");\n      }\n\n      let isOptionalCall = false;\n      if (\n        this.match(tt.questionDot) &&\n        this.lookaheadCharCode() === charCodes.lessThan\n      ) {\n        if (noCalls) {\n          state.stop = true;\n          return base;\n        }\n        state.optionalChainMember = isOptionalCall = true;\n        this.next();\n      }\n\n      // handles 'f<<T>'\n      if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n        let missingParenErrorLoc;\n        // tsTryParseAndCatch is expensive, so avoid if not necessary.\n        // There are number of things we are going to \"maybe\" parse, like type arguments on\n        // tagged template expressions. If any of them fail, walk it back and continue.\n        const result = this.tsTryParseAndCatch(() => {\n          if (!noCalls && this.atPossibleAsyncArrow(base)) {\n            // Almost certainly this is a generic async function `async <T>() => ...\n            // But it might be a call with a type argument `async<T>();`\n            const asyncArrowFn =\n              this.tsTryParseGenericAsyncArrowFunction(startLoc);\n            if (asyncArrowFn) {\n              state.stop = true;\n              return asyncArrowFn;\n            }\n          }\n\n          const typeArguments = this.tsParseTypeArgumentsInExpression();\n          if (!typeArguments) return;\n\n          if (isOptionalCall && !this.match(tt.parenL)) {\n            missingParenErrorLoc = this.state.curPosition();\n            return;\n          }\n\n          if (tokenIsTemplate(this.state.type)) {\n            const result = super.parseTaggedTemplateExpression(\n              base,\n              startLoc,\n              state,\n            );\n            if (process.env.BABEL_8_BREAKING) {\n              result.typeArguments = typeArguments;\n            } else {\n              result.typeParameters = typeArguments;\n            }\n            return result;\n          }\n\n          if (!noCalls && this.eat(tt.parenL)) {\n            const node = this.startNodeAt<\n              N.CallExpression | N.OptionalCallExpression\n            >(startLoc);\n            node.callee = base;\n            // @ts-expect-error (won't be any undefined arguments)\n            node.arguments = this.parseCallExpressionArguments();\n\n            // Handles invalid case: `f<T>(a:b)`\n            this.tsCheckForInvalidTypeCasts(node.arguments);\n\n            if (process.env.BABEL_8_BREAKING) {\n              node.typeArguments = typeArguments;\n            } else {\n              node.typeParameters = typeArguments;\n            }\n\n            if (state.optionalChainMember) {\n              (node as Undone<N.OptionalCallExpression>).optional =\n                isOptionalCall;\n            }\n\n            return this.finishCallExpression(node, state.optionalChainMember);\n          }\n\n          const tokenType = this.state.type;\n          if (\n            // a<b>>c is not (a<b>)>c, but a<(b>>c)\n            tokenType === tt.gt ||\n            // a<b>>>c is not (a<b>)>>c, but a<(b>>>c)\n            tokenType === tt.bitShiftR ||\n            // a<b>c is (a<b)>c\n            (tokenType !== tt.parenL &&\n              tokenCanStartExpression(tokenType) &&\n              !this.hasPrecedingLineBreak())\n          ) {\n            // Bail out.\n            return;\n          }\n\n          const node = this.startNodeAt<N.TsInstantiationExpression>(startLoc);\n          node.expression = base;\n          if (process.env.BABEL_8_BREAKING) {\n            node.typeArguments = typeArguments;\n          } else {\n            node.typeParameters = typeArguments;\n          }\n          return this.finishNode(node, \"TSInstantiationExpression\");\n        });\n\n        if (missingParenErrorLoc) {\n          this.unexpected(missingParenErrorLoc, tt.parenL);\n        }\n\n        if (result) {\n          if (result.type === \"TSInstantiationExpression\") {\n            if (\n              this.match(tt.dot) ||\n              (this.match(tt.questionDot) &&\n                this.lookaheadCharCode() !== charCodes.leftParenthesis)\n            ) {\n              this.raise(\n                TSErrors.InvalidPropertyAccessAfterInstantiationExpression,\n                this.state.startLoc,\n              );\n            }\n            if (!this.match(tt.dot) && !this.match(tt.questionDot)) {\n              // If TSInstantiationExpression is not followed by . / ?.,\n              // it must be the end of a subscript chain. Note that `(` already forms\n              // call expression arguments\n              result.expression = super.stopParseSubscript(base, state);\n            }\n          }\n          return result;\n        }\n      }\n\n      return super.parseSubscript(base, startLoc, noCalls, state);\n    }\n\n    parseNewCallee(node: N.NewExpression): void {\n      super.parseNewCallee(node);\n\n      const { callee } = node;\n      if (\n        callee.type === \"TSInstantiationExpression\" &&\n        !callee.extra?.parenthesized\n      ) {\n        if (process.env.BABEL_8_BREAKING) {\n          node.typeArguments = callee.typeArguments;\n        } else {\n          node.typeParameters = callee.typeParameters;\n        }\n        node.callee = callee.expression;\n      }\n    }\n\n    parseExprOp(\n      left: N.Expression,\n      leftStartLoc: Position,\n      minPrec: number,\n    ): N.Expression {\n      let isSatisfies: boolean;\n      if (\n        tokenOperatorPrecedence(tt._in) > minPrec &&\n        !this.hasPrecedingLineBreak() &&\n        (this.isContextual(tt._as) ||\n          (isSatisfies = this.isContextual(tt._satisfies)))\n      ) {\n        const node = this.startNodeAt<\n          N.TsAsExpression | N.TsSatisfiesExpression\n        >(leftStartLoc);\n        node.expression = left;\n        node.typeAnnotation = this.tsInType(() => {\n          this.next(); // \"as\" or \"satisfies\"\n          if (this.match(tt._const)) {\n            if (isSatisfies) {\n              this.raise(Errors.UnexpectedKeyword, this.state.startLoc, {\n                keyword: \"const\",\n              });\n            }\n            return this.tsParseTypeReference();\n          }\n\n          return this.tsParseType();\n        });\n        this.finishNode(\n          node,\n          isSatisfies ? \"TSSatisfiesExpression\" : \"TSAsExpression\",\n        );\n        // rescan `<`, `>` because they were scanned when this.state.inType was true\n        this.reScan_lt_gt();\n        return this.parseExprOp(\n          // @ts-expect-error todo(flow->ts)\n          node,\n          leftStartLoc,\n          minPrec,\n        );\n      }\n\n      return super.parseExprOp(left, leftStartLoc, minPrec);\n    }\n\n    checkReservedWord(\n      word: string,\n      startLoc: Position,\n      checkKeywords: boolean,\n      isBinding: boolean,\n    ): void {\n      // Strict mode words may be allowed as in `declare namespace N { const static: number; }`.\n      // And we have a type checker anyway, so don't bother having the parser do it.\n      if (!this.state.isAmbientContext) {\n        super.checkReservedWord(word, startLoc, checkKeywords, isBinding);\n      }\n    }\n\n    checkImportReflection(node: Undone<N.ImportDeclaration>) {\n      super.checkImportReflection(node);\n      if (node.module && node.importKind !== \"value\") {\n        this.raise(\n          TSErrors.ImportReflectionHasImportType,\n          node.specifiers[0].loc.start,\n        );\n      }\n    }\n\n    /*\n    Don't bother doing this check in TypeScript code because:\n    1. We may have a nested export statement with the same name:\n      export const x = 0;\n      export namespace N {\n        export const x = 1;\n      }\n    2. We have a type checker to warn us about this sort of thing.\n    */\n    checkDuplicateExports() {}\n\n    isPotentialImportPhase(isExport: boolean): boolean {\n      if (super.isPotentialImportPhase(isExport)) return true;\n      if (this.isContextual(tt._type)) {\n        const ch = this.lookaheadCharCode();\n        return isExport\n          ? ch === charCodes.leftCurlyBrace || ch === charCodes.asterisk\n          : ch !== charCodes.equalsTo;\n      }\n      return !isExport && this.isContextual(tt._typeof);\n    }\n\n    applyImportPhase(\n      node: Undone<N.ImportDeclaration | N.ExportNamedDeclaration>,\n      isExport: boolean,\n      phase: string | null,\n      loc?: Position,\n    ): void {\n      super.applyImportPhase(node, isExport, phase, loc);\n      if (isExport) {\n        (node as N.ExportNamedDeclaration).exportKind =\n          phase === \"type\" ? \"type\" : \"value\";\n      } else {\n        (node as N.ImportDeclaration).importKind =\n          phase === \"type\" || phase === \"typeof\" ? phase : \"value\";\n      }\n    }\n\n    parseImport(\n      node: Undone<N.ImportDeclaration | N.TsImportEqualsDeclaration>,\n    ): N.AnyImport {\n      if (this.match(tt.string)) {\n        node.importKind = \"value\";\n        return super.parseImport(node as Undone<N.ImportDeclaration>);\n      }\n\n      let importNode;\n      if (\n        tokenIsIdentifier(this.state.type) &&\n        this.lookaheadCharCode() === charCodes.equalsTo\n      ) {\n        node.importKind = \"value\";\n        return this.tsParseImportEqualsDeclaration(\n          node as Undone<N.TsImportEqualsDeclaration>,\n        );\n      } else if (this.isContextual(tt._type)) {\n        const maybeDefaultIdentifier = this.parseMaybeImportPhase(\n          node as Undone<N.ImportDeclaration>,\n          /* isExport */ false,\n        );\n        if (this.lookaheadCharCode() === charCodes.equalsTo) {\n          return this.tsParseImportEqualsDeclaration(\n            node as Undone<N.TsImportEqualsDeclaration>,\n            maybeDefaultIdentifier,\n          );\n        } else {\n          importNode = super.parseImportSpecifiersAndAfter(\n            node as Undone<N.ImportDeclaration>,\n            maybeDefaultIdentifier,\n          );\n        }\n      } else {\n        importNode = super.parseImport(node as Undone<N.ImportDeclaration>);\n      }\n\n      // `import type` can only be used on imports with named imports or with a\n      // default import - but not both\n      if (\n        importNode.importKind === \"type\" &&\n        // @ts-expect-error refine typings\n        importNode.specifiers.length > 1 &&\n        // @ts-expect-error refine typings\n        importNode.specifiers[0].type === \"ImportDefaultSpecifier\"\n      ) {\n        this.raise(TSErrors.TypeImportCannotSpecifyDefaultAndNamed, importNode);\n      }\n\n      return importNode;\n    }\n\n    parseExport(\n      node: Undone<\n        | N.ExportDefaultDeclaration\n        | N.ExportAllDeclaration\n        | N.ExportNamedDeclaration\n      >,\n      decorators: N.Decorator[] | null,\n    ): N.AnyExport {\n      if (this.match(tt._import)) {\n        // `export import A = B;`\n        const nodeImportEquals = process.env.BABEL_8_BREAKING\n          ? this.startNode<N.TsImportEqualsDeclaration>()\n          : (node as Undone<N.TsImportEqualsDeclaration>);\n        this.next(); // eat `tt._import`\n        let maybeDefaultIdentifier: N.Identifier | null = null;\n        if (\n          this.isContextual(tt._type) &&\n          // We pass false here, because we are parsing an `import ... =`\n          this.isPotentialImportPhase(/* isExport */ false)\n        ) {\n          maybeDefaultIdentifier = this.parseMaybeImportPhase(\n            nodeImportEquals,\n            /* isExport */ false,\n          );\n        } else {\n          nodeImportEquals.importKind = \"value\";\n        }\n        const declaration = this.tsParseImportEqualsDeclaration(\n          nodeImportEquals,\n          maybeDefaultIdentifier,\n          /* isExport */ true,\n        );\n        if (process.env.BABEL_8_BREAKING) {\n          (node as Undone<N.ExportNamedDeclaration>).attributes = [];\n          (node as Undone<N.ExportNamedDeclaration>).declaration = declaration;\n          (node as Undone<N.ExportNamedDeclaration>).exportKind = \"value\";\n          (node as Undone<N.ExportNamedDeclaration>).source = null;\n          (node as Undone<N.ExportNamedDeclaration>).specifiers = [];\n          return this.finishNode(node, \"ExportNamedDeclaration\");\n        } else {\n          return declaration;\n        }\n      } else if (this.eat(tt.eq)) {\n        // `export = x;`\n        const assign = node as Undone<N.TsExportAssignment>;\n        assign.expression = super.parseExpression();\n        this.semicolon();\n        this.sawUnambiguousESM = true;\n        return this.finishNode(assign, \"TSExportAssignment\");\n      } else if (this.eatContextual(tt._as)) {\n        // `export as namespace A;`\n        const decl = node as Undone<N.TsNamespaceExportDeclaration>;\n        // See `parseNamespaceExportDeclaration` in TypeScript's own parser\n        this.expectContextual(tt._namespace);\n        decl.id = this.parseIdentifier();\n        this.semicolon();\n        return this.finishNode(decl, \"TSNamespaceExportDeclaration\");\n      } else {\n        return super.parseExport(\n          node as Undone<N.ExportAllDeclaration | N.ExportDefaultDeclaration>,\n          decorators,\n        );\n      }\n    }\n\n    isAbstractClass(): boolean {\n      return (\n        this.isContextual(tt._abstract) && this.isLookaheadContextual(\"class\")\n      );\n    }\n\n    parseExportDefaultExpression(): N.ExportDefaultDeclaration[\"declaration\"] {\n      if (this.isAbstractClass()) {\n        const cls = this.startNode<N.Class>();\n        this.next(); // Skip \"abstract\"\n        cls.abstract = true;\n        return this.parseClass(cls, true, true);\n      }\n\n      // export default interface allowed in:\n      // https://github.com/Microsoft/TypeScript/pull/16040\n      if (this.match(tt._interface)) {\n        const result = this.tsParseInterfaceDeclaration(\n          this.startNode<N.TsInterfaceDeclaration>(),\n        );\n        if (result) return result;\n      }\n\n      return super.parseExportDefaultExpression();\n    }\n\n    parseVarStatement(\n      node: N.VariableDeclaration,\n      kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n      allowMissingInitializer: boolean = false,\n    ) {\n      const { isAmbientContext } = this.state;\n      const declaration = super.parseVarStatement(\n        node,\n        kind,\n        allowMissingInitializer || isAmbientContext,\n      );\n\n      if (!isAmbientContext) return declaration;\n\n      // If node.declare is true, the error has already been raised in tsTryParseDeclare.\n      if (!node.declare && (kind === \"using\" || kind === \"await using\")) {\n        this.raiseOverwrite(\n          TSErrors.UsingDeclarationInAmbientContext,\n          node,\n          kind,\n        );\n        return declaration;\n      }\n\n      for (const { id, init } of declaration.declarations) {\n        // Empty initializer is the easy case that we want.\n        if (!init) continue;\n\n        // var and let aren't ever allowed initializers.\n        if (kind === \"var\" || kind === \"let\" || !!id.typeAnnotation) {\n          this.raise(TSErrors.InitializerNotAllowedInAmbientContext, init);\n        } else if (\n          !isValidAmbientConstInitializer(init, this.hasPlugin(\"estree\"))\n        ) {\n          this.raise(\n            TSErrors.ConstInitializerMustBeStringOrNumericLiteralOrLiteralEnumReference,\n            init,\n          );\n        }\n      }\n\n      return declaration;\n    }\n\n    parseStatementContent(\n      flags: ParseStatementFlag,\n      decorators?: N.Decorator[] | null,\n    ): N.Statement {\n      if (this.match(tt._const) && this.isLookaheadContextual(\"enum\")) {\n        const node = this.startNode<N.TsEnumDeclaration>();\n        this.expect(tt._const); // eat 'const'\n        return this.tsParseEnumDeclaration(node, { const: true });\n      }\n\n      if (this.isContextual(tt._enum)) {\n        return this.tsParseEnumDeclaration(\n          this.startNode<N.TsEnumDeclaration>(),\n        );\n      }\n\n      if (this.isContextual(tt._interface)) {\n        const result = this.tsParseInterfaceDeclaration(this.startNode());\n        if (result) return result;\n      }\n\n      return super.parseStatementContent(flags, decorators);\n    }\n\n    parseAccessModifier(): N.Accessibility | undefined | null {\n      return this.tsParseModifier([\"public\", \"protected\", \"private\"]);\n    }\n\n    tsHasSomeModifiers(member: any, modifiers: readonly TsModifier[]): boolean {\n      return modifiers.some(modifier => {\n        if (tsIsAccessModifier(modifier)) {\n          return member.accessibility === modifier;\n        }\n        return !!member[modifier];\n      });\n    }\n\n    tsIsStartOfStaticBlocks() {\n      return (\n        this.isContextual(tt._static) &&\n        this.lookaheadCharCode() === charCodes.leftCurlyBrace\n      );\n    }\n\n    parseClassMember(\n      classBody: N.ClassBody,\n      member: any,\n      state: N.ParseClassMemberState,\n    ): void {\n      const modifiers = [\n        \"declare\",\n        \"private\",\n        \"public\",\n        \"protected\",\n        \"override\",\n        \"abstract\",\n        \"readonly\",\n        \"static\",\n      ] as const;\n      this.tsParseModifiers(\n        {\n          allowedModifiers: modifiers,\n          disallowedModifiers: [\"in\", \"out\"],\n          stopOnStartOfClassStaticBlock: true,\n          errorTemplate: TSErrors.InvalidModifierOnTypeParameterPositions,\n        },\n        member,\n      );\n\n      const callParseClassMemberWithIsStatic = () => {\n        if (this.tsIsStartOfStaticBlocks()) {\n          this.next(); // eat \"static\"\n          this.next(); // eat \"{\"\n          if (this.tsHasSomeModifiers(member, modifiers)) {\n            this.raise(\n              TSErrors.StaticBlockCannotHaveModifier,\n              this.state.curPosition(),\n            );\n          }\n          super.parseClassStaticBlock(classBody, member as N.StaticBlock);\n        } else {\n          this.parseClassMemberWithIsStatic(\n            classBody,\n            member,\n            state,\n            !!member.static,\n          );\n        }\n      };\n      if (member.declare) {\n        this.tsInAmbientContext(callParseClassMemberWithIsStatic);\n      } else {\n        callParseClassMemberWithIsStatic();\n      }\n    }\n\n    parseClassMemberWithIsStatic(\n      classBody: N.ClassBody,\n      member: Undone<N.ClassMember | N.TsIndexSignature>,\n      state: N.ParseClassMemberState,\n      isStatic: boolean,\n    ): void {\n      const idx = this.tsTryParseIndexSignature(\n        member as Undone<N.TsIndexSignature>,\n      );\n      if (idx) {\n        classBody.body.push(idx);\n\n        if ((member as any).abstract) {\n          this.raise(TSErrors.IndexSignatureHasAbstract, member);\n        }\n        if ((member as any).accessibility) {\n          this.raise(TSErrors.IndexSignatureHasAccessibility, member, {\n            modifier: (member as any).accessibility,\n          });\n        }\n        if ((member as any).declare) {\n          this.raise(TSErrors.IndexSignatureHasDeclare, member);\n        }\n        if ((member as any).override) {\n          this.raise(TSErrors.IndexSignatureHasOverride, member);\n        }\n\n        return;\n      }\n\n      if (!this.state.inAbstractClass && (member as any).abstract) {\n        this.raise(TSErrors.NonAbstractClassHasAbstractMethod, member);\n      }\n\n      if ((member as any).override) {\n        if (!state.hadSuperClass) {\n          this.raise(TSErrors.OverrideNotInSubClass, member);\n        }\n      }\n\n      /*:: invariant(member.type !== \"TSIndexSignature\") */\n\n      super.parseClassMemberWithIsStatic(\n        classBody,\n        member as Undone<N.ClassMember>,\n        state,\n        isStatic,\n      );\n    }\n\n    parsePostMemberNameModifiers(\n      methodOrProp: N.ClassMethod | N.ClassProperty | N.ClassPrivateProperty,\n    ): void {\n      const optional = this.eat(tt.question);\n      if (optional) methodOrProp.optional = true;\n\n      if ((methodOrProp as any).readonly && this.match(tt.parenL)) {\n        this.raise(TSErrors.ClassMethodHasReadonly, methodOrProp);\n      }\n\n      if ((methodOrProp as any).declare && this.match(tt.parenL)) {\n        this.raise(TSErrors.ClassMethodHasDeclare, methodOrProp);\n      }\n    }\n\n    // Note: The reason we do this in `parseExpressionStatement` and not `parseStatement`\n    // is that e.g. `type()` is valid JS, so we must try parsing that first.\n    // If it's really a type, we will parse `type` as the statement, and can correct it here\n    // by parsing the rest.\n    // @ts-expect-error plugin overrides interfaces\n    parseExpressionStatement(\n      node: Undone<N.ExpressionStatement>,\n      expr: N.Expression,\n      decorators: N.Decorator[] | null,\n    ): N.Statement {\n      const decl =\n        expr.type === \"Identifier\"\n          ? // @ts-expect-error refine typings\n            this.tsParseExpressionStatement(node, expr, decorators)\n          : undefined;\n      return decl || super.parseExpressionStatement(node, expr, decorators);\n    }\n\n    // export type\n    // Should be true for anything parsed by `tsTryParseExportDeclaration`.\n    shouldParseExportDeclaration(): boolean {\n      if (this.tsIsDeclarationStart()) return true;\n      return super.shouldParseExportDeclaration();\n    }\n\n    // An apparent conditional expression could actually be an optional parameter in an arrow function.\n    parseConditional(\n      expr: N.Expression,\n\n      startLoc: Position,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.Expression {\n      if (!this.match(tt.question)) return expr;\n\n      if (this.state.maybeInArrowParameters) {\n        const nextCh = this.lookaheadCharCode();\n        // These tokens cannot start an expression, so if one of them follows\n        // ? then we are probably in an arrow function parameters list and we\n        // don't parse the conditional expression.\n        if (\n          nextCh === charCodes.comma || // (a?, b) => c\n          nextCh === charCodes.equalsTo || // (a? = b) => c\n          nextCh === charCodes.colon || // (a?: b) => c\n          nextCh === charCodes.rightParenthesis // (a?) => c\n        ) {\n          /*:: invariant(refExpressionErrors != null) */\n          this.setOptionalParametersError(refExpressionErrors);\n          return expr;\n        }\n      }\n\n      return super.parseConditional(expr, startLoc, refExpressionErrors);\n    }\n\n    // Note: These \"type casts\" are *not* valid TS expressions.\n    // But we parse them here and change them when completing the arrow function.\n    parseParenItem<T extends N.Expression | N.RestElement | N.SpreadElement>(\n      node: T,\n      startLoc: Position,\n    ): T | N.TsTypeCastExpression {\n      const newNode = super.parseParenItem(node, startLoc);\n      if (this.eat(tt.question)) {\n        (newNode as N.Identifier).optional = true;\n        // Include questionmark in location of node\n        // Don't use this.finishNode() as otherwise we might process comments twice and\n        // include already consumed parens\n        this.resetEndLocation(node);\n      }\n\n      if (this.match(tt.colon)) {\n        const typeCastNode = this.startNodeAt<N.TsTypeCastExpression>(startLoc);\n        typeCastNode.expression = node as N.Expression;\n        typeCastNode.typeAnnotation = this.tsParseTypeAnnotation();\n\n        return this.finishNode(typeCastNode, \"TSTypeCastExpression\");\n      }\n\n      return node;\n    }\n\n    parseExportDeclaration(\n      node: N.ExportNamedDeclaration,\n    ): N.Declaration | undefined | null {\n      if (!this.state.isAmbientContext && this.isContextual(tt._declare)) {\n        return this.tsInAmbientContext(() => this.parseExportDeclaration(node));\n      }\n\n      // Store original location\n      const startLoc = this.state.startLoc;\n\n      const isDeclare = this.eatContextual(tt._declare);\n\n      if (\n        isDeclare &&\n        (this.isContextual(tt._declare) || !this.shouldParseExportDeclaration())\n      ) {\n        throw this.raise(\n          TSErrors.ExpectedAmbientAfterExportDeclare,\n          this.state.startLoc,\n        );\n      }\n\n      const isIdentifier = tokenIsIdentifier(this.state.type);\n      const declaration: N.Declaration | undefined | null =\n        (isIdentifier && this.tsTryParseExportDeclaration()) ||\n        super.parseExportDeclaration(node);\n\n      if (!declaration) return null;\n\n      if (\n        declaration.type === \"TSInterfaceDeclaration\" ||\n        declaration.type === \"TSTypeAliasDeclaration\" ||\n        isDeclare\n      ) {\n        node.exportKind = \"type\";\n      }\n\n      if (isDeclare && declaration.type !== \"TSImportEqualsDeclaration\") {\n        // Reset location to include `declare` in range\n        this.resetStartLocation(declaration, startLoc);\n\n        declaration.declare = true;\n      }\n\n      return declaration;\n    }\n\n    parseClassId(\n      node: N.Class,\n      isStatement: boolean,\n      optionalId?: boolean | null,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      bindingType?: BindingFlag,\n    ): void {\n      if ((!isStatement || optionalId) && this.isContextual(tt._implements)) {\n        return;\n      }\n\n      super.parseClassId(\n        node,\n        isStatement,\n        optionalId,\n        (node as any).declare\n          ? BindingFlag.TYPE_TS_AMBIENT\n          : BindingFlag.TYPE_CLASS,\n      );\n      const typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseInOutConstModifiers,\n      );\n      if (typeParameters) node.typeParameters = typeParameters;\n    }\n\n    parseClassPropertyAnnotation(\n      node: N.ClassProperty | N.ClassPrivateProperty | N.ClassAccessorProperty,\n    ): void {\n      if (!node.optional) {\n        if (this.eat(tt.bang)) {\n          node.definite = true;\n        } else if (this.eat(tt.question)) {\n          node.optional = true;\n        }\n      }\n\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) node.typeAnnotation = type;\n    }\n\n    parseClassProperty(node: N.ClassProperty): N.ClassProperty {\n      this.parseClassPropertyAnnotation(node);\n\n      if (\n        this.state.isAmbientContext &&\n        !(node.readonly && !node.typeAnnotation) &&\n        this.match(tt.eq)\n      ) {\n        this.raise(\n          TSErrors.DeclareClassFieldHasInitializer,\n          this.state.startLoc,\n        );\n      }\n      if (node.abstract && this.match(tt.eq)) {\n        const { key } = node;\n        this.raise(\n          TSErrors.AbstractPropertyHasInitializer,\n          this.state.startLoc,\n          {\n            propertyName:\n              key.type === \"Identifier\" && !node.computed\n                ? key.name\n                : `[${this.input.slice(this.offsetToSourcePos(key.start), this.offsetToSourcePos(key.end))}]`,\n          },\n        );\n      }\n\n      return super.parseClassProperty(node);\n    }\n\n    parseClassPrivateProperty(\n      node: N.ClassPrivateProperty,\n    ): N.ClassPrivateProperty {\n      if (node.abstract) {\n        this.raise(TSErrors.PrivateElementHasAbstract, node);\n      }\n\n      if (node.accessibility) {\n        this.raise(TSErrors.PrivateElementHasAccessibility, node, {\n          modifier: node.accessibility,\n        });\n      }\n\n      this.parseClassPropertyAnnotation(node);\n      return super.parseClassPrivateProperty(node);\n    }\n\n    parseClassAccessorProperty(\n      node: N.ClassAccessorProperty,\n    ): N.ClassAccessorProperty {\n      this.parseClassPropertyAnnotation(node);\n      if (node.optional) {\n        this.raise(TSErrors.AccessorCannotBeOptional, node);\n      }\n      return super.parseClassAccessorProperty(node);\n    }\n\n    pushClassMethod(\n      classBody: N.ClassBody,\n      method: N.ClassMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowsDirectSuper: boolean,\n    ): void {\n      const typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseConstModifier,\n      );\n      if (typeParameters && isConstructor) {\n        this.raise(TSErrors.ConstructorHasTypeParameters, typeParameters);\n      }\n\n      const { declare = false, kind } = method;\n\n      if (declare && (kind === \"get\" || kind === \"set\")) {\n        this.raise(TSErrors.DeclareAccessor, method, { kind });\n      }\n      if (typeParameters) method.typeParameters = typeParameters;\n      super.pushClassMethod(\n        classBody,\n        method,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowsDirectSuper,\n      );\n    }\n\n    pushClassPrivateMethod(\n      classBody: N.ClassBody,\n      method: N.ClassPrivateMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n    ): void {\n      const typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseConstModifier,\n      );\n      if (typeParameters) method.typeParameters = typeParameters;\n      super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n    }\n\n    declareClassPrivateMethodInScope(\n      node: N.ClassPrivateMethod | N.TSDeclareMethod,\n      kind: number,\n    ) {\n      if (node.type === \"TSDeclareMethod\") return;\n      // This happens when using the \"estree\" plugin.\n      if (\n        (node as N.Node).type === \"MethodDefinition\" &&\n        (node as unknown as N.EstreeMethodDefinition).value.body == null\n      ) {\n        return;\n      }\n\n      super.declareClassPrivateMethodInScope(node, kind);\n    }\n\n    parseClassSuper(node: N.Class): void {\n      super.parseClassSuper(node);\n      // handle `extends f<<T>\n      if (node.superClass && (this.match(tt.lt) || this.match(tt.bitShiftL))) {\n        if (process.env.BABEL_8_BREAKING) {\n          node.superTypeArguments = this.tsParseTypeArgumentsInExpression();\n        } else {\n          node.superTypeParameters = this.tsParseTypeArgumentsInExpression();\n        }\n      }\n      if (this.eatContextual(tt._implements)) {\n        node.implements = this.tsParseHeritageClause(\"implements\");\n      }\n    }\n\n    parseObjPropValue<T extends N.ObjectMember>(\n      prop: Undone<T>,\n      startLoc: Position | undefined | null,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isPattern: boolean,\n      isAccessor: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): T {\n      const typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseConstModifier,\n      );\n      if (typeParameters) prop.typeParameters = typeParameters;\n\n      return super.parseObjPropValue(\n        prop,\n\n        startLoc,\n        isGenerator,\n        isAsync,\n        isPattern,\n        isAccessor,\n        refExpressionErrors,\n      );\n    }\n\n    parseFunctionParams(node: N.Function, isConstructor: boolean): void {\n      const typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseConstModifier,\n      );\n      if (typeParameters) node.typeParameters = typeParameters;\n      super.parseFunctionParams(node, isConstructor);\n    }\n\n    // `let x: number;`\n    parseVarId(\n      decl: N.VariableDeclarator,\n      kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n    ): void {\n      super.parseVarId(decl, kind);\n      if (\n        decl.id.type === \"Identifier\" &&\n        !this.hasPrecedingLineBreak() &&\n        this.eat(tt.bang)\n      ) {\n        decl.definite = true;\n      }\n\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) {\n        decl.id.typeAnnotation = type;\n        this.resetEndLocation(decl.id); // set end position to end of type\n      }\n    }\n\n    // parse the return type of an async arrow function - let foo = (async (): number => {});\n    parseAsyncArrowFromCallExpression(\n      node: N.ArrowFunctionExpression,\n      call: N.CallExpression,\n    ): N.ArrowFunctionExpression {\n      if (this.match(tt.colon)) {\n        node.returnType = this.tsParseTypeAnnotation();\n      }\n      return super.parseAsyncArrowFromCallExpression(node, call);\n    }\n\n    parseMaybeAssign(\n      refExpressionErrors?: ExpressionErrors | null,\n      afterLeftParse?: Function,\n    ): N.Expression {\n      // Note: When the JSX plugin is on, type assertions (`<T> x`) aren't valid syntax.\n\n      let state: State | undefined | null;\n      let jsx;\n      let typeCast;\n\n      if (\n        this.hasPlugin(\"jsx\") &&\n        (this.match(tt.jsxTagStart) || this.match(tt.lt))\n      ) {\n        // Prefer to parse JSX if possible. But may be an arrow fn.\n        state = this.state.clone();\n\n        jsx = this.tryParse(\n          () => super.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n          state,\n        );\n\n        /*:: invariant(!jsx.aborted) */\n        /*:: invariant(jsx.node != null) */\n        if (!jsx.error) return jsx.node;\n\n        // Remove `tc.j_expr` or `tc.j_oTag` from context added\n        // by parsing `jsxTagStart` to stop the JSX plugin from\n        // messing with the tokens\n        const { context } = this.state;\n        const currentContext = context[context.length - 1];\n        if (currentContext === tc.j_oTag || currentContext === tc.j_expr) {\n          context.pop();\n        }\n      }\n\n      if (!jsx?.error && !this.match(tt.lt)) {\n        return super.parseMaybeAssign(refExpressionErrors, afterLeftParse);\n      }\n\n      // Either way, we're looking at a '<': tt.jsxTagStart or relational.\n\n      // If the state was cloned in the JSX parsing branch above but there\n      // have been any error in the tryParse call, this.state is set to state\n      // so we still need to clone it.\n      if (!state || state === this.state) state = this.state.clone();\n\n      let typeParameters: N.TsTypeParameterDeclaration | undefined | null;\n      // We need to explicitly annotate 'abort' for microsoft/TypeScript#58170\n      const arrow = this.tryParse((abort: () => never) => {\n        // This is similar to TypeScript's `tryParseParenthesizedArrowFunctionExpression`.\n        typeParameters = this.tsParseTypeParameters(this.tsParseConstModifier);\n        const expr = super.parseMaybeAssign(\n          refExpressionErrors,\n          afterLeftParse,\n        );\n\n        if (\n          expr.type !== \"ArrowFunctionExpression\" ||\n          expr.extra?.parenthesized\n        ) {\n          abort();\n        }\n\n        // Correct TypeScript code should have at least 1 type parameter, but don't crash on bad code.\n        if (typeParameters?.params.length !== 0) {\n          this.resetStartLocationFromNode(expr, typeParameters);\n        }\n        expr.typeParameters = typeParameters;\n\n        if (process.env.BABEL_8_BREAKING) {\n          if (\n            this.hasPlugin(\"jsx\") &&\n            expr.typeParameters.params.length === 1 &&\n            !expr.typeParameters.extra?.trailingComma\n          ) {\n            // report error if single type parameter used without trailing comma.\n            const parameter = expr.typeParameters\n              .params[0] as N.TsTypeParameter;\n            if (!parameter.constraint) {\n              // A single type parameter must either have constraints\n              // or a trailing comma, otherwise it's ambiguous with JSX.\n              this.raise(\n                TSErrors.SingleTypeParameterWithoutTrailingComma,\n                createPositionWithColumnOffset(parameter.loc.end, 1),\n                {\n                  typeParameterName: process.env.BABEL_8_BREAKING\n                    ? (parameter.name as N.Identifier).name\n                    : (parameter.name as string),\n                },\n              );\n            }\n          }\n        }\n\n        return expr;\n      }, state);\n\n      /*:: invariant(arrow.node != null) */\n      if (!arrow.error && !arrow.aborted) {\n        // This error is reported outside of the this.tryParse call so that\n        // in case of <T>(x) => 2, we don't consider <T>(x) as a type assertion\n        // because of this error.\n        if (typeParameters) this.reportReservedArrowTypeParam(typeParameters);\n        return arrow.node;\n      }\n\n      if (!jsx) {\n        // Try parsing a type cast instead of an arrow function.\n        // This will never happen outside of JSX.\n        // (Because in JSX the '<' should be a jsxTagStart and not a relational.\n        assert(!this.hasPlugin(\"jsx\"));\n\n        // This will start with a type assertion (via parseMaybeUnary).\n        // But don't directly call `this.tsParseTypeAssertion` because we want to handle any binary after it.\n        typeCast = this.tryParse(\n          () => super.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n          state,\n        );\n        /*:: invariant(!typeCast.aborted) */\n        /*:: invariant(typeCast.node != null) */\n        if (!typeCast.error) return typeCast.node;\n      }\n\n      if (jsx?.node) {\n        /*:: invariant(jsx.failState) */\n        this.state = jsx.failState;\n        return jsx.node;\n      }\n\n      if (arrow.node) {\n        /*:: invariant(arrow.failState) */\n        this.state = arrow.failState;\n        if (typeParameters) this.reportReservedArrowTypeParam(typeParameters);\n        return arrow.node;\n      }\n\n      if (typeCast?.node) {\n        /*:: invariant(typeCast.failState) */\n        this.state = typeCast.failState;\n        return typeCast.node;\n      }\n\n      throw jsx?.error || arrow.error || typeCast?.error;\n    }\n\n    reportReservedArrowTypeParam(node: any) {\n      if (\n        node.params.length === 1 &&\n        !node.params[0].constraint &&\n        !node.extra?.trailingComma &&\n        this.getPluginOption(\"typescript\", \"disallowAmbiguousJSXLike\")\n      ) {\n        this.raise(TSErrors.ReservedArrowTypeParam, node);\n      }\n    }\n\n    // Handle type assertions\n    parseMaybeUnary(\n      refExpressionErrors?: ExpressionErrors | null,\n      sawUnary?: boolean,\n    ): N.Expression {\n      if (!this.hasPlugin(\"jsx\") && this.match(tt.lt)) {\n        return this.tsParseTypeAssertion();\n      }\n      return super.parseMaybeUnary(refExpressionErrors, sawUnary);\n    }\n\n    parseArrow(\n      node: Undone<N.ArrowFunctionExpression>,\n    ): Undone<N.ArrowFunctionExpression> | undefined | null {\n      if (this.match(tt.colon)) {\n        // This is different from how the TS parser does it.\n        // TS uses lookahead. The Babel Parser parses it as a parenthesized expression and converts.\n\n        const result = this.tryParse(abort => {\n          const returnType = this.tsParseTypeOrTypePredicateAnnotation(\n            tt.colon,\n          );\n          if (this.canInsertSemicolon() || !this.match(tt.arrow)) abort();\n          return returnType;\n        });\n\n        if (result.aborted) return;\n\n        if (!result.thrown) {\n          if (result.error) this.state = result.failState;\n          // @ts-expect-error refine typings\n          node.returnType = result.node;\n        }\n      }\n\n      return super.parseArrow(node);\n    }\n\n    // Allow type annotations inside of a parameter list.\n    parseFunctionParamType(param: N.Pattern) {\n      if (this.eat(tt.question)) {\n        (param as any as N.Identifier).optional = true;\n      }\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) param.typeAnnotation = type;\n      this.resetEndLocation(param);\n\n      return param;\n    }\n\n    isAssignable(node: N.Node, isBinding?: boolean): boolean {\n      switch (node.type) {\n        case \"TSTypeCastExpression\":\n          return this.isAssignable(node.expression, isBinding);\n        case \"TSParameterProperty\":\n          return true;\n        default:\n          return super.isAssignable(node, isBinding);\n      }\n    }\n\n    toAssignable(node: N.Node, isLHS: boolean = false): void {\n      switch (node.type) {\n        case \"ParenthesizedExpression\":\n          this.toAssignableParenthesizedExpression(node, isLHS);\n          break;\n        case \"TSAsExpression\":\n        case \"TSSatisfiesExpression\":\n        case \"TSNonNullExpression\":\n        case \"TSTypeAssertion\":\n          if (isLHS) {\n            this.expressionScope.recordArrowParameterBindingError(\n              TSErrors.UnexpectedTypeCastInParameter,\n              node,\n            );\n          } else {\n            this.raise(TSErrors.UnexpectedTypeCastInParameter, node);\n          }\n          this.toAssignable(node.expression, isLHS);\n          break;\n        case \"AssignmentExpression\":\n          if (!isLHS && node.left.type === \"TSTypeCastExpression\") {\n            node.left = this.typeCastToParameter(node.left) as N.Assignable;\n          }\n        /* fall through */\n        default:\n          super.toAssignable(node, isLHS);\n      }\n    }\n\n    toAssignableParenthesizedExpression(\n      node: N.ParenthesizedExpression,\n      isLHS: boolean,\n    ): void {\n      switch (node.expression.type) {\n        case \"TSAsExpression\":\n        case \"TSSatisfiesExpression\":\n        case \"TSNonNullExpression\":\n        case \"TSTypeAssertion\":\n        case \"ParenthesizedExpression\":\n          this.toAssignable(node.expression, isLHS);\n          break;\n        default:\n          super.toAssignable(node, isLHS);\n      }\n    }\n\n    checkToRestConversion(node: N.Node, allowPattern: boolean): void {\n      switch (node.type) {\n        case \"TSAsExpression\":\n        case \"TSSatisfiesExpression\":\n        case \"TSTypeAssertion\":\n        case \"TSNonNullExpression\":\n          this.checkToRestConversion(node.expression, false);\n          break;\n        default:\n          super.checkToRestConversion(node, allowPattern);\n      }\n    }\n\n    isValidLVal(\n      type:\n        | \"TSTypeCastExpression\"\n        | \"TSParameterProperty\"\n        | \"TSNonNullExpression\"\n        | \"TSInstantiationExpression\"\n        | \"TSAsExpression\"\n        | \"TSSatisfiesExpression\"\n        | \"TSTypeAssertion\",\n      isUnparenthesizedInAssign: boolean,\n      binding: BindingFlag,\n    ) {\n      switch (type) {\n        // Allow \"typecasts\" to appear on the left of assignment expressions,\n        // because it may be in an arrow function.\n        // e.g. `const f = (foo: number = 0) => foo;`\n        case \"TSTypeCastExpression\":\n          return true;\n        case \"TSParameterProperty\":\n          return \"parameter\";\n        case \"TSNonNullExpression\":\n          return \"expression\";\n        case \"TSAsExpression\":\n        case \"TSSatisfiesExpression\":\n        case \"TSTypeAssertion\":\n          return (\n            (binding !== BindingFlag.TYPE_NONE || !isUnparenthesizedInAssign) &&\n            ([\"expression\", true] as [string, boolean])\n          );\n        default:\n          return super.isValidLVal(type, isUnparenthesizedInAssign, binding);\n      }\n    }\n\n    parseBindingAtom(): N.Pattern {\n      if (this.state.type === tt._this) {\n        return this.parseIdentifier(/* liberal */ true);\n      }\n      return super.parseBindingAtom();\n    }\n\n    parseMaybeDecoratorArguments(\n      expr: N.Expression,\n      startLoc: Position,\n    ): N.Expression {\n      // handles `@f<<T>`\n      if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n        const typeArguments = this.tsParseTypeArgumentsInExpression();\n\n        if (this.match(tt.parenL)) {\n          const call = super.parseMaybeDecoratorArguments(\n            expr,\n            startLoc,\n          ) as N.CallExpression;\n          if (process.env.BABEL_8_BREAKING) {\n            call.typeArguments = typeArguments;\n          } else {\n            call.typeParameters = typeArguments;\n          }\n\n          return call;\n        }\n\n        this.unexpected(null, tt.parenL);\n      }\n\n      return super.parseMaybeDecoratorArguments(expr, startLoc);\n    }\n\n    checkCommaAfterRest(\n      close: (typeof charCodes)[keyof typeof charCodes],\n    ): boolean {\n      if (\n        this.state.isAmbientContext &&\n        this.match(tt.comma) &&\n        this.lookaheadCharCode() === close\n      ) {\n        this.next();\n        return false;\n      }\n      return super.checkCommaAfterRest(close);\n    }\n\n    // === === === === === === === === === === === === === === === ===\n    // Note: All below methods are duplicates of something in flow.js.\n    // Not sure what the best way to combine these is.\n    // === === === === === === === === === === === === === === === ===\n\n    isClassMethod(): boolean {\n      return this.match(tt.lt) || super.isClassMethod();\n    }\n\n    isClassProperty(): boolean {\n      return (\n        this.match(tt.bang) || this.match(tt.colon) || super.isClassProperty()\n      );\n    }\n\n    parseMaybeDefault<P extends N.Pattern>(\n      startLoc?: Position | null,\n      left?: P | null,\n    ): P | N.AssignmentPattern {\n      const node = super.parseMaybeDefault(startLoc, left);\n\n      if (\n        node.type === \"AssignmentPattern\" &&\n        node.typeAnnotation &&\n        node.right.start < node.typeAnnotation.start\n      ) {\n        this.raise(TSErrors.TypeAnnotationAfterAssign, node.typeAnnotation);\n      }\n\n      return node;\n    }\n\n    // ensure that inside types, we bypass the jsx parser plugin\n    getTokenFromCode(code: number): void {\n      if (this.state.inType) {\n        if (code === charCodes.greaterThan) {\n          this.finishOp(tt.gt, 1);\n          return;\n        }\n        if (code === charCodes.lessThan) {\n          this.finishOp(tt.lt, 1);\n          return;\n        }\n      }\n      super.getTokenFromCode(code);\n    }\n\n    // used after we have finished parsing types\n    reScan_lt_gt() {\n      const { type } = this.state;\n      if (type === tt.lt) {\n        this.state.pos -= 1;\n        this.readToken_lt();\n      } else if (type === tt.gt) {\n        this.state.pos -= 1;\n        this.readToken_gt();\n      }\n    }\n\n    reScan_lt() {\n      const { type } = this.state;\n      if (type === tt.bitShiftL) {\n        this.state.pos -= 2;\n        this.finishOp(tt.lt, 1);\n        return tt.lt;\n      }\n      return type;\n    }\n\n    toAssignableListItem(\n      exprList: (N.Expression | N.SpreadElement | N.RestElement)[],\n      index: number,\n      isLHS: boolean,\n    ): void {\n      const node = exprList[index];\n      if (node.type === \"TSTypeCastExpression\") {\n        exprList[index] = this.typeCastToParameter(node);\n      }\n      super.toAssignableListItem(exprList, index, isLHS);\n    }\n\n    typeCastToParameter(node: N.TsTypeCastExpression): N.Expression {\n      (node.expression as N.Identifier).typeAnnotation = node.typeAnnotation;\n\n      this.resetEndLocation(node.expression, node.typeAnnotation.loc.end);\n\n      return node.expression;\n    }\n\n    shouldParseArrow(params: Array<N.Node>) {\n      if (this.match(tt.colon)) {\n        return params.every(expr => this.isAssignable(expr, true));\n      }\n      return super.shouldParseArrow(params);\n    }\n\n    shouldParseAsyncArrow(): boolean {\n      return this.match(tt.colon) || super.shouldParseAsyncArrow();\n    }\n\n    canHaveLeadingDecorator() {\n      // Avoid unnecessary lookahead in checking for abstract class unless needed!\n      return super.canHaveLeadingDecorator() || this.isAbstractClass();\n    }\n\n    jsxParseOpeningElementAfterName(\n      node: N.JSXOpeningElement,\n    ): N.JSXOpeningElement {\n      // handles `<Component<<T>`\n      if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n        const typeArguments = this.tsTryParseAndCatch(() =>\n          this.tsParseTypeArgumentsInExpression(),\n        );\n        if (typeArguments) {\n          if (process.env.BABEL_8_BREAKING) {\n            node.typeArguments = typeArguments;\n          } else {\n            node.typeParameters = typeArguments;\n          }\n        }\n      }\n      return super.jsxParseOpeningElementAfterName(node);\n    }\n\n    getGetterSetterExpectedParamCount(\n      method: N.ObjectMethod | N.ClassMethod,\n    ): number {\n      const baseCount = super.getGetterSetterExpectedParamCount(method);\n      const params = this.getObjectOrClassMethodParams(method);\n      const firstParam = params[0];\n      const hasContextParam = firstParam && this.isThisParam(firstParam);\n\n      return hasContextParam ? baseCount + 1 : baseCount;\n    }\n\n    parseCatchClauseParam(): N.Pattern {\n      const param = super.parseCatchClauseParam();\n      const type = this.tsTryParseTypeAnnotation();\n\n      if (type) {\n        param.typeAnnotation = type;\n        this.resetEndLocation(param);\n      }\n\n      return param;\n    }\n\n    tsInAmbientContext<T>(cb: () => T): T {\n      const { isAmbientContext: oldIsAmbientContext, strict: oldStrict } =\n        this.state;\n      this.state.isAmbientContext = true;\n      this.state.strict = false;\n      try {\n        return cb();\n      } finally {\n        this.state.isAmbientContext = oldIsAmbientContext;\n        this.state.strict = oldStrict;\n      }\n    }\n\n    parseClass<T extends N.Class>(\n      node: Undone<T>,\n      isStatement: boolean,\n      optionalId?: boolean,\n    ): T {\n      const oldInAbstractClass = this.state.inAbstractClass;\n      this.state.inAbstractClass = !!(node as any).abstract;\n      try {\n        return super.parseClass(node, isStatement, optionalId);\n      } finally {\n        this.state.inAbstractClass = oldInAbstractClass;\n      }\n    }\n\n    tsParseAbstractDeclaration(\n      node: any,\n      decorators: N.Decorator[] | null,\n    ): N.ClassDeclaration | N.TsInterfaceDeclaration | undefined | null {\n      if (this.match(tt._class)) {\n        node.abstract = true;\n        return this.maybeTakeDecorators(\n          decorators,\n          this.parseClass<N.ClassDeclaration>(\n            node as N.ClassDeclaration,\n            /* isStatement */ true,\n            /* optionalId */ false,\n          ),\n        );\n      } else if (this.isContextual(tt._interface)) {\n        // for invalid abstract interface\n\n        // To avoid\n        //   abstract interface\n        //   Foo {}\n        if (!this.hasFollowingLineBreak()) {\n          node.abstract = true;\n          this.raise(TSErrors.NonClassMethodPropertyHasAbstractModifier, node);\n          return this.tsParseInterfaceDeclaration(\n            node as N.TsInterfaceDeclaration,\n          );\n        }\n      } else {\n        this.unexpected(null, tt._class);\n      }\n    }\n\n    parseMethod<\n      T extends N.ObjectMethod | N.ClassMethod | N.ClassPrivateMethod,\n    >(\n      node: Undone<T>,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowDirectSuper: boolean,\n      type: T[\"type\"],\n      inClassScope?: boolean,\n    ) {\n      const method = super.parseMethod<T>(\n        node,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowDirectSuper,\n        type,\n        inClassScope,\n      );\n      // @ts-expect-error todo(flow->ts) property not defined for all types in union\n      if (method.abstract || method.type === \"TSAbstractMethodDefinition\") {\n        const hasEstreePlugin = this.hasPlugin(\"estree\");\n        const methodFn = hasEstreePlugin\n          ? // @ts-expect-error estree typings\n            method.value\n          : method;\n        if (methodFn.body) {\n          const { key } = method;\n          this.raise(TSErrors.AbstractMethodHasImplementation, method, {\n            methodName:\n              key.type === \"Identifier\" && !method.computed\n                ? key.name\n                : `[${this.input.slice(this.offsetToSourcePos(key.start), this.offsetToSourcePos(key.end))}]`,\n          });\n        }\n      }\n      return method;\n    }\n\n    tsParseTypeParameterName(): N.Identifier | string {\n      const typeName: N.Identifier = this.parseIdentifier();\n      return process.env.BABEL_8_BREAKING ? typeName : typeName.name;\n    }\n\n    shouldParseAsAmbientContext(): boolean {\n      return !!this.getPluginOption(\"typescript\", \"dts\");\n    }\n\n    parse() {\n      if (this.shouldParseAsAmbientContext()) {\n        this.state.isAmbientContext = true;\n      }\n      return super.parse();\n    }\n\n    getExpression() {\n      if (this.shouldParseAsAmbientContext()) {\n        this.state.isAmbientContext = true;\n      }\n      return super.getExpression();\n    }\n\n    parseExportSpecifier(\n      node: Undone<N.ExportSpecifier>,\n      isString: boolean,\n      isInTypeExport: boolean,\n      isMaybeTypeOnly: boolean,\n    ) {\n      if (!isString && isMaybeTypeOnly) {\n        this.parseTypeOnlyImportExportSpecifier(\n          node,\n          /* isImport */ false,\n          isInTypeExport,\n        );\n        return this.finishNode<N.ExportSpecifier>(node, \"ExportSpecifier\");\n      }\n      node.exportKind = \"value\";\n      return super.parseExportSpecifier(\n        node,\n        isString,\n        isInTypeExport,\n        isMaybeTypeOnly,\n      );\n    }\n\n    parseImportSpecifier(\n      specifier: Undone<N.ImportSpecifier>,\n      importedIsString: boolean,\n      isInTypeOnlyImport: boolean,\n      isMaybeTypeOnly: boolean,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      bindingType: BindingFlag | undefined,\n    ): N.ImportSpecifier {\n      if (!importedIsString && isMaybeTypeOnly) {\n        this.parseTypeOnlyImportExportSpecifier(\n          specifier,\n          /* isImport */ true,\n          isInTypeOnlyImport,\n        );\n        return this.finishNode<N.ImportSpecifier>(specifier, \"ImportSpecifier\");\n      }\n      specifier.importKind = \"value\";\n      return super.parseImportSpecifier(\n        specifier,\n        importedIsString,\n        isInTypeOnlyImport,\n        isMaybeTypeOnly,\n        isInTypeOnlyImport\n          ? BindingFlag.TYPE_TS_TYPE_IMPORT\n          : BindingFlag.TYPE_TS_VALUE_IMPORT,\n      );\n    }\n\n    parseTypeOnlyImportExportSpecifier(\n      node: any,\n      isImport: boolean,\n      isInTypeOnlyImportExport: boolean,\n    ): void {\n      const leftOfAsKey = isImport ? \"imported\" : \"local\";\n      const rightOfAsKey = isImport ? \"local\" : \"exported\";\n\n      let leftOfAs = node[leftOfAsKey];\n      let rightOfAs;\n\n      let hasTypeSpecifier = false;\n      let canParseAsKeyword = true;\n\n      const loc = leftOfAs.loc.start;\n\n      // https://github.com/microsoft/TypeScript/blob/fc4f9d83d5939047aa6bb2a43965c6e9bbfbc35b/src/compiler/parser.ts#L7411-L7456\n      // import { type } from \"mod\";          - hasTypeSpecifier: false, leftOfAs: type\n      // import { type as } from \"mod\";       - hasTypeSpecifier: true,  leftOfAs: as\n      // import { type as as } from \"mod\";    - hasTypeSpecifier: false, leftOfAs: type, rightOfAs: as\n      // import { type as as as } from \"mod\"; - hasTypeSpecifier: true,  leftOfAs: as,   rightOfAs: as\n      if (this.isContextual(tt._as)) {\n        // { type as ...? }\n        const firstAs = this.parseIdentifier();\n        if (this.isContextual(tt._as)) {\n          // { type as as ...? }\n          const secondAs = this.parseIdentifier();\n          if (tokenIsKeywordOrIdentifier(this.state.type)) {\n            // { type as as something }\n            hasTypeSpecifier = true;\n            leftOfAs = firstAs;\n            rightOfAs = isImport\n              ? this.parseIdentifier()\n              : this.parseModuleExportName();\n            canParseAsKeyword = false;\n          } else {\n            // { type as as }\n            rightOfAs = secondAs;\n            canParseAsKeyword = false;\n          }\n        } else if (tokenIsKeywordOrIdentifier(this.state.type)) {\n          // { type as something }\n          canParseAsKeyword = false;\n          rightOfAs = isImport\n            ? this.parseIdentifier()\n            : this.parseModuleExportName();\n        } else {\n          // { type as }\n          hasTypeSpecifier = true;\n          leftOfAs = firstAs;\n        }\n      } else if (tokenIsKeywordOrIdentifier(this.state.type)) {\n        // { type something ...? }\n        hasTypeSpecifier = true;\n        if (isImport) {\n          leftOfAs = this.parseIdentifier(true);\n          if (!this.isContextual(tt._as)) {\n            this.checkReservedWord(\n              leftOfAs.name,\n              leftOfAs.loc.start,\n              true,\n              true,\n            );\n          }\n        } else {\n          leftOfAs = this.parseModuleExportName();\n        }\n      }\n      if (hasTypeSpecifier && isInTypeOnlyImportExport) {\n        this.raise(\n          isImport\n            ? TSErrors.TypeModifierIsUsedInTypeImports\n            : TSErrors.TypeModifierIsUsedInTypeExports,\n          loc,\n        );\n      }\n\n      node[leftOfAsKey] = leftOfAs;\n      node[rightOfAsKey] = rightOfAs;\n\n      const kindKey = isImport ? \"importKind\" : \"exportKind\";\n      node[kindKey] = hasTypeSpecifier ? \"type\" : \"value\";\n\n      if (canParseAsKeyword && this.eatContextual(tt._as)) {\n        node[rightOfAsKey] = isImport\n          ? this.parseIdentifier()\n          : this.parseModuleExportName();\n      }\n      if (!node[rightOfAsKey]) {\n        node[rightOfAsKey] = this.cloneIdentifier(node[leftOfAsKey]);\n      }\n      if (isImport) {\n        this.checkIdentifier(\n          node[rightOfAsKey],\n          hasTypeSpecifier\n            ? BindingFlag.TYPE_TS_TYPE_IMPORT\n            : BindingFlag.TYPE_TS_VALUE_IMPORT,\n        );\n      }\n    }\n\n    /**\n     * This hook is defined in the ESTree plugin.\n     * The TS-ESLint always define optional AST properties, here we provide the\n     * default value for such properties immediately after `finishNode` was invoked.\n     *\n     * @param node The AST node finished by finishNode\n     * @returns\n     */\n    fillOptionalPropertiesForTSESLint(node: N.Node): void {\n      switch (node.type) {\n        case \"ExpressionStatement\":\n          node.directive ??= undefined;\n          return;\n        case \"RestElement\":\n          node.value = undefined;\n        /* fallthrough */\n        case \"Identifier\":\n        case \"ArrayPattern\":\n        case \"AssignmentPattern\":\n        case \"ObjectPattern\":\n          node.decorators ??= [];\n          node.optional ??= false;\n          node.typeAnnotation ??= undefined;\n          return;\n        case \"TSParameterProperty\":\n          node.accessibility ??= undefined;\n          node.decorators ??= [];\n          node.override ??= false;\n          node.readonly ??= false;\n          node.static ??= false;\n          return;\n        case \"TSEmptyBodyFunctionExpression\":\n          node.body = null;\n        /* fallthrough */\n        case \"TSDeclareFunction\":\n        case \"FunctionDeclaration\":\n        case \"FunctionExpression\":\n        case \"ClassMethod\":\n        case \"ClassPrivateMethod\":\n          node.declare ??= false;\n          node.returnType ??= undefined;\n          node.typeParameters ??= undefined;\n          return;\n        case \"Property\":\n          node.optional ??= false;\n          return;\n        case \"TSMethodSignature\":\n        case \"TSPropertySignature\":\n          node.optional ??= false;\n        /* fallthrough */\n        case \"TSIndexSignature\":\n          node.accessibility ??= undefined;\n          node.readonly ??= false;\n          node.static ??= false;\n          return;\n        case \"TSAbstractPropertyDefinition\":\n        case \"PropertyDefinition\":\n        case \"TSAbstractAccessorProperty\":\n        case \"AccessorProperty\":\n          node.declare ??= false;\n          node.definite ??= false;\n          node.readonly ??= false;\n          node.typeAnnotation ??= undefined;\n        /* fallthrough */\n        case \"TSAbstractMethodDefinition\":\n        case \"MethodDefinition\":\n          node.accessibility ??= undefined;\n          node.decorators ??= [];\n          node.override ??= false;\n          node.optional ??= false;\n          return;\n        case \"ClassExpression\":\n          node.id ??= null;\n        /* fallthrough */\n        case \"ClassDeclaration\":\n          node.abstract ??= false;\n          node.declare ??= false;\n          node.decorators ??= [];\n          node.implements ??= [];\n          node.superTypeArguments ??= undefined;\n          node.typeParameters ??= undefined;\n          return;\n        case \"TSTypeAliasDeclaration\":\n        case \"VariableDeclaration\":\n          node.declare ??= false;\n          return;\n        case \"VariableDeclarator\":\n          node.definite ??= false;\n          return;\n        case \"TSEnumDeclaration\":\n          node.const ??= false;\n          node.declare ??= false;\n          return;\n        case \"TSEnumMember\":\n          node.computed ??= false;\n          return;\n        case \"TSImportType\":\n          node.qualifier ??= null;\n          node.options ??= null;\n          if (process.env.BABEL_8_BREAKING) {\n            node.typeArguments ??= null;\n          }\n          return;\n        case \"TSInterfaceDeclaration\":\n          node.declare ??= false;\n          node.extends ??= [];\n          return;\n        case \"TSModuleDeclaration\":\n          node.declare ??= false;\n          node.global ??= node.kind === \"global\";\n          return;\n        case \"TSTypeParameter\":\n          node.const ??= false;\n          node.in ??= false;\n          node.out ??= false;\n          return;\n      }\n    }\n  };\n\nfunction isPossiblyLiteralEnum(expression: N.Expression): boolean {\n  if (expression.type !== \"MemberExpression\") return false;\n\n  const { computed, property } = expression;\n\n  if (\n    computed &&\n    property.type !== \"StringLiteral\" &&\n    (property.type !== \"TemplateLiteral\" || property.expressions.length > 0)\n  ) {\n    return false;\n  }\n\n  return isUncomputedMemberExpressionChain(expression.object);\n}\n\n// If a const declaration has no type annotation and is initialized to\n// a string literal, numeric literal, or enum reference, then it is\n// allowed. In an ideal world, we'd check whether init was *actually* an\n// enum reference, but we allow anything that \"could be\" a literal enum\n// in `isPossiblyLiteralEnum` since we don't have all the information\n// that the typescript compiler has.\nfunction isValidAmbientConstInitializer(\n  expression: N.Expression,\n  estree: boolean,\n): boolean {\n  const { type } = expression;\n  if (expression.extra?.parenthesized) {\n    return false;\n  }\n  if (estree) {\n    if (type === \"Literal\") {\n      const { value } = expression;\n      if (typeof value === \"string\" || typeof value === \"boolean\") {\n        return true;\n      }\n    }\n  } else {\n    if (type === \"StringLiteral\" || type === \"BooleanLiteral\") {\n      return true;\n    }\n  }\n  if (isNumber(expression, estree) || isNegativeNumber(expression, estree)) {\n    return true;\n  }\n  if (type === \"TemplateLiteral\" && expression.expressions.length === 0) {\n    return true;\n  }\n  if (isPossiblyLiteralEnum(expression)) {\n    return true;\n  }\n  return false;\n}\n\nfunction isNumber(expression: N.Expression, estree: boolean): boolean {\n  if (estree) {\n    return (\n      expression.type === \"Literal\" &&\n      (typeof expression.value === \"number\" || \"bigint\" in expression)\n    );\n  }\n  return (\n    expression.type === \"NumericLiteral\" || expression.type === \"BigIntLiteral\"\n  );\n}\n\nfunction isNegativeNumber(expression: N.Expression, estree: boolean): boolean {\n  if (expression.type === \"UnaryExpression\") {\n    const { operator, argument } = expression;\n    if (operator === \"-\" && isNumber(argument, estree)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction isUncomputedMemberExpressionChain(expression: N.Expression): boolean {\n  if (expression.type === \"Identifier\") return true;\n  if (expression.type !== \"MemberExpression\" || expression.computed) {\n    return false;\n  }\n\n  return isUncomputedMemberExpressionChain(expression.object);\n}\n","import * as charCodes from \"charcodes\";\n\nimport { tokenLabelName, tt } from \"../tokenizer/types.ts\";\nimport type Parser from \"../parser/index.ts\";\nimport type * as N from \"../types.ts\";\nimport { ParseErrorEnum } from \"../parse-error.ts\";\nimport type { Undone } from \"../parser/node.ts\";\nimport type { ExpressionErrors } from \"../parser/util.ts\";\nimport type { BindingFlag } from \"../util/scopeflags.ts\";\nimport type { Position } from \"../util/location.ts\";\n\ntype PossiblePlaceholders = {\n  Identifier: N.Identifier;\n  StringLiteral: N.StringLiteral;\n  Expression: N.Expression;\n  Statement: N.Statement;\n  Declaration: N.Declaration;\n  BlockStatement: N.BlockStatement;\n  ClassBody: N.ClassBody;\n  Pattern: N.Pattern;\n};\nexport type PlaceholderTypes = keyof PossiblePlaceholders;\n\ntype NodeOf<T extends keyof PossiblePlaceholders> = PossiblePlaceholders[T];\n// todo: when there  is proper union type for Node\n// type NodeOf<T extends PlaceholderTypes> = Extract<N.Node, { type: T }>;\n\n// todo: Placeholder<T> breaks everything, because its type is incompatible with\n// the substituted nodes.\ntype MaybePlaceholder<T extends PlaceholderTypes> = NodeOf<T>; // | Placeholder<T>\n\n/* eslint sort-keys: \"error\" */\nconst PlaceholderErrors = ParseErrorEnum`placeholders`({\n  ClassNameIsRequired: \"A class name is required.\",\n  UnexpectedSpace: \"Unexpected space in placeholder.\",\n});\n\nexport default (superClass: typeof Parser) =>\n  class PlaceholdersParserMixin extends superClass implements Parser {\n    parsePlaceholder<T extends PlaceholderTypes>(\n      expectedNode: T,\n    ): /*?N.Placeholder<T>*/ MaybePlaceholder<T> | undefined {\n      if (this.match(tt.placeholder)) {\n        const node = this.startNode<N.Placeholder<T>>();\n        this.next();\n        this.assertNoSpace();\n\n        // We can't use this.parseIdentifier because\n        // we don't want nested placeholders.\n        node.name = super.parseIdentifier(/* liberal */ true);\n\n        this.assertNoSpace();\n        this.expect(tt.placeholder);\n        return this.finishPlaceholder(node, expectedNode);\n      }\n    }\n\n    finishPlaceholder<T extends PlaceholderTypes>(\n      node: Undone<N.Placeholder> | Undone<NodeOf<PlaceholderTypes>>,\n      expectedNode: T,\n    ): /*N.Placeholder<T>*/ MaybePlaceholder<T> {\n      let placeholder = node as unknown as N.Placeholder<T>;\n\n      if (!placeholder.expectedNode || !placeholder.type) {\n        placeholder = this.finishNode(\n          placeholder,\n          \"Placeholder\",\n        ) as unknown as N.Placeholder<T>;\n      }\n\n      placeholder.expectedNode = expectedNode;\n      return placeholder as unknown as MaybePlaceholder<T>;\n    }\n\n    /* ============================================================ *\n     * tokenizer/index.ts                                           *\n     * ============================================================ */\n\n    getTokenFromCode(code: number) {\n      if (\n        code === charCodes.percentSign &&\n        this.input.charCodeAt(this.state.pos + 1) === charCodes.percentSign\n      ) {\n        this.finishOp(tt.placeholder, 2);\n      } else {\n        super.getTokenFromCode(code);\n      }\n    }\n\n    /* ============================================================ *\n     * parser/expression.ts                                         *\n     * ============================================================ */\n\n    parseExprAtom(\n      refExpressionErrors?: ExpressionErrors | null,\n    ): MaybePlaceholder<\"Expression\"> {\n      return (\n        this.parsePlaceholder(\"Expression\") ||\n        super.parseExprAtom(refExpressionErrors)\n      );\n    }\n\n    parseIdentifier(liberal?: boolean): MaybePlaceholder<\"Identifier\"> {\n      // NOTE: This function only handles identifiers outside of\n      // expressions and binding patterns, since they are already\n      // handled by the parseExprAtom and parseBindingAtom functions.\n      // This is needed, for example, to parse \"class %%NAME%% {}\".\n      return (\n        this.parsePlaceholder(\"Identifier\") || super.parseIdentifier(liberal)\n      );\n    }\n\n    checkReservedWord(\n      word: string,\n      startLoc: Position,\n      checkKeywords: boolean,\n      isBinding: boolean,\n    ) {\n      // Sometimes we call #checkReservedWord(node.name), expecting\n      // that node is an Identifier. If it is a Placeholder, name\n      // will be undefined.\n      if (word !== undefined) {\n        super.checkReservedWord(word, startLoc, checkKeywords, isBinding);\n      }\n    }\n\n    /* ============================================================ *\n     * parser/node.ts                                               *\n     * ============================================================ */\n\n    cloneIdentifier<T extends N.Identifier | N.Placeholder>(node: T): T {\n      const cloned = super.cloneIdentifier(node);\n      if (cloned.type === \"Placeholder\") {\n        cloned.expectedNode = (node as N.Placeholder).expectedNode;\n      }\n      return cloned;\n    }\n\n    cloneStringLiteral<\n      T extends N.EstreeLiteral | N.StringLiteral | N.Placeholder,\n    >(node: T): T {\n      if (node.type === \"Placeholder\") {\n        return this.cloneIdentifier(node) as T;\n      }\n      return super.cloneStringLiteral(node);\n    }\n\n    /* ============================================================ *\n     * parser/lval.ts                                               *\n     * ============================================================ */\n\n    parseBindingAtom(): MaybePlaceholder<\"Pattern\"> {\n      return this.parsePlaceholder(\"Pattern\") || super.parseBindingAtom();\n    }\n\n    isValidLVal(type: string, isParenthesized: boolean, binding: BindingFlag) {\n      return (\n        type === \"Placeholder\" ||\n        super.isValidLVal(type, isParenthesized, binding)\n      );\n    }\n\n    toAssignable(node: N.Node, isLHS: boolean): void {\n      if (\n        node &&\n        node.type === \"Placeholder\" &&\n        node.expectedNode === \"Expression\"\n      ) {\n        node.expectedNode = \"Pattern\";\n      } else {\n        super.toAssignable(node, isLHS);\n      }\n    }\n\n    /* ============================================================ *\n     * parser/statement.ts                                          *\n     * ============================================================ */\n\n    chStartsBindingIdentifier(ch: number, pos: number): boolean {\n      if (super.chStartsBindingIdentifier(ch, pos)) {\n        return true;\n      }\n\n      // Accept \"let %%\" as the start of \"let %%placeholder%%\", as though the\n      // placeholder were an identifier.\n      const next = this.nextTokenStart();\n      if (\n        this.input.charCodeAt(next) === charCodes.percentSign &&\n        this.input.charCodeAt(next + 1) === charCodes.percentSign\n      ) {\n        return true;\n      }\n\n      return false;\n    }\n\n    verifyBreakContinue(\n      node: N.BreakStatement | N.ContinueStatement,\n      isBreak: boolean,\n    ) {\n      // @ts-expect-error: node.label could be Placeholder\n      if (node.label && node.label.type === \"Placeholder\") return;\n      super.verifyBreakContinue(node, isBreak);\n    }\n\n    // @ts-expect-error Plugin will override parser interface\n    parseExpressionStatement(\n      node: MaybePlaceholder<\"Statement\">,\n      expr: MaybePlaceholder<\"Expression\">,\n    ): MaybePlaceholder<\"Statement\"> {\n      // @ts-expect-error placeholder typings\n      if (expr.type !== \"Placeholder\" || expr.extra?.parenthesized) {\n        // @ts-expect-error placeholder typings\n        return super.parseExpressionStatement(node, expr);\n      }\n\n      if (this.match(tt.colon)) {\n        // @ts-expect-error placeholder typings\n        const stmt: N.LabeledStatement = node;\n        stmt.label = this.finishPlaceholder(expr, \"Identifier\");\n        this.next();\n        stmt.body = super.parseStatementOrSloppyAnnexBFunctionDeclaration();\n        return this.finishNode(stmt, \"LabeledStatement\");\n      }\n\n      this.semicolon();\n      const stmtPlaceholder = node as unknown as N.Placeholder<\"Statement\">;\n      stmtPlaceholder.name = (expr as N.Placeholder).name;\n      return this.finishPlaceholder(stmtPlaceholder, \"Statement\");\n    }\n\n    parseBlock(\n      allowDirectives?: boolean,\n      createNewLexicalScope?: boolean,\n      afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n    ): MaybePlaceholder<\"BlockStatement\"> {\n      return (\n        this.parsePlaceholder(\"BlockStatement\") ||\n        super.parseBlock(\n          allowDirectives,\n          createNewLexicalScope,\n          afterBlockParse,\n        )\n      );\n    }\n\n    parseFunctionId(\n      requireId?: boolean,\n    ): MaybePlaceholder<\"Identifier\"> | undefined | null {\n      return (\n        this.parsePlaceholder(\"Identifier\") || super.parseFunctionId(requireId)\n      );\n    }\n    // @ts-expect-error Plugin will override parser interface\n    parseClass<T extends N.Class>(\n      node: T,\n      isStatement: /* T === ClassDeclaration */ boolean,\n      optionalId?: boolean,\n    ): T {\n      const type = isStatement ? \"ClassDeclaration\" : \"ClassExpression\";\n\n      this.next();\n      const oldStrict = this.state.strict;\n\n      const placeholder = this.parsePlaceholder(\"Identifier\");\n      if (placeholder) {\n        if (\n          this.match(tt._extends) ||\n          this.match(tt.placeholder) ||\n          this.match(tt.braceL)\n        ) {\n          node.id = placeholder;\n        } else if (optionalId || !isStatement) {\n          node.id = null;\n          node.body = this.finishPlaceholder(placeholder, \"ClassBody\");\n          return this.finishNode(node, type);\n        } else {\n          throw this.raise(\n            PlaceholderErrors.ClassNameIsRequired,\n            this.state.startLoc,\n          );\n        }\n      } else {\n        this.parseClassId(node, isStatement, optionalId);\n      }\n\n      super.parseClassSuper(node);\n      node.body =\n        this.parsePlaceholder(\"ClassBody\") ||\n        super.parseClassBody(!!node.superClass, oldStrict);\n      return this.finishNode(node, type);\n    }\n\n    parseExport(\n      node: Undone<\n        | N.ExportDefaultDeclaration\n        | N.ExportAllDeclaration\n        | N.ExportNamedDeclaration\n      >,\n      decorators: N.Decorator[] | null,\n    ): N.AnyExport {\n      const placeholder = this.parsePlaceholder(\"Identifier\");\n      if (!placeholder) return super.parseExport(node, decorators);\n\n      const node2 = node as Undone<N.ExportNamedDeclaration>;\n\n      if (!this.isContextual(tt._from) && !this.match(tt.comma)) {\n        // export %%DECL%%;\n        node2.specifiers = [];\n        node2.source = null;\n        node2.declaration = this.finishPlaceholder(placeholder, \"Declaration\");\n        return this.finishNode(node2, \"ExportNamedDeclaration\");\n      }\n\n      // export %%NAME%% from \"foo\";\n      this.expectPlugin(\"exportDefaultFrom\");\n      const specifier = this.startNode<N.ExportDefaultSpecifier>();\n      specifier.exported = placeholder;\n      node2.specifiers = [this.finishNode(specifier, \"ExportDefaultSpecifier\")];\n\n      return super.parseExport(node2, decorators);\n    }\n\n    isExportDefaultSpecifier(): boolean {\n      if (this.match(tt._default)) {\n        const next = this.nextTokenStart();\n        if (this.isUnparsedContextual(next, \"from\")) {\n          if (\n            this.input.startsWith(\n              tokenLabelName(tt.placeholder),\n              this.nextTokenStartSince(next + 4),\n            )\n          ) {\n            return true;\n          }\n        }\n      }\n      return super.isExportDefaultSpecifier();\n    }\n\n    maybeParseExportDefaultSpecifier(\n      node: Undone<\n        | N.ExportDefaultDeclaration\n        | N.ExportAllDeclaration\n        | N.ExportNamedDeclaration\n      >,\n      maybeDefaultIdentifier: N.Identifier | null,\n    ): node is Undone<N.ExportNamedDeclaration> {\n      if ((node as N.ExportNamedDeclaration).specifiers?.length) {\n        // \"export %%NAME%%\" has already been parsed by #parseExport.\n        return true;\n      }\n      return super.maybeParseExportDefaultSpecifier(\n        node,\n        maybeDefaultIdentifier,\n      );\n    }\n\n    checkExport(node: N.ExportNamedDeclaration): void {\n      const { specifiers } = node;\n      if (specifiers?.length) {\n        node.specifiers = specifiers.filter(\n          // @ts-expect-error placeholder typings\n          node => node.exported.type === \"Placeholder\",\n        );\n      }\n      super.checkExport(node);\n      node.specifiers = specifiers;\n    }\n\n    parseImport(\n      node: Undone<N.ImportDeclaration>,\n    ): N.ImportDeclaration | N.TsImportEqualsDeclaration {\n      const placeholder = this.parsePlaceholder(\"Identifier\");\n      if (!placeholder) return super.parseImport(node);\n\n      node.specifiers = [];\n\n      if (!this.isContextual(tt._from) && !this.match(tt.comma)) {\n        // import %%STRING%%;\n        node.source = this.finishPlaceholder(placeholder, \"StringLiteral\");\n        this.semicolon();\n        return this.finishNode(node, \"ImportDeclaration\");\n      }\n\n      // import %%DEFAULT%% ...\n      const specifier =\n        this.startNodeAtNode<N.ImportDefaultSpecifier>(placeholder);\n      specifier.local = placeholder;\n      node.specifiers.push(\n        this.finishNode(specifier, \"ImportDefaultSpecifier\"),\n      );\n\n      if (this.eat(tt.comma)) {\n        // import %%DEFAULT%%, * as ...\n        const hasStarImport = this.maybeParseStarImportSpecifier(node);\n\n        // import %%DEFAULT%%, { ...\n        if (!hasStarImport) this.parseNamedImportSpecifiers(node);\n      }\n\n      this.expectContextual(tt._from);\n      node.source = this.parseImportSource();\n      this.semicolon();\n      return this.finishNode(node, \"ImportDeclaration\");\n    }\n\n    parseImportSource(): MaybePlaceholder<\"StringLiteral\"> {\n      // import ... from %%STRING%%;\n\n      return (\n        this.parsePlaceholder(\"StringLiteral\") || super.parseImportSource()\n      );\n    }\n\n    // Throws if the current token and the prev one are separated by a space.\n    assertNoSpace(): void {\n      if (\n        this.state.start >\n        this.offsetToSourcePos(this.state.lastTokEndLoc.index)\n      ) {\n        this.raise(PlaceholderErrors.UnexpectedSpace, this.state.lastTokEndLoc);\n      }\n    }\n  };\n","import type Parser from \"../parser/index.ts\";\nimport { tokenIsIdentifier, tt } from \"../tokenizer/types.ts\";\nimport type * as N from \"../types.ts\";\nimport type { ExpressionErrors } from \"../parser/util.ts\";\n\nexport default (superClass: typeof Parser) =>\n  class V8IntrinsicMixin extends superClass implements Parser {\n    parseV8Intrinsic(): N.Expression {\n      if (this.match(tt.modulo)) {\n        const v8IntrinsicStartLoc = this.state.startLoc;\n        // let the `loc` of Identifier starts from `%`\n        const node = this.startNode<N.Identifier>();\n        this.next(); // eat '%'\n        if (tokenIsIdentifier(this.state.type)) {\n          const name = this.parseIdentifierName();\n          const identifier = this.createIdentifier(node, name);\n          this.castNodeTo(identifier, \"V8IntrinsicIdentifier\");\n          if (this.match(tt.parenL)) {\n            return identifier;\n          }\n        }\n        this.unexpected(v8IntrinsicStartLoc);\n      }\n    }\n\n    /* ============================================================ *\n     * parser/expression.js                                         *\n     * ============================================================ */\n\n    parseExprAtom(refExpressionErrors?: ExpressionErrors | null): N.Expression {\n      return (\n        this.parseV8Intrinsic() || super.parseExprAtom(refExpressionErrors)\n      );\n    }\n  };\n","import type Parser from \"./parser/index.ts\";\nimport type { PluginConfig } from \"./typings.ts\";\n\nexport type Plugin = PluginConfig;\n\nexport type MixinPlugin = (\n  superClass: new (...args: any) => Parser,\n) => new (...args: any) => Parser;\n\nconst PIPELINE_PROPOSALS = process.env.BABEL_8_BREAKING\n  ? [\"fsharp\", \"hack\"]\n  : [\"minimal\", \"fsharp\", \"hack\", \"smart\"];\nconst TOPIC_TOKENS = [\"^^\", \"@@\", \"^\", \"%\", \"#\"];\n\nexport function validatePlugins(pluginsMap: Map<string, any>) {\n  if (pluginsMap.has(\"decorators\")) {\n    if (pluginsMap.has(\"decorators-legacy\")) {\n      throw new Error(\n        \"Cannot use the decorators and decorators-legacy plugin together\",\n      );\n    }\n\n    const decoratorsBeforeExport =\n      pluginsMap.get(\"decorators\").decoratorsBeforeExport;\n    if (\n      decoratorsBeforeExport != null &&\n      typeof decoratorsBeforeExport !== \"boolean\"\n    ) {\n      throw new Error(\n        \"'decoratorsBeforeExport' must be a boolean, if specified.\",\n      );\n    }\n\n    const allowCallParenthesized =\n      pluginsMap.get(\"decorators\").allowCallParenthesized;\n    if (\n      allowCallParenthesized != null &&\n      typeof allowCallParenthesized !== \"boolean\"\n    ) {\n      throw new Error(\"'allowCallParenthesized' must be a boolean.\");\n    }\n  }\n\n  if (pluginsMap.has(\"flow\") && pluginsMap.has(\"typescript\")) {\n    throw new Error(\"Cannot combine flow and typescript plugins.\");\n  }\n\n  if (pluginsMap.has(\"placeholders\") && pluginsMap.has(\"v8intrinsic\")) {\n    throw new Error(\"Cannot combine placeholders and v8intrinsic plugins.\");\n  }\n\n  if (pluginsMap.has(\"pipelineOperator\")) {\n    const proposal = pluginsMap.get(\"pipelineOperator\").proposal;\n\n    if (!PIPELINE_PROPOSALS.includes(proposal)) {\n      const proposalList = PIPELINE_PROPOSALS.map(p => `\"${p}\"`).join(\", \");\n      throw new Error(\n        `\"pipelineOperator\" requires \"proposal\" option whose value must be one of: ${proposalList}.`,\n      );\n    }\n\n    if (proposal === \"hack\") {\n      if (pluginsMap.has(\"placeholders\")) {\n        throw new Error(\n          \"Cannot combine placeholders plugin and Hack-style pipes.\",\n        );\n      }\n\n      if (pluginsMap.has(\"v8intrinsic\")) {\n        throw new Error(\n          \"Cannot combine v8intrinsic plugin and Hack-style pipes.\",\n        );\n      }\n\n      const topicToken = pluginsMap.get(\"pipelineOperator\").topicToken;\n\n      if (!TOPIC_TOKENS.includes(topicToken)) {\n        const tokenList = TOPIC_TOKENS.map(t => `\"${t}\"`).join(\", \");\n\n        throw new Error(\n          `\"pipelineOperator\" in \"proposal\": \"hack\" mode also requires a \"topicToken\" option whose value must be one of: ${tokenList}.`,\n        );\n      }\n\n      if (!process.env.BABEL_8_BREAKING) {\n        if (\n          topicToken === \"#\" &&\n          pluginsMap.get(\"recordAndTuple\")?.syntaxType === \"hash\"\n        ) {\n          throw new Error(\n            `Plugin conflict between \\`[\"pipelineOperator\", { proposal: \"hack\", topicToken: \"#\" }]\\` and \\`${JSON.stringify([\"recordAndTuple\", pluginsMap.get(\"recordAndTuple\")])}\\`.`,\n          );\n        }\n      }\n    } else if (\n      !process.env.BABEL_8_BREAKING &&\n      proposal === \"smart\" &&\n      pluginsMap.get(\"recordAndTuple\")?.syntaxType === \"hash\"\n    ) {\n      throw new Error(\n        `Plugin conflict between \\`[\"pipelineOperator\", { proposal: \"smart\" }]\\` and \\`${JSON.stringify([\"recordAndTuple\", pluginsMap.get(\"recordAndTuple\")])}\\`.`,\n      );\n    }\n  }\n\n  if (pluginsMap.has(\"moduleAttributes\")) {\n    if (process.env.BABEL_8_BREAKING) {\n      throw new Error(\n        \"`moduleAttributes` has been removed in Babel 8, please migrate to import attributes instead.\",\n      );\n    } else {\n      if (\n        pluginsMap.has(\"deprecatedImportAssert\") ||\n        pluginsMap.has(\"importAssertions\")\n      ) {\n        throw new Error(\n          \"Cannot combine importAssertions, deprecatedImportAssert and moduleAttributes plugins.\",\n        );\n      }\n      const moduleAttributesVersionPluginOption =\n        pluginsMap.get(\"moduleAttributes\").version;\n      if (moduleAttributesVersionPluginOption !== \"may-2020\") {\n        throw new Error(\n          \"The 'moduleAttributes' plugin requires a 'version' option,\" +\n            \" representing the last proposal update. Currently, the\" +\n            \" only supported value is 'may-2020'.\",\n        );\n      }\n    }\n  }\n  if (pluginsMap.has(\"importAssertions\")) {\n    if (process.env.BABEL_8_BREAKING) {\n      throw new Error(\n        \"`importAssertions` has been removed in Babel 8, please use import attributes instead.\" +\n          \" To use the non-standard `assert` syntax you can enable the `deprecatedImportAssert` parser plugin.\",\n      );\n    } else if (pluginsMap.has(\"deprecatedImportAssert\")) {\n      throw new Error(\n        \"Cannot combine importAssertions and deprecatedImportAssert plugins.\",\n      );\n    }\n  }\n  if (\n    !pluginsMap.has(\"deprecatedImportAssert\") &&\n    pluginsMap.has(\"importAttributes\") &&\n    pluginsMap.get(\"importAttributes\").deprecatedAssertSyntax\n  ) {\n    if (process.env.BABEL_8_BREAKING) {\n      throw new Error(\n        \"The 'importAttributes' plugin has been removed in Babel 8. If you need to enable support \" +\n          \"for the deprecated `assert` syntax, you can enable the `deprecatedImportAssert` parser plugin.\",\n      );\n    } else {\n      pluginsMap.set(\"deprecatedImportAssert\", {});\n    }\n  }\n\n  if (pluginsMap.has(\"recordAndTuple\")) {\n    if (process.env.BABEL_8_BREAKING) {\n      throw new Error(\n        \"The 'recordAndTuple' plugin has been removed in Babel 8. Please remove it from your configuration.\",\n      );\n    } else {\n      const syntaxType = pluginsMap.get(\"recordAndTuple\").syntaxType;\n      if (syntaxType != null) {\n        const RECORD_AND_TUPLE_SYNTAX_TYPES = [\"hash\", \"bar\"];\n        if (!RECORD_AND_TUPLE_SYNTAX_TYPES.includes(syntaxType)) {\n          throw new Error(\n            \"The 'syntaxType' option of the 'recordAndTuple' plugin must be one of: \" +\n              RECORD_AND_TUPLE_SYNTAX_TYPES.map(p => `'${p}'`).join(\", \"),\n          );\n        }\n      }\n    }\n  }\n\n  if (\n    pluginsMap.has(\"asyncDoExpressions\") &&\n    !pluginsMap.has(\"doExpressions\")\n  ) {\n    const error = new Error(\n      \"'asyncDoExpressions' requires 'doExpressions', please add 'doExpressions' to parser plugins.\",\n    );\n    // @ts-expect-error so @babel/core can provide better error message\n    error.missingPlugins = \"doExpressions\";\n    throw error;\n  }\n\n  if (\n    pluginsMap.has(\"optionalChainingAssign\") &&\n    pluginsMap.get(\"optionalChainingAssign\").version !== \"2023-07\"\n  ) {\n    throw new Error(\n      \"The 'optionalChainingAssign' plugin requires a 'version' option,\" +\n        \" representing the last proposal update. Currently, the\" +\n        \" only supported value is '2023-07'.\",\n    );\n  }\n\n  if (\n    pluginsMap.has(\"discardBinding\") &&\n    pluginsMap.get(\"discardBinding\").syntaxType !== \"void\"\n  ) {\n    throw new Error(\n      \"The 'discardBinding' plugin requires a 'syntaxType' option. Currently the only supported value is 'void'.\",\n    );\n  }\n\n  if (process.env.BABEL_8_BREAKING) {\n    if (pluginsMap.has(\"decimal\")) {\n      throw new Error(\n        \"The 'decimal' plugin has been removed in Babel 8. Please remove it from your configuration.\",\n      );\n    }\n    if (pluginsMap.has(\"importReflection\")) {\n      throw new Error(\n        \"The 'importReflection' plugin has been removed in Babel 8. Use 'sourcePhaseImports' instead, and \" +\n          \"replace 'import module' with 'import source' in your code.\",\n      );\n    }\n  }\n}\n\n// These plugins are defined using a mixin which extends the parser class.\n\nimport estree from \"./plugins/estree.ts\";\nimport flow from \"./plugins/flow/index.ts\";\nimport jsx from \"./plugins/jsx/index.ts\";\nimport typescript from \"./plugins/typescript/index.ts\";\nimport placeholders from \"./plugins/placeholders.ts\";\nimport v8intrinsic from \"./plugins/v8intrinsic.ts\";\n\n// NOTE: order is important. estree must come first; placeholders must come last.\nexport const mixinPlugins = {\n  estree,\n  jsx,\n  flow,\n  typescript,\n  v8intrinsic,\n  placeholders,\n};\n\nexport const mixinPluginNames = Object.keys(mixinPlugins) as ReadonlyArray<\n  \"estree\" | \"jsx\" | \"flow\" | \"typescript\" | \"v8intrinsic\" | \"placeholders\"\n>;\n","// A recursive descent parser operates by defining functions for all\n// syntactic elements, and recursively calling those, each function\n// advancing the input stream and returning an AST node. Precedence\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n// instead of `(!x)[1]` is handled by the fact that the parser\n// function that parses unary prefix operators is called first, and\n// in turn calls the function that parses `[]` subscripts — that\n// way, it'll receive the node for `x[1]` already parsed, and wraps\n// *that* in the unary operator node.\n//\n// Acorn uses an [operator precedence parser][opp] to handle binary\n// operator precedence, because it is much more compact than using\n// the technique outlined above, which uses different, nesting\n// functions to specify precedence, for all of the ten binary\n// precedence levels that JavaScript defines.\n//\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\n\nimport {\n  tokenCanStartExpression,\n  tokenIsAssignment,\n  tokenIsIdentifier,\n  tokenIsKeywordOrIdentifier,\n  tokenIsOperator,\n  tokenIsPostfix,\n  tokenIsPrefix,\n  tokenIsRightAssociative,\n  tokenIsTemplate,\n  tokenKeywordOrIdentifierIsKeyword,\n  tokenLabelName,\n  tokenOperatorPrecedence,\n  tt,\n  type TokenType,\n} from \"../tokenizer/types.ts\";\nimport type * as N from \"../types.ts\";\nimport LValParser from \"./lval.ts\";\nimport {\n  isKeyword,\n  isReservedWord,\n  isStrictReservedWord,\n  isStrictBindReservedWord,\n  isIdentifierStart,\n  canBeReservedWord,\n} from \"../util/identifier.ts\";\nimport {\n  type Position,\n  createPositionWithColumnOffset,\n} from \"../util/location.ts\";\nimport * as charCodes from \"charcodes\";\nimport { ScopeFlag, BindingFlag } from \"../util/scopeflags.ts\";\nimport { ExpressionErrors } from \"./util.ts\";\nimport { ParamKind, functionFlags } from \"../util/production-parameter.ts\";\nimport {\n  newArrowHeadScope,\n  newAsyncArrowScope,\n  newExpressionScope,\n} from \"../util/expression-scope.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport {\n  UnparenthesizedPipeBodyDescriptions,\n  type UnparenthesizedPipeBodyTypes,\n} from \"../parse-error/pipeline-operator-errors.ts\";\nimport { setInnerComments } from \"./comments.ts\";\nimport type { Undone } from \"./node.ts\";\nimport type Parser from \"./index.ts\";\n\nimport { OptionFlags, type SourceType } from \"../options.ts\";\n\nexport default abstract class ExpressionParser extends LValParser {\n  // Forward-declaration: defined in statement.js\n  abstract parseBlock(\n    allowDirectives?: boolean,\n    createNewLexicalScope?: boolean,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): N.BlockStatement;\n  abstract parseClass(\n    node: N.Class,\n    isStatement: boolean,\n    optionalId?: boolean,\n  ): N.Class;\n  abstract parseDecorators(allowExport?: boolean): void;\n  abstract parseFunction<T extends N.NormalFunction>(\n    node: T,\n    statement?: number,\n    allowExpressionBody?: boolean,\n    isAsync?: boolean,\n  ): T;\n  abstract parseFunctionParams(node: N.Function, isConstructor?: boolean): void;\n  abstract parseBlockOrModuleBlockBody(\n    body: N.Statement[],\n    directives: N.Directive[] | null | undefined,\n    topLevel: boolean,\n    end: TokenType,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): void;\n  abstract parseProgram(\n    program: N.Program,\n    end: TokenType,\n    sourceType?: SourceType,\n  ): N.Program;\n\n  // For object literal, check if property __proto__ has been used more than once.\n  // If the expression is a destructuring assignment, then __proto__ may appear\n  // multiple times. Otherwise, __proto__ is a duplicated key.\n\n  // For record expression, check if property __proto__ exists\n\n  checkProto(\n    prop: N.ObjectMember | N.SpreadElement,\n    isRecord: boolean | undefined | null,\n    sawProto: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): boolean {\n    if (\n      prop.type === \"SpreadElement\" ||\n      this.isObjectMethod(prop) ||\n      prop.computed ||\n      prop.shorthand\n    ) {\n      return sawProto;\n    }\n\n    const key = prop.key as\n      | N.Identifier\n      | N.StringLiteral\n      | N.NumericLiteral\n      | N.BigIntLiteral;\n    // It is either an Identifier or a String/NumericLiteral\n    const name = key.type === \"Identifier\" ? key.name : key.value;\n\n    if (name === \"__proto__\") {\n      if (isRecord) {\n        this.raise(Errors.RecordNoProto, key);\n        return true;\n      }\n      if (sawProto) {\n        if (refExpressionErrors) {\n          // Store the first redefinition's position, otherwise ignore because\n          // we are parsing ambiguous pattern\n          if (refExpressionErrors.doubleProtoLoc === null) {\n            refExpressionErrors.doubleProtoLoc = key.loc.start;\n          }\n        } else {\n          this.raise(Errors.DuplicateProto, key);\n        }\n      }\n\n      return true;\n    }\n\n    return sawProto;\n  }\n\n  shouldExitDescending(\n    expr: N.Expression | N.PrivateName,\n    potentialArrowAt: number,\n  ): expr is N.ArrowFunctionExpression {\n    return (\n      expr.type === \"ArrowFunctionExpression\" &&\n      this.offsetToSourcePos(expr.start) === potentialArrowAt\n    );\n  }\n\n  // Convenience method to parse an Expression only\n  getExpression(this: Parser): N.Expression & N.ParserOutput {\n    this.enterInitialScopes();\n    this.nextToken();\n    if (this.match(tt.eof)) {\n      throw this.raise(Errors.ParseExpressionEmptyInput, this.state.startLoc);\n    }\n    const expr = this.parseExpression() as N.Expression & N.ParserOutput;\n    if (!this.match(tt.eof)) {\n      throw this.raise(Errors.ParseExpressionExpectsEOF, this.state.startLoc, {\n        unexpected: this.input.codePointAt(this.state.start),\n      });\n    }\n    // Unlike parseTopLevel, we need to drain remaining commentStacks\n    // because the top level node is _not_ Program.\n    this.finalizeRemainingComments();\n    expr.comments = this.comments;\n    expr.errors = this.state.errors;\n    if (this.optionFlags & OptionFlags.Tokens) {\n      expr.tokens = this.tokens;\n    }\n    return expr;\n  }\n\n  // ### Expression parsing\n\n  // These nest, from the most general expression type at the top to\n  // 'atomic', nondivisible expression types at the bottom. Most of\n  // the functions will simply let the function (s) below them parse,\n  // and, *if* the syntactic construct they handle is present, wrap\n  // the AST node that the inner parser gave them in another node.\n\n  // Parse a full expression.\n  // - `disallowIn`\n  //   is used to forbid the `in` operator (in for loops initialization expressions)\n  //   When `disallowIn` is true, the production parameter [In] is not present.\n\n  // - `refExpressionErrors `\n  //   provides reference for storing '=' operator inside shorthand\n  //   property assignment in contexts where both object expression\n  //   and object pattern might appear (so it's possible to raise\n  //   delayed syntax error at correct position).\n\n  parseExpression(\n    this: Parser,\n    disallowIn?: boolean,\n    refExpressionErrors?: ExpressionErrors,\n  ): N.Expression {\n    if (disallowIn) {\n      return this.disallowInAnd(() =>\n        this.parseExpressionBase(refExpressionErrors),\n      );\n    }\n    return this.allowInAnd(() => this.parseExpressionBase(refExpressionErrors));\n  }\n\n  // https://tc39.es/ecma262/#prod-Expression\n  parseExpressionBase(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const expr = this.parseMaybeAssign(refExpressionErrors);\n    if (this.match(tt.comma)) {\n      const node = this.startNodeAt<N.SequenceExpression>(startLoc);\n      node.expressions = [expr];\n      while (this.eat(tt.comma)) {\n        node.expressions.push(this.parseMaybeAssign(refExpressionErrors));\n      }\n      this.toReferencedList(node.expressions);\n      return this.finishNode(node, \"SequenceExpression\");\n    }\n    return expr;\n  }\n\n  // Set [~In] parameter for assignment expression\n  parseMaybeAssignDisallowIn(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n  ) {\n    return this.disallowInAnd(() =>\n      this.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n    );\n  }\n\n  // Set [+In] parameter for assignment expression\n  parseMaybeAssignAllowIn(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n  ) {\n    return this.allowInAnd(() =>\n      this.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n    );\n  }\n\n  // This method is only used by\n  // the typescript and flow plugins.\n  setOptionalParametersError(refExpressionErrors: ExpressionErrors) {\n    refExpressionErrors.optionalParametersLoc = this.state.startLoc;\n  }\n\n  // Parse an assignment expression. This includes applications of\n  // operators like `+=`.\n  // https://tc39.es/ecma262/#prod-AssignmentExpression\n  parseMaybeAssign(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const isYield = this.isContextual(tt._yield);\n    if (isYield) {\n      if (this.prodParam.hasYield) {\n        this.next();\n        let left = this.parseYield(startLoc);\n        if (afterLeftParse) {\n          left = afterLeftParse.call(this, left, startLoc);\n        }\n        return left;\n      }\n    }\n\n    let ownExpressionErrors;\n    if (refExpressionErrors) {\n      ownExpressionErrors = false;\n    } else {\n      refExpressionErrors = new ExpressionErrors();\n      ownExpressionErrors = true;\n    }\n    const { type } = this.state;\n\n    if (type === tt.parenL || tokenIsIdentifier(type)) {\n      this.state.potentialArrowAt = this.state.start;\n    }\n\n    let left = this.parseMaybeConditional(refExpressionErrors);\n    if (afterLeftParse) {\n      left = afterLeftParse.call(this, left, startLoc);\n    }\n    if (tokenIsAssignment(this.state.type)) {\n      const node = this.startNodeAt<N.AssignmentExpression>(startLoc);\n      const operator = this.state.value;\n      node.operator = operator;\n\n      if (this.match(tt.eq)) {\n        this.toAssignable(left, /* isLHS */ true);\n        node.left = left;\n\n        const startIndex = startLoc.index;\n        if (\n          refExpressionErrors.doubleProtoLoc != null &&\n          refExpressionErrors.doubleProtoLoc.index >= startIndex\n        ) {\n          refExpressionErrors.doubleProtoLoc = null; // reset because double __proto__ is valid in assignment expression\n        }\n        if (\n          refExpressionErrors.shorthandAssignLoc != null &&\n          refExpressionErrors.shorthandAssignLoc.index >= startIndex\n        ) {\n          refExpressionErrors.shorthandAssignLoc = null; // reset because shorthand default was used correctly\n        }\n        if (\n          refExpressionErrors.privateKeyLoc != null &&\n          refExpressionErrors.privateKeyLoc.index >= startIndex\n        ) {\n          this.checkDestructuringPrivate(refExpressionErrors);\n          refExpressionErrors.privateKeyLoc = null; // reset because `({ #x: x })` is an assignable pattern\n        }\n        if (\n          refExpressionErrors.voidPatternLoc != null &&\n          refExpressionErrors.voidPatternLoc.index >= startIndex\n        ) {\n          refExpressionErrors.voidPatternLoc = null;\n        }\n      } else {\n        node.left = left as unknown as N.Assignable; // checked a few lines further down\n      }\n\n      this.next();\n      node.right = this.parseMaybeAssign();\n      this.checkLVal(left, this.finishNode(node, \"AssignmentExpression\"));\n      // @ts-expect-error todo(flow->ts) improve node types\n      return node;\n    } else if (ownExpressionErrors) {\n      this.checkExpressionErrors(refExpressionErrors, true);\n    }\n\n    if (isYield) {\n      const { type } = this.state;\n      const startsExpr = this.hasPlugin(\"v8intrinsic\")\n        ? tokenCanStartExpression(type)\n        : tokenCanStartExpression(type) && !this.match(tt.modulo);\n      if (startsExpr && !this.isAmbiguousPrefixOrIdentifier()) {\n        this.raiseOverwrite(Errors.YieldNotInGeneratorFunction, startLoc);\n        return this.parseYield(startLoc);\n      }\n    }\n\n    return left;\n  }\n\n  // Parse a ternary conditional (`?:`) operator.\n  // https://tc39.es/ecma262/#prod-ConditionalExpression\n\n  parseMaybeConditional(\n    this: Parser,\n    refExpressionErrors: ExpressionErrors,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseExprOps(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseConditional(expr, startLoc, refExpressionErrors);\n  }\n\n  parseConditional(\n    this: Parser,\n    expr: N.Expression,\n    startLoc: Position,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.Expression {\n    if (this.eat(tt.question)) {\n      const node = this.startNodeAt<N.ConditionalExpression>(startLoc);\n      node.test = expr;\n      node.consequent = this.parseMaybeAssignAllowIn();\n      this.expect(tt.colon);\n      node.alternate = this.parseMaybeAssign();\n      return this.finishNode(node, \"ConditionalExpression\");\n    }\n    return expr;\n  }\n\n  parseMaybeUnaryOrPrivate(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors,\n  ): N.Expression | N.PrivateName {\n    return this.match(tt.privateName)\n      ? this.parsePrivateName()\n      : this.parseMaybeUnary(refExpressionErrors);\n  }\n\n  // Start the precedence parser.\n  // https://tc39.es/ecma262/#prod-ShortCircuitExpression\n\n  parseExprOps(\n    this: Parser,\n    refExpressionErrors: ExpressionErrors,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseMaybeUnaryOrPrivate(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseExprOp(expr, startLoc, -1);\n  }\n\n  // Parse binary operators with the operator precedence parsing\n  // algorithm. `left` is the left-hand side of the operator.\n  // `minPrec` provides context that allows the function to stop and\n  // defer further parser to one of its callers when it encounters an\n  // operator that has a lower precedence than the set it is parsing.\n\n  parseExprOp(\n    this: Parser,\n    left: N.Expression | N.PrivateName,\n    leftStartLoc: Position,\n    minPrec: number,\n  ): N.Expression {\n    if (this.isPrivateName(left)) {\n      // https://tc39.es/ecma262/#prod-RelationalExpression\n      // RelationalExpression [In, Yield, Await]\n      //   [+In] PrivateIdentifier in ShiftExpression[?Yield, ?Await]\n\n      const value = this.getPrivateNameSV(left);\n\n      if (\n        minPrec >= tokenOperatorPrecedence(tt._in) ||\n        !this.prodParam.hasIn ||\n        !this.match(tt._in)\n      ) {\n        this.raise(Errors.PrivateInExpectedIn, left, {\n          identifierName: value,\n        });\n      }\n\n      this.classScope.usePrivateName(value, left.loc.start);\n    }\n\n    const op = this.state.type;\n    if (tokenIsOperator(op) && (this.prodParam.hasIn || !this.match(tt._in))) {\n      let prec = tokenOperatorPrecedence(op);\n      if (prec > minPrec) {\n        if (op === tt.pipeline) {\n          this.expectPlugin(\"pipelineOperator\");\n          if (this.state.inFSharpPipelineDirectBody) {\n            // PrivateName must be followed by `in`, but we have `|>`\n            return left as N.Expression;\n          }\n          this.checkPipelineAtInfixOperator(left as N.Expression, leftStartLoc);\n        }\n        const node = this.startNodeAt<N.LogicalExpression | N.BinaryExpression>(\n          leftStartLoc,\n        );\n        node.left = left;\n        node.operator = this.state.value;\n\n        const logical = op === tt.logicalOR || op === tt.logicalAND;\n        const coalesce = op === tt.nullishCoalescing;\n\n        if (coalesce) {\n          // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n          // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n          prec = tokenOperatorPrecedence(tt.logicalAND);\n        }\n\n        this.next();\n\n        if (\n          !process.env.BABEL_8_BREAKING &&\n          op === tt.pipeline &&\n          // @ts-expect-error: Only in Babel 7\n          this.hasPlugin([\"pipelineOperator\", { proposal: \"minimal\" }])\n        ) {\n          if (this.state.type === tt._await && this.prodParam.hasAwait) {\n            throw this.raise(\n              Errors.UnexpectedAwaitAfterPipelineBody,\n              this.state.startLoc,\n            );\n          }\n        }\n\n        node.right = this.parseExprOpRightExpr(op, prec);\n        const finishedNode = this.finishNode(\n          node,\n          logical || coalesce ? \"LogicalExpression\" : \"BinaryExpression\",\n        );\n        /* this check is for all ?? operators\n         * a ?? b && c for this example\n         * when op is coalesce and nextOp is logical (&&), throw at the pos of nextOp that it can not be mixed.\n         * Symmetrically it also throws when op is logical and nextOp is coalesce\n         */\n        const nextOp = this.state.type;\n        if (\n          (coalesce && (nextOp === tt.logicalOR || nextOp === tt.logicalAND)) ||\n          (logical && nextOp === tt.nullishCoalescing)\n        ) {\n          throw this.raise(\n            Errors.MixingCoalesceWithLogical,\n            this.state.startLoc,\n          );\n        }\n\n        return this.parseExprOp(finishedNode, leftStartLoc, minPrec);\n      }\n    }\n    // PrivateName is followed by `in` and handled by the previous if statement\n    return left as N.Expression;\n  }\n\n  // Helper function for `parseExprOp`. Parse the right-hand side of binary-\n  // operator expressions, then apply any operator-specific functions.\n\n  parseExprOpRightExpr(\n    this: Parser,\n    op: TokenType,\n    prec: number,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    switch (op) {\n      case tt.pipeline:\n        switch (this.getPluginOption(\"pipelineOperator\", \"proposal\")) {\n          case \"hack\":\n            return this.withTopicBindingContext(() => {\n              return this.parseHackPipeBody();\n            });\n\n          case \"fsharp\":\n            return this.withSoloAwaitPermittingContext(() => {\n              return this.parseFSharpPipelineBody(prec);\n            });\n        }\n\n        if (\n          !process.env.BABEL_8_BREAKING &&\n          // @ts-expect-error: Babel 7 only\n          this.getPluginOption(\"pipelineOperator\", \"proposal\") === \"smart\"\n        ) {\n          return this.withTopicBindingContext(() => {\n            if (this.prodParam.hasYield && this.isContextual(tt._yield)) {\n              throw this.raise(Errors.PipeBodyIsTighter, this.state.startLoc);\n            }\n            return this.parseSmartPipelineBodyInStyle(\n              this.parseExprOpBaseRightExpr(op, prec),\n              startLoc,\n            );\n          });\n        }\n\n      // Falls through.\n      default:\n        return this.parseExprOpBaseRightExpr(op, prec);\n    }\n  }\n\n  // Helper function for `parseExprOpRightExpr`. Parse the right-hand side of\n  // binary-operator expressions without applying any operator-specific functions.\n\n  parseExprOpBaseRightExpr(\n    this: Parser,\n    op: TokenType,\n    prec: number,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n\n    return this.parseExprOp(\n      this.parseMaybeUnaryOrPrivate(),\n      startLoc,\n      tokenIsRightAssociative(op) ? prec - 1 : prec,\n    );\n  }\n\n  parseHackPipeBody(this: Parser): N.Expression {\n    const { startLoc } = this.state;\n    const body = this.parseMaybeAssign();\n    const requiredParentheses = UnparenthesizedPipeBodyDescriptions.has(\n      // @ts-expect-error TS2345: Argument of type 'string' is not assignable to parameter of type '\"ArrowFunctionExpression\" | \"YieldExpression\" | \"AssignmentExpression\" | \"ConditionalExpression\"'.\n      body.type,\n    );\n\n    // TODO: Check how to handle type casts in Flow and TS once they are supported\n    if (requiredParentheses && !body.extra?.parenthesized) {\n      this.raise(Errors.PipeUnparenthesizedBody, startLoc, {\n        type: body.type as UnparenthesizedPipeBodyTypes,\n      });\n    }\n    if (!this.topicReferenceWasUsedInCurrentContext()) {\n      // A Hack pipe body must use the topic reference at least once.\n      this.raise(Errors.PipeTopicUnused, startLoc);\n    }\n\n    return body;\n  }\n\n  checkExponentialAfterUnary(\n    node: N.AwaitExpression | Undone<N.UnaryExpression>,\n  ) {\n    if (this.match(tt.exponent)) {\n      this.raise(Errors.UnexpectedTokenUnaryExponentiation, node.argument);\n    }\n  }\n\n  // Parse unary operators, both prefix and postfix.\n  // https://tc39.es/ecma262/#prod-UnaryExpression\n  parseMaybeUnary(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n    sawUnary?: boolean,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const isAwait = this.isContextual(tt._await);\n\n    if (isAwait && this.recordAwaitIfAllowed()) {\n      this.next();\n      const expr = this.parseAwait(startLoc);\n      if (!sawUnary) this.checkExponentialAfterUnary(expr);\n      return expr;\n    }\n    const update = this.match(tt.incDec);\n    const node = this.startNode<N.UnaryExpression | N.UpdateExpression>();\n    if (tokenIsPrefix(this.state.type)) {\n      node.operator = this.state.value;\n      node.prefix = true;\n\n      if (this.match(tt._throw)) {\n        this.expectPlugin(\"throwExpressions\");\n      }\n      const isDelete = this.match(tt._delete);\n      this.next();\n\n      node.argument = this.parseMaybeUnary(null, true);\n\n      this.checkExpressionErrors(refExpressionErrors, true);\n\n      if (this.state.strict && isDelete) {\n        const arg = node.argument;\n\n        if (arg.type === \"Identifier\") {\n          this.raise(Errors.StrictDelete, node);\n        } else if (this.hasPropertyAsPrivateName(arg)) {\n          this.raise(Errors.DeletePrivateField, node);\n        }\n      }\n\n      if (!update) {\n        if (!sawUnary) {\n          this.checkExponentialAfterUnary(node as Undone<N.UnaryExpression>);\n        }\n        return this.finishNode(node, \"UnaryExpression\");\n      }\n    }\n\n    const expr = this.parseUpdate(\n      // @ts-expect-error using \"Undone\" node as \"done\"\n      node,\n      update,\n      refExpressionErrors,\n    );\n\n    if (isAwait) {\n      const { type } = this.state;\n      const startsExpr = this.hasPlugin(\"v8intrinsic\")\n        ? tokenCanStartExpression(type)\n        : tokenCanStartExpression(type) && !this.match(tt.modulo);\n      if (startsExpr && !this.isAmbiguousPrefixOrIdentifier()) {\n        this.raiseOverwrite(Errors.AwaitNotInAsyncContext, startLoc);\n        return this.parseAwait(startLoc);\n      }\n    }\n\n    return expr;\n  }\n\n  // https://tc39.es/ecma262/#prod-UpdateExpression\n  parseUpdate(\n    this: Parser,\n    node: N.Expression,\n    update: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.Expression {\n    if (update) {\n      const updateExpressionNode = node as Undone<N.UpdateExpression>;\n      this.checkLVal(\n        updateExpressionNode.argument,\n        this.finishNode(updateExpressionNode, \"UpdateExpression\"),\n      );\n      return node;\n    }\n\n    const startLoc = this.state.startLoc;\n    let expr = this.parseExprSubscripts(refExpressionErrors);\n    if (this.checkExpressionErrors(refExpressionErrors, false)) return expr;\n    while (tokenIsPostfix(this.state.type) && !this.canInsertSemicolon()) {\n      const node = this.startNodeAt<N.UpdateExpression>(startLoc);\n      node.operator = this.state.value;\n      node.prefix = false;\n      node.argument = expr;\n      this.next();\n      this.checkLVal(expr, (expr = this.finishNode(node, \"UpdateExpression\")));\n    }\n    return expr;\n  }\n\n  // Parse call, dot, and `[]`-subscript expressions.\n  // https://tc39.es/ecma262/#prod-LeftHandSideExpression\n  parseExprSubscripts(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseExprAtom(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseSubscripts(expr, startLoc);\n  }\n\n  parseSubscripts(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    noCalls?: boolean | null,\n  ): N.Expression {\n    const state = {\n      optionalChainMember: false,\n      maybeAsyncArrow: this.atPossibleAsyncArrow(base),\n      stop: false,\n    };\n    do {\n      base = this.parseSubscript(base, startLoc, noCalls, state);\n\n      // After parsing a subscript, this isn't \"async\" for sure.\n      state.maybeAsyncArrow = false;\n    } while (!state.stop);\n    return base;\n  }\n\n  /**\n   * @param state Set 'state.stop = true' to indicate that we should stop parsing subscripts.\n   *   state.optionalChainMember to indicate that the member is currently in OptionalChain\n   */\n  parseSubscript(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    noCalls: boolean | undefined | null,\n    state: N.ParseSubscriptState,\n  ): N.Expression {\n    const { type } = this.state;\n    if (!noCalls && type === tt.doubleColon) {\n      return this.parseBind(base, startLoc, noCalls, state);\n    } else if (tokenIsTemplate(type)) {\n      return this.parseTaggedTemplateExpression(base, startLoc, state);\n    }\n\n    let optional = false;\n\n    if (type === tt.questionDot) {\n      if (noCalls) {\n        this.raise(Errors.OptionalChainingNoNew, this.state.startLoc);\n        if (this.lookaheadCharCode() === charCodes.leftParenthesis) {\n          // stop at `?.` when parsing `new a?.()`\n          return this.stopParseSubscript(base, state);\n        }\n      }\n      state.optionalChainMember = optional = true;\n      this.next();\n    }\n\n    if (!noCalls && this.match(tt.parenL)) {\n      return this.parseCoverCallAndAsyncArrowHead(\n        base,\n        startLoc,\n        state,\n        optional,\n      );\n    } else {\n      const computed = this.eat(tt.bracketL);\n      if (computed || optional || this.eat(tt.dot)) {\n        return this.parseMember(base, startLoc, state, computed, optional);\n      } else {\n        return this.stopParseSubscript(base, state);\n      }\n    }\n  }\n\n  stopParseSubscript(\n    this: Parser,\n    base: N.Expression,\n    state: N.ParseSubscriptState,\n  ) {\n    state.stop = true;\n    return base;\n  }\n\n  // base[?Yield, ?Await] [ Expression[+In, ?Yield, ?Await] ]\n  // base[?Yield, ?Await] . IdentifierName\n  // base[?Yield, ?Await] . PrivateIdentifier\n  //   where `base` is one of CallExpression, MemberExpression and OptionalChain\n  parseMember(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    state: N.ParseSubscriptState,\n    computed: boolean,\n    optional: boolean,\n  ): N.OptionalMemberExpression | N.MemberExpression {\n    const node = this.startNodeAt<\n      N.OptionalMemberExpression | N.MemberExpression\n    >(startLoc);\n    node.object = base;\n    node.computed = computed;\n    if (computed) {\n      node.property = this.parseExpression();\n      this.expect(tt.bracketR);\n    } else if (this.match(tt.privateName)) {\n      if (base.type === \"Super\") {\n        this.raise(Errors.SuperPrivateField, startLoc);\n      }\n      this.classScope.usePrivateName(this.state.value, this.state.startLoc);\n      node.property = this.parsePrivateName();\n    } else {\n      node.property = this.parseIdentifier(true);\n    }\n\n    if (state.optionalChainMember) {\n      (node as Undone<N.OptionalMemberExpression>).optional = optional;\n      return this.finishNode(node, \"OptionalMemberExpression\");\n    } else {\n      return this.finishNode(node, \"MemberExpression\");\n    }\n  }\n\n  // https://github.com/tc39/proposal-bind-operator#syntax\n  parseBind(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    noCalls: boolean | undefined | null,\n    state: N.ParseSubscriptState,\n  ): N.Expression {\n    const node = this.startNodeAt<N.BindExpression>(startLoc);\n    node.object = base;\n    this.next(); // eat '::'\n    node.callee = this.parseNoCallExpr();\n    state.stop = true;\n    return this.parseSubscripts(\n      this.finishNode(node, \"BindExpression\"),\n      startLoc,\n      noCalls,\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-CoverCallExpressionAndAsyncArrowHead\n  // CoverCallExpressionAndAsyncArrowHead\n  // CallExpression[?Yield, ?Await] Arguments[?Yield, ?Await]\n  // OptionalChain[?Yield, ?Await] Arguments[?Yield, ?Await]\n  parseCoverCallAndAsyncArrowHead(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    state: N.ParseSubscriptState,\n    optional: boolean,\n  ): N.Expression {\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    let refExpressionErrors: ExpressionErrors | null = null;\n\n    this.state.maybeInArrowParameters = true;\n    this.next(); // eat `(`\n\n    const node = this.startNodeAt<N.CallExpression | N.OptionalCallExpression>(\n      startLoc,\n    );\n    node.callee = base;\n    const { maybeAsyncArrow, optionalChainMember } = state;\n\n    if (maybeAsyncArrow) {\n      this.expressionScope.enter(newAsyncArrowScope());\n      refExpressionErrors = new ExpressionErrors();\n    }\n\n    if (optionalChainMember) {\n      (node as Undone<N.OptionalCallExpression>).optional = optional;\n    }\n\n    if (optional) {\n      node.arguments = this.parseCallExpressionArguments();\n    } else {\n      node.arguments = this.parseCallExpressionArguments(\n        base.type !== \"Super\",\n        node,\n        refExpressionErrors,\n      );\n    }\n    let finishedNode:\n      | N.CallExpression\n      | N.OptionalCallExpression\n      | N.ArrowFunctionExpression = this.finishCallExpression(\n      node,\n      optionalChainMember,\n    );\n\n    if (maybeAsyncArrow && this.shouldParseAsyncArrow() && !optional) {\n      /*:: invariant(refExpressionErrors != null) */\n      state.stop = true;\n      this.checkDestructuringPrivate(refExpressionErrors);\n      this.expressionScope.validateAsPattern();\n      this.expressionScope.exit();\n      finishedNode = this.parseAsyncArrowFromCallExpression(\n        this.startNodeAt<N.ArrowFunctionExpression>(startLoc),\n        finishedNode as N.CallExpression,\n      );\n    } else {\n      if (maybeAsyncArrow) {\n        this.checkExpressionErrors(refExpressionErrors, true);\n        this.expressionScope.exit();\n      }\n      this.toReferencedArguments(finishedNode);\n    }\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n    return finishedNode;\n  }\n\n  toReferencedArguments(\n    node: N.CallExpression | N.OptionalCallExpression,\n    isParenthesizedExpr?: boolean,\n  ) {\n    this.toReferencedListDeep(node.arguments, isParenthesizedExpr);\n  }\n\n  // MemberExpression [?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged]\n  // CallExpression [?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged]\n  parseTaggedTemplateExpression(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    state: N.ParseSubscriptState,\n  ): N.TaggedTemplateExpression {\n    const node = this.startNodeAt<N.TaggedTemplateExpression>(startLoc);\n    node.tag = base;\n    node.quasi = this.parseTemplate(true);\n    if (state.optionalChainMember) {\n      this.raise(Errors.OptionalChainingNoTemplate, startLoc);\n    }\n    return this.finishNode(node, \"TaggedTemplateExpression\");\n  }\n\n  atPossibleAsyncArrow(base: N.Expression): boolean {\n    return (\n      base.type === \"Identifier\" &&\n      base.name === \"async\" &&\n      this.state.lastTokEndLoc.index === base.end &&\n      !this.canInsertSemicolon() &&\n      // check there are no escape sequences, such as \\u{61}sync\n      base.end - base.start === 5 &&\n      this.offsetToSourcePos(base.start) === this.state.potentialArrowAt\n    );\n  }\n\n  finishCallExpression<T extends N.CallExpression | N.OptionalCallExpression>(\n    node: Undone<T>,\n    optional: boolean,\n  ): T {\n    if (node.callee.type === \"Import\") {\n      if (node.arguments.length === 0 || node.arguments.length > 2) {\n        this.raise(Errors.ImportCallArity, node);\n      } else {\n        for (const arg of node.arguments) {\n          if (arg.type === \"SpreadElement\") {\n            this.raise(Errors.ImportCallSpreadArgument, arg);\n          }\n        }\n      }\n    }\n    return this.finishNode(\n      node,\n      optional ? \"OptionalCallExpression\" : \"CallExpression\",\n    );\n  }\n\n  parseCallExpressionArguments(\n    this: Parser,\n    allowPlaceholder?: boolean,\n    nodeForExtra?: Undone<N.Node> | null,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): Array<N.Expression> {\n    const elts: N.Expression[] = [];\n    let first = true;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n\n    while (!this.eat(tt.parenR)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.match(tt.parenR)) {\n          if (nodeForExtra) {\n            this.addTrailingCommaExtraToNode(nodeForExtra);\n          }\n          this.next();\n          break;\n        }\n      }\n\n      elts.push(\n        this.parseExprListItem(\n          tt.parenR,\n          false,\n          refExpressionErrors,\n          allowPlaceholder,\n        ),\n      );\n    }\n\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n    return elts;\n  }\n\n  shouldParseAsyncArrow(): boolean {\n    return this.match(tt.arrow) && !this.canInsertSemicolon();\n  }\n\n  parseAsyncArrowFromCallExpression(\n    this: Parser,\n    node: Undone<N.ArrowFunctionExpression>,\n    call: N.CallExpression,\n  ): N.ArrowFunctionExpression {\n    this.resetPreviousNodeTrailingComments(call);\n    this.expect(tt.arrow);\n    this.parseArrowExpression(\n      node,\n      call.arguments,\n      true,\n      call.extra?.trailingCommaLoc,\n    );\n    // mark inner comments of `async()` as inner comments of `async () =>`\n    if (call.innerComments) {\n      setInnerComments(node, call.innerComments);\n    }\n    // mark trailing comments of `async` to be inner comments\n    if (call.callee.trailingComments) {\n      setInnerComments(node, call.callee.trailingComments);\n    }\n    return node as N.ArrowFunctionExpression;\n  }\n\n  // Parse a no-call expression (like argument of `new` or `::` operators).\n  // https://tc39.es/ecma262/#prod-MemberExpression\n  parseNoCallExpr(this: Parser): N.Expression {\n    const startLoc = this.state.startLoc;\n    return this.parseSubscripts(this.parseExprAtom(), startLoc, true);\n  }\n\n  // Parse an atomic expression — either a single token that is an\n  // expression, an expression started by a keyword like `function` or\n  // `new`, or an expression wrapped in punctuation like `()`, `[]`,\n  // or `{}`.\n\n  // https://tc39.es/ecma262/#prod-PrimaryExpression\n  // https://tc39.es/ecma262/#prod-AsyncArrowFunction\n  // PrimaryExpression\n  // Super\n  // Import\n  // AsyncArrowFunction\n\n  parseExprAtom(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.Expression {\n    let node;\n    let decorators: N.Decorator[] | null = null;\n\n    const { type } = this.state;\n    switch (type) {\n      case tt._super:\n        return this.parseSuper();\n\n      case tt._import:\n        node = this.startNode<N.MetaProperty | N.Import | N.ImportExpression>();\n        this.next();\n\n        if (this.match(tt.dot)) {\n          return this.parseImportMetaPropertyOrPhaseCall(\n            node as Undone<N.MetaProperty | N.ImportExpression>,\n          );\n        }\n\n        if (this.match(tt.parenL)) {\n          if (this.optionFlags & OptionFlags.CreateImportExpressions) {\n            return this.parseImportCall(node as Undone<N.ImportExpression>);\n          } else {\n            return this.finishNode(node, \"Import\");\n          }\n        } else {\n          this.raise(Errors.UnsupportedImport, this.state.lastTokStartLoc);\n          return this.finishNode(node, \"Import\");\n        }\n\n      case tt._this:\n        node = this.startNode<N.ThisExpression>();\n        this.next();\n        return this.finishNode(node, \"ThisExpression\");\n\n      case tt._do: {\n        return this.parseDo(this.startNode(), false);\n      }\n\n      case tt.slash:\n      case tt.slashAssign: {\n        this.readRegexp();\n        return this.parseRegExpLiteral(this.state.value);\n      }\n\n      case tt.num:\n        return this.parseNumericLiteral(this.state.value);\n\n      case tt.bigint:\n        return this.parseBigIntLiteral(this.state.value);\n\n      case tt.string:\n        return this.parseStringLiteral(this.state.value);\n\n      case tt._null:\n        return this.parseNullLiteral();\n\n      case tt._true:\n        return this.parseBooleanLiteral(true);\n      case tt._false:\n        return this.parseBooleanLiteral(false);\n\n      case tt.parenL: {\n        const canBeArrow = this.state.potentialArrowAt === this.state.start;\n        return this.parseParenAndDistinguishExpression(canBeArrow);\n      }\n\n      case tt.bracketL: {\n        return this.parseArrayLike(\n          tt.bracketR,\n          /* canBePattern */ true,\n          /* isTuple */ false,\n          refExpressionErrors,\n        );\n      }\n      case tt.braceL: {\n        return this.parseObjectLike(\n          tt.braceR,\n          /* isPattern */ false,\n          /* isRecord */ false,\n          refExpressionErrors,\n        );\n      }\n      case tt._function:\n        return this.parseFunctionOrFunctionSent();\n\n      case tt.at:\n        decorators = this.parseDecorators();\n      // fall through\n      case tt._class:\n        return this.parseClass(\n          this.maybeTakeDecorators(\n            decorators,\n            this.startNode<N.ClassExpression>(),\n          ),\n          false,\n        );\n\n      case tt._new:\n        return this.parseNewOrNewTarget();\n\n      case tt.templateNonTail:\n      case tt.templateTail:\n        return this.parseTemplate(false);\n\n      // BindExpression[Yield]\n      //   :: MemberExpression[?Yield]\n      case tt.doubleColon: {\n        node = this.startNode<N.BindExpression>();\n        this.next();\n        node.object = null;\n        const callee = (node.callee = this.parseNoCallExpr());\n        if (callee.type === \"MemberExpression\") {\n          return this.finishNode(node, \"BindExpression\");\n        } else {\n          throw this.raise(Errors.UnsupportedBind, callee);\n        }\n      }\n\n      case tt.privateName: {\n        // Standalone private names are only allowed in \"#x in obj\"\n        // expressions, and they are directly handled by callers of\n        // parseExprOp. If we reach this, the input is always invalid.\n        // We can throw a better error message and recover, rather than\n        // just throwing \"Unexpected token\" (which is the default\n        // behavior of this big switch statement).\n        this.raise(Errors.PrivateInExpectedIn, this.state.startLoc, {\n          identifierName: this.state.value,\n        });\n        return this.parsePrivateName() as unknown as N.Expression;\n      }\n\n      case tt.moduloAssign: {\n        return this.parseTopicReferenceThenEqualsSign(tt.modulo, \"%\");\n      }\n\n      case tt.xorAssign: {\n        return this.parseTopicReferenceThenEqualsSign(tt.bitwiseXOR, \"^\");\n      }\n\n      case tt.doubleCaret:\n      case tt.doubleAt: {\n        return this.parseTopicReference(\"hack\");\n      }\n\n      case tt.bitwiseXOR:\n      case tt.modulo:\n      case tt.hash: {\n        const pipeProposal = this.getPluginOption(\n          \"pipelineOperator\",\n          \"proposal\",\n        );\n\n        if (pipeProposal) {\n          return this.parseTopicReference(pipeProposal);\n        }\n        this.unexpected();\n        break;\n      }\n\n      case tt.lt: {\n        const lookaheadCh = this.input.codePointAt(this.nextTokenStart());\n        if (\n          isIdentifierStart(lookaheadCh) || // Element/Type Parameter <foo>\n          lookaheadCh === charCodes.greaterThan // Fragment <>\n        ) {\n          this.expectOnePlugin([\"jsx\", \"flow\", \"typescript\"]);\n        } else {\n          this.unexpected();\n        }\n        break;\n      }\n\n      default:\n        if (!process.env.BABEL_8_BREAKING) {\n          if (type === tt.decimal) {\n            return this.parseDecimalLiteral(this.state.value);\n          } else if (type === tt.bracketBarL || type === tt.bracketHashL) {\n            return this.parseArrayLike(\n              this.state.type === tt.bracketBarL ? tt.bracketBarR : tt.bracketR,\n              /* canBePattern */ false,\n              /* isTuple */ true,\n            );\n          } else if (type === tt.braceBarL || type === tt.braceHashL) {\n            return this.parseObjectLike(\n              this.state.type === tt.braceBarL ? tt.braceBarR : tt.braceR,\n              /* isPattern */ false,\n              /* isRecord */ true,\n            );\n          }\n        }\n\n        if (tokenIsIdentifier(type)) {\n          if (\n            this.isContextual(tt._module) &&\n            this.lookaheadInLineCharCode() === charCodes.leftCurlyBrace\n          ) {\n            return this.parseModuleExpression();\n          }\n          const canBeArrow = this.state.potentialArrowAt === this.state.start;\n          const containsEsc = this.state.containsEsc;\n          const id = this.parseIdentifier();\n\n          if (\n            !containsEsc &&\n            id.name === \"async\" &&\n            !this.canInsertSemicolon()\n          ) {\n            const { type } = this.state;\n            if (type === tt._function) {\n              this.resetPreviousNodeTrailingComments(id);\n              this.next();\n              return this.parseAsyncFunctionExpression(\n                this.startNodeAtNode(id),\n              );\n            } else if (tokenIsIdentifier(type)) {\n              // If the next token begins with \"=\", commit to parsing an async\n              // arrow function. (Peeking ahead for \"=\" lets us avoid a more\n              // expensive full-token lookahead on this common path.)\n              if (this.lookaheadCharCode() === charCodes.equalsTo) {\n                // although `id` is not used in async arrow unary function,\n                // we don't need to reset `async`'s trailing comments because\n                // it will be attached to the upcoming async arrow binding identifier\n                return this.parseAsyncArrowUnaryFunction(\n                  this.startNodeAtNode(id),\n                );\n              } else {\n                // Otherwise, treat \"async\" as an identifier and let calling code\n                // deal with the current tt.name token.\n                return id;\n              }\n            } else if (type === tt._do) {\n              this.resetPreviousNodeTrailingComments(id);\n              return this.parseDo(this.startNodeAtNode(id), true);\n            }\n          }\n\n          if (\n            canBeArrow &&\n            this.match(tt.arrow) &&\n            !this.canInsertSemicolon()\n          ) {\n            this.next();\n            return this.parseArrowExpression(\n              this.startNodeAtNode(id),\n              [id],\n              false,\n            );\n          }\n\n          return id;\n        } else {\n          this.unexpected();\n        }\n    }\n  }\n\n  // This helper method should only be called\n  // when the parser has reached a potential Hack pipe topic token\n  // that is followed by an equals sign.\n  // See <https://github.com/js-choi/proposal-hack-pipes>.\n  // If we find ^= or %= in an expression position\n  // (i.e., the tt.moduloAssign or tt.xorAssign token types), and if the\n  // Hack-pipes proposal is active with ^ or % as its topicToken, then the ^ or\n  // % could be the topic token (e.g., in x |> ^==y or x |> ^===y), and so we\n  // reparse the current token as ^ or %.\n  // Otherwise, this throws an unexpected-token error.\n  parseTopicReferenceThenEqualsSign(\n    topicTokenType: TokenType,\n    topicTokenValue: string,\n  ): N.Expression {\n    const pipeProposal = this.getPluginOption(\"pipelineOperator\", \"proposal\");\n\n    if (pipeProposal) {\n      // Set the most-recent token to be a topic token\n      // given by the tokenType and tokenValue.\n      // Now the next readToken() call (in parseTopicReference)\n      // will consume that “topic token”.\n      this.state.type = topicTokenType;\n      this.state.value = topicTokenValue;\n      // Rewind the tokenizer to the end of the “topic token”, so that the\n      // following token starts at the equals sign after that topic token.\n      this.state.pos--;\n      this.state.end--;\n      // This is safe to do since the preceding character was either ^ or %, and\n      // thus not a newline.\n      this.state.endLoc = createPositionWithColumnOffset(this.state.endLoc, -1);\n      // Now actually consume the topic token.\n      return this.parseTopicReference(pipeProposal);\n    } else {\n      this.unexpected();\n    }\n  }\n\n  // This helper method should only be called\n  // when the proposal-pipeline-operator plugin is active,\n  // and when the parser has reached a potential Hack pipe topic token.\n  // Although a pipe-operator proposal is assumed to be active,\n  // its configuration might not match the current token’s type.\n  // See <https://github.com/js-choi/proposal-hack-pipes>.\n  parseTopicReference(pipeProposal: string): N.Expression {\n    const node = this.startNode<N.TopicReference>();\n    const startLoc = this.state.startLoc;\n    const tokenType = this.state.type;\n\n    // Consume the current token.\n    this.next();\n\n    // If the pipe-operator plugin’s configuration matches the current token’s type,\n    // then this will return `node`, will have been finished as a topic reference.\n    // Otherwise, this will throw a `PipeTopicUnconfiguredToken` error.\n    return this.finishTopicReference(node, startLoc, pipeProposal, tokenType);\n  }\n\n  // This helper method attempts to finish the given `node`\n  // into a topic-reference node for the given `pipeProposal`.\n  // See <https://github.com/js-choi/proposal-hack-pipes>.\n  //\n  // The method assumes that any topic token was consumed before it was called.\n  //\n  // If the `pipelineOperator` plugin is active,\n  // and if the given `tokenType` matches the plugin’s configuration,\n  // then this method will return the finished `node`.\n  //\n  // If the `pipelineOperator` plugin is active,\n  // but if the given `tokenType` does not match the plugin’s configuration,\n  // then this method will throw a `PipeTopicUnconfiguredToken` error.\n  finishTopicReference<\n    T extends N.PipelinePrimaryTopicReference | N.TopicReference,\n  >(\n    node: Undone<T>,\n    startLoc: Position,\n    pipeProposal: string,\n    tokenType: TokenType,\n  ): T {\n    if (\n      this.testTopicReferenceConfiguration(pipeProposal, startLoc, tokenType)\n    ) {\n      // The token matches the plugin’s configuration.\n      // The token is therefore a topic reference.\n\n      if (process.env.BABEL_8_BREAKING || pipeProposal === \"hack\") {\n        if (!this.topicReferenceIsAllowedInCurrentContext()) {\n          this.raise(Errors.PipeTopicUnbound, startLoc);\n        }\n\n        // Register the topic reference so that its pipe body knows\n        // that its topic was used at least once.\n        this.registerTopicReference();\n\n        return this.finishNode(node, \"TopicReference\");\n      } else {\n        // pipeProposal is \"smart\"\n\n        if (!this.topicReferenceIsAllowedInCurrentContext()) {\n          this.raise(Errors.PrimaryTopicNotAllowed, startLoc);\n        }\n        this.registerTopicReference();\n        return this.finishNode(node, \"PipelinePrimaryTopicReference\");\n      }\n    } else {\n      // The token does not match the plugin’s configuration.\n      throw this.raise(Errors.PipeTopicUnconfiguredToken, startLoc, {\n        token: tokenLabelName(tokenType),\n      });\n    }\n  }\n\n  // This helper method tests whether the given token type\n  // matches the pipelineOperator parser plugin’s configuration.\n  // If the active pipe proposal is Hack style,\n  // and if the given token is the same as the plugin configuration’s `topicToken`,\n  // then this is a valid topic reference.\n  // If the active pipe proposal is smart mix,\n  // then the topic token must always be `#`.\n  // If the active pipe proposal is neither (e.g., \"minimal\"(Babel 7) or \"fsharp\"),\n  // then an error is thrown.\n  testTopicReferenceConfiguration(\n    pipeProposal: string,\n    startLoc: Position,\n    tokenType: TokenType,\n  ): boolean {\n    switch (pipeProposal) {\n      case \"hack\": {\n        return this.hasPlugin([\n          \"pipelineOperator\",\n          {\n            // @ts-expect-error token must have a label\n            topicToken: tokenLabelName(tokenType),\n          },\n        ]);\n      }\n      case \"smart\":\n        return tokenType === tt.hash;\n      default:\n        throw this.raise(Errors.PipeTopicRequiresHackPipes, startLoc);\n    }\n  }\n\n  // async [no LineTerminator here] AsyncArrowBindingIdentifier[?Yield] [no LineTerminator here] => AsyncConciseBody[?In]\n  parseAsyncArrowUnaryFunction(\n    this: Parser,\n    node: Undone<N.ArrowFunctionExpression>,\n  ): N.ArrowFunctionExpression {\n    // We don't need to push a new ParameterDeclarationScope here since we are sure\n    // 1) it is an async arrow, 2) no biding pattern is allowed in params\n    this.prodParam.enter(functionFlags(true, this.prodParam.hasYield));\n    const params = [this.parseIdentifier()];\n    this.prodParam.exit();\n    if (this.hasPrecedingLineBreak()) {\n      this.raise(Errors.LineTerminatorBeforeArrow, this.state.curPosition());\n    }\n    this.expect(tt.arrow);\n    // let foo = async bar => {};\n    return this.parseArrowExpression(node, params, true);\n  }\n\n  // https://github.com/tc39/proposal-do-expressions\n  // https://github.com/tc39/proposal-async-do-expressions\n  parseDo(\n    this: Parser,\n    node: Undone<N.DoExpression>,\n    isAsync: boolean,\n  ): N.DoExpression {\n    this.expectPlugin(\"doExpressions\");\n    if (isAsync) {\n      this.expectPlugin(\"asyncDoExpressions\");\n    }\n    node.async = isAsync;\n    this.next(); // eat `do`\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n    if (isAsync) {\n      // AsyncDoExpression :\n      // async [no LineTerminator here] do Block[~Yield, +Await, ~Return]\n      this.prodParam.enter(ParamKind.PARAM_AWAIT);\n      node.body = this.parseBlock();\n      this.prodParam.exit();\n    } else {\n      node.body = this.parseBlock();\n    }\n\n    this.state.labels = oldLabels;\n    return this.finishNode(node, \"DoExpression\");\n  }\n\n  // Parse the `super` keyword\n  parseSuper(): N.Super {\n    const node = this.startNode<N.Super>();\n    this.next(); // eat `super`\n    if (\n      this.match(tt.parenL) &&\n      !this.scope.allowDirectSuper &&\n      !(this.optionFlags & OptionFlags.AllowSuperOutsideMethod)\n    ) {\n      this.raise(Errors.SuperNotAllowed, node);\n    } else if (\n      !this.scope.allowSuper &&\n      !(this.optionFlags & OptionFlags.AllowSuperOutsideMethod)\n    ) {\n      this.raise(Errors.UnexpectedSuper, node);\n    }\n\n    if (\n      !this.match(tt.parenL) &&\n      !this.match(tt.bracketL) &&\n      !this.match(tt.dot)\n    ) {\n      this.raise(Errors.UnsupportedSuper, node);\n    }\n\n    return this.finishNode(node, \"Super\");\n  }\n\n  parsePrivateName(): N.PrivateName {\n    const node = this.startNode<N.PrivateName>();\n    const id = this.startNodeAt<N.Identifier>(\n      // The position is hardcoded because we merge `#` and name into a single\n      // tt.privateName token\n      createPositionWithColumnOffset(this.state.startLoc, 1),\n    );\n    const name = this.state.value;\n    this.next(); // eat #name;\n    node.id = this.createIdentifier(id, name);\n    return this.finishNode(node, \"PrivateName\");\n  }\n\n  parseFunctionOrFunctionSent(\n    this: Parser,\n  ): N.FunctionExpression | N.MetaProperty {\n    const node = this.startNode<N.FunctionExpression | N.MetaProperty>();\n\n    // We do not do parseIdentifier here because when parseFunctionOrFunctionSent\n    // is called we already know that the current token is a \"name\" with the value \"function\"\n    // This will improve perf a tiny little bit as we do not do validation but more importantly\n    // here is that parseIdentifier will remove an item from the expression stack\n    // if \"function\" or \"class\" is parsed as identifier (in objects e.g.), which should not happen here.\n    this.next(); // eat `function`\n\n    if (this.prodParam.hasYield && this.match(tt.dot)) {\n      const meta = this.createIdentifier(\n        this.startNodeAtNode<N.Identifier>(node),\n        \"function\",\n      );\n      this.next(); // eat `.`\n      // https://github.com/tc39/proposal-function.sent#syntax-1\n      if (this.match(tt._sent)) {\n        this.expectPlugin(\"functionSent\");\n      } else if (!this.hasPlugin(\"functionSent\")) {\n        // The code wasn't `function.sent` but just `function.`, so a simple error is less confusing.\n        this.unexpected();\n      }\n      return this.parseMetaProperty(\n        node as Undone<N.MetaProperty>,\n        meta,\n        \"sent\",\n      );\n    }\n    return this.parseFunction(node as Undone<N.FunctionExpression>);\n  }\n\n  parseMetaProperty(\n    node: Undone<N.MetaProperty>,\n    meta: N.Identifier,\n    propertyName: string,\n  ): N.MetaProperty {\n    node.meta = meta;\n\n    const containsEsc = this.state.containsEsc;\n\n    node.property = this.parseIdentifier(true);\n\n    if (node.property.name !== propertyName || containsEsc) {\n      this.raise(Errors.UnsupportedMetaProperty, node.property, {\n        target: meta.name,\n        onlyValidPropertyName: propertyName,\n      });\n    }\n\n    return this.finishNode(node, \"MetaProperty\");\n  }\n\n  // https://tc39.es/ecma262/#prod-ImportMeta\n  // https://tc39.es/proposal-source-phase-imports/\n  parseImportMetaPropertyOrPhaseCall(\n    this: Parser,\n    node: Undone<N.MetaProperty | N.ImportExpression>,\n  ): N.MetaProperty | N.ImportExpression {\n    this.next(); // eat `.`\n\n    if (this.isContextual(tt._source) || this.isContextual(tt._defer)) {\n      const isSource = this.isContextual(tt._source);\n\n      this.expectPlugin(\n        isSource ? \"sourcePhaseImports\" : \"deferredImportEvaluation\",\n      );\n      this.next();\n      (node as Undone<N.ImportExpression>).phase = isSource\n        ? \"source\"\n        : \"defer\";\n      return this.parseImportCall(node as Undone<N.ImportExpression>);\n    } else {\n      const id = this.createIdentifierAt(\n        this.startNodeAtNode<N.Identifier>(node),\n        \"import\",\n        this.state.lastTokStartLoc,\n      );\n      if (this.isContextual(tt._meta)) {\n        if (!this.inModule) {\n          this.raise(Errors.ImportMetaOutsideModule, id);\n        }\n        this.sawUnambiguousESM = true;\n      }\n      return this.parseMetaProperty(node as Undone<N.MetaProperty>, id, \"meta\");\n    }\n  }\n\n  parseLiteralAtNode<T extends N.Node>(\n    value: any,\n    type: T[\"type\"],\n    node: any,\n  ): T {\n    this.addExtra(node, \"rawValue\", value);\n    this.addExtra(\n      node,\n      \"raw\",\n      this.input.slice(this.offsetToSourcePos(node.start), this.state.end),\n    );\n    node.value = value;\n    this.next();\n    return this.finishNode<T>(node, type);\n  }\n\n  parseLiteral<T extends N.Node>(value: any, type: T[\"type\"]): T {\n    const node = this.startNode();\n    return this.parseLiteralAtNode(value, type, node);\n  }\n\n  parseStringLiteral(value: any) {\n    return this.parseLiteral<N.StringLiteral>(value, \"StringLiteral\");\n  }\n\n  parseNumericLiteral(value: any) {\n    return this.parseLiteral<N.NumericLiteral>(value, \"NumericLiteral\");\n  }\n\n  parseBigIntLiteral(value: any) {\n    if (process.env.BABEL_8_BREAKING) {\n      let bigInt: bigint | null;\n      try {\n        bigInt = BigInt(value);\n      } catch {\n        // parser supports invalid bigints like `1.0n` or `1e1n` such that it\n        // can throw a recoverable error, but BigInt constructor does not\n        // support them.\n        bigInt = null;\n      }\n      const node = this.parseLiteral<N.BigIntLiteral>(bigInt, \"BigIntLiteral\");\n      return node;\n    } else {\n      return this.parseLiteral<N.BigIntLiteral>(value, \"BigIntLiteral\");\n    }\n  }\n\n  // TODO: Remove this in Babel 8\n  parseDecimalLiteral(value: any) {\n    return this.parseLiteral<N.DecimalLiteral>(value, \"DecimalLiteral\");\n  }\n\n  parseRegExpLiteral(value: {\n    value: any;\n    pattern: string;\n    flags: N.RegExpLiteral[\"flags\"];\n  }) {\n    const node = this.startNode<N.RegExpLiteral>();\n    this.addExtra(\n      node,\n      \"raw\",\n      this.input.slice(this.offsetToSourcePos(node.start), this.state.end),\n    );\n    node.pattern = value.pattern;\n    node.flags = value.flags;\n    this.next();\n    return this.finishNode(node, \"RegExpLiteral\");\n  }\n\n  parseBooleanLiteral(value: boolean) {\n    const node = this.startNode<N.BooleanLiteral>();\n    node.value = value;\n    this.next();\n    return this.finishNode(node, \"BooleanLiteral\");\n  }\n\n  parseNullLiteral() {\n    const node = this.startNode<N.NullLiteral>();\n    this.next();\n    return this.finishNode(node, \"NullLiteral\");\n  }\n\n  // https://tc39.es/ecma262/#prod-CoverParenthesizedExpressionAndArrowParameterList\n  parseParenAndDistinguishExpression(\n    this: Parser,\n    canBeArrow: boolean,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n\n    let val;\n    this.next(); // eat `(`\n    this.expressionScope.enter(newArrowHeadScope());\n\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.maybeInArrowParameters = true;\n    this.state.inFSharpPipelineDirectBody = false;\n\n    const innerStartLoc = this.state.startLoc;\n    const exprList: (\n      | N.Expression\n      | N.RestElement\n      | N.VoidPattern\n      | N.AssignmentPattern\n    )[] = [];\n    const refExpressionErrors = new ExpressionErrors();\n    let first = true;\n    let spreadStartLoc;\n    let optionalCommaStartLoc;\n\n    while (!this.match(tt.parenR)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(\n          tt.comma,\n          refExpressionErrors.optionalParametersLoc === null\n            ? null\n            : refExpressionErrors.optionalParametersLoc,\n        );\n        if (this.match(tt.parenR)) {\n          optionalCommaStartLoc = this.state.startLoc;\n          break;\n        }\n      }\n\n      if (this.match(tt.ellipsis)) {\n        const spreadNodeStartLoc = this.state.startLoc;\n        spreadStartLoc = this.state.startLoc;\n        exprList.push(\n          this.parseParenItem(this.parseRestBinding(), spreadNodeStartLoc),\n        );\n\n        if (!this.checkCommaAfterRest(charCodes.rightParenthesis)) {\n          break;\n        }\n      } else {\n        exprList.push(\n          this.parseMaybeAssignAllowInOrVoidPattern(\n            tt.parenR,\n            refExpressionErrors,\n            this.parseParenItem,\n          ),\n        );\n      }\n    }\n\n    const innerEndLoc = this.state.lastTokEndLoc;\n    this.expect(tt.parenR);\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n    let arrowNode = this.startNodeAt<N.ArrowFunctionExpression>(startLoc);\n    if (\n      canBeArrow &&\n      this.shouldParseArrow(exprList) &&\n      (arrowNode = this.parseArrow(arrowNode))\n    ) {\n      this.checkDestructuringPrivate(refExpressionErrors);\n      this.expressionScope.validateAsPattern();\n      this.expressionScope.exit();\n      this.parseArrowExpression(arrowNode, exprList, false);\n      // @ts-expect-error todo(flow->ts) improve node types\n      return arrowNode;\n    }\n    this.expressionScope.exit();\n\n    if (!exprList.length) {\n      this.unexpected(this.state.lastTokStartLoc);\n    }\n    if (optionalCommaStartLoc) this.unexpected(optionalCommaStartLoc);\n    if (spreadStartLoc) this.unexpected(spreadStartLoc);\n    this.checkExpressionErrors(refExpressionErrors, true);\n\n    this.toReferencedListDeep(exprList, /* isParenthesizedExpr */ true);\n    if (exprList.length > 1) {\n      val = this.startNodeAt<N.SequenceExpression>(innerStartLoc);\n      val.expressions = exprList as N.Expression[];\n      // finish node at current location so it can pick up comments after `)`\n      this.finishNode(val, \"SequenceExpression\");\n      this.resetEndLocation(val, innerEndLoc);\n    } else {\n      val = exprList[0];\n    }\n\n    return this.wrapParenthesis(\n      startLoc,\n      // @ts-expect-error todo(flow->ts)\n      val,\n    );\n  }\n\n  wrapParenthesis(startLoc: Position, expression: N.Expression): N.Expression {\n    if (!(this.optionFlags & OptionFlags.CreateParenthesizedExpressions)) {\n      this.addExtra(expression, \"parenthesized\", true);\n      this.addExtra(expression, \"parenStart\", startLoc.index);\n\n      this.takeSurroundingComments(\n        expression,\n        startLoc.index,\n        this.state.lastTokEndLoc.index,\n      );\n\n      return expression;\n    }\n\n    const parenExpression =\n      this.startNodeAt<N.ParenthesizedExpression>(startLoc);\n    parenExpression.expression = expression;\n    return this.finishNode(parenExpression, \"ParenthesizedExpression\");\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars -- `params` is used in typescript plugin\n  shouldParseArrow(params: Array<N.Node>): boolean {\n    return !this.canInsertSemicolon();\n  }\n\n  parseArrow(\n    node: Undone<N.ArrowFunctionExpression>,\n  ): Undone<N.ArrowFunctionExpression> | undefined {\n    if (this.eat(tt.arrow)) {\n      return node;\n    }\n  }\n\n  parseParenItem<T extends N.Expression | N.RestElement | N.SpreadElement>(\n    node: T,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    startLoc: Position,\n  ): T | N.TypeCastExpression | N.TsTypeCastExpression {\n    return node;\n  }\n\n  parseNewOrNewTarget(this: Parser): N.NewExpression | N.MetaProperty {\n    const node = this.startNode<N.NewExpression | N.MetaProperty>();\n    this.next();\n    if (this.match(tt.dot)) {\n      // https://tc39.es/ecma262/#prod-NewTarget\n      const meta = this.createIdentifier(\n        this.startNodeAtNode<N.Identifier>(node),\n        \"new\",\n      );\n      this.next();\n      const metaProp = this.parseMetaProperty(\n        node as Undone<N.MetaProperty>,\n        meta,\n        \"target\",\n      );\n\n      if (!this.scope.allowNewTarget) {\n        this.raise(Errors.UnexpectedNewTarget, metaProp);\n      }\n\n      return metaProp;\n    }\n\n    return this.parseNew(node as Undone<N.NewExpression>);\n  }\n\n  // New's precedence is slightly tricky. It must allow its argument to\n  // be a `[]` or dot subscript expression, but not a call — at least,\n  // not without wrapping it in parentheses. Thus, it uses the noCalls\n  // argument to parseSubscripts to prevent it from consuming the\n  // argument list.\n  // https://tc39.es/ecma262/#prod-NewExpression\n  parseNew(this: Parser, node: Undone<N.NewExpression>): N.NewExpression {\n    this.parseNewCallee(node);\n\n    if (this.eat(tt.parenL)) {\n      const args = this.parseExprList(tt.parenR);\n      this.toReferencedList(args);\n      // (parseExprList should be all non-null in this case)\n      node.arguments = args;\n    } else {\n      node.arguments = [];\n    }\n\n    return this.finishNode(node, \"NewExpression\");\n  }\n\n  parseNewCallee(this: Parser, node: Undone<N.NewExpression>): void {\n    const isImport = this.match(tt._import);\n    const callee = this.parseNoCallExpr();\n    node.callee = callee;\n    if (\n      isImport &&\n      (callee.type === \"Import\" || callee.type === \"ImportExpression\")\n    ) {\n      this.raise(Errors.ImportCallNotNewExpression, callee);\n    }\n  }\n\n  // Parse template expression.\n\n  parseTemplateElement(isTagged: boolean): N.TemplateElement {\n    const { start, startLoc, end, value } = this.state;\n    const elemStart = start + 1;\n    const elem = this.startNodeAt<N.TemplateElement>(\n      createPositionWithColumnOffset(startLoc, 1),\n    );\n    if (value === null) {\n      if (!isTagged) {\n        this.raise(\n          Errors.InvalidEscapeSequenceTemplate,\n          // FIXME: Adding 1 is probably wrong.\n          createPositionWithColumnOffset(\n            this.state.firstInvalidTemplateEscapePos,\n            1,\n          ),\n        );\n      }\n    }\n\n    const isTail = this.match(tt.templateTail);\n    const endOffset = isTail ? -1 : -2;\n    const elemEnd = end + endOffset;\n    elem.value = {\n      raw: this.input.slice(elemStart, elemEnd).replace(/\\r\\n?/g, \"\\n\"),\n      cooked: value === null ? null : value.slice(1, endOffset),\n    };\n    elem.tail = isTail;\n    this.next();\n    const finishedNode = this.finishNode(elem, \"TemplateElement\");\n    this.resetEndLocation(\n      finishedNode,\n      createPositionWithColumnOffset(this.state.lastTokEndLoc, endOffset),\n    );\n    return finishedNode;\n  }\n\n  // https://tc39.es/ecma262/#prod-TemplateLiteral\n  parseTemplate(this: Parser, isTagged: boolean): N.TemplateLiteral {\n    const node = this.startNode<N.TemplateLiteral>();\n    let curElt = this.parseTemplateElement(isTagged);\n    const quasis = [curElt];\n    const substitutions = [];\n    while (!curElt.tail) {\n      substitutions.push(this.parseTemplateSubstitution());\n      this.readTemplateContinuation();\n      quasis.push((curElt = this.parseTemplateElement(isTagged)));\n    }\n    // Type cast from (N.Expression[] | N.TsType[]). parseTemplateSubstitution\n    // returns consistent results.\n    node.expressions = substitutions as N.Expression[] | N.TsType[];\n    node.quasis = quasis;\n    return this.finishNode(node, \"TemplateLiteral\");\n  }\n\n  // This is overwritten by the TypeScript plugin to parse template types\n  parseTemplateSubstitution(this: Parser): N.Expression | N.TsType {\n    return this.parseExpression();\n  }\n\n  // Parse an object literal, binding pattern, or record.\n\n  parseObjectLike(\n    close: TokenType,\n    isPattern: true,\n    isRecord?: boolean | null,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ObjectPattern;\n  parseObjectLike(\n    close: TokenType,\n    isPattern: false,\n    isRecord?: false | null,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ObjectExpression;\n  parseObjectLike(\n    close: TokenType,\n    isPattern: false,\n    isRecord?: true,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.RecordExpression;\n  parseObjectLike<T extends N.ObjectPattern | N.ObjectExpression>(\n    this: Parser,\n    close: TokenType,\n    isPattern: boolean,\n    isRecord?: boolean | null,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): T {\n    if (isRecord) {\n      this.expectPlugin(\"recordAndTuple\");\n    }\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n    let sawProto = false;\n    let first = true;\n    const node = this.startNode<\n      N.ObjectExpression | N.ObjectPattern | N.RecordExpression\n    >();\n\n    node.properties = [];\n    this.next();\n\n    while (!this.match(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.match(close)) {\n          this.addTrailingCommaExtraToNode(node);\n          break;\n        }\n      }\n\n      let prop;\n      if (isPattern) {\n        prop = this.parseBindingProperty();\n      } else {\n        prop = this.parsePropertyDefinition(refExpressionErrors);\n        sawProto = this.checkProto(\n          prop,\n          isRecord,\n          sawProto,\n          refExpressionErrors,\n        );\n      }\n\n      if (\n        isRecord &&\n        !this.isObjectProperty(prop) &&\n        prop.type !== \"SpreadElement\"\n      ) {\n        this.raise(Errors.InvalidRecordProperty, prop);\n      }\n\n      if (!process.env.BABEL_8_BREAKING) {\n        // @ts-expect-error shorthand may not index prop\n        if (prop.shorthand) {\n          this.addExtra(prop, \"shorthand\", true);\n        }\n      }\n\n      // @ts-expect-error Fixme: refine typings\n      node.properties.push(prop);\n    }\n\n    this.next();\n\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    let type = \"ObjectExpression\";\n    if (isPattern) {\n      type = \"ObjectPattern\";\n    } else if (isRecord) {\n      type = \"RecordExpression\";\n    }\n    // @ts-expect-error type is well defined\n    return this.finishNode(node, type);\n  }\n\n  addTrailingCommaExtraToNode(node: Undone<N.Node>): void {\n    this.addExtra(node, \"trailingComma\", this.state.lastTokStartLoc.index);\n    this.addExtra(node, \"trailingCommaLoc\", this.state.lastTokStartLoc, false);\n  }\n\n  // Check grammar production:\n  //   IdentifierName *_opt PropertyName\n  // It is used in `parsePropertyDefinition` to detect AsyncMethod and Accessors\n  maybeAsyncOrAccessorProp(\n    prop: Undone<N.ObjectProperty>,\n  ): prop is typeof prop & { key: N.Identifier } {\n    return (\n      !prop.computed &&\n      prop.key.type === \"Identifier\" &&\n      (this.isLiteralPropertyName() ||\n        this.match(tt.bracketL) ||\n        this.match(tt.star))\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-PropertyDefinition\n  parsePropertyDefinition(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ObjectMember | N.SpreadElement {\n    let decorators = [];\n    if (this.match(tt.at)) {\n      if (this.hasPlugin(\"decorators\")) {\n        this.raise(Errors.UnsupportedPropertyDecorator, this.state.startLoc);\n      }\n\n      // we needn't check if decorators (stage 0) plugin is enabled since it's checked by\n      // the call to this.parseDecorator\n      while (this.match(tt.at)) {\n        decorators.push(this.parseDecorator());\n      }\n    }\n\n    const prop = this.startNode<N.ObjectProperty>();\n    let isAsync = false;\n    let isAccessor = false;\n    let startLoc;\n\n    if (this.match(tt.ellipsis)) {\n      if (decorators.length) this.unexpected();\n      return this.parseSpread();\n    }\n\n    if (decorators.length) {\n      prop.decorators = decorators;\n      decorators = [];\n    }\n\n    prop.method = false;\n\n    if (refExpressionErrors) {\n      startLoc = this.state.startLoc;\n    }\n\n    let isGenerator = this.eat(tt.star);\n    this.parsePropertyNamePrefixOperator(prop);\n    const containsEsc = this.state.containsEsc;\n    this.parsePropertyName(prop, refExpressionErrors);\n\n    if (!isGenerator && !containsEsc && this.maybeAsyncOrAccessorProp(prop)) {\n      const { key } = prop;\n      const keyName = key.name;\n      // https://tc39.es/ecma262/#prod-AsyncMethod\n      // https://tc39.es/ecma262/#prod-AsyncGeneratorMethod\n      if (keyName === \"async\" && !this.hasPrecedingLineBreak()) {\n        isAsync = true;\n        this.resetPreviousNodeTrailingComments(key);\n        isGenerator = this.eat(tt.star);\n        this.parsePropertyName(prop);\n      }\n      // get PropertyName[?Yield, ?Await] () { FunctionBody[~Yield, ~Await] }\n      // set PropertyName[?Yield, ?Await] ( PropertySetParameterList ) { FunctionBody[~Yield, ~Await] }\n      if (keyName === \"get\" || keyName === \"set\") {\n        isAccessor = true;\n        this.resetPreviousNodeTrailingComments(key);\n        prop.kind = keyName;\n        if (this.match(tt.star)) {\n          isGenerator = true;\n          this.raise(Errors.AccessorIsGenerator, this.state.curPosition(), {\n            kind: keyName,\n          });\n          this.next();\n        }\n        this.parsePropertyName(prop);\n      }\n    }\n\n    return this.parseObjPropValue(\n      prop,\n      startLoc,\n      isGenerator,\n      isAsync,\n      false /* isPattern */,\n      isAccessor,\n      refExpressionErrors,\n    );\n  }\n\n  getGetterSetterExpectedParamCount(\n    method: N.ObjectMethod | N.ClassMethod,\n  ): number {\n    return method.kind === \"get\" ? 0 : 1;\n  }\n\n  // This exists so we can override within the ESTree plugin\n  getObjectOrClassMethodParams(method: N.ObjectMethod | N.ClassMethod) {\n    return method.params;\n  }\n\n  // get methods aren't allowed to have any parameters\n  // set methods must have exactly 1 parameter which is not a rest parameter\n  checkGetterSetterParams(method: N.ObjectMethod | N.ClassMethod): void {\n    const paramCount = this.getGetterSetterExpectedParamCount(method);\n    const params = this.getObjectOrClassMethodParams(method);\n\n    if (params.length !== paramCount) {\n      this.raise(\n        method.kind === \"get\" ? Errors.BadGetterArity : Errors.BadSetterArity,\n        method,\n      );\n    }\n\n    if (\n      method.kind === \"set\" &&\n      params[params.length - 1]?.type === \"RestElement\"\n    ) {\n      this.raise(Errors.BadSetterRestParameter, method);\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-MethodDefinition\n  parseObjectMethod(\n    this: Parser,\n    prop: Undone<N.ObjectMethod>,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isPattern: boolean,\n    isAccessor: boolean,\n  ): N.ObjectMethod | undefined | null {\n    if (isAccessor) {\n      // isAccessor implies isAsync: false, isPattern: false, isGenerator: false\n      const finishedProp = this.parseMethod(\n        prop,\n        // This _should_ be false, but with error recovery, we allow it to be\n        // set for informational purposes\n        isGenerator,\n        /* isAsync */ false,\n        /* isConstructor */ false,\n        false,\n        \"ObjectMethod\",\n      );\n      this.checkGetterSetterParams(finishedProp);\n      return finishedProp;\n    }\n\n    if (isAsync || isGenerator || this.match(tt.parenL)) {\n      if (isPattern) this.unexpected();\n      prop.kind = \"method\";\n      prop.method = true;\n      return this.parseMethod(\n        prop,\n        isGenerator,\n        isAsync,\n        /* isConstructor */ false,\n        false,\n        \"ObjectMethod\",\n      );\n    }\n  }\n\n  // if `isPattern` is true, parse https://tc39.es/ecma262/#prod-BindingProperty\n  // else https://tc39.es/ecma262/#prod-PropertyDefinition\n  parseObjectProperty(\n    this: Parser,\n    prop: Undone<N.ObjectProperty>,\n    startLoc: Position | undefined | null,\n    isPattern: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ObjectProperty | undefined | null {\n    prop.shorthand = false;\n\n    if (this.eat(tt.colon)) {\n      prop.value = isPattern\n        ? this.parseMaybeDefault(this.state.startLoc)\n        : this.parseMaybeAssignAllowInOrVoidPattern(\n            tt.braceR,\n            refExpressionErrors,\n          );\n\n      return this.finishObjectProperty(prop);\n    }\n\n    if (!prop.computed && prop.key.type === \"Identifier\") {\n      // PropertyDefinition:\n      //   IdentifierReference\n      //   CoverInitializedName\n      // Note: `{ eval } = {}` will be checked in `checkLVal` later.\n      this.checkReservedWord(prop.key.name, prop.key.loc.start, true, false);\n\n      if (isPattern) {\n        prop.value = this.parseMaybeDefault(\n          startLoc,\n          this.cloneIdentifier(prop.key),\n        );\n      } else if (this.match(tt.eq)) {\n        const shorthandAssignLoc = this.state.startLoc;\n        if (refExpressionErrors != null) {\n          if (refExpressionErrors.shorthandAssignLoc === null) {\n            refExpressionErrors.shorthandAssignLoc = shorthandAssignLoc;\n          }\n        } else {\n          this.raise(Errors.InvalidCoverInitializedName, shorthandAssignLoc);\n        }\n        prop.value = this.parseMaybeDefault(\n          startLoc,\n          this.cloneIdentifier(prop.key),\n        );\n      } else {\n        prop.value = this.cloneIdentifier(prop.key);\n      }\n      prop.shorthand = true;\n\n      return this.finishObjectProperty(prop);\n    }\n  }\n\n  finishObjectProperty(node: Undone<N.ObjectProperty>) {\n    return this.finishNode(node, \"ObjectProperty\");\n  }\n\n  parseObjPropValue<T extends N.ObjectMember>(\n    this: Parser,\n    prop: Undone<T>,\n    startLoc: Position | undefined | null,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isPattern: boolean,\n    isAccessor: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): T {\n    const node = (this.parseObjectMethod(\n      prop as Undone<N.ObjectMethod>,\n      isGenerator,\n      isAsync,\n      isPattern,\n      isAccessor,\n    ) ||\n      this.parseObjectProperty(\n        prop as Undone<N.ObjectProperty>,\n        startLoc,\n        isPattern,\n        refExpressionErrors,\n      )) as T;\n\n    if (!node) this.unexpected();\n\n    return node;\n  }\n\n  // https://tc39.es/ecma262/#prod-PropertyName\n  // when refExpressionErrors presents, it will parse private name\n  // and record the position of the first private name\n  parsePropertyName(\n    this: Parser,\n    prop:\n      | Undone<N.ObjectOrClassMember | N.ClassMember>\n      | N.TsNamedTypeElementBase,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): void {\n    if (this.eat(tt.bracketL)) {\n      (prop as Undone<N.ObjectOrClassMember>).computed = true;\n      prop.key = this.parseMaybeAssignAllowIn();\n      this.expect(tt.bracketR);\n    } else {\n      // We check if it's valid for it to be a private name when we push it.\n      const { type, value } = this.state;\n      let key;\n      // most un-computed property names are identifiers\n      if (tokenIsKeywordOrIdentifier(type)) {\n        key = this.parseIdentifier(true);\n      } else {\n        switch (type) {\n          case tt.num:\n            key = this.parseNumericLiteral(value);\n            break;\n          case tt.string:\n            key = this.parseStringLiteral(value);\n            break;\n          case tt.bigint:\n            key = this.parseBigIntLiteral(value);\n            break;\n          case tt.privateName: {\n            // the class private key has been handled in parseClassElementName\n            const privateKeyLoc = this.state.startLoc;\n            if (refExpressionErrors != null) {\n              if (refExpressionErrors.privateKeyLoc === null) {\n                refExpressionErrors.privateKeyLoc = privateKeyLoc;\n              }\n            } else {\n              this.raise(Errors.UnexpectedPrivateField, privateKeyLoc);\n            }\n            key = this.parsePrivateName();\n            break;\n          }\n          default:\n            if (!process.env.BABEL_8_BREAKING && type === tt.decimal) {\n              key = this.parseDecimalLiteral(value);\n              break;\n            }\n\n            this.unexpected();\n        }\n      }\n      (prop as any).key = key;\n      if (type !== tt.privateName) {\n        // ClassPrivateProperty is never computed, so we don't assign in that case.\n        prop.computed = false;\n      }\n    }\n  }\n\n  // Initialize empty function node.\n\n  initFunction(node: N.BodilessFunctionOrMethodBase, isAsync: boolean): void {\n    node.id = null;\n    node.generator = false;\n    node.async = isAsync;\n  }\n\n  // Parse object or class method.\n\n  parseMethod<T extends N.ObjectMethod | N.ClassMethod | N.ClassPrivateMethod>(\n    this: Parser,\n    node: Undone<T>,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isConstructor: boolean,\n    allowDirectSuper: boolean,\n    type: T[\"type\"],\n    inClassScope: boolean = false,\n  ): T {\n    this.initFunction(node, isAsync);\n    node.generator = isGenerator;\n    this.scope.enter(\n      ScopeFlag.FUNCTION |\n        ScopeFlag.SUPER |\n        (inClassScope ? ScopeFlag.CLASS : 0) |\n        (allowDirectSuper ? ScopeFlag.DIRECT_SUPER : 0),\n    );\n    this.prodParam.enter(functionFlags(isAsync, node.generator));\n    this.parseFunctionParams(node, isConstructor);\n    const finishedNode = this.parseFunctionBodyAndFinish(node, type, true);\n    this.prodParam.exit();\n    this.scope.exit();\n\n    return finishedNode;\n  }\n\n  // parse an array literal or tuple literal\n  // https://tc39.es/ecma262/#prod-ArrayLiteral\n  // https://tc39.es/proposal-record-tuple/#prod-TupleLiteral\n  parseArrayLike(\n    this: Parser,\n    close: TokenType,\n    canBePattern: boolean,\n    isTuple: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ArrayExpression | N.TupleExpression {\n    if (isTuple) {\n      this.expectPlugin(\"recordAndTuple\");\n    }\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n    const node = this.startNode<N.ArrayExpression | N.TupleExpression>();\n    this.next();\n    node.elements = this.parseExprList(\n      close,\n      /* allowEmpty */ !isTuple,\n      refExpressionErrors,\n      // @ts-expect-error todo(flow->ts)\n      node,\n    );\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    return this.finishNode(\n      node,\n      isTuple ? \"TupleExpression\" : \"ArrayExpression\",\n    );\n  }\n\n  // Parse arrow function expression.\n  // If the parameters are provided, they will be converted to an\n  // assignable list.\n  parseArrowExpression(\n    this: Parser,\n    node: Undone<N.ArrowFunctionExpression>,\n    params:\n      | Array<\n          N.Expression | N.SpreadElement | N.VoidPattern | N.AssignmentPattern\n        >\n      | Array<\n          N.Expression | N.RestElement | N.VoidPattern | N.AssignmentPattern\n        >,\n    isAsync: boolean,\n    trailingCommaLoc?: Position | null,\n  ): N.ArrowFunctionExpression {\n    this.scope.enter(ScopeFlag.FUNCTION | ScopeFlag.ARROW);\n    let flags = functionFlags(isAsync, false);\n    // ConciseBody[In] :\n    //   [lookahead ≠ {] ExpressionBody[?In, ~Await]\n    //   { FunctionBody[~Yield, ~Await] }\n    if (!this.match(tt.braceL) && this.prodParam.hasIn) {\n      flags |= ParamKind.PARAM_IN;\n    }\n    this.prodParam.enter(flags);\n    this.initFunction(node, isAsync);\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n\n    if (params) {\n      this.state.maybeInArrowParameters = true;\n      this.setArrowFunctionParameters(node, params, trailingCommaLoc);\n    }\n    this.state.maybeInArrowParameters = false;\n    this.parseFunctionBody(node, true);\n\n    this.prodParam.exit();\n    this.scope.exit();\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n    return this.finishNode(node, \"ArrowFunctionExpression\");\n  }\n\n  setArrowFunctionParameters(\n    node: Undone<N.ArrowFunctionExpression>,\n    params:\n      | Array<\n          N.Expression | N.SpreadElement | N.VoidPattern | N.AssignmentPattern\n        >\n      | Array<\n          N.Expression | N.RestElement | N.VoidPattern | N.AssignmentPattern\n        >,\n    trailingCommaLoc?: Position | null,\n  ): void {\n    this.toAssignableList(params, trailingCommaLoc, false);\n    node.params = params as (N.Pattern | N.TSParameterProperty)[];\n  }\n\n  parseFunctionBodyAndFinish<\n    T extends\n      | N.Function\n      | N.TSDeclareMethod\n      | N.TSDeclareFunction\n      | N.ClassPrivateMethod,\n  >(node: Undone<T>, type: T[\"type\"], isMethod: boolean = false): T {\n    // @ts-expect-error (node is not bodiless if we get here)\n    this.parseFunctionBody(node, false, isMethod);\n    return this.finishNode(node, type);\n  }\n\n  // Parse function body and check parameters.\n  parseFunctionBody(\n    this: Parser,\n    node: Undone<N.Function>,\n    allowExpression?: boolean | null,\n    isMethod: boolean = false,\n  ): void {\n    const isExpression = allowExpression && !this.match(tt.braceL);\n    this.expressionScope.enter(newExpressionScope());\n\n    if (isExpression) {\n      // https://tc39.es/ecma262/#prod-ExpressionBody\n      (node as Undone<N.ArrowFunctionExpression>).body =\n        this.parseMaybeAssign();\n      this.checkParams(node, false, allowExpression, false);\n    } else {\n      const oldStrict = this.state.strict;\n      // Start a new scope with regard to labels\n      // flag (restore them to their old value afterwards).\n      const oldLabels = this.state.labels;\n      this.state.labels = [];\n\n      // FunctionBody[Yield, Await]:\n      //   StatementList[?Yield, ?Await, +Return] opt\n      this.prodParam.enter(\n        this.prodParam.currentFlags() | ParamKind.PARAM_RETURN,\n      );\n      node.body = this.parseBlock(\n        true,\n        false,\n        // Strict mode function checks after we parse the statements in the function body.\n        (hasStrictModeDirective: boolean) => {\n          const nonSimple = !this.isSimpleParamList(node.params);\n\n          if (hasStrictModeDirective && nonSimple) {\n            // This logic is here to align the error location with the ESTree plugin.\n            this.raise(\n              Errors.IllegalLanguageModeDirective,\n              // @ts-expect-error kind may not index node\n              (node.kind === \"method\" || node.kind === \"constructor\") &&\n                // @ts-expect-error key may not index node\n                !!node.key\n                ? // @ts-expect-error node.key has been guarded\n                  node.key.loc.end\n                : node,\n            );\n          }\n\n          const strictModeChanged = !oldStrict && this.state.strict;\n\n          // Add the params to varDeclaredNames to ensure that an error is thrown\n          // if a let/const declaration in the function clashes with one of the params.\n          this.checkParams(\n            node,\n            !this.state.strict && !allowExpression && !isMethod && !nonSimple,\n            allowExpression,\n            strictModeChanged,\n          );\n\n          // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n          if (this.state.strict && node.id) {\n            this.checkIdentifier(\n              node.id,\n              BindingFlag.TYPE_OUTSIDE,\n              strictModeChanged,\n            );\n          }\n        },\n      );\n      this.prodParam.exit();\n      this.state.labels = oldLabels;\n    }\n    this.expressionScope.exit();\n  }\n\n  isSimpleParameter(node: N.Pattern | N.TSParameterProperty): boolean {\n    return node.type === \"Identifier\";\n  }\n\n  isSimpleParamList(\n    params: ReadonlyArray<N.Pattern | N.TSParameterProperty>,\n  ): boolean {\n    for (let i = 0, len = params.length; i < len; i++) {\n      if (!this.isSimpleParameter(params[i])) return false;\n    }\n    return true;\n  }\n\n  checkParams(\n    node: Undone<N.Function>,\n    allowDuplicates: boolean,\n    isArrowFunction?: boolean | null,\n    strictModeChanged: boolean = true,\n  ): void {\n    const checkClashes = !allowDuplicates && new Set<string>();\n    // We create a fake node with the \"ephemeral\" type `FormalParameters`[1]\n    // since we just store an array of parameters. Perhaps someday we can have\n    // something like class FormalParameters extends Array { ... }, which would\n    // also be helpful when traversing this node.\n    //\n    // 1. https://tc39.es/ecma262/#prod-FormalParameters\n    const formalParameters = { type: \"FormalParameters\" } as const;\n    for (const param of node.params) {\n      this.checkLVal(\n        param,\n        formalParameters,\n        BindingFlag.TYPE_VAR,\n        checkClashes,\n        strictModeChanged,\n      );\n    }\n  }\n\n  // Parses a comma-separated list of expressions, and returns them as\n  // an array. `close` is the token type that ends the list, and\n  // `allowEmpty` can be turned on to allow subsequent commas with\n  // nothing in between them to be parsed as `null` (which is needed\n  // for array literals).\n  // https://tc39.es/ecma262/#prod-ElementList\n  parseExprList(\n    this: Parser,\n    close: TokenType,\n    allowEmpty?: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n    nodeForExtra?: N.Node | null,\n  ): (N.Expression | null)[] {\n    const elts: (N.Expression | null)[] = [];\n    let first = true;\n\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.match(close)) {\n          if (nodeForExtra) {\n            this.addTrailingCommaExtraToNode(nodeForExtra);\n          }\n          this.next();\n          break;\n        }\n      }\n\n      elts.push(this.parseExprListItem(close, allowEmpty, refExpressionErrors));\n    }\n    return elts;\n  }\n\n  parseExprListItem(\n    this: Parser,\n    close: TokenType,\n    allowEmpty?: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n    allowPlaceholder?: boolean | null,\n  ): N.Expression | null;\n  parseExprListItem(\n    this: Parser,\n    close: TokenType,\n    allowEmpty?: false,\n    refExpressionErrors?: ExpressionErrors | null,\n    allowPlaceholder?: boolean | null,\n  ): N.Expression;\n  parseExprListItem(\n    this: Parser,\n    close: TokenType,\n    allowEmpty?: boolean | null,\n    refExpressionErrors?: ExpressionErrors | null,\n    allowPlaceholder?: boolean | null,\n  ):\n    | N.Expression\n    | N.SpreadElement\n    | N.ArgumentPlaceholder\n    | N.VoidPattern\n    | N.AssignmentPattern\n    | null {\n    let elt;\n    if (this.match(tt.comma)) {\n      if (!allowEmpty) {\n        this.raise(Errors.UnexpectedToken, this.state.curPosition(), {\n          unexpected: \",\",\n        });\n      }\n      elt = null;\n    } else if (this.match(tt.ellipsis)) {\n      const spreadNodeStartLoc = this.state.startLoc;\n\n      elt = this.parseParenItem(\n        this.parseSpread(refExpressionErrors),\n        spreadNodeStartLoc,\n      );\n    } else if (this.match(tt.question)) {\n      this.expectPlugin(\"partialApplication\");\n      if (!allowPlaceholder) {\n        this.raise(Errors.UnexpectedArgumentPlaceholder, this.state.startLoc);\n      }\n      const node = this.startNode<N.ArgumentPlaceholder>();\n      this.next();\n      elt = this.finishNode(node, \"ArgumentPlaceholder\");\n    } else {\n      elt = this.parseMaybeAssignAllowInOrVoidPattern(\n        close,\n        refExpressionErrors,\n        this.parseParenItem,\n      );\n    }\n    return elt;\n  }\n\n  // Parse the next token as an identifier. If `liberal` is true (used\n  // when parsing properties), it will also convert keywords into\n  // identifiers.\n  // This shouldn't be used to parse the keywords of meta properties, since they\n  // are not identifiers and cannot contain escape sequences.\n\n  parseIdentifier(liberal?: boolean): N.Identifier {\n    const node = this.startNode<N.Identifier>();\n    const name = this.parseIdentifierName(liberal);\n\n    return this.createIdentifier(node, name);\n  }\n\n  createIdentifier(node: Undone<N.Identifier>, name: string): N.Identifier {\n    node.name = name;\n    node.loc.identifierName = name;\n\n    return this.finishNode(node, \"Identifier\");\n  }\n\n  createIdentifierAt(\n    node: Undone<N.Identifier>,\n    name: string,\n    endLoc: Position,\n  ): N.Identifier {\n    node.name = name;\n    node.loc.identifierName = name;\n\n    return this.finishNodeAt(node, \"Identifier\", endLoc);\n  }\n\n  parseIdentifierName(liberal?: boolean): string {\n    let name: string;\n\n    const { startLoc, type } = this.state;\n\n    if (tokenIsKeywordOrIdentifier(type)) {\n      name = this.state.value;\n    } else {\n      this.unexpected();\n    }\n\n    const tokenIsKeyword = tokenKeywordOrIdentifierIsKeyword(type);\n\n    if (liberal) {\n      // If the current token is not used as a keyword, set its type to \"tt.name\".\n      // This will prevent this.next() from throwing about unexpected escapes.\n      if (tokenIsKeyword) {\n        this.replaceToken(tt.name);\n      }\n    } else {\n      this.checkReservedWord(name, startLoc, tokenIsKeyword, false);\n    }\n\n    this.next();\n\n    return name;\n  }\n\n  checkReservedWord(\n    word: string,\n    startLoc: Position,\n    checkKeywords: boolean,\n    isBinding: boolean,\n  ): void {\n    // Every JavaScript reserved word is 10 characters or less.\n    if (word.length > 10) {\n      return;\n    }\n    // Most identifiers are not reservedWord-like, they don't need special\n    // treatments afterward, which very likely ends up throwing errors\n    if (!canBeReservedWord(word)) {\n      return;\n    }\n\n    if (checkKeywords && isKeyword(word)) {\n      this.raise(Errors.UnexpectedKeyword, startLoc, {\n        keyword: word,\n      });\n      return;\n    }\n\n    const reservedTest = !this.state.strict\n      ? isReservedWord\n      : isBinding\n        ? isStrictBindReservedWord\n        : isStrictReservedWord;\n\n    if (reservedTest(word, this.inModule)) {\n      this.raise(Errors.UnexpectedReservedWord, startLoc, {\n        reservedWord: word,\n      });\n      return;\n    } else if (word === \"yield\") {\n      if (this.prodParam.hasYield) {\n        this.raise(Errors.YieldBindingIdentifier, startLoc);\n        return;\n      }\n    } else if (word === \"await\") {\n      if (this.prodParam.hasAwait) {\n        this.raise(Errors.AwaitBindingIdentifier, startLoc);\n        return;\n      }\n\n      if (this.scope.inStaticBlock) {\n        this.raise(Errors.AwaitBindingIdentifierInStaticBlock, startLoc);\n        return;\n      }\n\n      this.expressionScope.recordAsyncArrowParametersError(startLoc);\n    } else if (word === \"arguments\") {\n      if (this.scope.inClassAndNotInNonArrowFunction) {\n        this.raise(Errors.ArgumentsInClass, startLoc);\n        return;\n      }\n    }\n  }\n\n  // Returns whether `await` is allowed or not in this context, and if it is\n  // keeps track of it to determine whether a module uses top-level await.\n  recordAwaitIfAllowed(): boolean {\n    const isAwaitAllowed = this.prodParam.hasAwait;\n\n    if (isAwaitAllowed && !this.scope.inFunction) {\n      this.state.hasTopLevelAwait = true;\n    }\n\n    return isAwaitAllowed;\n  }\n\n  // Parses await expression inside async function.\n\n  parseAwait(this: Parser, startLoc: Position): N.AwaitExpression {\n    const node = this.startNodeAt<N.AwaitExpression>(startLoc);\n\n    this.expressionScope.recordParameterInitializerError(\n      Errors.AwaitExpressionFormalParameter,\n      node,\n    );\n\n    if (this.eat(tt.star)) {\n      this.raise(Errors.ObsoleteAwaitStar, node);\n    }\n\n    if (\n      !this.scope.inFunction &&\n      !(this.optionFlags & OptionFlags.AllowAwaitOutsideFunction)\n    ) {\n      if (this.isAmbiguousPrefixOrIdentifier()) {\n        this.ambiguousScriptDifferentAst = true;\n      } else {\n        this.sawUnambiguousESM = true;\n      }\n    }\n\n    if (!this.state.soloAwait) {\n      node.argument = this.parseMaybeUnary(null, true);\n    }\n\n    return this.finishNode(node, \"AwaitExpression\");\n  }\n\n  isAmbiguousPrefixOrIdentifier(): boolean {\n    if (this.hasPrecedingLineBreak()) return true;\n    const { type } = this.state;\n    return (\n      // All the following expressions are ambiguous:\n      //   await + 0, await - 0, await ( 0 ), await [ 0 ], await / 0 /u, await ``, await of []\n      type === tt.plusMin ||\n      type === tt.parenL ||\n      type === tt.bracketL ||\n      tokenIsTemplate(type) ||\n      (type === tt._of && !this.state.containsEsc) ||\n      // Sometimes the tokenizer generates tt.slash for regexps, and this is\n      // handler by parseExprAtom\n      type === tt.regexp ||\n      type === tt.slash ||\n      // This code could be parsed both as a modulo operator or as an intrinsic:\n      //   await %x(0)\n      (this.hasPlugin(\"v8intrinsic\") && type === tt.modulo)\n    );\n  }\n\n  // Parses yield expression inside generator.\n\n  parseYield(this: Parser, startLoc: Position): N.YieldExpression {\n    const node = this.startNodeAt<N.YieldExpression>(startLoc);\n\n    this.expressionScope.recordParameterInitializerError(\n      Errors.YieldInParameter,\n      node,\n    );\n\n    let delegating = false;\n    let argument: N.Expression | null = null;\n    if (!this.hasPrecedingLineBreak()) {\n      delegating = this.eat(tt.star);\n      switch (this.state.type) {\n        case tt.semi:\n        case tt.eof:\n        case tt.braceR:\n        case tt.parenR:\n        case tt.bracketR:\n        case tt.braceBarR:\n        case tt.colon:\n        case tt.comma:\n          // The above is the complete set of tokens that can\n          // follow an AssignmentExpression, and none of them\n          // can start an AssignmentExpression\n          if (!delegating) break;\n        /* fallthrough */\n        default:\n          argument = this.parseMaybeAssign();\n      }\n    }\n    node.delegate = delegating;\n    node.argument = argument;\n    return this.finishNode(node, \"YieldExpression\");\n  }\n\n  // https://tc39.es/ecma262/#prod-ImportCall\n  parseImportCall(\n    this: Parser,\n    node: Undone<N.ImportExpression>,\n  ): N.ImportExpression {\n    this.next(); // eat tt.parenL\n    node.source = this.parseMaybeAssignAllowIn();\n    node.options = null;\n    if (this.eat(tt.comma)) {\n      if (!this.match(tt.parenR)) {\n        node.options = this.parseMaybeAssignAllowIn();\n        if (this.eat(tt.comma)) {\n          this.addTrailingCommaExtraToNode(node.options);\n          if (!this.match(tt.parenR)) {\n            // keep consuming arguments, to then throw ImportCallArity\n            // instead of \"expected )\"\n            do {\n              this.parseMaybeAssignAllowIn();\n            } while (this.eat(tt.comma) && !this.match(tt.parenR));\n\n            this.raise(Errors.ImportCallArity, node);\n          }\n        }\n      } else {\n        this.addTrailingCommaExtraToNode(node.source);\n      }\n    }\n    this.expect(tt.parenR);\n    return this.finishNode(node, \"ImportExpression\");\n  }\n\n  // Validates a pipeline (for any of the pipeline Babylon plugins) at the point\n  // of the infix operator `|>`.\n\n  checkPipelineAtInfixOperator(left: N.Expression, leftStartLoc: Position) {\n    // @ts-expect-error Remove this in Babel 8\n    if (this.hasPlugin([\"pipelineOperator\", { proposal: \"smart\" }])) {\n      if (left.type === \"SequenceExpression\") {\n        // Ensure that the pipeline head is not a comma-delimited\n        // sequence expression.\n        this.raise(Errors.PipelineHeadSequenceExpression, leftStartLoc);\n      }\n    }\n  }\n\n  parseSmartPipelineBodyInStyle(childExpr: N.Expression, startLoc: Position) {\n    if (this.isSimpleReference(childExpr)) {\n      const bodyNode = this.startNodeAt<N.PipelineBareFunction>(startLoc);\n      bodyNode.callee = childExpr;\n      return this.finishNode(bodyNode, \"PipelineBareFunction\");\n    } else {\n      const bodyNode = this.startNodeAt<N.PipelineTopicExpression>(startLoc);\n      this.checkSmartPipeTopicBodyEarlyErrors(startLoc);\n      bodyNode.expression = childExpr;\n      return this.finishNode(bodyNode, \"PipelineTopicExpression\");\n    }\n  }\n\n  isSimpleReference(expression: N.Expression): boolean {\n    switch (expression.type) {\n      case \"MemberExpression\":\n        return (\n          !expression.computed && this.isSimpleReference(expression.object)\n        );\n      case \"Identifier\":\n        return true;\n      default:\n        return false;\n    }\n  }\n\n  // This helper method is to be called immediately\n  // after a topic-style smart-mix pipe body is parsed.\n  // The `startLoc` is the starting position of the pipe body.\n\n  checkSmartPipeTopicBodyEarlyErrors(startLoc: Position): void {\n    // If the following token is invalidly `=>`, then throw a human-friendly error\n    // instead of something like 'Unexpected token, expected \";\"'.\n    // For example, `x => x |> y => #` (assuming `#` is the topic reference)\n    // groups into `x => (x |> y) => #`,\n    // and `(x |> y) => #` is an invalid arrow function.\n    // This is because smart-mix `|>` has tighter precedence than `=>`.\n    if (this.match(tt.arrow)) {\n      throw this.raise(Errors.PipelineBodyNoArrow, this.state.startLoc);\n    }\n\n    // A topic-style smart-mix pipe body must use the topic reference at least once.\n    if (!this.topicReferenceWasUsedInCurrentContext()) {\n      this.raise(Errors.PipelineTopicUnused, startLoc);\n    }\n  }\n\n  // Enable topic references from outer contexts within Hack-style pipe bodies.\n  // The function modifies the parser's topic-context state to enable or disable\n  // the use of topic references.\n  // The function then calls a callback, then resets the parser\n  // to the old topic-context state that it had before the function was called.\n\n  withTopicBindingContext<T>(callback: () => T): T {\n    const outerContextTopicState = this.state.topicContext;\n    this.state.topicContext = {\n      // Enable the use of the primary topic reference.\n      maxNumOfResolvableTopics: 1,\n      // Hide the use of any topic references from outer contexts.\n      maxTopicIndex: null,\n    };\n\n    try {\n      return callback();\n    } finally {\n      this.state.topicContext = outerContextTopicState;\n    }\n  }\n\n  // This helper method is used only with the deprecated smart-mix pipe proposal.\n  // Disables topic references from outer contexts within syntax constructs\n  // such as the bodies of iteration statements.\n  // The function modifies the parser's topic-context state to enable or disable\n  // the use of topic references with the smartPipelines plugin. They then run a\n  // callback, then they reset the parser to the old topic-context state that it\n  // had before the function was called.\n\n  withSmartMixTopicForbiddingContext<T>(callback: () => T): T {\n    // TODO(Babel 8): Remove this method\n\n    if (\n      !process.env.BABEL_8_BREAKING &&\n      // @ts-expect-error Babel 7 only\n      this.hasPlugin([\"pipelineOperator\", { proposal: \"smart\" }])\n    ) {\n      // Reset the parser’s topic context only if the smart-mix pipe proposal is active.\n      const outerContextTopicState = this.state.topicContext;\n      this.state.topicContext = {\n        // Disable the use of the primary topic reference.\n        maxNumOfResolvableTopics: 0,\n        // Hide the use of any topic references from outer contexts.\n        maxTopicIndex: null,\n      };\n\n      try {\n        return callback();\n      } finally {\n        this.state.topicContext = outerContextTopicState;\n      }\n    } else {\n      // If the pipe proposal is \"minimal\"(Babel 7), \"fsharp\", or \"hack\",\n      // or if no pipe proposal is active,\n      // then the callback result is returned\n      // without touching any extra parser state.\n      return callback();\n    }\n  }\n\n  withSoloAwaitPermittingContext<T>(callback: () => T): T {\n    const outerContextSoloAwaitState = this.state.soloAwait;\n    this.state.soloAwait = true;\n\n    try {\n      return callback();\n    } finally {\n      this.state.soloAwait = outerContextSoloAwaitState;\n    }\n  }\n\n  allowInAnd<T>(callback: () => T): T {\n    const flags = this.prodParam.currentFlags();\n    const prodParamToSet = ParamKind.PARAM_IN & ~flags;\n    if (prodParamToSet) {\n      this.prodParam.enter(flags | ParamKind.PARAM_IN);\n      try {\n        return callback();\n      } finally {\n        this.prodParam.exit();\n      }\n    }\n    return callback();\n  }\n\n  disallowInAnd<T>(callback: () => T): T {\n    const flags = this.prodParam.currentFlags();\n    const prodParamToClear = ParamKind.PARAM_IN & flags;\n    if (prodParamToClear) {\n      this.prodParam.enter(flags & ~ParamKind.PARAM_IN);\n      try {\n        return callback();\n      } finally {\n        this.prodParam.exit();\n      }\n    }\n    return callback();\n  }\n\n  // Register the use of a topic reference within the current\n  // topic-binding context.\n  registerTopicReference(): void {\n    this.state.topicContext.maxTopicIndex = 0;\n  }\n\n  topicReferenceIsAllowedInCurrentContext(): boolean {\n    return this.state.topicContext.maxNumOfResolvableTopics >= 1;\n  }\n\n  topicReferenceWasUsedInCurrentContext(): boolean {\n    return (\n      this.state.topicContext.maxTopicIndex != null &&\n      this.state.topicContext.maxTopicIndex >= 0\n    );\n  }\n\n  parseFSharpPipelineBody(this: Parser, prec: number): N.Expression {\n    const startLoc = this.state.startLoc;\n\n    this.state.potentialArrowAt = this.state.start;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = true;\n\n    const ret = this.parseExprOp(\n      this.parseMaybeUnaryOrPrivate(),\n      startLoc,\n      prec,\n    );\n\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n    return ret;\n  }\n\n  // https://github.com/tc39/proposal-js-module-blocks\n  parseModuleExpression(this: Parser): N.ModuleExpression {\n    this.expectPlugin(\"moduleBlocks\");\n    const node = this.startNode<N.ModuleExpression>();\n    this.next(); // eat \"module\"\n    if (!this.match(tt.braceL)) {\n      this.unexpected(null, tt.braceL);\n    }\n    // start program node immediately after `{`\n    const program = this.startNodeAt<N.Program>(this.state.endLoc);\n    this.next(); // eat `{`\n\n    const revertScopes = this.initializeScopes(/** inModule */ true);\n    this.enterInitialScopes();\n\n    try {\n      node.body = this.parseProgram(program, tt.braceR, \"module\");\n    } finally {\n      revertScopes();\n    }\n    return this.finishNode<N.ModuleExpression>(node, \"ModuleExpression\");\n  }\n\n  parseVoidPattern(\n    this: Parser,\n    refExpressionErrors: ExpressionErrors | null,\n  ): N.VoidPattern {\n    this.expectPlugin(\"discardBinding\");\n    const node = this.startNode<N.VoidPattern>();\n    if (refExpressionErrors != null) {\n      refExpressionErrors.voidPatternLoc = this.state.startLoc;\n    }\n    this.next();\n    return this.finishNode(node, \"VoidPattern\");\n  }\n\n  parseMaybeAssignAllowInOrVoidPattern(\n    this: Parser,\n    close: TokenType,\n    refExpressionErrors: ExpressionErrors | null,\n    afterLeftParse?: Function,\n  ) {\n    if (refExpressionErrors != null && this.match(tt._void)) {\n      const nextCode = this.lookaheadCharCode();\n      if (\n        nextCode === charCodes.comma ||\n        nextCode ===\n          (close === tt.bracketR\n            ? charCodes.rightSquareBracket\n            : close === tt.braceR\n              ? charCodes.rightCurlyBrace\n              : charCodes.rightParenthesis) ||\n        nextCode === charCodes.equalsTo\n      ) {\n        // `void = Initializer` is not allowed, here we parse the production as an assignment pattern\n        // so that we can recover from this error\n        return this.parseMaybeDefault(\n          this.state.startLoc,\n          this.parseVoidPattern(refExpressionErrors),\n        );\n      }\n    }\n    return this.parseMaybeAssignAllowIn(refExpressionErrors, afterLeftParse);\n  }\n\n  // Used in Flow plugin\n  parsePropertyNamePrefixOperator(\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    prop: Undone<N.ObjectOrClassMember | N.ClassMember>,\n  ): void {}\n}\n","import type * as N from \"../types.ts\";\nimport {\n  tokenIsIdentifier,\n  tokenIsKeywordOrIdentifier,\n  tokenIsLoop,\n  tokenIsTemplate,\n  tt,\n  type TokenType,\n  getExportedToken,\n} from \"../tokenizer/types.ts\";\nimport ExpressionParser from \"./expression.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport { isIdentifierChar, isIdentifierStart } from \"../util/identifier.ts\";\nimport * as charCodes from \"charcodes\";\nimport {\n  ScopeFlag,\n  ClassElementType,\n  BindingFlag,\n} from \"../util/scopeflags.ts\";\nimport { ExpressionErrors } from \"./util.ts\";\nimport { ParamKind, functionFlags } from \"../util/production-parameter.ts\";\nimport {\n  newExpressionScope,\n  newParameterDeclarationScope,\n} from \"../util/expression-scope.ts\";\nimport { OptionFlags, type SourceType } from \"../options.ts\";\nimport { Token } from \"../tokenizer/index.ts\";\nimport type { Position } from \"../util/location.ts\";\nimport { createPositionWithColumnOffset } from \"../util/location.ts\";\nimport type { Undone } from \"./node.ts\";\nimport type Parser from \"./index.ts\";\nimport { ParseBindingListFlags } from \"./lval.ts\";\nimport { LoopLabelKind } from \"../tokenizer/state.ts\";\n\nconst loopLabel = { kind: LoopLabelKind.Loop } as const,\n  switchLabel = { kind: LoopLabelKind.Switch } as const;\n\nexport const enum ParseFunctionFlag {\n  Expression = 0b0000,\n  Declaration = 0b0001,\n  HangingDeclaration = 0b0010,\n  NullableId = 0b0100,\n  Async = 0b1000,\n}\n\nexport const enum ParseStatementFlag {\n  StatementOnly = 0b0000,\n  AllowImportExport = 0b0001,\n  AllowDeclaration = 0b0010,\n  AllowFunctionDeclaration = 0b0100,\n  AllowLabeledFunction = 0b1000,\n}\n\nconst loneSurrogate = /[\\uD800-\\uDFFF]/u;\n\nconst keywordRelationalOperator = /in(?:stanceof)?/y;\n\n/**\n * Convert tokens for backward Babel 7 compat.\n * tt.privateName => tt.hash + tt.name\n * tt.templateTail => tt.backquote/tt.braceR + tt.template + tt.backquote\n * tt.templateNonTail => tt.backquote/tt.braceR + tt.template + tt.dollarBraceL\n * For performance reasons this routine mutates `tokens`, it is okay\n * here since we execute `parseTopLevel` once for every file.\n */\nfunction babel7CompatTokens(\n  tokens: (Token | N.Comment)[],\n  input: string,\n  startIndex: number,\n) {\n  for (let i = 0; i < tokens.length; i++) {\n    const token = tokens[i];\n    const { type } = token;\n    if (typeof type === \"number\") {\n      if (!process.env.BABEL_8_BREAKING) {\n        if (type === tt.privateName) {\n          const { loc, start, value, end } = token;\n          const hashEndPos = start + 1;\n          const hashEndLoc = createPositionWithColumnOffset(loc.start, 1);\n          tokens.splice(\n            i,\n            1,\n            new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.hash),\n              value: \"#\",\n              start: start,\n              end: hashEndPos,\n              startLoc: loc.start,\n              endLoc: hashEndLoc,\n            }),\n            new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.name),\n              value: value,\n              start: hashEndPos,\n              end: end,\n              startLoc: hashEndLoc,\n              endLoc: loc.end,\n            }),\n          );\n          i++;\n          continue;\n        }\n\n        if (tokenIsTemplate(type)) {\n          const { loc, start, value, end } = token;\n          const backquoteEnd = start + 1;\n          const backquoteEndLoc = createPositionWithColumnOffset(loc.start, 1);\n          let startToken;\n          if (input.charCodeAt(start - startIndex) === charCodes.graveAccent) {\n            startToken = new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.backQuote),\n              value: \"`\",\n              start: start,\n              end: backquoteEnd,\n              startLoc: loc.start,\n              endLoc: backquoteEndLoc,\n            });\n          } else {\n            startToken = new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.braceR),\n              value: \"}\",\n              start: start,\n              end: backquoteEnd,\n              startLoc: loc.start,\n              endLoc: backquoteEndLoc,\n            });\n          }\n          let templateValue,\n            templateElementEnd,\n            templateElementEndLoc,\n            endToken;\n          if (type === tt.templateTail) {\n            // ends with '`'\n            templateElementEnd = end - 1;\n            templateElementEndLoc = createPositionWithColumnOffset(loc.end, -1);\n            templateValue = value === null ? null : value.slice(1, -1);\n            endToken = new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.backQuote),\n              value: \"`\",\n              start: templateElementEnd,\n              end: end,\n              startLoc: templateElementEndLoc,\n              endLoc: loc.end,\n            });\n          } else {\n            // ends with `${`\n            templateElementEnd = end - 2;\n            templateElementEndLoc = createPositionWithColumnOffset(loc.end, -2);\n            templateValue = value === null ? null : value.slice(1, -2);\n            endToken = new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.dollarBraceL),\n              value: \"${\",\n              start: templateElementEnd,\n              end: end,\n              startLoc: templateElementEndLoc,\n              endLoc: loc.end,\n            });\n          }\n          tokens.splice(\n            i,\n            1,\n            startToken,\n            new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.template),\n              value: templateValue,\n              start: backquoteEnd,\n              end: templateElementEnd,\n              startLoc: backquoteEndLoc,\n              endLoc: templateElementEndLoc,\n            }),\n            endToken,\n          );\n          i += 2;\n          continue;\n        }\n      }\n      // @ts-expect-error: we manipulate `token` for performance reasons\n      token.type = getExportedToken(type);\n    }\n  }\n  return tokens;\n}\nexport default abstract class StatementParser extends ExpressionParser {\n  // ### Statement parsing\n\n  // Parse a program. Initializes the parser, reads any number of\n  // statements, and wraps them in a Program node.  Optionally takes a\n  // `program` argument.  If present, the statements will be appended\n  // to its body instead of creating a new node.\n\n  parseTopLevel(\n    this: Parser,\n    file: Undone<N.File>,\n    program: Undone<N.Program>,\n  ): N.File {\n    file.program = this.parseProgram(\n      program,\n      tt.eof,\n      this.options.sourceType === \"module\" ? \"module\" : \"script\",\n    );\n    file.comments = this.comments;\n\n    if (this.optionFlags & OptionFlags.Tokens) {\n      file.tokens = babel7CompatTokens(\n        this.tokens,\n        this.input,\n        this.startIndex,\n      );\n    }\n\n    return this.finishNode(file, \"File\");\n  }\n\n  parseProgram(\n    this: Parser,\n    program: Undone<N.Program>,\n    end: TokenType,\n    sourceType: SourceType,\n  ): N.Program {\n    program.sourceType = sourceType;\n    program.interpreter = this.parseInterpreterDirective();\n    this.parseBlockBody(program, true, true, end);\n    if (this.inModule) {\n      if (\n        !(this.optionFlags & OptionFlags.AllowUndeclaredExports) &&\n        this.scope.undefinedExports.size > 0\n      ) {\n        for (const [localName, at] of Array.from(this.scope.undefinedExports)) {\n          this.raise(Errors.ModuleExportUndefined, at, { localName });\n        }\n      }\n      this.addExtra(program, \"topLevelAwait\", this.state.hasTopLevelAwait);\n    }\n    let finishedProgram: N.Program;\n    if (end === tt.eof) {\n      // finish at eof for top level program\n      finishedProgram = this.finishNode(program, \"Program\");\n    } else {\n      // finish immediately before the end token\n      finishedProgram = this.finishNodeAt(\n        program,\n        \"Program\",\n        createPositionWithColumnOffset(this.state.startLoc, -1),\n      );\n    }\n    return finishedProgram;\n  }\n\n  /**\n   * cast a Statement to a Directive. This method mutates input statement.\n   */\n  stmtToDirective(stmt: N.ExpressionStatement): N.Directive {\n    const directive = this.castNodeTo(stmt, \"Directive\");\n\n    const directiveLiteral = this.castNodeTo(\n      stmt.expression,\n      \"DirectiveLiteral\",\n    );\n    const expressionValue = directiveLiteral.value;\n    const raw = this.input.slice(\n      this.offsetToSourcePos(directiveLiteral.start),\n      this.offsetToSourcePos(directiveLiteral.end),\n    );\n    const val = (directiveLiteral.value = raw.slice(1, -1)); // remove quotes\n\n    this.addExtra(directiveLiteral, \"raw\", raw);\n    this.addExtra(directiveLiteral, \"rawValue\", val);\n    this.addExtra(directiveLiteral, \"expressionValue\", expressionValue);\n\n    directive.value = directiveLiteral;\n    delete stmt.expression;\n\n    return directive;\n  }\n\n  parseInterpreterDirective(): N.InterpreterDirective | null {\n    if (!this.match(tt.interpreterDirective)) {\n      return null;\n    }\n\n    const node = this.startNode<N.InterpreterDirective>();\n    node.value = this.state.value;\n    this.next();\n    return this.finishNode(node, \"InterpreterDirective\");\n  }\n\n  isLet(): boolean {\n    if (!this.isContextual(tt._let)) {\n      return false;\n    }\n    return this.hasFollowingBindingAtom();\n  }\n\n  isUsing(): boolean {\n    if (!this.isContextual(tt._using)) {\n      return false;\n    }\n    const next = this.nextTokenInLineStart();\n    const nextCh = this.codePointAtPos(next);\n    return this.chStartsBindingIdentifier(nextCh, next);\n  }\n\n  isForUsing(): boolean {\n    if (!this.isContextual(tt._using)) {\n      return false;\n    }\n    const next = this.nextTokenInLineStart();\n    const nextCh = this.codePointAtPos(next);\n    if (this.isUnparsedContextual(next, \"of\")) {\n      const nextCharAfterOf = this.lookaheadCharCodeSince(next + 2);\n      // `for( using of` must start either a for-lhs-of statement\n      // or a for lexical declaration\n      if (\n        nextCharAfterOf !== charCodes.equalsTo &&\n        nextCharAfterOf !== charCodes.colon &&\n        // recover from `for(using of;...);`\n        nextCharAfterOf !== charCodes.semicolon\n      ) {\n        return false;\n      }\n    }\n    if (\n      this.chStartsBindingIdentifier(nextCh, next) ||\n      this.isUnparsedContextual(next, \"void\")\n    ) {\n      return true;\n    }\n    return false;\n  }\n\n  isAwaitUsing(): boolean {\n    if (!this.isContextual(tt._await)) {\n      return false;\n    }\n    let next = this.nextTokenInLineStart();\n    if (this.isUnparsedContextual(next, \"using\")) {\n      next = this.nextTokenInLineStartSince(next + 5);\n      const nextCh = this.codePointAtPos(next);\n      if (this.chStartsBindingIdentifier(nextCh, next)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  chStartsBindingIdentifier(ch: number, pos: number) {\n    if (isIdentifierStart(ch)) {\n      keywordRelationalOperator.lastIndex = pos;\n      if (keywordRelationalOperator.test(this.input)) {\n        // We have seen `in` or `instanceof` so far, now check if the identifier\n        // ends here\n        const endCh = this.codePointAtPos(keywordRelationalOperator.lastIndex);\n        if (!isIdentifierChar(endCh) && endCh !== charCodes.backslash) {\n          return false;\n        }\n      }\n      return true;\n    } else if (ch === charCodes.backslash) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  chStartsBindingPattern(ch: number) {\n    return (\n      ch === charCodes.leftSquareBracket || ch === charCodes.leftCurlyBrace\n    );\n  }\n\n  /**\n   * Assuming we have seen a contextual `let` and declaration is allowed, check if it\n   * starts a variable declaration so that it should be interpreted as a keyword.\n   */\n  hasFollowingBindingAtom(): boolean {\n    const next = this.nextTokenStart();\n    const nextCh = this.codePointAtPos(next);\n    return (\n      this.chStartsBindingPattern(nextCh) ||\n      this.chStartsBindingIdentifier(nextCh, next)\n    );\n  }\n\n  /**\n   * Assuming we have seen a contextual `using` and declaration is allowed, check if it\n   * starts a variable declaration in the same line so that it should be interpreted as\n   * a keyword.\n   */\n  hasInLineFollowingBindingIdentifierOrBrace(): boolean {\n    const next = this.nextTokenInLineStart();\n    const nextCh = this.codePointAtPos(next);\n    return (\n      nextCh === charCodes.leftCurlyBrace ||\n      this.chStartsBindingIdentifier(nextCh, next)\n    );\n  }\n\n  allowsUsing(): boolean {\n    return (\n      (this.scope.inModule || !this.scope.inTopLevel) &&\n      !this.scope.inBareCaseStatement\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-ModuleItem\n  parseModuleItem(this: Parser) {\n    return this.parseStatementLike(\n      ParseStatementFlag.AllowImportExport |\n        ParseStatementFlag.AllowDeclaration |\n        ParseStatementFlag.AllowFunctionDeclaration |\n        // This function is actually also used to parse StatementItems,\n        // which with Annex B enabled allows labeled functions.\n        ParseStatementFlag.AllowLabeledFunction,\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-StatementListItem\n  parseStatementListItem(this: Parser) {\n    return this.parseStatementLike(\n      ParseStatementFlag.AllowDeclaration |\n        ParseStatementFlag.AllowFunctionDeclaration |\n        (!this.options.annexB || this.state.strict\n          ? 0\n          : ParseStatementFlag.AllowLabeledFunction),\n    );\n  }\n\n  parseStatementOrSloppyAnnexBFunctionDeclaration(\n    this: Parser,\n    allowLabeledFunction: boolean = false,\n  ) {\n    let flags: ParseStatementFlag = ParseStatementFlag.StatementOnly;\n    if (this.options.annexB && !this.state.strict) {\n      flags |= ParseStatementFlag.AllowFunctionDeclaration;\n      if (allowLabeledFunction) {\n        flags |= ParseStatementFlag.AllowLabeledFunction;\n      }\n    }\n    return this.parseStatementLike(flags);\n  }\n\n  // Parse a single statement.\n  //\n  // If expecting a statement and finding a slash operator, parse a\n  // regular expression literal. This is to handle cases like\n  // `if (foo) /blah/.exec(foo)`, where looking at the previous token\n  // does not help.\n  // https://tc39.es/ecma262/#prod-Statement\n  parseStatement(this: Parser) {\n    return this.parseStatementLike(ParseStatementFlag.StatementOnly);\n  }\n\n  // ImportDeclaration and ExportDeclaration are also handled here so we can throw recoverable errors\n  // when they are not at the top level\n  parseStatementLike(\n    this: Parser,\n    flags: ParseStatementFlag,\n  ):\n    | N.Statement\n    | N.Declaration\n    | N.ImportDeclaration\n    | N.ExportDefaultDeclaration\n    | N.ExportNamedDeclaration\n    | N.ExportAllDeclaration {\n    let decorators: N.Decorator[] | null = null;\n\n    if (this.match(tt.at)) {\n      decorators = this.parseDecorators(true);\n    }\n    return this.parseStatementContent(flags, decorators);\n  }\n\n  parseStatementContent(\n    this: Parser,\n    flags: ParseStatementFlag,\n    decorators?: N.Decorator[] | null,\n  ): N.Statement {\n    const startType = this.state.type;\n    const node = this.startNode();\n    const allowDeclaration = !!(flags & ParseStatementFlag.AllowDeclaration);\n    const allowFunctionDeclaration = !!(\n      flags & ParseStatementFlag.AllowFunctionDeclaration\n    );\n    const topLevel = flags & ParseStatementFlag.AllowImportExport;\n\n    // Most types of statements are recognized by the keyword they\n    // start with. Many are trivial to parse, some require a bit of\n    // complexity.\n\n    switch (startType) {\n      case tt._break:\n        return this.parseBreakContinueStatement(node, /* isBreak */ true);\n      case tt._continue:\n        return this.parseBreakContinueStatement(node, /* isBreak */ false);\n      case tt._debugger:\n        return this.parseDebuggerStatement(node as Undone<N.DebuggerStatement>);\n      case tt._do:\n        return this.parseDoWhileStatement(node as Undone<N.DoWhileStatement>);\n      case tt._for:\n        return this.parseForStatement(node as Undone<N.ForStatement>);\n      case tt._function:\n        if (this.lookaheadCharCode() === charCodes.dot) break;\n        if (!allowFunctionDeclaration) {\n          this.raise(\n            this.state.strict\n              ? Errors.StrictFunction\n              : this.options.annexB\n                ? Errors.SloppyFunctionAnnexB\n                : Errors.SloppyFunction,\n            this.state.startLoc,\n          );\n        }\n        return this.parseFunctionStatement(\n          node as Undone<N.FunctionDeclaration>,\n          false,\n          !allowDeclaration && allowFunctionDeclaration,\n        );\n      case tt._class:\n        if (!allowDeclaration) this.unexpected();\n        return this.parseClass(\n          this.maybeTakeDecorators(\n            decorators,\n            node as Undone<N.ClassDeclaration>,\n          ),\n          true,\n        );\n\n      case tt._if:\n        return this.parseIfStatement(node as Undone<N.IfStatement>);\n      case tt._return:\n        return this.parseReturnStatement(node as Undone<N.ReturnStatement>);\n      case tt._switch:\n        return this.parseSwitchStatement(node as Undone<N.SwitchStatement>);\n      case tt._throw:\n        return this.parseThrowStatement(node as Undone<N.ThrowStatement>);\n      case tt._try:\n        return this.parseTryStatement(node as Undone<N.TryStatement>);\n\n      case tt._await:\n        // [+Await] await [no LineTerminator here] using [no LineTerminator here] BindingList[+Using]\n        if (this.isAwaitUsing()) {\n          if (!this.allowsUsing()) {\n            this.raise(Errors.UnexpectedUsingDeclaration, node);\n          } else if (!allowDeclaration) {\n            this.raise(Errors.UnexpectedLexicalDeclaration, node);\n          } else if (!this.recordAwaitIfAllowed()) {\n            this.raise(Errors.AwaitUsingNotInAsyncContext, node);\n          }\n          this.next(); // eat 'await'\n          return this.parseVarStatement(\n            node as Undone<N.VariableDeclaration>,\n            \"await using\",\n          );\n        }\n        break;\n      case tt._using:\n        // using [no LineTerminator here] BindingList[+Using]\n        if (\n          this.state.containsEsc ||\n          !this.hasInLineFollowingBindingIdentifierOrBrace()\n        ) {\n          break;\n        }\n        if (!this.allowsUsing()) {\n          this.raise(Errors.UnexpectedUsingDeclaration, this.state.startLoc);\n        } else if (!allowDeclaration) {\n          this.raise(Errors.UnexpectedLexicalDeclaration, this.state.startLoc);\n        }\n        return this.parseVarStatement(\n          node as Undone<N.VariableDeclaration>,\n          \"using\",\n        );\n      case tt._let: {\n        if (this.state.containsEsc) {\n          break;\n        }\n        // `let [` is an explicit negative lookahead for\n        // ExpressionStatement, so special-case it first.\n        const next = this.nextTokenStart();\n        const nextCh = this.codePointAtPos(next);\n        if (nextCh !== charCodes.leftSquareBracket) {\n          if (!allowDeclaration && this.hasFollowingLineBreak()) break;\n          if (\n            !this.chStartsBindingIdentifier(nextCh, next) &&\n            nextCh !== charCodes.leftCurlyBrace\n          ) {\n            break;\n          }\n        }\n      }\n      // fall through\n      case tt._const: {\n        if (!allowDeclaration) {\n          this.raise(Errors.UnexpectedLexicalDeclaration, this.state.startLoc);\n        }\n      }\n      // fall through\n      case tt._var: {\n        const kind = this.state.value;\n        return this.parseVarStatement(\n          node as Undone<N.VariableDeclaration>,\n          kind,\n        );\n      }\n      case tt._while:\n        return this.parseWhileStatement(node as Undone<N.WhileStatement>);\n      case tt._with:\n        return this.parseWithStatement(node as Undone<N.WithStatement>);\n      case tt.braceL:\n        return this.parseBlock();\n      case tt.semi:\n        return this.parseEmptyStatement(node as Undone<N.EmptyStatement>);\n      case tt._import: {\n        const nextTokenCharCode = this.lookaheadCharCode();\n        if (\n          nextTokenCharCode === charCodes.leftParenthesis || // import()\n          nextTokenCharCode === charCodes.dot // import.meta\n        ) {\n          break;\n        }\n      }\n      // fall through\n      case tt._export: {\n        if (\n          !(this.optionFlags & OptionFlags.AllowImportExportEverywhere) &&\n          !topLevel\n        ) {\n          this.raise(Errors.UnexpectedImportExport, this.state.startLoc);\n        }\n\n        this.next(); // eat `import`/`export`\n\n        let result;\n        if (startType === tt._import) {\n          result = this.parseImport(node as Undone<N.ImportDeclaration>);\n        } else {\n          result = this.parseExport(\n            node as Undone<\n              | N.ExportAllDeclaration\n              | N.ExportDefaultDeclaration\n              | N.ExportNamedDeclaration\n            >,\n            decorators,\n          );\n        }\n\n        this.assertModuleNodeAllowed(result);\n\n        return result;\n      }\n\n      default: {\n        if (this.isAsyncFunction()) {\n          if (!allowDeclaration) {\n            this.raise(\n              Errors.AsyncFunctionInSingleStatementContext,\n              this.state.startLoc,\n            );\n          }\n          this.next(); // eat 'async'\n          return this.parseFunctionStatement(\n            node as Undone<N.FunctionDeclaration>,\n            true,\n            !allowDeclaration && allowFunctionDeclaration,\n          );\n        }\n      }\n    }\n\n    // If the statement does not start with a statement keyword or a\n    // brace, it's an ExpressionStatement or LabeledStatement. We\n    // simply start parsing an expression, and afterwards, if the\n    // next token is a colon and the expression was a simple\n    // Identifier node, we switch to interpreting it as a label.\n    const maybeName = this.state.value;\n    const expr = this.parseExpression();\n\n    if (\n      tokenIsIdentifier(startType) &&\n      expr.type === \"Identifier\" &&\n      this.eat(tt.colon)\n    ) {\n      return this.parseLabeledStatement(\n        node as Undone<N.LabeledStatement>,\n        maybeName,\n        expr,\n        flags,\n      );\n    } else {\n      return this.parseExpressionStatement(\n        node as Undone<N.ExpressionStatement>,\n        expr,\n        decorators,\n      );\n    }\n  }\n\n  assertModuleNodeAllowed(node: N.Node): void {\n    if (\n      !(this.optionFlags & OptionFlags.AllowImportExportEverywhere) &&\n      !this.inModule\n    ) {\n      this.raise(Errors.ImportOutsideModule, node);\n    }\n  }\n\n  decoratorsEnabledBeforeExport(): boolean {\n    if (this.hasPlugin(\"decorators-legacy\")) return true;\n    return (\n      this.hasPlugin(\"decorators\") &&\n      this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\") !== false\n    );\n  }\n\n  // Attach the decorators to the given class.\n  // NOTE: This method changes the .start location of the class, and thus\n  // can affect comment attachment. Calling it before or after finalizing\n  // the class node (and thus finalizing its comments) changes how comments\n  // before the `class` keyword or before the final .start location of the\n  // class are attached.\n  maybeTakeDecorators<T extends Undone<N.Class>>(\n    maybeDecorators: N.Decorator[] | null,\n    classNode: T,\n    exportNode?: Undone<N.ExportDefaultDeclaration | N.ExportNamedDeclaration>,\n  ): T {\n    if (maybeDecorators) {\n      if (classNode.decorators?.length) {\n        // Note: decorators attachment is only attempred multiple times\n        // when the class is part of an export declaration.\n        if (\n          typeof this.getPluginOption(\n            \"decorators\",\n            \"decoratorsBeforeExport\",\n          ) !== \"boolean\"\n        ) {\n          // If `decoratorsBeforeExport` was set to `true` or `false`, we\n          // already threw an error about decorators not being in a valid\n          // position.\n          this.raise(\n            Errors.DecoratorsBeforeAfterExport,\n            classNode.decorators[0],\n          );\n        }\n        classNode.decorators.unshift(...maybeDecorators);\n      } else {\n        classNode.decorators = maybeDecorators;\n      }\n      this.resetStartLocationFromNode(classNode, maybeDecorators[0]);\n      if (exportNode) this.resetStartLocationFromNode(exportNode, classNode);\n    }\n    return classNode;\n  }\n\n  canHaveLeadingDecorator(): boolean {\n    return this.match(tt._class);\n  }\n\n  parseDecorators(this: Parser, allowExport?: boolean): N.Decorator[] {\n    const decorators = [];\n    do {\n      decorators.push(this.parseDecorator());\n    } while (this.match(tt.at));\n\n    if (this.match(tt._export)) {\n      if (!allowExport) {\n        this.unexpected();\n      }\n\n      if (!this.decoratorsEnabledBeforeExport()) {\n        this.raise(Errors.DecoratorExportClass, this.state.startLoc);\n      }\n    } else if (!this.canHaveLeadingDecorator()) {\n      throw this.raise(Errors.UnexpectedLeadingDecorator, this.state.startLoc);\n    }\n\n    return decorators;\n  }\n\n  parseDecorator(this: Parser): N.Decorator {\n    this.expectOnePlugin([\"decorators\", \"decorators-legacy\"]);\n\n    const node = this.startNode<N.Decorator>();\n    this.next();\n\n    if (this.hasPlugin(\"decorators\")) {\n      const startLoc = this.state.startLoc;\n      let expr: N.Expression;\n\n      if (this.match(tt.parenL)) {\n        const startLoc = this.state.startLoc;\n        this.next(); // eat '('\n        expr = this.parseExpression();\n        this.expect(tt.parenR);\n        expr = this.wrapParenthesis(startLoc, expr);\n\n        const paramsStartLoc = this.state.startLoc;\n        node.expression = this.parseMaybeDecoratorArguments(expr, startLoc);\n        if (\n          this.getPluginOption(\"decorators\", \"allowCallParenthesized\") ===\n            false &&\n          node.expression !== expr\n        ) {\n          this.raise(\n            Errors.DecoratorArgumentsOutsideParentheses,\n            paramsStartLoc,\n          );\n        }\n      } else {\n        expr = this.parseIdentifier(false);\n\n        while (this.eat(tt.dot)) {\n          const node = this.startNodeAt<N.MemberExpression>(startLoc);\n          node.object = expr;\n          if (this.match(tt.privateName)) {\n            this.classScope.usePrivateName(\n              this.state.value,\n              this.state.startLoc,\n            );\n            node.property = this.parsePrivateName();\n          } else {\n            node.property = this.parseIdentifier(true);\n          }\n          node.computed = false;\n          expr = this.finishNode(node, \"MemberExpression\");\n        }\n\n        node.expression = this.parseMaybeDecoratorArguments(expr, startLoc);\n      }\n    } else {\n      node.expression = this.parseExprSubscripts();\n    }\n    return this.finishNode(node, \"Decorator\");\n  }\n\n  parseMaybeDecoratorArguments(\n    this: Parser,\n    expr: N.Expression,\n    startLoc: Position,\n  ): N.Expression {\n    if (this.eat(tt.parenL)) {\n      const node = this.startNodeAt<N.CallExpression>(startLoc);\n      node.callee = expr;\n      node.arguments = this.parseCallExpressionArguments();\n      this.toReferencedList(node.arguments);\n      return this.finishNode(node, \"CallExpression\");\n    }\n\n    return expr;\n  }\n\n  parseBreakContinueStatement(\n    node: Undone<N.Node>,\n    isBreak: true,\n  ): N.BreakStatement;\n  parseBreakContinueStatement(\n    node: Undone<N.Node>,\n    isBreak: false,\n  ): N.ContinueStatement;\n  parseBreakContinueStatement(\n    node: Undone<N.BreakStatement | N.ContinueStatement>,\n    isBreak: boolean,\n  ): N.BreakStatement | N.ContinueStatement {\n    this.next();\n\n    if (this.isLineTerminator()) {\n      node.label = null;\n    } else {\n      node.label = this.parseIdentifier();\n      this.semicolon();\n    }\n\n    this.verifyBreakContinue(node, isBreak);\n\n    return this.finishNode(\n      node,\n      isBreak ? \"BreakStatement\" : \"ContinueStatement\",\n    );\n  }\n\n  verifyBreakContinue(\n    node: Undone<N.BreakStatement | N.ContinueStatement>,\n    isBreak: boolean,\n  ) {\n    let i;\n    for (i = 0; i < this.state.labels.length; ++i) {\n      const lab = this.state.labels[i];\n      if (node.label == null || lab.name === node.label.name) {\n        if (lab.kind != null && (isBreak || lab.kind === LoopLabelKind.Loop)) {\n          break;\n        }\n        if (node.label && isBreak) break;\n      }\n    }\n    if (i === this.state.labels.length) {\n      const type = isBreak ? \"BreakStatement\" : \"ContinueStatement\";\n      this.raise(Errors.IllegalBreakContinue, node, { type });\n    }\n  }\n\n  parseDebuggerStatement(\n    node: Undone<N.DebuggerStatement>,\n  ): N.DebuggerStatement {\n    this.next();\n    this.semicolon();\n    return this.finishNode(node, \"DebuggerStatement\");\n  }\n\n  parseHeaderExpression(this: Parser): N.Expression {\n    this.expect(tt.parenL);\n    const val = this.parseExpression();\n    this.expect(tt.parenR);\n    return val;\n  }\n\n  // https://tc39.es/ecma262/#prod-DoWhileStatement\n  parseDoWhileStatement(\n    this: Parser,\n    node: Undone<N.DoWhileStatement>,\n  ): N.DoWhileStatement {\n    this.next();\n    this.state.labels.push(loopLabel);\n\n    // Parse the loop body's body.\n    node.body =\n      // For the smartPipelines plugin: Disable topic references from outer\n      // contexts within the loop body. They are permitted in test expressions,\n      // outside of the loop body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse the loop body's body.\n        this.parseStatement(),\n      );\n\n    this.state.labels.pop();\n\n    this.expect(tt._while);\n    node.test = this.parseHeaderExpression();\n    this.eat(tt.semi);\n    return this.finishNode(node, \"DoWhileStatement\");\n  }\n\n  // Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n  // loop is non-trivial. Basically, we have to parse the init `var`\n  // statement or expression, disallowing the `in` operator (see\n  // the second parameter to `parseExpression`), and then check\n  // whether the next token is `in` or `of`. When there is no init\n  // part (semicolon immediately after the opening parenthesis), it\n  // is a regular `for` loop.\n\n  parseForStatement(\n    this: Parser,\n    node: Undone<N.ForStatement | N.ForInOf>,\n  ): N.ForLike {\n    this.next();\n    this.state.labels.push(loopLabel);\n\n    let awaitAt = null;\n\n    if (this.isContextual(tt._await) && this.recordAwaitIfAllowed()) {\n      awaitAt = this.state.startLoc;\n      this.next();\n    }\n    this.scope.enter(ScopeFlag.OTHER);\n    this.expect(tt.parenL);\n\n    if (this.match(tt.semi)) {\n      if (awaitAt !== null) {\n        this.unexpected(awaitAt);\n      }\n      return this.parseFor(node as Undone<N.ForStatement>, null);\n    }\n\n    const startsWithLet = this.isContextual(tt._let);\n    {\n      const startsWithAwaitUsing = this.isAwaitUsing();\n      const starsWithUsingDeclaration =\n        startsWithAwaitUsing || this.isForUsing();\n      const isLetOrUsing =\n        (startsWithLet && this.hasFollowingBindingAtom()) ||\n        starsWithUsingDeclaration;\n\n      if (this.match(tt._var) || this.match(tt._const) || isLetOrUsing) {\n        const initNode = this.startNode<N.VariableDeclaration>();\n        let kind;\n        if (startsWithAwaitUsing) {\n          kind = \"await using\";\n          if (!this.recordAwaitIfAllowed()) {\n            this.raise(Errors.AwaitUsingNotInAsyncContext, this.state.startLoc);\n          }\n          this.next(); // eat 'await'\n        } else {\n          kind = this.state.value;\n        }\n        this.next();\n        this.parseVar(initNode, true, kind);\n        const init = this.finishNode(initNode, \"VariableDeclaration\");\n\n        const isForIn = this.match(tt._in);\n        if (isForIn && starsWithUsingDeclaration) {\n          this.raise(Errors.ForInUsing, init);\n        }\n        if (\n          (isForIn || this.isContextual(tt._of)) &&\n          init.declarations.length === 1\n        ) {\n          return this.parseForIn(node as Undone<N.ForInOf>, init, awaitAt);\n        }\n        if (awaitAt !== null) {\n          this.unexpected(awaitAt);\n        }\n        return this.parseFor(node as Undone<N.ForStatement>, init);\n      }\n    }\n\n    // Check whether the first token is possibly a contextual keyword, so that\n    // we can forbid `for (async of` if this turns out to be a for-of loop.\n    const startsWithAsync = this.isContextual(tt._async);\n\n    const refExpressionErrors = new ExpressionErrors();\n    const init = this.parseExpression(true, refExpressionErrors);\n    const isForOf = this.isContextual(tt._of);\n    if (isForOf) {\n      // Check for leading tokens that are forbidden in for-of loops:\n      if (startsWithLet) {\n        this.raise(Errors.ForOfLet, init);\n      }\n\n      if (\n        // `for await (async of []);` is allowed.\n        awaitAt === null &&\n        startsWithAsync &&\n        init.type === \"Identifier\"\n      ) {\n        // This catches the case where the `async` in `for (async of` was\n        // parsed as an identifier. If it was parsed as the start of an async\n        // arrow function (e.g. `for (async of => {} of []);`), the LVal check\n        // further down will raise a more appropriate error.\n        this.raise(Errors.ForOfAsync, init);\n      }\n    }\n    if (isForOf || this.match(tt._in)) {\n      this.checkDestructuringPrivate(refExpressionErrors);\n      this.toAssignable(init, /* isLHS */ true);\n      const type = isForOf ? \"ForOfStatement\" : \"ForInStatement\";\n      this.checkLVal(init, { type });\n      return this.parseForIn(\n        node as Undone<N.ForInStatement | N.ForOfStatement>,\n        // @ts-expect-error init has been transformed to an assignable\n        init,\n        awaitAt,\n      );\n    } else {\n      this.checkExpressionErrors(refExpressionErrors, true);\n    }\n    if (awaitAt !== null) {\n      this.unexpected(awaitAt);\n    }\n    return this.parseFor(node as Undone<N.ForStatement>, init);\n  }\n\n  // https://tc39.es/ecma262/#prod-HoistableDeclaration\n  parseFunctionStatement(\n    this: Parser,\n    node: Undone<N.FunctionDeclaration>,\n    isAsync: boolean,\n    isHangingDeclaration: boolean,\n  ): N.FunctionDeclaration {\n    this.next(); // eat 'function'\n    return this.parseFunction(\n      node,\n      ParseFunctionFlag.Declaration |\n        (isHangingDeclaration ? ParseFunctionFlag.HangingDeclaration : 0) |\n        (isAsync ? ParseFunctionFlag.Async : 0),\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-IfStatement\n  parseIfStatement(this: Parser, node: Undone<N.IfStatement>) {\n    this.next();\n    node.test = this.parseHeaderExpression();\n    // Annex B.3.3\n    // https://tc39.es/ecma262/#sec-functiondeclarations-in-ifstatement-statement-clauses\n    node.consequent = this.parseStatementOrSloppyAnnexBFunctionDeclaration();\n    node.alternate = this.eat(tt._else)\n      ? this.parseStatementOrSloppyAnnexBFunctionDeclaration()\n      : null;\n    return this.finishNode(node, \"IfStatement\");\n  }\n\n  parseReturnStatement(this: Parser, node: Undone<N.ReturnStatement>) {\n    if (!this.prodParam.hasReturn) {\n      this.raise(Errors.IllegalReturn, this.state.startLoc);\n    }\n\n    this.next();\n\n    // In `return` (and `break`/`continue`), the keywords with\n    // optional arguments, we eagerly look for a semicolon or the\n    // possibility to insert one.\n\n    if (this.isLineTerminator()) {\n      node.argument = null;\n    } else {\n      node.argument = this.parseExpression();\n      this.semicolon();\n    }\n\n    return this.finishNode(node, \"ReturnStatement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-SwitchStatement\n  parseSwitchStatement(this: Parser, node: Undone<N.SwitchStatement>) {\n    this.next();\n    node.discriminant = this.parseHeaderExpression();\n    const cases: N.SwitchStatement[\"cases\"] = (node.cases = []);\n    this.expect(tt.braceL);\n    this.state.labels.push(switchLabel);\n    this.scope.enter(ScopeFlag.SWITCH);\n\n    // Statements under must be grouped (by label) in SwitchCase\n    // nodes. `cur` is used to keep the node that we are currently\n    // adding statements to.\n\n    let cur;\n    for (let sawDefault; !this.match(tt.braceR); ) {\n      if (this.match(tt._case) || this.match(tt._default)) {\n        const isCase = this.match(tt._case);\n        if (cur) this.finishNode(cur, \"SwitchCase\");\n        // @ts-expect-error Fixme\n        cases.push((cur = this.startNode<N.SwitchCase>()));\n        cur.consequent = [];\n        this.next();\n        if (isCase) {\n          cur.test = this.parseExpression();\n        } else {\n          if (sawDefault) {\n            this.raise(\n              Errors.MultipleDefaultsInSwitch,\n              this.state.lastTokStartLoc,\n            );\n          }\n          sawDefault = true;\n          cur.test = null;\n        }\n        this.expect(tt.colon);\n      } else {\n        if (cur) {\n          cur.consequent.push(this.parseStatementListItem());\n        } else {\n          this.unexpected();\n        }\n      }\n    }\n    this.scope.exit();\n    if (cur) this.finishNode(cur, \"SwitchCase\");\n    this.next(); // Closing brace\n    this.state.labels.pop();\n    return this.finishNode(node, \"SwitchStatement\");\n  }\n\n  parseThrowStatement(this: Parser, node: Undone<N.ThrowStatement>) {\n    this.next();\n    if (this.hasPrecedingLineBreak()) {\n      this.raise(Errors.NewlineAfterThrow, this.state.lastTokEndLoc);\n    }\n    node.argument = this.parseExpression();\n    this.semicolon();\n    return this.finishNode(node, \"ThrowStatement\");\n  }\n\n  parseCatchClauseParam(this: Parser): N.Pattern {\n    const param = this.parseBindingAtom();\n\n    this.scope.enter(\n      this.options.annexB && param.type === \"Identifier\"\n        ? ScopeFlag.SIMPLE_CATCH\n        : ScopeFlag.OTHER,\n    );\n    this.checkLVal(\n      param,\n      { type: \"CatchClause\" },\n      BindingFlag.TYPE_CATCH_PARAM,\n    );\n\n    return param;\n  }\n\n  parseTryStatement(\n    this: Parser,\n    node: Undone<N.TryStatement>,\n  ): N.TryStatement {\n    this.next();\n\n    node.block = this.parseBlock();\n    node.handler = null;\n\n    if (this.match(tt._catch)) {\n      const clause = this.startNode<N.CatchClause>();\n      this.next();\n      if (this.match(tt.parenL)) {\n        this.expect(tt.parenL);\n        clause.param = this.parseCatchClauseParam();\n        this.expect(tt.parenR);\n      } else {\n        clause.param = null;\n        this.scope.enter(ScopeFlag.OTHER);\n      }\n\n      // Parse the catch clause's body.\n      clause.body =\n        // For the smartPipelines plugin: Disable topic references from outer\n        // contexts within the catch clause's body.\n        this.withSmartMixTopicForbiddingContext(() =>\n          // Parse the catch clause's body.\n          this.parseBlock(false, false),\n        );\n\n      this.scope.exit();\n      node.handler = this.finishNode(clause, \"CatchClause\");\n    }\n\n    node.finalizer = this.eat(tt._finally) ? this.parseBlock() : null;\n\n    if (!node.handler && !node.finalizer) {\n      this.raise(Errors.NoCatchOrFinally, node);\n    }\n\n    return this.finishNode(node, \"TryStatement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-VariableStatement\n  // https://tc39.es/ecma262/#prod-LexicalDeclaration\n  parseVarStatement(\n    this: Parser,\n    node: Undone<N.VariableDeclaration>,\n    kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n    allowMissingInitializer: boolean = false,\n  ): N.VariableDeclaration {\n    this.next();\n    this.parseVar(node, false, kind, allowMissingInitializer);\n    this.semicolon();\n    return this.finishNode(node, \"VariableDeclaration\");\n  }\n\n  // https://tc39.es/ecma262/#prod-WhileStatement\n  parseWhileStatement(\n    this: Parser,\n    node: Undone<N.WhileStatement>,\n  ): N.WhileStatement {\n    this.next();\n    node.test = this.parseHeaderExpression();\n    this.state.labels.push(loopLabel);\n\n    // Parse the loop body.\n    node.body =\n      // For the smartPipelines plugin:\n      // Disable topic references from outer contexts within the loop body.\n      // They are permitted in test expressions, outside of the loop body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse loop body.\n        this.parseStatement(),\n      );\n\n    this.state.labels.pop();\n\n    return this.finishNode(node, \"WhileStatement\");\n  }\n\n  parseWithStatement(\n    this: Parser,\n    node: Undone<N.WithStatement>,\n  ): N.WithStatement {\n    if (this.state.strict) {\n      this.raise(Errors.StrictWith, this.state.startLoc);\n    }\n    this.next();\n    node.object = this.parseHeaderExpression();\n\n    // Parse the statement body.\n    node.body =\n      // For the smartPipelines plugin:\n      // Disable topic references from outer contexts within the with statement's body.\n      // They are permitted in function default-parameter expressions, which are\n      // part of the outer context, outside of the with statement's body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse the statement body.\n        this.parseStatement(),\n      );\n\n    return this.finishNode(node, \"WithStatement\");\n  }\n\n  parseEmptyStatement(node: Undone<N.EmptyStatement>): N.EmptyStatement {\n    this.next();\n    return this.finishNode(node, \"EmptyStatement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-LabelledStatement\n  parseLabeledStatement(\n    this: Parser,\n    node: Undone<N.LabeledStatement>,\n    maybeName: string,\n    expr: N.Identifier,\n    flags: ParseStatementFlag,\n  ): N.LabeledStatement {\n    for (const label of this.state.labels) {\n      if (label.name === maybeName) {\n        this.raise(Errors.LabelRedeclaration, expr, {\n          labelName: maybeName,\n        });\n      }\n    }\n\n    const kind = tokenIsLoop(this.state.type)\n      ? LoopLabelKind.Loop\n      : this.match(tt._switch)\n        ? LoopLabelKind.Switch\n        : null;\n    for (let i = this.state.labels.length - 1; i >= 0; i--) {\n      const label = this.state.labels[i];\n      if (label.statementStart === node.start) {\n        label.statementStart = this.sourceToOffsetPos(this.state.start);\n        label.kind = kind;\n      } else {\n        break;\n      }\n    }\n\n    this.state.labels.push({\n      name: maybeName,\n      kind: kind,\n      statementStart: this.sourceToOffsetPos(this.state.start),\n    });\n    // https://tc39.es/ecma262/#prod-LabelledItem\n    node.body =\n      flags & ParseStatementFlag.AllowLabeledFunction\n        ? this.parseStatementOrSloppyAnnexBFunctionDeclaration(true)\n        : this.parseStatement();\n\n    this.state.labels.pop();\n    node.label = expr;\n    return this.finishNode(node, \"LabeledStatement\");\n  }\n\n  parseExpressionStatement(\n    node: Undone<N.ExpressionStatement>,\n    expr: N.Expression,\n    /* eslint-disable-next-line @typescript-eslint/no-unused-vars -- used in TypeScript parser */\n    decorators: N.Decorator[] | null,\n  ) {\n    node.expression = expr;\n    this.semicolon();\n    return this.finishNode(node, \"ExpressionStatement\");\n  }\n\n  // Parse a semicolon-enclosed block of statements, handling `\"use\n  // strict\"` declarations when `allowDirectives` is true (used for\n  // function bodies).\n\n  parseBlock(\n    this: Parser,\n    allowDirectives: boolean = false,\n    createNewLexicalScope: boolean = true,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): N.BlockStatement {\n    const node = this.startNode<N.BlockStatement>();\n    if (allowDirectives) {\n      this.state.strictErrors.clear();\n    }\n    this.expect(tt.braceL);\n    if (createNewLexicalScope) {\n      this.scope.enter(ScopeFlag.OTHER);\n    }\n    this.parseBlockBody(\n      node,\n      allowDirectives,\n      false,\n      tt.braceR,\n      afterBlockParse,\n    );\n    if (createNewLexicalScope) {\n      this.scope.exit();\n    }\n    return this.finishNode(node, \"BlockStatement\");\n  }\n\n  isValidDirective(stmt: N.Statement): stmt is N.ExpressionStatement {\n    return (\n      stmt.type === \"ExpressionStatement\" &&\n      stmt.expression.type === \"StringLiteral\" &&\n      !stmt.expression.extra.parenthesized\n    );\n  }\n\n  parseBlockBody(\n    this: Parser,\n    node: Undone<N.BlockStatementLike>,\n    allowDirectives: boolean | undefined | null,\n    topLevel: boolean,\n    end: TokenType,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): void {\n    const body: N.BlockStatementLike[\"body\"] = (node.body = []);\n    const directives: N.BlockStatementLike[\"directives\"] = (node.directives =\n      []);\n    this.parseBlockOrModuleBlockBody(\n      body,\n      allowDirectives ? directives : undefined,\n      topLevel,\n      end,\n      afterBlockParse,\n    );\n  }\n\n  // Undefined directives means that directives are not allowed.\n  // https://tc39.es/ecma262/#prod-Block\n  // https://tc39.es/ecma262/#prod-ModuleBody\n  parseBlockOrModuleBlockBody(\n    this: Parser,\n    body: N.Statement[],\n    directives: N.Directive[] | undefined | null,\n    topLevel: boolean,\n    end: TokenType,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): void {\n    const oldStrict = this.state.strict;\n    let hasStrictModeDirective = false;\n    let parsedNonDirective = false;\n\n    while (!this.match(end)) {\n      const stmt = topLevel\n        ? this.parseModuleItem()\n        : this.parseStatementListItem();\n\n      if (directives && !parsedNonDirective) {\n        if (this.isValidDirective(stmt)) {\n          const directive = this.stmtToDirective(stmt);\n          directives.push(directive);\n\n          if (\n            !hasStrictModeDirective &&\n            directive.value.value === \"use strict\"\n          ) {\n            hasStrictModeDirective = true;\n            this.setStrict(true);\n          }\n\n          continue;\n        }\n        parsedNonDirective = true;\n        // clear strict errors since the strict mode will not change within the block\n        this.state.strictErrors.clear();\n      }\n      body.push(stmt);\n    }\n\n    afterBlockParse?.call(this, hasStrictModeDirective);\n\n    if (!oldStrict) {\n      this.setStrict(false);\n    }\n\n    this.next();\n  }\n\n  // Parse a regular `for` loop. The disambiguation code in\n  // `parseStatement` will already have parsed the init statement or\n  // expression.\n\n  parseFor(\n    this: Parser,\n    node: Undone<N.ForStatement>,\n    init?: N.VariableDeclaration | N.Expression | null,\n  ): N.ForStatement {\n    node.init = init;\n    this.semicolon(/* allowAsi */ false);\n    node.test = this.match(tt.semi) ? null : this.parseExpression();\n    this.semicolon(/* allowAsi */ false);\n    node.update = this.match(tt.parenR) ? null : this.parseExpression();\n    this.expect(tt.parenR);\n\n    // Parse the loop body.\n    node.body =\n      // For the smartPipelines plugin: Disable topic references from outer\n      // contexts within the loop body. They are permitted in test expressions,\n      // outside of the loop body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse the loop body.\n        this.parseStatement(),\n      );\n\n    this.scope.exit();\n    this.state.labels.pop();\n\n    return this.finishNode(node, \"ForStatement\");\n  }\n\n  // Parse a `for`/`in` and `for`/`of` loop, which are almost\n  // same from parser's perspective.\n\n  parseForIn(\n    this: Parser,\n    node: Undone<N.ForInOf>,\n    init: N.VariableDeclaration | N.AssignmentPattern,\n    awaitAt?: Position | null,\n  ): N.ForInOf {\n    const isForIn = this.match(tt._in);\n    this.next();\n\n    if (isForIn) {\n      if (awaitAt !== null) this.unexpected(awaitAt);\n    } else {\n      node.await = awaitAt !== null;\n    }\n\n    if (\n      init.type === \"VariableDeclaration\" &&\n      init.declarations[0].init != null &&\n      (!isForIn ||\n        !this.options.annexB ||\n        this.state.strict ||\n        init.kind !== \"var\" ||\n        init.declarations[0].id.type !== \"Identifier\")\n    ) {\n      this.raise(Errors.ForInOfLoopInitializer, init, {\n        type: isForIn ? \"ForInStatement\" : \"ForOfStatement\",\n      });\n    }\n\n    if (init.type === \"AssignmentPattern\") {\n      this.raise(Errors.InvalidLhs, init, {\n        ancestor: { type: \"ForStatement\" },\n      });\n    }\n\n    node.left = init;\n    node.right = isForIn\n      ? this.parseExpression()\n      : this.parseMaybeAssignAllowIn();\n    this.expect(tt.parenR);\n\n    // Parse the loop body.\n    node.body =\n      // For the smartPipelines plugin:\n      // Disable topic references from outer contexts within the loop body.\n      // They are permitted in test expressions, outside of the loop body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse loop body.\n        this.parseStatement(),\n      );\n\n    this.scope.exit();\n    this.state.labels.pop();\n\n    return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\");\n  }\n\n  // Parse a list of variable declarations.\n\n  parseVar(\n    this: Parser,\n    node: Undone<N.VariableDeclaration>,\n    isFor: boolean,\n    kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n    allowMissingInitializer: boolean = false,\n  ): Undone<N.VariableDeclaration> {\n    const declarations: N.VariableDeclarator[] = (node.declarations = []);\n    node.kind = kind;\n    for (;;) {\n      const decl = this.startNode<N.VariableDeclarator>();\n      this.parseVarId(decl, kind);\n      decl.init = !this.eat(tt.eq)\n        ? null\n        : isFor\n          ? this.parseMaybeAssignDisallowIn()\n          : this.parseMaybeAssignAllowIn();\n\n      if (decl.init === null && !allowMissingInitializer) {\n        if (\n          decl.id.type !== \"Identifier\" &&\n          !(isFor && (this.match(tt._in) || this.isContextual(tt._of)))\n        ) {\n          this.raise(\n            Errors.DeclarationMissingInitializer,\n            this.state.lastTokEndLoc,\n            {\n              kind: \"destructuring\",\n            },\n          );\n        } else if (\n          (kind === \"const\" || kind === \"using\" || kind === \"await using\") &&\n          !(this.match(tt._in) || this.isContextual(tt._of))\n        ) {\n          this.raise(\n            Errors.DeclarationMissingInitializer,\n            this.state.lastTokEndLoc,\n            { kind },\n          );\n        }\n      }\n      declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n      if (!this.eat(tt.comma)) break;\n    }\n    return node;\n  }\n\n  parseVarId(\n    this: Parser,\n    decl: Undone<N.VariableDeclarator>,\n    kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n  ): void {\n    const id = this.parseBindingAtom();\n    if (kind === \"using\" || kind === \"await using\") {\n      if (id.type === \"ArrayPattern\" || id.type === \"ObjectPattern\") {\n        this.raise(Errors.UsingDeclarationHasBindingPattern, id.loc.start);\n      }\n    } else {\n      if (id.type === \"VoidPattern\") {\n        this.raise(Errors.UnexpectedVoidPattern, id.loc.start);\n      }\n    }\n    this.checkLVal(\n      id,\n      { type: \"VariableDeclarator\" },\n      kind === \"var\" ? BindingFlag.TYPE_VAR : BindingFlag.TYPE_LEXICAL,\n    );\n    decl.id = id;\n  }\n\n  // https://tc39.es/ecma262/#prod-AsyncFunctionExpression\n  parseAsyncFunctionExpression(\n    this: Parser,\n    node: Undone<N.FunctionExpression>,\n  ): N.FunctionExpression {\n    return this.parseFunction(node, ParseFunctionFlag.Async);\n  }\n\n  // Parse a function declaration or expression (depending on the\n  // ParseFunctionFlag.Declaration flag).\n\n  parseFunction<T extends N.NormalFunction>(\n    this: Parser,\n    node: Undone<T>,\n    flags: ParseFunctionFlag = ParseFunctionFlag.Expression,\n  ): T {\n    const hangingDeclaration = flags & ParseFunctionFlag.HangingDeclaration;\n    const isDeclaration = !!(flags & ParseFunctionFlag.Declaration);\n    const requireId = isDeclaration && !(flags & ParseFunctionFlag.NullableId);\n    const isAsync = !!(flags & ParseFunctionFlag.Async);\n\n    this.initFunction(node, isAsync);\n\n    if (this.match(tt.star)) {\n      if (hangingDeclaration) {\n        this.raise(\n          Errors.GeneratorInSingleStatementContext,\n          this.state.startLoc,\n        );\n      }\n      this.next(); // eat *\n      node.generator = true;\n    }\n\n    if (isDeclaration) {\n      node.id = this.parseFunctionId(requireId);\n    }\n\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    this.state.maybeInArrowParameters = false;\n    this.scope.enter(ScopeFlag.FUNCTION);\n    this.prodParam.enter(functionFlags(isAsync, node.generator));\n\n    if (!isDeclaration) {\n      node.id = this.parseFunctionId();\n    }\n\n    this.parseFunctionParams(node, /* isConstructor */ false);\n\n    // For the smartPipelines plugin: Disable topic references from outer\n    // contexts within the function body. They are permitted in function\n    // default-parameter expressions, outside of the function body.\n    this.withSmartMixTopicForbiddingContext(() => {\n      // Parse the function body.\n      this.parseFunctionBodyAndFinish(\n        node,\n        isDeclaration ? \"FunctionDeclaration\" : \"FunctionExpression\",\n      );\n    });\n\n    this.prodParam.exit();\n    this.scope.exit();\n\n    if (isDeclaration && !hangingDeclaration) {\n      // We need to register this _after_ parsing the function body\n      // because of TypeScript body-less function declarations,\n      // which shouldn't be added to the scope.\n      this.registerFunctionStatementId(node as T);\n    }\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    return node as T;\n  }\n\n  parseFunctionId(requireId?: boolean): N.Identifier | undefined | null {\n    return requireId || tokenIsIdentifier(this.state.type)\n      ? this.parseIdentifier()\n      : null;\n  }\n\n  parseFunctionParams(\n    this: Parser,\n    node: Undone<N.Function>,\n    isConstructor?: boolean,\n  ): void {\n    this.expect(tt.parenL);\n    this.expressionScope.enter(newParameterDeclarationScope());\n    node.params = this.parseBindingList(\n      tt.parenR,\n      charCodes.rightParenthesis,\n      ParseBindingListFlags.IS_FUNCTION_PARAMS |\n        (isConstructor ? ParseBindingListFlags.IS_CONSTRUCTOR_PARAMS : 0),\n    );\n\n    this.expressionScope.exit();\n  }\n\n  registerFunctionStatementId(node: N.Function): void {\n    if (!node.id) return;\n\n    // If it is a regular function declaration in sloppy mode, then it is\n    // subject to Annex B semantics (BindingFlag.TYPE_FUNCTION). Otherwise, the binding\n    // mode depends on properties of the current scope (see\n    // treatFunctionsAsVar).\n    this.scope.declareName(\n      node.id.name,\n      !this.options.annexB || this.state.strict || node.generator || node.async\n        ? this.scope.treatFunctionsAsVar\n          ? BindingFlag.TYPE_VAR\n          : BindingFlag.TYPE_LEXICAL\n        : BindingFlag.TYPE_FUNCTION,\n      node.id.loc.start,\n    );\n  }\n\n  // Parse a class declaration or literal (depending on the\n  // `isStatement` parameter).\n\n  parseClass<T extends N.Class>(\n    this: Parser,\n    node: Undone<T>,\n    isStatement: /* T === ClassDeclaration */ boolean,\n    optionalId?: boolean,\n  ): T {\n    this.next(); // 'class'\n\n    // A class definition is always strict mode code.\n    const oldStrict = this.state.strict;\n    this.state.strict = true;\n\n    this.parseClassId(node, isStatement, optionalId);\n    this.parseClassSuper(node);\n    // this.state.strict is restored in parseClassBody\n    node.body = this.parseClassBody(!!node.superClass, oldStrict);\n\n    return this.finishNode(\n      node,\n      isStatement ? \"ClassDeclaration\" : \"ClassExpression\",\n    );\n  }\n\n  isClassProperty(): boolean {\n    return this.match(tt.eq) || this.match(tt.semi) || this.match(tt.braceR);\n  }\n\n  isClassMethod(): boolean {\n    return this.match(tt.parenL);\n  }\n\n  nameIsConstructor(key: N.Expression | N.PrivateName): boolean {\n    return (\n      (key.type === \"Identifier\" && key.name === \"constructor\") ||\n      (key.type === \"StringLiteral\" && key.value === \"constructor\")\n    );\n  }\n\n  isNonstaticConstructor(method: N.ClassMethod | N.ClassProperty): boolean {\n    return (\n      !method.computed && !method.static && this.nameIsConstructor(method.key)\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-ClassBody\n  parseClassBody(\n    this: Parser,\n    hadSuperClass: boolean,\n    oldStrict: boolean,\n  ): N.ClassBody {\n    this.classScope.enter();\n\n    const state: N.ParseClassMemberState = {\n      hadConstructor: false,\n      hadSuperClass,\n    };\n    let decorators: N.Decorator[] = [];\n    const classBody = this.startNode<N.ClassBody>();\n    classBody.body = [];\n\n    this.expect(tt.braceL);\n\n    // For the smartPipelines plugin: Disable topic references from outer\n    // contexts within the class body.\n    this.withSmartMixTopicForbiddingContext(() => {\n      // Parse the contents within the braces.\n      while (!this.match(tt.braceR)) {\n        if (this.eat(tt.semi)) {\n          if (decorators.length > 0) {\n            throw this.raise(\n              Errors.DecoratorSemicolon,\n              this.state.lastTokEndLoc,\n            );\n          }\n          continue;\n        }\n\n        if (this.match(tt.at)) {\n          decorators.push(this.parseDecorator());\n          continue;\n        }\n\n        const member = this.startNode<N.ClassMember>();\n\n        // steal the decorators if there are any\n        if (decorators.length) {\n          // @ts-expect-error Fixme\n          member.decorators = decorators;\n          this.resetStartLocationFromNode(member, decorators[0]);\n          decorators = [];\n        }\n\n        this.parseClassMember(classBody, member, state);\n\n        if (\n          // @ts-expect-error Fixme\n          member.kind === \"constructor\" &&\n          // @ts-expect-error Fixme\n          member.decorators &&\n          // @ts-expect-error Fixme\n          member.decorators.length > 0\n        ) {\n          this.raise(Errors.DecoratorConstructor, member);\n        }\n      }\n    });\n\n    this.state.strict = oldStrict;\n\n    this.next(); // eat `}`\n\n    if (decorators.length) {\n      throw this.raise(Errors.TrailingDecorator, this.state.startLoc);\n    }\n\n    this.classScope.exit();\n\n    return this.finishNode(classBody, \"ClassBody\");\n  }\n\n  // returns true if the current identifier is a method/field name,\n  // false if it is a modifier\n  parseClassMemberFromModifier(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    member: Undone<N.ClassMember>,\n  ): boolean {\n    const key = this.parseIdentifier(true); // eats the modifier\n\n    if (this.isClassMethod()) {\n      const method: N.ClassMethod = member as any;\n\n      // a method named like the modifier\n      method.kind = \"method\";\n      method.computed = false;\n      method.key = key;\n      method.static = false;\n      this.pushClassMethod(\n        classBody,\n        method,\n        false,\n        false,\n        /* isConstructor */ false,\n        false,\n      );\n      return true;\n    } else if (this.isClassProperty()) {\n      const prop: N.ClassProperty = member as any;\n\n      // a property named like the modifier\n      prop.computed = false;\n      prop.key = key;\n      prop.static = false;\n      classBody.body.push(this.parseClassProperty(prop));\n      return true;\n    }\n    this.resetPreviousNodeTrailingComments(key);\n    return false;\n  }\n\n  parseClassMember(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    member: Undone<N.ClassMember>,\n    state: N.ParseClassMemberState,\n  ): void {\n    const isStatic = this.isContextual(tt._static);\n\n    if (isStatic) {\n      if (this.parseClassMemberFromModifier(classBody, member)) {\n        // a class element named 'static'\n        return;\n      }\n      if (this.eat(tt.braceL)) {\n        this.parseClassStaticBlock(classBody, member as any as N.StaticBlock);\n        return;\n      }\n    }\n\n    this.parseClassMemberWithIsStatic(classBody, member, state, isStatic);\n  }\n\n  parseClassMemberWithIsStatic(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    member: Undone<N.ClassMember>,\n    state: N.ParseClassMemberState,\n    isStatic: boolean,\n  ) {\n    const publicMethod = member as N.ClassMethod;\n    const privateMethod = member as N.ClassPrivateMethod;\n    const publicProp = member as N.ClassProperty;\n    const privateProp = member as N.ClassPrivateProperty;\n    const accessorProp = member as N.ClassAccessorProperty;\n\n    const method: typeof publicMethod | typeof privateMethod = publicMethod;\n    const publicMember: typeof publicMethod | typeof publicProp = publicMethod;\n\n    member.static = isStatic;\n    this.parsePropertyNamePrefixOperator(member);\n\n    if (this.eat(tt.star)) {\n      // a generator\n      method.kind = \"method\";\n      const isPrivateName = this.match(tt.privateName);\n      this.parseClassElementName(method);\n      this.parsePostMemberNameModifiers(method);\n\n      if (isPrivateName) {\n        // Private generator method\n        this.pushClassPrivateMethod(classBody, privateMethod, true, false);\n        return;\n      }\n\n      if (this.isNonstaticConstructor(publicMethod)) {\n        this.raise(Errors.ConstructorIsGenerator, publicMethod.key);\n      }\n\n      this.pushClassMethod(\n        classBody,\n        publicMethod,\n        true,\n        false,\n        /* isConstructor */ false,\n        false,\n      );\n\n      return;\n    }\n\n    const isContextual =\n      !this.state.containsEsc && tokenIsIdentifier(this.state.type);\n    const key = this.parseClassElementName(member);\n    const maybeContextualKw = isContextual ? (key as N.Identifier).name : null;\n    const isPrivate = this.isPrivateName(key);\n    const maybeQuestionTokenStartLoc = this.state.startLoc;\n\n    this.parsePostMemberNameModifiers(publicMember);\n\n    if (this.isClassMethod()) {\n      method.kind = \"method\";\n\n      if (isPrivate) {\n        this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n        return;\n      }\n\n      // a normal method\n      const isConstructor = this.isNonstaticConstructor(publicMethod);\n      let allowsDirectSuper = false;\n      if (isConstructor) {\n        publicMethod.kind = \"constructor\";\n\n        // TypeScript allows multiple overloaded constructor declarations.\n        if (state.hadConstructor && !this.hasPlugin(\"typescript\")) {\n          this.raise(Errors.DuplicateConstructor, key);\n        }\n        if (isConstructor && this.hasPlugin(\"typescript\") && member.override) {\n          this.raise(Errors.OverrideOnConstructor, key);\n        }\n        state.hadConstructor = true;\n        allowsDirectSuper = state.hadSuperClass;\n      }\n\n      this.pushClassMethod(\n        classBody,\n        publicMethod,\n        false,\n        false,\n        isConstructor,\n        allowsDirectSuper,\n      );\n    } else if (this.isClassProperty()) {\n      if (isPrivate) {\n        this.pushClassPrivateProperty(classBody, privateProp);\n      } else {\n        this.pushClassProperty(classBody, publicProp);\n      }\n    } else if (maybeContextualKw === \"async\" && !this.isLineTerminator()) {\n      // an async method\n      this.resetPreviousNodeTrailingComments(key);\n      const isGenerator = this.eat(tt.star);\n\n      if (publicMember.optional) {\n        this.unexpected(maybeQuestionTokenStartLoc);\n      }\n\n      method.kind = \"method\";\n      // The so-called parsed name would have been \"async\": get the real name.\n      const isPrivate = this.match(tt.privateName);\n      this.parseClassElementName(method);\n      this.parsePostMemberNameModifiers(publicMember);\n\n      if (isPrivate) {\n        // private async method\n        this.pushClassPrivateMethod(\n          classBody,\n          privateMethod,\n          isGenerator,\n          true,\n        );\n      } else {\n        if (this.isNonstaticConstructor(publicMethod)) {\n          this.raise(Errors.ConstructorIsAsync, publicMethod.key);\n        }\n\n        this.pushClassMethod(\n          classBody,\n          publicMethod,\n          isGenerator,\n          true,\n          /* isConstructor */ false,\n          false,\n        );\n      }\n    } else if (\n      (maybeContextualKw === \"get\" || maybeContextualKw === \"set\") &&\n      !(this.match(tt.star) && this.isLineTerminator())\n    ) {\n      // `get\\n*` is an uninitialized property named 'get' followed by a generator.\n      // a getter or setter\n      this.resetPreviousNodeTrailingComments(key);\n      method.kind = maybeContextualKw;\n      // The so-called parsed name would have been \"get/set\": get the real name.\n      const isPrivate = this.match(tt.privateName);\n      this.parseClassElementName(publicMethod);\n\n      if (isPrivate) {\n        // private getter/setter\n        this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n      } else {\n        if (this.isNonstaticConstructor(publicMethod)) {\n          this.raise(Errors.ConstructorIsAccessor, publicMethod.key);\n        }\n        this.pushClassMethod(\n          classBody,\n          publicMethod,\n          false,\n          false,\n          /* isConstructor */ false,\n          false,\n        );\n      }\n\n      this.checkGetterSetterParams(publicMethod);\n    } else if (maybeContextualKw === \"accessor\" && !this.isLineTerminator()) {\n      this.expectPlugin(\"decoratorAutoAccessors\");\n      this.resetPreviousNodeTrailingComments(key);\n\n      // The so-called parsed name would have been \"accessor\": get the real name.\n      const isPrivate = this.match(tt.privateName);\n      this.parseClassElementName(publicProp);\n      this.pushClassAccessorProperty(classBody, accessorProp, isPrivate);\n    } else if (this.isLineTerminator()) {\n      // an uninitialized class property (due to ASI, since we don't otherwise recognize the next token)\n      if (isPrivate) {\n        this.pushClassPrivateProperty(classBody, privateProp);\n      } else {\n        this.pushClassProperty(classBody, publicProp);\n      }\n    } else {\n      this.unexpected();\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-ClassElementName\n  parseClassElementName(\n    this: Parser,\n    member: Undone<N.ClassMember>,\n  ): N.Expression | N.Identifier | N.PrivateName {\n    const { type, value } = this.state;\n    if (\n      (type === tt.name || type === tt.string) &&\n      member.static &&\n      value === \"prototype\"\n    ) {\n      this.raise(Errors.StaticPrototype, this.state.startLoc);\n    }\n\n    if (type === tt.privateName) {\n      if (value === \"constructor\") {\n        this.raise(Errors.ConstructorClassPrivateField, this.state.startLoc);\n      }\n      const key = this.parsePrivateName();\n      member.key = key;\n      return key;\n    }\n\n    this.parsePropertyName(member);\n    return member.key;\n  }\n\n  parseClassStaticBlock(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    member: Undone<\n      N.StaticBlock & {\n        decorators?: Array<N.Decorator>;\n      }\n    >,\n  ) {\n    // Start a new lexical scope\n    this.scope.enter(\n      ScopeFlag.CLASS | ScopeFlag.STATIC_BLOCK | ScopeFlag.SUPER,\n    );\n    // Start a new scope with regard to loop labels\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n    // ClassStaticBlockStatementList:\n    //   StatementList[~Yield, ~Await, ~Return] opt\n    this.prodParam.enter(ParamKind.PARAM);\n    const body: N.Statement[] = (member.body = []);\n    this.parseBlockOrModuleBlockBody(body, undefined, false, tt.braceR);\n    this.prodParam.exit();\n    this.scope.exit();\n    this.state.labels = oldLabels;\n    classBody.body.push(this.finishNode<N.StaticBlock>(member, \"StaticBlock\"));\n    if (member.decorators?.length) {\n      this.raise(Errors.DecoratorStaticBlock, member);\n    }\n  }\n\n  pushClassProperty(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    prop: N.ClassProperty,\n  ) {\n    if (!prop.computed && this.nameIsConstructor(prop.key)) {\n      // Non-computed field, which is either an identifier named \"constructor\"\n      // or a string literal named \"constructor\"\n      this.raise(Errors.ConstructorClassField, prop.key);\n    }\n\n    classBody.body.push(this.parseClassProperty(prop));\n  }\n\n  pushClassPrivateProperty(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    prop: Undone<N.ClassPrivateProperty>,\n  ) {\n    const node = this.parseClassPrivateProperty(prop);\n    classBody.body.push(node);\n\n    this.classScope.declarePrivateName(\n      this.getPrivateNameSV(node.key),\n      ClassElementType.OTHER,\n      node.key.loc.start,\n    );\n  }\n\n  pushClassAccessorProperty(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    prop: N.ClassAccessorProperty,\n    isPrivate: boolean,\n  ) {\n    if (!isPrivate && !prop.computed && this.nameIsConstructor(prop.key)) {\n      // Non-computed field, which is either an identifier named \"constructor\"\n      // or a string literal named \"constructor\"\n      this.raise(Errors.ConstructorClassField, prop.key);\n    }\n\n    const node = this.parseClassAccessorProperty(prop);\n    classBody.body.push(node);\n\n    if (isPrivate) {\n      this.classScope.declarePrivateName(\n        this.getPrivateNameSV(node.key as N.PrivateName),\n        ClassElementType.OTHER,\n        node.key.loc.start,\n      );\n    }\n  }\n\n  pushClassMethod(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    method: Undone<N.ClassMethod>,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isConstructor: boolean,\n    allowsDirectSuper: boolean,\n  ): void {\n    classBody.body.push(\n      this.parseMethod(\n        method,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowsDirectSuper,\n        \"ClassMethod\",\n        true,\n      ),\n    );\n  }\n\n  pushClassPrivateMethod(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    method: Undone<N.ClassPrivateMethod>,\n    isGenerator: boolean,\n    isAsync: boolean,\n  ): void {\n    const node = this.parseMethod(\n      method,\n      isGenerator,\n      isAsync,\n      /* isConstructor */ false,\n      false,\n      \"ClassPrivateMethod\",\n      true,\n    );\n    classBody.body.push(node);\n\n    const kind =\n      node.kind === \"get\"\n        ? node.static\n          ? ClassElementType.STATIC_GETTER\n          : ClassElementType.INSTANCE_GETTER\n        : node.kind === \"set\"\n          ? node.static\n            ? ClassElementType.STATIC_SETTER\n            : ClassElementType.INSTANCE_SETTER\n          : ClassElementType.OTHER;\n    this.declareClassPrivateMethodInScope(node, kind);\n  }\n\n  declareClassPrivateMethodInScope(\n    node: Undone<N.ClassPrivateMethod | N.TSDeclareMethod>,\n    kind: number,\n  ) {\n    this.classScope.declarePrivateName(\n      this.getPrivateNameSV(node.key as N.PrivateName),\n      kind,\n      node.key.loc.start,\n    );\n  }\n\n  // Overridden in typescript.js\n  parsePostMemberNameModifiers(\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    methodOrProp: Undone<N.ClassMethod | N.ClassProperty>,\n  ): void {}\n\n  // https://tc39.es/ecma262/#prod-FieldDefinition\n  parseClassPrivateProperty(\n    this: Parser,\n    node: Undone<N.ClassPrivateProperty>,\n  ): N.ClassPrivateProperty {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassPrivateProperty\");\n  }\n\n  // https://tc39.es/ecma262/#prod-FieldDefinition\n  parseClassProperty(this: Parser, node: N.ClassProperty): N.ClassProperty {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassProperty\");\n  }\n\n  parseClassAccessorProperty(\n    this: Parser,\n    node: N.ClassAccessorProperty,\n  ): N.ClassAccessorProperty {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassAccessorProperty\");\n  }\n\n  // https://tc39.es/ecma262/#prod-Initializer\n  parseInitializer(\n    this: Parser,\n    node: Undone<\n      N.ClassProperty | N.ClassPrivateProperty | N.ClassAccessorProperty\n    >,\n  ): void {\n    this.scope.enter(ScopeFlag.CLASS | ScopeFlag.SUPER);\n    this.expressionScope.enter(newExpressionScope());\n    this.prodParam.enter(ParamKind.PARAM);\n    node.value = this.eat(tt.eq) ? this.parseMaybeAssignAllowIn() : null;\n    this.expressionScope.exit();\n    this.prodParam.exit();\n    this.scope.exit();\n  }\n\n  parseClassId(\n    node: Undone<N.Class>,\n    isStatement: boolean,\n    optionalId?: boolean | null,\n    bindingType: BindingFlag = BindingFlag.TYPE_CLASS,\n  ): void {\n    if (tokenIsIdentifier(this.state.type)) {\n      node.id = this.parseIdentifier();\n      if (isStatement) {\n        this.declareNameFromIdentifier(node.id, bindingType);\n      }\n    } else {\n      if (optionalId || !isStatement) {\n        node.id = null;\n      } else {\n        throw this.raise(Errors.MissingClassName, this.state.startLoc);\n      }\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-ClassHeritage\n  parseClassSuper(this: Parser, node: Undone<N.Class>): void {\n    node.superClass = this.eat(tt._extends) ? this.parseExprSubscripts() : null;\n  }\n\n  // Parses module export declaration.\n  // https://tc39.es/ecma262/#prod-ExportDeclaration\n\n  parseExport(\n    this: Parser,\n    node: Undone<\n      | N.ExportDefaultDeclaration\n      | N.ExportAllDeclaration\n      | N.ExportNamedDeclaration\n    >,\n    decorators: N.Decorator[] | null,\n  ): N.AnyExport {\n    const maybeDefaultIdentifier = this.parseMaybeImportPhase(\n      node,\n      /* isExport */ true,\n    );\n    const hasDefault = this.maybeParseExportDefaultSpecifier(\n      node,\n      maybeDefaultIdentifier,\n    );\n    const parseAfterDefault = !hasDefault || this.eat(tt.comma);\n    const hasStar = parseAfterDefault && this.eatExportStar(node);\n    const hasNamespace =\n      hasStar && this.maybeParseExportNamespaceSpecifier(node);\n    const parseAfterNamespace =\n      parseAfterDefault && (!hasNamespace || this.eat(tt.comma));\n    const isFromRequired = hasDefault || hasStar;\n\n    if (hasStar && !hasNamespace) {\n      if (hasDefault) this.unexpected();\n      if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, node);\n      }\n      this.parseExportFrom(node, true);\n\n      this.sawUnambiguousESM = true;\n\n      return this.finishNode(node, \"ExportAllDeclaration\");\n    }\n\n    const hasSpecifiers = this.maybeParseExportNamedSpecifiers(node);\n\n    if (hasDefault && parseAfterDefault && !hasStar && !hasSpecifiers) {\n      this.unexpected(null, tt.braceL);\n    }\n\n    if (hasNamespace && parseAfterNamespace) {\n      this.unexpected(null, tt._from);\n    }\n\n    let hasDeclaration;\n    if (isFromRequired || hasSpecifiers) {\n      hasDeclaration = false;\n      if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, node);\n      }\n      this.parseExportFrom(\n        node as Undone<N.ExportNamedDeclaration>,\n        isFromRequired,\n      );\n    } else {\n      hasDeclaration = this.maybeParseExportDeclaration(\n        node as Undone<N.ExportNamedDeclaration>,\n      );\n    }\n\n    if (isFromRequired || hasSpecifiers || hasDeclaration) {\n      const node2 = node as Undone<N.ExportNamedDeclaration>;\n      this.checkExport(node2, true, false, !!node2.source);\n      if (node2.declaration?.type === \"ClassDeclaration\") {\n        this.maybeTakeDecorators(decorators, node2.declaration, node2);\n      } else if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, node);\n      }\n      this.sawUnambiguousESM = true;\n      return this.finishNode(node2, \"ExportNamedDeclaration\");\n    }\n\n    if (this.eat(tt._default)) {\n      const node2 = node as Undone<N.ExportDefaultDeclaration>;\n      // export default ...\n      const decl = this.parseExportDefaultExpression();\n      node2.declaration = decl;\n\n      if (decl.type === \"ClassDeclaration\") {\n        this.maybeTakeDecorators(decorators, decl as N.ClassDeclaration, node2);\n      } else if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, node);\n      }\n\n      this.checkExport(node2, true, true);\n      this.sawUnambiguousESM = true;\n      return this.finishNode(node2, \"ExportDefaultDeclaration\");\n    }\n\n    this.unexpected(null, tt.braceL);\n  }\n\n  eatExportStar(\n    node: Undone<N.Node>,\n  ): node is Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration> {\n    return this.eat(tt.star);\n  }\n\n  maybeParseExportDefaultSpecifier(\n    node: Undone<\n      | N.ExportDefaultDeclaration\n      | N.ExportAllDeclaration\n      | N.ExportNamedDeclaration\n    >,\n    maybeDefaultIdentifier: N.Identifier | null,\n  ): node is Undone<N.ExportNamedDeclaration> {\n    if (maybeDefaultIdentifier || this.isExportDefaultSpecifier()) {\n      // export defaultObj ...\n      this.expectPlugin(\"exportDefaultFrom\", maybeDefaultIdentifier?.loc.start);\n      const id = maybeDefaultIdentifier || this.parseIdentifier(true);\n      const specifier = this.startNodeAtNode<N.ExportDefaultSpecifier>(id);\n      specifier.exported = id;\n      (node as Undone<N.ExportNamedDeclaration>).specifiers = [\n        this.finishNode(specifier, \"ExportDefaultSpecifier\"),\n      ];\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseExportNamespaceSpecifier(\n    node: Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>,\n  ): node is Undone<N.ExportNamedDeclaration> {\n    if (this.isContextual(tt._as)) {\n      (node as Undone<N.ExportNamedDeclaration>).specifiers ??= [];\n\n      const specifier = this.startNodeAt<N.ExportNamespaceSpecifier>(\n        this.state.lastTokStartLoc,\n      );\n\n      this.next();\n\n      specifier.exported = this.parseModuleExportName();\n      (node as Undone<N.ExportNamedDeclaration>).specifiers.push(\n        this.finishNode(specifier, \"ExportNamespaceSpecifier\"),\n      );\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseExportNamedSpecifiers(\n    node: Undone<N.Node>,\n  ): node is Undone<N.ExportNamedDeclaration> {\n    if (this.match(tt.braceL)) {\n      const node2 = node as Undone<N.ExportNamedDeclaration>;\n\n      if (!node2.specifiers) node2.specifiers = [];\n      const isTypeExport = node2.exportKind === \"type\";\n      node2.specifiers.push(...this.parseExportSpecifiers(isTypeExport));\n      node2.source = null;\n      if (!process.env.BABEL_8_BREAKING && this.hasPlugin(\"importAssertions\")) {\n        node2.assertions = [];\n      } else {\n        node2.attributes = [];\n      }\n      node2.declaration = null;\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseExportDeclaration(\n    this: Parser,\n    node: Undone<N.ExportNamedDeclaration>,\n  ): boolean {\n    if (this.shouldParseExportDeclaration()) {\n      node.specifiers = [];\n      node.source = null;\n      if (!process.env.BABEL_8_BREAKING && this.hasPlugin(\"importAssertions\")) {\n        node.assertions = [];\n      } else {\n        node.attributes = [];\n      }\n      node.declaration = this.parseExportDeclaration(node);\n      return true;\n    }\n    return false;\n  }\n\n  isAsyncFunction(): boolean {\n    if (!this.isContextual(tt._async)) return false;\n    const next = this.nextTokenInLineStart();\n    return this.isUnparsedContextual(next, \"function\");\n  }\n\n  parseExportDefaultExpression(\n    this: Parser,\n  ): N.ExportDefaultDeclaration[\"declaration\"] {\n    const expr = this.startNode();\n\n    if (this.match(tt._function)) {\n      this.next();\n      return this.parseFunction(\n        expr as Undone<N.FunctionDeclaration>,\n        ParseFunctionFlag.Declaration | ParseFunctionFlag.NullableId,\n      );\n    } else if (this.isAsyncFunction()) {\n      this.next(); // eat 'async'\n      this.next(); // eat 'function'\n      return this.parseFunction(\n        expr as Undone<N.FunctionDeclaration>,\n        ParseFunctionFlag.Declaration |\n          ParseFunctionFlag.NullableId |\n          ParseFunctionFlag.Async,\n      );\n    }\n\n    if (this.match(tt._class)) {\n      return this.parseClass(expr as Undone<N.ClassExpression>, true, true);\n    }\n\n    if (this.match(tt.at)) {\n      if (\n        this.hasPlugin(\"decorators\") &&\n        this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\") === true\n      ) {\n        this.raise(Errors.DecoratorBeforeExport, this.state.startLoc);\n      }\n      return this.parseClass(\n        this.maybeTakeDecorators(\n          this.parseDecorators(false),\n          this.startNode<N.ClassDeclaration>(),\n        ),\n        true,\n        true,\n      );\n    }\n\n    if (\n      this.match(tt._const) ||\n      this.match(tt._var) ||\n      this.isLet() ||\n      this.isUsing() ||\n      this.isAwaitUsing()\n    ) {\n      throw this.raise(Errors.UnsupportedDefaultExport, this.state.startLoc);\n    }\n\n    const res = this.parseMaybeAssignAllowIn();\n    this.semicolon();\n    return res;\n  }\n\n  // https://tc39.es/ecma262/#prod-ExportDeclaration\n  parseExportDeclaration(\n    this: Parser,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    node: Undone<N.ExportNamedDeclaration>,\n  ): N.Declaration | undefined | null {\n    if (this.match(tt._class)) {\n      const node = this.parseClass(\n        this.startNode<N.ClassDeclaration>(),\n        true,\n        false,\n      );\n      return node;\n    }\n    return this.parseStatementListItem() as N.Declaration;\n  }\n\n  isExportDefaultSpecifier(): boolean {\n    const { type } = this.state;\n    if (tokenIsIdentifier(type)) {\n      if ((type === tt._async && !this.state.containsEsc) || type === tt._let) {\n        return false;\n      }\n      if (\n        (type === tt._type || type === tt._interface) &&\n        !this.state.containsEsc\n      ) {\n        // If we see any variable name other than `from` after `type` keyword,\n        // we consider it as flow/typescript type exports\n        // note that this approach may fail on some pedantic cases\n        // export type from = number\n        const next = this.nextTokenStart();\n        const nextChar = this.input.charCodeAt(next);\n        if (\n          nextChar === charCodes.leftCurlyBrace ||\n          (this.chStartsBindingIdentifier(nextChar, next) &&\n            !this.input.startsWith(\"from\", next))\n        ) {\n          this.expectOnePlugin([\"flow\", \"typescript\"]);\n          return false;\n        }\n      }\n    } else if (!this.match(tt._default)) {\n      return false;\n    }\n\n    const next = this.nextTokenStart();\n    const hasFrom = this.isUnparsedContextual(next, \"from\");\n    if (\n      this.input.charCodeAt(next) === charCodes.comma ||\n      (tokenIsIdentifier(this.state.type) && hasFrom)\n    ) {\n      return true;\n    }\n    // lookahead again when `export default from` is seen\n    if (this.match(tt._default) && hasFrom) {\n      const nextAfterFrom = this.input.charCodeAt(\n        this.nextTokenStartSince(next + 4),\n      );\n      return (\n        nextAfterFrom === charCodes.quotationMark ||\n        nextAfterFrom === charCodes.apostrophe\n      );\n    }\n    return false;\n  }\n\n  parseExportFrom(\n    this: Parser,\n    node: Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>,\n    expect?: boolean,\n  ): void {\n    if (this.eatContextual(tt._from)) {\n      node.source = this.parseImportSource();\n      this.checkExport(node);\n      this.maybeParseImportAttributes(node);\n      this.checkJSONModuleImport(node);\n    } else if (expect) {\n      this.unexpected();\n    }\n\n    this.semicolon();\n  }\n\n  shouldParseExportDeclaration(): boolean {\n    const { type } = this.state;\n    if (type === tt.at) {\n      this.expectOnePlugin([\"decorators\", \"decorators-legacy\"]);\n      if (this.hasPlugin(\"decorators\")) {\n        if (\n          this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\") === true\n        ) {\n          this.raise(Errors.DecoratorBeforeExport, this.state.startLoc);\n        }\n\n        return true;\n      }\n    }\n\n    if (this.isUsing()) {\n      this.raise(Errors.UsingDeclarationExport, this.state.startLoc);\n      return true;\n    }\n\n    if (this.isAwaitUsing()) {\n      this.raise(Errors.UsingDeclarationExport, this.state.startLoc);\n      return true;\n    }\n\n    return (\n      type === tt._var ||\n      type === tt._const ||\n      type === tt._function ||\n      type === tt._class ||\n      this.isLet() ||\n      this.isAsyncFunction()\n    );\n  }\n\n  checkExport(\n    node: Undone<\n      | N.ExportNamedDeclaration\n      | N.ExportAllDeclaration\n      | N.ExportDefaultDeclaration\n    >,\n    checkNames?: boolean,\n    isDefault?: boolean,\n    isFrom?: boolean,\n  ): void {\n    if (checkNames) {\n      // Check for duplicate exports\n      if (isDefault) {\n        // Default exports\n        this.checkDuplicateExports(node, \"default\");\n        if (this.hasPlugin(\"exportDefaultFrom\")) {\n          const declaration = (node as any as N.ExportDefaultDeclaration)\n            .declaration;\n          if (\n            declaration.type === \"Identifier\" &&\n            declaration.name === \"from\" &&\n            declaration.end - declaration.start === 4 && // does not contain escape\n            !declaration.extra?.parenthesized\n          ) {\n            this.raise(Errors.ExportDefaultFromAsIdentifier, declaration);\n          }\n        }\n        // @ts-expect-error node.specifiers may not exist\n      } else if (node.specifiers?.length) {\n        // Named exports\n        // @ts-expect-error node.specifiers may not exist\n        for (const specifier of node.specifiers) {\n          const { exported } = specifier;\n          const exportName =\n            exported.type === \"Identifier\" ? exported.name : exported.value;\n          this.checkDuplicateExports(specifier, exportName);\n          if (!isFrom && specifier.local) {\n            const { local } = specifier;\n            if (local.type !== \"Identifier\") {\n              this.raise(Errors.ExportBindingIsString, specifier, {\n                localName: local.value,\n                exportName,\n              });\n            } else {\n              // check for keywords used as local names\n              this.checkReservedWord(local.name, local.loc.start, true, false);\n              // check if export is defined\n              this.scope.checkLocalExport(local);\n            }\n          }\n        }\n      } else if ((node as Undone<N.ExportNamedDeclaration>).declaration) {\n        const decl = (node as Undone<N.ExportNamedDeclaration>).declaration;\n        // Exported declarations\n        if (\n          decl.type === \"FunctionDeclaration\" ||\n          decl.type === \"ClassDeclaration\"\n        ) {\n          const { id } = decl;\n          if (!id) throw new Error(\"Assertion failure\");\n\n          this.checkDuplicateExports(node, id.name);\n        } else if (decl.type === \"VariableDeclaration\") {\n          for (const declaration of decl.declarations) {\n            this.checkDeclaration(declaration.id);\n          }\n        }\n      }\n    }\n  }\n\n  checkDeclaration(node: N.Pattern | N.ObjectProperty): void {\n    if (node.type === \"Identifier\") {\n      this.checkDuplicateExports(node, node.name);\n    } else if (node.type === \"ObjectPattern\") {\n      for (const prop of node.properties) {\n        this.checkDeclaration(prop);\n      }\n    } else if (node.type === \"ArrayPattern\") {\n      for (const elem of node.elements) {\n        if (elem) {\n          this.checkDeclaration(elem);\n        }\n      }\n    } else if (node.type === \"ObjectProperty\") {\n      // @ts-expect-error migrate to Babel types\n      this.checkDeclaration(node.value);\n    } else if (node.type === \"RestElement\") {\n      this.checkDeclaration(node.argument);\n    } else if (node.type === \"AssignmentPattern\") {\n      this.checkDeclaration(node.left);\n    }\n  }\n\n  checkDuplicateExports(\n    node: Undone<\n      | N.Identifier\n      | N.StringLiteral\n      | N.ExportNamedDeclaration\n      | N.ExportSpecifier\n      | N.ExportDefaultSpecifier\n    >,\n    exportName: string,\n  ): void {\n    if (this.exportedIdentifiers.has(exportName)) {\n      if (exportName === \"default\") {\n        this.raise(Errors.DuplicateDefaultExport, node);\n      } else {\n        this.raise(Errors.DuplicateExport, node, { exportName });\n      }\n    }\n    this.exportedIdentifiers.add(exportName);\n  }\n\n  // Parses a comma-separated list of module exports.\n\n  parseExportSpecifiers(isInTypeExport: boolean): Array<N.ExportSpecifier> {\n    const nodes = [];\n    let first = true;\n\n    // export { x, y as z } [from '...']\n    this.expect(tt.braceL);\n\n    while (!this.eat(tt.braceR)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.eat(tt.braceR)) break;\n      }\n      const isMaybeTypeOnly = this.isContextual(tt._type);\n      const isString = this.match(tt.string);\n      const node = this.startNode<N.ExportSpecifier>();\n      node.local = this.parseModuleExportName() as N.Identifier;\n      nodes.push(\n        this.parseExportSpecifier(\n          node,\n          isString,\n          isInTypeExport,\n          isMaybeTypeOnly,\n        ),\n      );\n    }\n\n    return nodes;\n  }\n\n  parseExportSpecifier(\n    node: any,\n    isString: boolean,\n    /* eslint-disable @typescript-eslint/no-unused-vars -- used in TypeScript parser */\n    isInTypeExport: boolean,\n    isMaybeTypeOnly: boolean,\n    /* eslint-enable @typescript-eslint/no-unused-vars */\n  ): N.ExportSpecifier {\n    if (this.eatContextual(tt._as)) {\n      node.exported = this.parseModuleExportName();\n    } else if (isString) {\n      node.exported = this.cloneStringLiteral(node.local);\n    } else if (!node.exported) {\n      node.exported = this.cloneIdentifier(node.local);\n    }\n    return this.finishNode<N.ExportSpecifier>(node, \"ExportSpecifier\");\n  }\n\n  // https://tc39.es/ecma262/#prod-ModuleExportName\n  parseModuleExportName(): N.StringLiteral | N.Identifier {\n    if (this.match(tt.string)) {\n      const result = this.parseStringLiteral(this.state.value);\n      const surrogate = loneSurrogate.exec(result.value);\n      if (surrogate) {\n        this.raise(Errors.ModuleExportNameHasLoneSurrogate, result, {\n          surrogateCharCode: surrogate[0].charCodeAt(0),\n        });\n      }\n      return result;\n    }\n    return this.parseIdentifier(true);\n  }\n\n  isJSONModuleImport(\n    node: Undone<\n      N.ExportAllDeclaration | N.ExportNamedDeclaration | N.ImportDeclaration\n    >,\n  ): boolean {\n    if (node.assertions != null) {\n      return node.assertions.some(({ key, value }) => {\n        return (\n          value.value === \"json\" &&\n          (key.type === \"Identifier\"\n            ? key.name === \"type\"\n            : key.value === \"type\")\n        );\n      });\n    }\n    return false;\n  }\n\n  checkImportReflection(node: Undone<N.ImportDeclaration>) {\n    const { specifiers } = node;\n    const singleBindingType =\n      specifiers.length === 1 ? specifiers[0].type : null;\n\n    if (node.phase === \"source\") {\n      if (singleBindingType !== \"ImportDefaultSpecifier\") {\n        this.raise(\n          Errors.SourcePhaseImportRequiresDefault,\n          specifiers[0].loc.start,\n        );\n      }\n    } else if (node.phase === \"defer\") {\n      if (singleBindingType !== \"ImportNamespaceSpecifier\") {\n        this.raise(\n          Errors.DeferImportRequiresNamespace,\n          specifiers[0].loc.start,\n        );\n      }\n    } else if (node.module) {\n      if (singleBindingType !== \"ImportDefaultSpecifier\") {\n        this.raise(Errors.ImportReflectionNotBinding, specifiers[0].loc.start);\n      }\n      if (node.assertions?.length > 0) {\n        this.raise(\n          Errors.ImportReflectionHasAssertion,\n          specifiers[0].loc.start,\n        );\n      }\n    }\n  }\n\n  checkJSONModuleImport(\n    node: Undone<\n      N.ExportAllDeclaration | N.ExportNamedDeclaration | N.ImportDeclaration\n    >,\n  ) {\n    // @ts-expect-error Fixme: node.type must be undefined because they are undone\n    if (this.isJSONModuleImport(node) && node.type !== \"ExportAllDeclaration\") {\n      // @ts-expect-error specifiers may not index node\n      const { specifiers } = node;\n      if (specifiers != null) {\n        // @ts-expect-error refine specifier types\n        const nonDefaultNamedSpecifier = specifiers.find(specifier => {\n          let imported;\n          if (specifier.type === \"ExportSpecifier\") {\n            imported = specifier.local;\n          } else if (specifier.type === \"ImportSpecifier\") {\n            imported = specifier.imported;\n          }\n          if (imported !== undefined) {\n            return imported.type === \"Identifier\"\n              ? imported.name !== \"default\"\n              : imported.value !== \"default\";\n          }\n        });\n        if (nonDefaultNamedSpecifier !== undefined) {\n          this.raise(\n            Errors.ImportJSONBindingNotDefault,\n            nonDefaultNamedSpecifier.loc.start,\n          );\n        }\n      }\n    }\n  }\n\n  isPotentialImportPhase(isExport: boolean): boolean {\n    if (isExport) return false;\n    return (\n      this.isContextual(tt._source) ||\n      this.isContextual(tt._defer) ||\n      (!process.env.BABEL_8_BREAKING && this.isContextual(tt._module))\n    );\n  }\n\n  applyImportPhase(\n    node: Undone<N.ImportDeclaration | N.ExportNamedDeclaration>,\n    isExport: boolean,\n    phase: string | null,\n    loc?: Position,\n  ): void {\n    if (isExport) {\n      if (!process.env.IS_PUBLISH) {\n        if (\n          (!process.env.BABEL_8_BREAKING && phase === \"module\") ||\n          phase === \"source\"\n        ) {\n          throw new Error(\n            `Assertion failure: export declarations do not support the '${phase}' phase.`,\n          );\n        }\n      }\n      return;\n    }\n\n    if (!process.env.BABEL_8_BREAKING && phase === \"module\") {\n      this.expectPlugin(\"importReflection\", loc);\n      (node as N.ImportDeclaration).module = true;\n    } else if (this.hasPlugin(\"importReflection\")) {\n      (node as N.ImportDeclaration).module = false;\n    }\n\n    if (phase === \"source\") {\n      this.expectPlugin(\"sourcePhaseImports\", loc);\n      (node as N.ImportDeclaration).phase = \"source\";\n    } else if (phase === \"defer\") {\n      this.expectPlugin(\"deferredImportEvaluation\", loc);\n      (node as N.ImportDeclaration).phase = \"defer\";\n    } else if (this.hasPlugin(\"sourcePhaseImports\")) {\n      (node as N.ImportDeclaration).phase = null;\n    }\n  }\n\n  /*\n   * Parse `source` in `import source x from \"x\"`, disambiguating\n   * `import source from \"x\"` and `import source from from \"x\"`.\n   *\n   * This function might return an identifier representing the `source`\n   * if it eats `source` and then discovers that it was the default import\n   * binding and not the import reflection.\n   *\n   * This function is also used to parse `import type` and `import typeof`\n   * in the TS and Flow plugins, and for parsing `import defer`.\n   */\n  parseMaybeImportPhase(\n    node: Undone<N.ImportDeclaration | N.TsImportEqualsDeclaration>,\n    isExport: boolean,\n  ): N.Identifier | null {\n    if (!this.isPotentialImportPhase(isExport)) {\n      this.applyImportPhase(\n        node as Undone<N.ImportDeclaration>,\n        isExport,\n        null,\n      );\n      return null;\n    }\n\n    const phaseIdentifier = this.startNode<N.Identifier>();\n    const phaseIdentifierName = this.parseIdentifierName(true);\n\n    const { type } = this.state;\n    const isImportPhase = tokenIsKeywordOrIdentifier(type)\n      ? // OK: import <phase> x from \"foo\";\n        // OK: import <phase> from from \"foo\";\n        // NO: import <phase> from \"foo\";\n        // NO: import <phase> from 'foo';\n        // With the module declarations proposals, we will need further disambiguation\n        // for `import module from from;`.\n        type !== tt._from || this.lookaheadCharCode() === charCodes.lowercaseF\n      : // OK: import <phase> { x } from \"foo\";\n        // OK: import <phase> x from \"foo\";\n        // OK: import <phase> * as T from \"foo\";\n        // NO: import <phase> from \"foo\";\n        // OK: import <phase> \"foo\";\n        // The last one is invalid, we will continue parsing and throw\n        // an error later\n        type !== tt.comma;\n\n    if (isImportPhase) {\n      this.applyImportPhase(\n        node as Undone<N.ImportDeclaration>,\n        isExport,\n        phaseIdentifierName,\n        phaseIdentifier.loc.start,\n      );\n      return null;\n    } else {\n      this.applyImportPhase(\n        node as Undone<N.ImportDeclaration>,\n        isExport,\n        null,\n      );\n      // `<phase>` is a default binding, return it to the main import declaration parser\n      return this.createIdentifier(phaseIdentifier, phaseIdentifierName);\n    }\n  }\n\n  isPrecedingIdImportPhase(\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    phase: string,\n  ) {\n    const { type } = this.state;\n    return tokenIsIdentifier(type)\n      ? // OK: import <phase> x from \"foo\";\n        // OK: import <phase> from from \"foo\";\n        // NO: import <phase> from \"foo\";\n        // NO: import <phase> from 'foo';\n        // With the module declarations proposals, we will need further disambiguation\n        // for `import module from from;`.\n        type !== tt._from || this.lookaheadCharCode() === charCodes.lowercaseF\n      : // OK: import <phase> { x } from \"foo\";\n        // OK: import <phase> x from \"foo\";\n        // OK: import <phase> * as T from \"foo\";\n        // NO: import <phase> from \"foo\";\n        // OK: import <phase> \"foo\";\n        // The last one is invalid, we will continue parsing and throw\n        // an error later\n        type !== tt.comma;\n  }\n\n  // Parses import declaration.\n  // https://tc39.es/ecma262/#prod-ImportDeclaration\n\n  parseImport(this: Parser, node: Undone<N.ImportDeclaration>): N.AnyImport {\n    if (this.match(tt.string)) {\n      // import '...'\n      return this.parseImportSourceAndAttributes(node);\n    }\n\n    return this.parseImportSpecifiersAndAfter(\n      node,\n      this.parseMaybeImportPhase(node, /* isExport */ false),\n    );\n  }\n\n  parseImportSpecifiersAndAfter(\n    this: Parser,\n    node: Undone<N.ImportDeclaration>,\n    maybeDefaultIdentifier: N.Identifier | null,\n  ): N.AnyImport {\n    node.specifiers = [];\n\n    // check if we have a default import like\n    // import React from \"react\";\n    const hasDefault = this.maybeParseDefaultImportSpecifier(\n      node,\n      maybeDefaultIdentifier,\n    );\n    /* we are checking if we do not have a default import, then it is obvious that we need named imports\n     * import { get } from \"axios\";\n     * but if we do have a default import\n     * we need to check if we have a comma after that and\n     * that is where this `|| this.eat` condition comes into play\n     */\n    const parseNext = !hasDefault || this.eat(tt.comma);\n    // if we do have to parse the next set of specifiers, we first check for star imports\n    // import React, * from \"react\";\n    const hasStar = parseNext && this.maybeParseStarImportSpecifier(node);\n    // now we check if we need to parse the next imports\n    // but only if they are not importing * (everything)\n    if (parseNext && !hasStar) this.parseNamedImportSpecifiers(node);\n    this.expectContextual(tt._from);\n\n    return this.parseImportSourceAndAttributes(node);\n  }\n\n  parseImportSourceAndAttributes(\n    this: Parser,\n    node: Undone<N.ImportDeclaration>,\n  ): N.AnyImport {\n    node.specifiers ??= [];\n    node.source = this.parseImportSource();\n    this.maybeParseImportAttributes(node);\n    this.checkImportReflection(node);\n    this.checkJSONModuleImport(node);\n\n    this.semicolon();\n    this.sawUnambiguousESM = true;\n    return this.finishNode(node, \"ImportDeclaration\");\n  }\n\n  parseImportSource(this: Parser): N.StringLiteral {\n    if (!this.match(tt.string)) this.unexpected();\n    return this.parseExprAtom() as N.StringLiteral;\n  }\n\n  parseImportSpecifierLocal<\n    T extends\n      | N.ImportSpecifier\n      | N.ImportDefaultSpecifier\n      | N.ImportNamespaceSpecifier,\n  >(\n    node: Undone<N.ImportDeclaration>,\n    specifier: Undone<T>,\n    type: T[\"type\"],\n  ): void {\n    specifier.local = this.parseIdentifier();\n    node.specifiers.push(this.finishImportSpecifier(specifier, type));\n  }\n\n  finishImportSpecifier<\n    T extends\n      | N.ImportSpecifier\n      | N.ImportDefaultSpecifier\n      | N.ImportNamespaceSpecifier,\n  >(\n    specifier: Undone<T>,\n    type: T[\"type\"],\n    bindingType: BindingFlag = BindingFlag.TYPE_LEXICAL,\n  ) {\n    this.checkLVal(specifier.local, { type }, bindingType);\n    return this.finishNode(specifier, type);\n  }\n\n  /**\n   * parse assert entries\n   *\n   * @see {@link https://tc39.es/proposal-import-attributes/#prod-WithEntries WithEntries}\n   */\n  parseImportAttributes(): N.ImportAttribute[] {\n    this.expect(tt.braceL);\n\n    const attrs = [];\n    const attrNames = new Set();\n\n    do {\n      if (this.match(tt.braceR)) {\n        break;\n      }\n\n      const node = this.startNode<N.ImportAttribute>();\n\n      // parse AssertionKey : IdentifierName, StringLiteral\n      const keyName = this.state.value;\n      // check if we already have an entry for an attribute\n      // if a duplicate entry is found, throw an error\n      // for now this logic will come into play only when someone declares `type` twice\n      if (attrNames.has(keyName)) {\n        this.raise(\n          Errors.ModuleAttributesWithDuplicateKeys,\n          this.state.startLoc,\n          {\n            key: keyName,\n          },\n        );\n      }\n      attrNames.add(keyName);\n      if (this.match(tt.string)) {\n        node.key = this.parseStringLiteral(keyName);\n      } else {\n        node.key = this.parseIdentifier(true);\n      }\n      this.expect(tt.colon);\n\n      if (!this.match(tt.string)) {\n        throw this.raise(\n          Errors.ModuleAttributeInvalidValue,\n          this.state.startLoc,\n        );\n      }\n      node.value = this.parseStringLiteral(this.state.value);\n      attrs.push(this.finishNode(node, \"ImportAttribute\"));\n    } while (this.eat(tt.comma));\n\n    this.expect(tt.braceR);\n\n    return attrs;\n  }\n\n  /**\n   * parse module attributes\n   * @deprecated It will be removed in Babel 8\n   */\n  parseModuleAttributes() {\n    const attrs: N.ImportAttribute[] = [];\n    const attributes = new Set();\n    do {\n      const node = this.startNode<N.ImportAttribute>();\n      node.key = this.parseIdentifier(true);\n\n      if (node.key.name !== \"type\") {\n        this.raise(Errors.ModuleAttributeDifferentFromType, node.key);\n      }\n\n      if (attributes.has(node.key.name)) {\n        this.raise(Errors.ModuleAttributesWithDuplicateKeys, node.key, {\n          key: node.key.name,\n        });\n      }\n      attributes.add(node.key.name);\n      this.expect(tt.colon);\n      if (!this.match(tt.string)) {\n        throw this.raise(\n          Errors.ModuleAttributeInvalidValue,\n          this.state.startLoc,\n        );\n      }\n      node.value = this.parseStringLiteral(this.state.value);\n      attrs.push(this.finishNode(node, \"ImportAttribute\"));\n    } while (this.eat(tt.comma));\n\n    return attrs;\n  }\n\n  maybeParseImportAttributes(\n    node: Undone<\n      N.ImportDeclaration | N.ExportNamedDeclaration | N.ExportAllDeclaration\n    >,\n  ) {\n    let attributes: N.ImportAttribute[];\n    if (!process.env.BABEL_8_BREAKING) {\n      // eslint-disable-next-line no-var\n      var useWith = false;\n    }\n\n    // https://tc39.es/proposal-import-attributes/#prod-WithClause\n    if (this.match(tt._with)) {\n      if (\n        this.hasPrecedingLineBreak() &&\n        this.lookaheadCharCode() === charCodes.leftParenthesis\n      ) {\n        // This will be parsed as a with statement, and we will throw a\n        // better error about it not being supported in strict mode.\n        return;\n      }\n\n      this.next(); // eat `with`\n\n      if (!process.env.BABEL_8_BREAKING && this.hasPlugin(\"moduleAttributes\")) {\n        attributes = this.parseModuleAttributes();\n        this.addExtra(node, \"deprecatedWithLegacySyntax\", true);\n      } else {\n        attributes = this.parseImportAttributes();\n      }\n      if (!process.env.BABEL_8_BREAKING) {\n        useWith = true;\n      }\n    } else if (this.isContextual(tt._assert) && !this.hasPrecedingLineBreak()) {\n      if (\n        !this.hasPlugin(\"deprecatedImportAssert\") &&\n        (process.env.BABEL_8_BREAKING || !this.hasPlugin(\"importAssertions\"))\n      ) {\n        this.raise(Errors.ImportAttributesUseAssert, this.state.startLoc);\n      }\n      if (process.env.BABEL_8_BREAKING || !this.hasPlugin(\"importAssertions\")) {\n        this.addExtra(node, \"deprecatedAssertSyntax\", true);\n      }\n      this.next(); // eat `assert`\n      attributes = this.parseImportAttributes();\n    } else {\n      attributes = [];\n    }\n\n    if (\n      !process.env.BABEL_8_BREAKING &&\n      !useWith &&\n      this.hasPlugin(\"importAssertions\")\n    ) {\n      node.assertions = attributes;\n    } else {\n      node.attributes = attributes;\n    }\n  }\n\n  maybeParseDefaultImportSpecifier(\n    node: Undone<N.ImportDeclaration>,\n    maybeDefaultIdentifier: N.Identifier | null,\n  ): boolean {\n    // import defaultObj, { x, y as z } from '...'\n    if (maybeDefaultIdentifier) {\n      const specifier = this.startNodeAtNode<N.ImportDefaultSpecifier>(\n        maybeDefaultIdentifier,\n      );\n      specifier.local = maybeDefaultIdentifier;\n      node.specifiers.push(\n        this.finishImportSpecifier(specifier, \"ImportDefaultSpecifier\"),\n      );\n      return true;\n    } else if (\n      // We allow keywords, and parseImportSpecifierLocal will report a recoverable error\n      tokenIsKeywordOrIdentifier(this.state.type)\n    ) {\n      this.parseImportSpecifierLocal(\n        node,\n        this.startNode<N.ImportDefaultSpecifier>(),\n        \"ImportDefaultSpecifier\",\n      );\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseStarImportSpecifier(node: Undone<N.ImportDeclaration>): boolean {\n    if (this.match(tt.star)) {\n      const specifier = this.startNode<N.ImportNamespaceSpecifier>();\n      this.next();\n      this.expectContextual(tt._as);\n\n      this.parseImportSpecifierLocal(\n        node,\n        specifier,\n        \"ImportNamespaceSpecifier\",\n      );\n      return true;\n    }\n    return false;\n  }\n\n  parseNamedImportSpecifiers(node: Undone<N.ImportDeclaration>) {\n    let first = true;\n    this.expect(tt.braceL);\n    while (!this.eat(tt.braceR)) {\n      if (first) {\n        first = false;\n      } else {\n        // Detect an attempt to deep destructure\n        if (this.eat(tt.colon)) {\n          throw this.raise(Errors.DestructureNamedImport, this.state.startLoc);\n        }\n\n        this.expect(tt.comma);\n        if (this.eat(tt.braceR)) break;\n      }\n\n      const specifier = this.startNode<N.ImportSpecifier>();\n      const importedIsString = this.match(tt.string);\n      const isMaybeTypeOnly = this.isContextual(tt._type);\n      specifier.imported = this.parseModuleExportName();\n      const importSpecifier = this.parseImportSpecifier(\n        specifier,\n        importedIsString,\n        node.importKind === \"type\" || node.importKind === \"typeof\",\n        isMaybeTypeOnly,\n        undefined,\n      );\n      node.specifiers.push(importSpecifier);\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-ImportSpecifier\n  parseImportSpecifier(\n    specifier: Undone<N.ImportSpecifier>,\n    importedIsString: boolean,\n    /* used in TypeScript and Flow parser */\n    isInTypeOnlyImport: boolean,\n    isMaybeTypeOnly: boolean,\n    bindingType: BindingFlag | undefined,\n  ): N.ImportSpecifier {\n    if (this.eatContextual(tt._as)) {\n      specifier.local = this.parseIdentifier();\n    } else {\n      const { imported } = specifier;\n      if (importedIsString) {\n        throw this.raise(Errors.ImportBindingIsString, specifier, {\n          importName: (imported as N.StringLiteral).value,\n        });\n      }\n      this.checkReservedWord(\n        (imported as N.Identifier).name,\n        specifier.loc.start,\n        true,\n        true,\n      );\n      if (!specifier.local) {\n        specifier.local = this.cloneIdentifier(imported as N.Identifier);\n      }\n    }\n    return this.finishImportSpecifier(\n      specifier,\n      \"ImportSpecifier\",\n      bindingType,\n    );\n  }\n\n  // This is used in flow and typescript plugin\n  // Determine whether a parameter is a this param\n  isThisParam(\n    param: N.Pattern | N.Identifier | N.TSParameterProperty,\n  ): boolean {\n    return param.type === \"Identifier\" && param.name === \"this\";\n  }\n}\n","import type { Options } from \"../options.ts\";\nimport type * as N from \"../types.ts\";\nimport { getOptions, OptionFlags } from \"../options.ts\";\nimport StatementParser from \"./statement.ts\";\nimport ScopeHandler from \"../util/scope.ts\";\n\nexport type PluginsMap = Map<\n  string,\n  {\n    [x: string]: any;\n  }\n>;\n\nexport default class Parser extends StatementParser {\n  // Forward-declaration so typescript plugin can override jsx plugin\n  // todo(flow->ts) - this probably can be removed\n  // abstract jsxParseOpeningElementAfterName(\n  //   node: N.JSXOpeningElement,\n  // ): N.JSXOpeningElement;\n\n  constructor(\n    options: Options | undefined | null,\n    input: string,\n    pluginsMap: PluginsMap,\n  ) {\n    options = getOptions(options);\n    super(options, input);\n\n    this.options = options;\n    this.initializeScopes();\n    this.plugins = pluginsMap;\n    this.filename = options.sourceFilename;\n    this.startIndex = options.startIndex;\n\n    let optionFlags = 0;\n    if (options.allowAwaitOutsideFunction) {\n      optionFlags |= OptionFlags.AllowAwaitOutsideFunction;\n    }\n    if (options.allowReturnOutsideFunction) {\n      optionFlags |= OptionFlags.AllowReturnOutsideFunction;\n    }\n    if (options.allowImportExportEverywhere) {\n      optionFlags |= OptionFlags.AllowImportExportEverywhere;\n    }\n    if (options.allowSuperOutsideMethod) {\n      optionFlags |= OptionFlags.AllowSuperOutsideMethod;\n    }\n    if (options.allowUndeclaredExports) {\n      optionFlags |= OptionFlags.AllowUndeclaredExports;\n    }\n    if (options.allowNewTargetOutsideFunction) {\n      optionFlags |= OptionFlags.AllowNewTargetOutsideFunction;\n    }\n    if (options.allowYieldOutsideFunction) {\n      optionFlags |= OptionFlags.AllowYieldOutsideFunction;\n    }\n    if (options.ranges) {\n      optionFlags |= OptionFlags.Ranges;\n    }\n    if (options.tokens) {\n      optionFlags |= OptionFlags.Tokens;\n    }\n    if (options.createImportExpressions) {\n      optionFlags |= OptionFlags.CreateImportExpressions;\n    }\n    if (options.createParenthesizedExpressions) {\n      optionFlags |= OptionFlags.CreateParenthesizedExpressions;\n    }\n    if (options.errorRecovery) {\n      optionFlags |= OptionFlags.ErrorRecovery;\n    }\n    if (options.attachComment) {\n      optionFlags |= OptionFlags.AttachComment;\n    }\n    if (options.annexB) {\n      optionFlags |= OptionFlags.AnnexB;\n    }\n\n    this.optionFlags = optionFlags;\n  }\n\n  // This can be overwritten, for example, by the TypeScript plugin.\n  getScopeHandler(): new (...args: any) => ScopeHandler {\n    return ScopeHandler;\n  }\n\n  parse(): N.File {\n    this.enterInitialScopes();\n    const file = this.startNode<N.File>();\n    const program = this.startNode<N.Program>();\n    this.nextToken();\n    file.errors = null;\n    this.parseTopLevel(file, program);\n    file.errors = this.state.errors;\n    file.comments.length = this.state.commentsLen;\n    return file as N.File;\n  }\n}\n","import type { Options } from \"./options.ts\";\nimport {\n  validatePlugins,\n  mixinPluginNames,\n  mixinPlugins,\n} from \"./plugin-utils.ts\";\nexport type {\n  PluginConfig as ParserPlugin,\n  DecoratorsPluginOptions,\n  FlowPluginOptions,\n  PipelineOperatorPluginOptions,\n  RecordAndTuplePluginOptions,\n  TypeScriptPluginOptions,\n} from \"./typings.ts\";\nimport Parser, { type PluginsMap } from \"./parser/index.ts\";\n\nimport type { ExportedTokenType } from \"./tokenizer/types.ts\";\nimport {\n  getExportedToken,\n  tt as internalTokenTypes,\n  type InternalTokenTypes,\n} from \"./tokenizer/types.ts\";\nexport type { Token } from \"./tokenizer/index.ts\";\n\n// TODO: Rather than type-casting the internal AST definitions to the\n// @babel/types one, we should actually unify them.\nimport type { Expression, File } from \"@babel/types\";\nexport type { Expression, File };\n\nexport type ParserOptions = Partial<Options>;\n\nexport interface ParseError {\n  code: string;\n  reasonCode: string;\n}\nexport type ParseResult<Result extends File | Expression = File> = Result & {\n  errors: null | ParseError[];\n};\n\n/**\n * Parse the provided code as an entire ECMAScript program.\n */\nexport function parse(\n  input: string,\n  options?: ParserOptions,\n): ParseResult<File> {\n  if (options?.sourceType === \"unambiguous\") {\n    options = {\n      ...options,\n    };\n    try {\n      options.sourceType = \"module\";\n      const parser = getParser(options, input);\n      const ast = parser.parse();\n\n      if (parser.sawUnambiguousESM) {\n        return ast as unknown as ParseResult<File>;\n      }\n\n      if (parser.ambiguousScriptDifferentAst) {\n        // Top level await introduces code which can be both a valid script and\n        // a valid module, but which produces different ASTs:\n        //    await\n        //    0\n        // can be parsed either as an AwaitExpression, or as two ExpressionStatements.\n        try {\n          options.sourceType = \"script\";\n          return getParser(\n            options,\n            input,\n          ).parse() as unknown as ParseResult<File>;\n        } catch {}\n      } else {\n        // This is both a valid module and a valid script, but\n        // we parse it as a script by default\n        ast.program.sourceType = \"script\";\n      }\n\n      return ast as unknown as ParseResult<File>;\n    } catch (moduleError) {\n      try {\n        options.sourceType = \"script\";\n        return getParser(\n          options,\n          input,\n        ).parse() as unknown as ParseResult<File>;\n      } catch {}\n\n      throw moduleError;\n    }\n  } else {\n    return getParser(options, input).parse() as unknown as ParseResult<File>;\n  }\n}\n\nexport function parseExpression(\n  input: string,\n  options?: ParserOptions,\n): ParseResult<Expression> {\n  const parser = getParser(options, input);\n  if (parser.options.strictMode) {\n    parser.state.strict = true;\n  }\n  return parser.getExpression() as unknown as ParseResult<Expression>;\n}\n\nfunction generateExportedTokenTypes(\n  internalTokenTypes: InternalTokenTypes,\n): Record<string, ExportedTokenType> {\n  const tokenTypes: Record<string, ExportedTokenType> = {};\n  for (const typeName of Object.keys(\n    internalTokenTypes,\n  ) as (keyof InternalTokenTypes)[]) {\n    tokenTypes[typeName] = getExportedToken(internalTokenTypes[typeName]);\n  }\n  return tokenTypes;\n}\n\nexport const tokTypes = generateExportedTokenTypes(internalTokenTypes);\n\nfunction getParser(options: Options | undefined | null, input: string): Parser {\n  let cls = Parser;\n  const pluginsMap: PluginsMap = new Map();\n  if (options?.plugins) {\n    for (const plugin of options.plugins) {\n      let name, opts;\n      if (typeof plugin === \"string\") {\n        name = plugin;\n      } else {\n        [name, opts] = plugin;\n      }\n      if (!pluginsMap.has(name)) {\n        pluginsMap.set(name, opts || {});\n      }\n    }\n    validatePlugins(pluginsMap);\n    cls = getParserClass(pluginsMap);\n  }\n\n  return new cls(options, input, pluginsMap);\n}\n\nconst parserClassCache = new Map<string, new (...args: any) => Parser>();\n\n/** Get a Parser class with plugins applied. */\nfunction getParserClass(\n  pluginsMap: Map<string, any>,\n): new (...args: any) => Parser {\n  const pluginList = [];\n  for (const name of mixinPluginNames) {\n    if (pluginsMap.has(name)) {\n      pluginList.push(name);\n    }\n  }\n  const key = pluginList.join(\"|\");\n  let cls = parserClassCache.get(key);\n  if (!cls) {\n    cls = Parser;\n    for (const plugin of pluginList) {\n      // @ts-expect-error todo(flow->ts)\n      cls = mixinPlugins[plugin](cls);\n    }\n    parserClassCache.set(key, cls);\n  }\n  return cls;\n}\n","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n\ttypeof define === 'function' && define.amd ? define(['exports'], factory) :\n\t(global = global || self, factory(global.estreeWalker = {}));\n}(this, (function (exports) { 'use strict';\n\n\t// @ts-check\n\t/** @typedef { import('estree').BaseNode} BaseNode */\n\n\t/** @typedef {{\n\t\tskip: () => void;\n\t\tremove: () => void;\n\t\treplace: (node: BaseNode) => void;\n\t}} WalkerContext */\n\n\tclass WalkerBase {\n\t\tconstructor() {\n\t\t\t/** @type {boolean} */\n\t\t\tthis.should_skip = false;\n\n\t\t\t/** @type {boolean} */\n\t\t\tthis.should_remove = false;\n\n\t\t\t/** @type {BaseNode | null} */\n\t\t\tthis.replacement = null;\n\n\t\t\t/** @type {WalkerContext} */\n\t\t\tthis.context = {\n\t\t\t\tskip: () => (this.should_skip = true),\n\t\t\t\tremove: () => (this.should_remove = true),\n\t\t\t\treplace: (node) => (this.replacement = node)\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t *\n\t\t * @param {any} parent\n\t\t * @param {string} prop\n\t\t * @param {number} index\n\t\t * @param {BaseNode} node\n\t\t */\n\t\treplace(parent, prop, index, node) {\n\t\t\tif (parent) {\n\t\t\t\tif (index !== null) {\n\t\t\t\t\tparent[prop][index] = node;\n\t\t\t\t} else {\n\t\t\t\t\tparent[prop] = node;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t *\n\t\t * @param {any} parent\n\t\t * @param {string} prop\n\t\t * @param {number} index\n\t\t */\n\t\tremove(parent, prop, index) {\n\t\t\tif (parent) {\n\t\t\t\tif (index !== null) {\n\t\t\t\t\tparent[prop].splice(index, 1);\n\t\t\t\t} else {\n\t\t\t\t\tdelete parent[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// @ts-check\n\n\t/** @typedef { import('estree').BaseNode} BaseNode */\n\t/** @typedef { import('./walker.js').WalkerContext} WalkerContext */\n\n\t/** @typedef {(\n\t *    this: WalkerContext,\n\t *    node: BaseNode,\n\t *    parent: BaseNode,\n\t *    key: string,\n\t *    index: number\n\t * ) => void} SyncHandler */\n\n\tclass SyncWalker extends WalkerBase {\n\t\t/**\n\t\t *\n\t\t * @param {SyncHandler} enter\n\t\t * @param {SyncHandler} leave\n\t\t */\n\t\tconstructor(enter, leave) {\n\t\t\tsuper();\n\n\t\t\t/** @type {SyncHandler} */\n\t\t\tthis.enter = enter;\n\n\t\t\t/** @type {SyncHandler} */\n\t\t\tthis.leave = leave;\n\t\t}\n\n\t\t/**\n\t\t *\n\t\t * @param {BaseNode} node\n\t\t * @param {BaseNode} parent\n\t\t * @param {string} [prop]\n\t\t * @param {number} [index]\n\t\t * @returns {BaseNode}\n\t\t */\n\t\tvisit(node, parent, prop, index) {\n\t\t\tif (node) {\n\t\t\t\tif (this.enter) {\n\t\t\t\t\tconst _should_skip = this.should_skip;\n\t\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\t\tthis.should_skip = false;\n\t\t\t\t\tthis.should_remove = false;\n\t\t\t\t\tthis.replacement = null;\n\n\t\t\t\t\tthis.enter.call(this.context, node, parent, prop, index);\n\n\t\t\t\t\tif (this.replacement) {\n\t\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.should_remove) {\n\t\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst skipped = this.should_skip;\n\t\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\t\tthis.should_skip = _should_skip;\n\t\t\t\t\tthis.should_remove = _should_remove;\n\t\t\t\t\tthis.replacement = _replacement;\n\n\t\t\t\t\tif (skipped) return node;\n\t\t\t\t\tif (removed) return null;\n\t\t\t\t}\n\n\t\t\t\tfor (const key in node) {\n\t\t\t\t\tconst value = node[key];\n\n\t\t\t\t\tif (typeof value !== \"object\") {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (Array.isArray(value)) {\n\t\t\t\t\t\tfor (let i = 0; i < value.length; i += 1) {\n\t\t\t\t\t\t\tif (value[i] !== null && typeof value[i].type === 'string') {\n\t\t\t\t\t\t\t\tif (!this.visit(value[i], node, key, i)) {\n\t\t\t\t\t\t\t\t\t// removed\n\t\t\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (value !== null && typeof value.type === \"string\") {\n\t\t\t\t\t\tthis.visit(value, node, key, null);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.leave) {\n\t\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\t\tthis.replacement = null;\n\t\t\t\t\tthis.should_remove = false;\n\n\t\t\t\t\tthis.leave.call(this.context, node, parent, prop, index);\n\n\t\t\t\t\tif (this.replacement) {\n\t\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.should_remove) {\n\t\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\t\tthis.replacement = _replacement;\n\t\t\t\t\tthis.should_remove = _should_remove;\n\n\t\t\t\t\tif (removed) return null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn node;\n\t\t}\n\t}\n\n\t// @ts-check\n\n\t/** @typedef { import('estree').BaseNode} BaseNode */\n\t/** @typedef { import('./walker').WalkerContext} WalkerContext */\n\n\t/** @typedef {(\n\t *    this: WalkerContext,\n\t *    node: BaseNode,\n\t *    parent: BaseNode,\n\t *    key: string,\n\t *    index: number\n\t * ) => Promise<void>} AsyncHandler */\n\n\tclass AsyncWalker extends WalkerBase {\n\t\t/**\n\t\t *\n\t\t * @param {AsyncHandler} enter\n\t\t * @param {AsyncHandler} leave\n\t\t */\n\t\tconstructor(enter, leave) {\n\t\t\tsuper();\n\n\t\t\t/** @type {AsyncHandler} */\n\t\t\tthis.enter = enter;\n\n\t\t\t/** @type {AsyncHandler} */\n\t\t\tthis.leave = leave;\n\t\t}\n\n\t\t/**\n\t\t *\n\t\t * @param {BaseNode} node\n\t\t * @param {BaseNode} parent\n\t\t * @param {string} [prop]\n\t\t * @param {number} [index]\n\t\t * @returns {Promise<BaseNode>}\n\t\t */\n\t\tasync visit(node, parent, prop, index) {\n\t\t\tif (node) {\n\t\t\t\tif (this.enter) {\n\t\t\t\t\tconst _should_skip = this.should_skip;\n\t\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\t\tthis.should_skip = false;\n\t\t\t\t\tthis.should_remove = false;\n\t\t\t\t\tthis.replacement = null;\n\n\t\t\t\t\tawait this.enter.call(this.context, node, parent, prop, index);\n\n\t\t\t\t\tif (this.replacement) {\n\t\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.should_remove) {\n\t\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst skipped = this.should_skip;\n\t\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\t\tthis.should_skip = _should_skip;\n\t\t\t\t\tthis.should_remove = _should_remove;\n\t\t\t\t\tthis.replacement = _replacement;\n\n\t\t\t\t\tif (skipped) return node;\n\t\t\t\t\tif (removed) return null;\n\t\t\t\t}\n\n\t\t\t\tfor (const key in node) {\n\t\t\t\t\tconst value = node[key];\n\n\t\t\t\t\tif (typeof value !== \"object\") {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (Array.isArray(value)) {\n\t\t\t\t\t\tfor (let i = 0; i < value.length; i += 1) {\n\t\t\t\t\t\t\tif (value[i] !== null && typeof value[i].type === 'string') {\n\t\t\t\t\t\t\t\tif (!(await this.visit(value[i], node, key, i))) {\n\t\t\t\t\t\t\t\t\t// removed\n\t\t\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (value !== null && typeof value.type === \"string\") {\n\t\t\t\t\t\tawait this.visit(value, node, key, null);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.leave) {\n\t\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\t\tthis.replacement = null;\n\t\t\t\t\tthis.should_remove = false;\n\n\t\t\t\t\tawait this.leave.call(this.context, node, parent, prop, index);\n\n\t\t\t\t\tif (this.replacement) {\n\t\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.should_remove) {\n\t\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\t\tthis.replacement = _replacement;\n\t\t\t\t\tthis.should_remove = _should_remove;\n\n\t\t\t\t\tif (removed) return null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn node;\n\t\t}\n\t}\n\n\t// @ts-check\n\n\t/** @typedef { import('estree').BaseNode} BaseNode */\n\t/** @typedef { import('./sync.js').SyncHandler} SyncHandler */\n\t/** @typedef { import('./async.js').AsyncHandler} AsyncHandler */\n\n\t/**\n\t *\n\t * @param {BaseNode} ast\n\t * @param {{\n\t *   enter?: SyncHandler\n\t *   leave?: SyncHandler\n\t * }} walker\n\t * @returns {BaseNode}\n\t */\n\tfunction walk(ast, { enter, leave }) {\n\t\tconst instance = new SyncWalker(enter, leave);\n\t\treturn instance.visit(ast, null);\n\t}\n\n\t/**\n\t *\n\t * @param {BaseNode} ast\n\t * @param {{\n\t *   enter?: AsyncHandler\n\t *   leave?: AsyncHandler\n\t * }} walker\n\t * @returns {Promise<BaseNode>}\n\t */\n\tasync function asyncWalk(ast, { enter, leave }) {\n\t\tconst instance = new AsyncWalker(enter, leave);\n\t\treturn await instance.visit(ast, null);\n\t}\n\n\texports.asyncWalk = asyncWalk;\n\texports.walk = walk;\n\n\tObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n  if (0 <= number && number < intToCharMap.length) {\n    return intToCharMap[number];\n  }\n  throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n  var bigA = 65;     // 'A'\n  var bigZ = 90;     // 'Z'\n\n  var littleA = 97;  // 'a'\n  var littleZ = 122; // 'z'\n\n  var zero = 48;     // '0'\n  var nine = 57;     // '9'\n\n  var plus = 43;     // '+'\n  var slash = 47;    // '/'\n\n  var littleOffset = 26;\n  var numberOffset = 52;\n\n  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n  if (bigA <= charCode && charCode <= bigZ) {\n    return (charCode - bigA);\n  }\n\n  // 26 - 51: abcdefghijklmnopqrstuvwxyz\n  if (littleA <= charCode && charCode <= littleZ) {\n    return (charCode - littleA + littleOffset);\n  }\n\n  // 52 - 61: 0123456789\n  if (zero <= charCode && charCode <= nine) {\n    return (charCode - zero + numberOffset);\n  }\n\n  // 62: +\n  if (charCode == plus) {\n    return 62;\n  }\n\n  // 63: /\n  if (charCode == slash) {\n    return 63;\n  }\n\n  // Invalid base64 digit.\n  return -1;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above\n *    copyright notice, this list of conditions and the following\n *    disclaimer in the documentation and/or other materials provided\n *    with the distribution.\n *  * Neither the name of Google Inc. nor the names of its\n *    contributors may be used to endorse or promote products derived\n *    from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n//   Continuation\n//   |    Sign\n//   |    |\n//   V    V\n//   101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n  return aValue < 0\n    ? ((-aValue) << 1) + 1\n    : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n  var isNegative = (aValue & 1) === 1;\n  var shifted = aValue >> 1;\n  return isNegative\n    ? -shifted\n    : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n  var encoded = \"\";\n  var digit;\n\n  var vlq = toVLQSigned(aValue);\n\n  do {\n    digit = vlq & VLQ_BASE_MASK;\n    vlq >>>= VLQ_BASE_SHIFT;\n    if (vlq > 0) {\n      // There are still more digits in this value, so we must make sure the\n      // continuation bit is marked.\n      digit |= VLQ_CONTINUATION_BIT;\n    }\n    encoded += base64.encode(digit);\n  } while (vlq > 0);\n\n  return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n  var strLen = aStr.length;\n  var result = 0;\n  var shift = 0;\n  var continuation, digit;\n\n  do {\n    if (aIndex >= strLen) {\n      throw new Error(\"Expected more digits in base 64 VLQ value.\");\n    }\n\n    digit = base64.decode(aStr.charCodeAt(aIndex++));\n    if (digit === -1) {\n      throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n    }\n\n    continuation = !!(digit & VLQ_CONTINUATION_BIT);\n    digit &= VLQ_BASE_MASK;\n    result = result + (digit << shift);\n    shift += VLQ_BASE_SHIFT;\n  } while (continuation);\n\n  aOutParam.value = fromVLQSigned(result);\n  aOutParam.rest = aIndex;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n  if (aName in aArgs) {\n    return aArgs[aName];\n  } else if (arguments.length === 3) {\n    return aDefaultValue;\n  } else {\n    throw new Error('\"' + aName + '\" is a required argument.');\n  }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n  var match = aUrl.match(urlRegexp);\n  if (!match) {\n    return null;\n  }\n  return {\n    scheme: match[1],\n    auth: match[2],\n    host: match[3],\n    port: match[4],\n    path: match[5]\n  };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n  var url = '';\n  if (aParsedUrl.scheme) {\n    url += aParsedUrl.scheme + ':';\n  }\n  url += '//';\n  if (aParsedUrl.auth) {\n    url += aParsedUrl.auth + '@';\n  }\n  if (aParsedUrl.host) {\n    url += aParsedUrl.host;\n  }\n  if (aParsedUrl.port) {\n    url += \":\" + aParsedUrl.port\n  }\n  if (aParsedUrl.path) {\n    url += aParsedUrl.path;\n  }\n  return url;\n}\nexports.urlGenerate = urlGenerate;\n\nvar MAX_CACHED_INPUTS = 32;\n\n/**\n * Takes some function `f(input) -> result` and returns a memoized version of\n * `f`.\n *\n * We keep at most `MAX_CACHED_INPUTS` memoized results of `f` alive. The\n * memoization is a dumb-simple, linear least-recently-used cache.\n */\nfunction lruMemoize(f) {\n  var cache = [];\n\n  return function(input) {\n    for (var i = 0; i < cache.length; i++) {\n      if (cache[i].input === input) {\n        var temp = cache[0];\n        cache[0] = cache[i];\n        cache[i] = temp;\n        return cache[0].result;\n      }\n    }\n\n    var result = f(input);\n\n    cache.unshift({\n      input,\n      result,\n    });\n\n    if (cache.length > MAX_CACHED_INPUTS) {\n      cache.pop();\n    }\n\n    return result;\n  };\n}\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '<dir>/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nvar normalize = lruMemoize(function normalize(aPath) {\n  var path = aPath;\n  var url = urlParse(aPath);\n  if (url) {\n    if (!url.path) {\n      return aPath;\n    }\n    path = url.path;\n  }\n  var isAbsolute = exports.isAbsolute(path);\n  // Split the path into parts between `/` characters. This is much faster than\n  // using `.split(/\\/+/g)`.\n  var parts = [];\n  var start = 0;\n  var i = 0;\n  while (true) {\n    start = i;\n    i = path.indexOf(\"/\", start);\n    if (i === -1) {\n      parts.push(path.slice(start));\n      break;\n    } else {\n      parts.push(path.slice(start, i));\n      while (i < path.length && path[i] === \"/\") {\n        i++;\n      }\n    }\n  }\n\n  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n    part = parts[i];\n    if (part === '.') {\n      parts.splice(i, 1);\n    } else if (part === '..') {\n      up++;\n    } else if (up > 0) {\n      if (part === '') {\n        // The first part is blank if the path is absolute. Trying to go\n        // above the root is a no-op. Therefore we can remove all '..' parts\n        // directly after the root.\n        parts.splice(i + 1, up);\n        up = 0;\n      } else {\n        parts.splice(i, 2);\n        up--;\n      }\n    }\n  }\n  path = parts.join('/');\n\n  if (path === '') {\n    path = isAbsolute ? '/' : '.';\n  }\n\n  if (url) {\n    url.path = path;\n    return urlGenerate(url);\n  }\n  return path;\n});\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n *   first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n *   is updated with the result and aRoot is returned. Otherwise the result\n *   is returned.\n *   - If aPath is absolute, the result is aPath.\n *   - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n  if (aPath === \"\") {\n    aPath = \".\";\n  }\n  var aPathUrl = urlParse(aPath);\n  var aRootUrl = urlParse(aRoot);\n  if (aRootUrl) {\n    aRoot = aRootUrl.path || '/';\n  }\n\n  // `join(foo, '//www.example.org')`\n  if (aPathUrl && !aPathUrl.scheme) {\n    if (aRootUrl) {\n      aPathUrl.scheme = aRootUrl.scheme;\n    }\n    return urlGenerate(aPathUrl);\n  }\n\n  if (aPathUrl || aPath.match(dataUrlRegexp)) {\n    return aPath;\n  }\n\n  // `join('http://', 'www.example.com')`\n  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n    aRootUrl.host = aPath;\n    return urlGenerate(aRootUrl);\n  }\n\n  var joined = aPath.charAt(0) === '/'\n    ? aPath\n    : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n  if (aRootUrl) {\n    aRootUrl.path = joined;\n    return urlGenerate(aRootUrl);\n  }\n  return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n  return aPath.charAt(0) === '/' || urlRegexp.test(aPath);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n\n  aRoot = aRoot.replace(/\\/$/, '');\n\n  // It is possible for the path to be above the root. In this case, simply\n  // checking whether the root is a prefix of the path won't work. Instead, we\n  // need to remove components from the root one by one, until either we find\n  // a prefix that fits, or we run out of components to remove.\n  var level = 0;\n  while (aPath.indexOf(aRoot + '/') !== 0) {\n    var index = aRoot.lastIndexOf(\"/\");\n    if (index < 0) {\n      return aPath;\n    }\n\n    // If the only part of the root that is left is the scheme (i.e. http://,\n    // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n    // have exhausted all components, so the path is not relative to the root.\n    aRoot = aRoot.slice(0, index);\n    if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n      return aPath;\n    }\n\n    ++level;\n  }\n\n  // Make sure we add a \"../\" for each component we removed from the root.\n  return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n  var obj = Object.create(null);\n  return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n  return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return '$' + aStr;\n  }\n\n  return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return aStr.slice(1);\n  }\n\n  return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n  if (!s) {\n    return false;\n  }\n\n  var length = s.length;\n\n  if (length < 9 /* \"__proto__\".length */) {\n    return false;\n  }\n\n  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 2) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n      s.charCodeAt(length - 8) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 9) !== 95  /* '_' */) {\n    return false;\n  }\n\n  for (var i = length - 10; i >= 0; i--) {\n    if (s.charCodeAt(i) !== 36 /* '$' */) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n  var cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0 || onlyCompareOriginal) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\nfunction compareByOriginalPositionsNoSource(mappingA, mappingB, onlyCompareOriginal) {\n  var cmp\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0 || onlyCompareOriginal) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByOriginalPositionsNoSource = compareByOriginalPositionsNoSource;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0 || onlyCompareGenerated) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction compareByGeneratedPositionsDeflatedNoLine(mappingA, mappingB, onlyCompareGenerated) {\n  var cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0 || onlyCompareGenerated) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsDeflatedNoLine = compareByGeneratedPositionsDeflatedNoLine;\n\nfunction strcmp(aStr1, aStr2) {\n  if (aStr1 === aStr2) {\n    return 0;\n  }\n\n  if (aStr1 === null) {\n    return 1; // aStr2 !== null\n  }\n\n  if (aStr2 === null) {\n    return -1; // aStr1 !== null\n  }\n\n  if (aStr1 > aStr2) {\n    return 1;\n  }\n\n  return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n/**\n * Strip any JSON XSSI avoidance prefix from the string (as documented\n * in the source maps specification), and then parse the string as\n * JSON.\n */\nfunction parseSourceMapInput(str) {\n  return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, ''));\n}\nexports.parseSourceMapInput = parseSourceMapInput;\n\n/**\n * Compute the URL of a source given the the source root, the source's\n * URL, and the source map's URL.\n */\nfunction computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {\n  sourceURL = sourceURL || '';\n\n  if (sourceRoot) {\n    // This follows what Chrome does.\n    if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {\n      sourceRoot += '/';\n    }\n    // The spec says:\n    //   Line 4: An optional source root, useful for relocating source\n    //   files on a server or removing repeated values in the\n    //   “sources” entry.  This value is prepended to the individual\n    //   entries in the “source” field.\n    sourceURL = sourceRoot + sourceURL;\n  }\n\n  // Historically, SourceMapConsumer did not take the sourceMapURL as\n  // a parameter.  This mode is still somewhat supported, which is why\n  // this code block is conditional.  However, it's preferable to pass\n  // the source map URL to SourceMapConsumer, so that this function\n  // can implement the source URL resolution algorithm as outlined in\n  // the spec.  This block is basically the equivalent of:\n  //    new URL(sourceURL, sourceMapURL).toString()\n  // ... except it avoids using URL, which wasn't available in the\n  // older releases of node still supported by this library.\n  //\n  // The spec says:\n  //   If the sources are not absolute URLs after prepending of the\n  //   “sourceRoot”, the sources are resolved relative to the\n  //   SourceMap (like resolving script src in a html document).\n  if (sourceMapURL) {\n    var parsed = urlParse(sourceMapURL);\n    if (!parsed) {\n      throw new Error(\"sourceMapURL could not be parsed\");\n    }\n    if (parsed.path) {\n      // Strip the last path component, but keep the \"/\".\n      var index = parsed.path.lastIndexOf('/');\n      if (index >= 0) {\n        parsed.path = parsed.path.substring(0, index + 1);\n      }\n    }\n    sourceURL = join(urlGenerate(parsed), sourceURL);\n  }\n\n  return normalize(sourceURL);\n}\nexports.computeSourceURL = computeSourceURL;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\nvar hasNativeMap = typeof Map !== \"undefined\";\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n  this._array = [];\n  this._set = hasNativeMap ? new Map() : Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n  var set = new ArraySet();\n  for (var i = 0, len = aArray.length; i < len; i++) {\n    set.add(aArray[i], aAllowDuplicates);\n  }\n  return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n  return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n  var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n  var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n  var idx = this._array.length;\n  if (!isDuplicate || aAllowDuplicates) {\n    this._array.push(aStr);\n  }\n  if (!isDuplicate) {\n    if (hasNativeMap) {\n      this._set.set(aStr, idx);\n    } else {\n      this._set[sStr] = idx;\n    }\n  }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n  if (hasNativeMap) {\n    return this._set.has(aStr);\n  } else {\n    var sStr = util.toSetString(aStr);\n    return has.call(this._set, sStr);\n  }\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n  if (hasNativeMap) {\n    var idx = this._set.get(aStr);\n    if (idx >= 0) {\n        return idx;\n    }\n  } else {\n    var sStr = util.toSetString(aStr);\n    if (has.call(this._set, sStr)) {\n      return this._set[sStr];\n    }\n  }\n\n  throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n  if (aIdx >= 0 && aIdx < this._array.length) {\n    return this._array[aIdx];\n  }\n  throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n  return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n  // Optimized for most common case\n  var lineA = mappingA.generatedLine;\n  var lineB = mappingB.generatedLine;\n  var columnA = mappingA.generatedColumn;\n  var columnB = mappingB.generatedColumn;\n  return lineB > lineA || lineB == lineA && columnB >= columnA ||\n         util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n  this._array = [];\n  this._sorted = true;\n  // Serves as infimum\n  this._last = {generatedLine: -1, generatedColumn: 0};\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach =\n  function MappingList_forEach(aCallback, aThisArg) {\n    this._array.forEach(aCallback, aThisArg);\n  };\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n  if (generatedPositionAfter(this._last, aMapping)) {\n    this._last = aMapping;\n    this._array.push(aMapping);\n  } else {\n    this._sorted = false;\n    this._array.push(aMapping);\n  }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n  if (!this._sorted) {\n    this._array.sort(util.compareByGeneratedPositionsInflated);\n    this._sorted = true;\n  }\n  return this._array;\n};\n\nexports.MappingList = MappingList;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = require('./base64-vlq');\nvar util = require('./util');\nvar ArraySet = require('./array-set').ArraySet;\nvar MappingList = require('./mapping-list').MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n *   - file: The filename of the generated source.\n *   - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n  if (!aArgs) {\n    aArgs = {};\n  }\n  this._file = util.getArg(aArgs, 'file', null);\n  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n  this._ignoreInvalidMapping = util.getArg(aArgs, 'ignoreInvalidMapping', false);\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n  this._mappings = new MappingList();\n  this._sourcesContents = null;\n}\n\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap =\n  function SourceMapGenerator_fromSourceMap(aSourceMapConsumer, generatorOps) {\n    var sourceRoot = aSourceMapConsumer.sourceRoot;\n    var generator = new SourceMapGenerator(Object.assign(generatorOps || {}, {\n      file: aSourceMapConsumer.file,\n      sourceRoot: sourceRoot\n    }));\n    aSourceMapConsumer.eachMapping(function (mapping) {\n      var newMapping = {\n        generated: {\n          line: mapping.generatedLine,\n          column: mapping.generatedColumn\n        }\n      };\n\n      if (mapping.source != null) {\n        newMapping.source = mapping.source;\n        if (sourceRoot != null) {\n          newMapping.source = util.relative(sourceRoot, newMapping.source);\n        }\n\n        newMapping.original = {\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        };\n\n        if (mapping.name != null) {\n          newMapping.name = mapping.name;\n        }\n      }\n\n      generator.addMapping(newMapping);\n    });\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var sourceRelative = sourceFile;\n      if (sourceRoot !== null) {\n        sourceRelative = util.relative(sourceRoot, sourceFile);\n      }\n\n      if (!generator._sources.has(sourceRelative)) {\n        generator._sources.add(sourceRelative);\n      }\n\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        generator.setSourceContent(sourceFile, content);\n      }\n    });\n    return generator;\n  };\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n *   - generated: An object with the generated line and column positions.\n *   - original: An object with the original line and column positions.\n *   - source: The original source file (relative to the sourceRoot).\n *   - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping =\n  function SourceMapGenerator_addMapping(aArgs) {\n    var generated = util.getArg(aArgs, 'generated');\n    var original = util.getArg(aArgs, 'original', null);\n    var source = util.getArg(aArgs, 'source', null);\n    var name = util.getArg(aArgs, 'name', null);\n\n    if (!this._skipValidation) {\n      if (this._validateMapping(generated, original, source, name) === false) {\n        return;\n      }\n    }\n\n    if (source != null) {\n      source = String(source);\n      if (!this._sources.has(source)) {\n        this._sources.add(source);\n      }\n    }\n\n    if (name != null) {\n      name = String(name);\n      if (!this._names.has(name)) {\n        this._names.add(name);\n      }\n    }\n\n    this._mappings.add({\n      generatedLine: generated.line,\n      generatedColumn: generated.column,\n      originalLine: original != null && original.line,\n      originalColumn: original != null && original.column,\n      source: source,\n      name: name\n    });\n  };\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent =\n  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n    var source = aSourceFile;\n    if (this._sourceRoot != null) {\n      source = util.relative(this._sourceRoot, source);\n    }\n\n    if (aSourceContent != null) {\n      // Add the source content to the _sourcesContents map.\n      // Create a new _sourcesContents map if the property is null.\n      if (!this._sourcesContents) {\n        this._sourcesContents = Object.create(null);\n      }\n      this._sourcesContents[util.toSetString(source)] = aSourceContent;\n    } else if (this._sourcesContents) {\n      // Remove the source file from the _sourcesContents map.\n      // If the _sourcesContents map is empty, set the property to null.\n      delete this._sourcesContents[util.toSetString(source)];\n      if (Object.keys(this._sourcesContents).length === 0) {\n        this._sourcesContents = null;\n      }\n    }\n  };\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n *        If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n *        to be applied. If relative, it is relative to the SourceMapConsumer.\n *        This parameter is needed when the two source maps aren't in the same\n *        directory, and the source map to be applied contains relative source\n *        paths. If so, those relative source paths need to be rewritten\n *        relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap =\n  function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n    var sourceFile = aSourceFile;\n    // If aSourceFile is omitted, we will use the file property of the SourceMap\n    if (aSourceFile == null) {\n      if (aSourceMapConsumer.file == null) {\n        throw new Error(\n          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n          'or the source map\\'s \"file\" property. Both were omitted.'\n        );\n      }\n      sourceFile = aSourceMapConsumer.file;\n    }\n    var sourceRoot = this._sourceRoot;\n    // Make \"sourceFile\" relative if an absolute Url is passed.\n    if (sourceRoot != null) {\n      sourceFile = util.relative(sourceRoot, sourceFile);\n    }\n    // Applying the SourceMap can add and remove items from the sources and\n    // the names array.\n    var newSources = new ArraySet();\n    var newNames = new ArraySet();\n\n    // Find mappings for the \"sourceFile\"\n    this._mappings.unsortedForEach(function (mapping) {\n      if (mapping.source === sourceFile && mapping.originalLine != null) {\n        // Check if it can be mapped by the source map, then update the mapping.\n        var original = aSourceMapConsumer.originalPositionFor({\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        });\n        if (original.source != null) {\n          // Copy mapping\n          mapping.source = original.source;\n          if (aSourceMapPath != null) {\n            mapping.source = util.join(aSourceMapPath, mapping.source)\n          }\n          if (sourceRoot != null) {\n            mapping.source = util.relative(sourceRoot, mapping.source);\n          }\n          mapping.originalLine = original.line;\n          mapping.originalColumn = original.column;\n          if (original.name != null) {\n            mapping.name = original.name;\n          }\n        }\n      }\n\n      var source = mapping.source;\n      if (source != null && !newSources.has(source)) {\n        newSources.add(source);\n      }\n\n      var name = mapping.name;\n      if (name != null && !newNames.has(name)) {\n        newNames.add(name);\n      }\n\n    }, this);\n    this._sources = newSources;\n    this._names = newNames;\n\n    // Copy sourcesContents of applied map.\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        if (aSourceMapPath != null) {\n          sourceFile = util.join(aSourceMapPath, sourceFile);\n        }\n        if (sourceRoot != null) {\n          sourceFile = util.relative(sourceRoot, sourceFile);\n        }\n        this.setSourceContent(sourceFile, content);\n      }\n    }, this);\n  };\n\n/**\n * A mapping can have one of the three levels of data:\n *\n *   1. Just the generated position.\n *   2. The Generated position, original position, and original source.\n *   3. Generated and original position, original source, as well as a name\n *      token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping =\n  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n                                              aName) {\n    // When aOriginal is truthy but has empty values for .line and .column,\n    // it is most likely a programmer error. In this case we throw a very\n    // specific error message to try to guide them the right way.\n    // For example: https://github.com/Polymer/polymer-bundler/pull/519\n    if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n      var message = 'original.line and original.column are not numbers -- you probably meant to omit ' +\n      'the original mapping entirely and only map the generated position. If so, pass ' +\n      'null for the original mapping instead of an object with empty or null values.'\n\n      if (this._ignoreInvalidMapping) {\n        if (typeof console !== 'undefined' && console.warn) {\n          console.warn(message);\n        }\n        return false;\n      } else {\n        throw new Error(message);\n      }\n    }\n\n    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n        && aGenerated.line > 0 && aGenerated.column >= 0\n        && !aOriginal && !aSource && !aName) {\n      // Case 1.\n      return;\n    }\n    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n             && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n             && aGenerated.line > 0 && aGenerated.column >= 0\n             && aOriginal.line > 0 && aOriginal.column >= 0\n             && aSource) {\n      // Cases 2 and 3.\n      return;\n    }\n    else {\n      var message = 'Invalid mapping: ' + JSON.stringify({\n        generated: aGenerated,\n        source: aSource,\n        original: aOriginal,\n        name: aName\n      });\n\n      if (this._ignoreInvalidMapping) {\n        if (typeof console !== 'undefined' && console.warn) {\n          console.warn(message);\n        }\n        return false;\n      } else {\n        throw new Error(message)\n      }\n    }\n  };\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings =\n  function SourceMapGenerator_serializeMappings() {\n    var previousGeneratedColumn = 0;\n    var previousGeneratedLine = 1;\n    var previousOriginalColumn = 0;\n    var previousOriginalLine = 0;\n    var previousName = 0;\n    var previousSource = 0;\n    var result = '';\n    var next;\n    var mapping;\n    var nameIdx;\n    var sourceIdx;\n\n    var mappings = this._mappings.toArray();\n    for (var i = 0, len = mappings.length; i < len; i++) {\n      mapping = mappings[i];\n      next = ''\n\n      if (mapping.generatedLine !== previousGeneratedLine) {\n        previousGeneratedColumn = 0;\n        while (mapping.generatedLine !== previousGeneratedLine) {\n          next += ';';\n          previousGeneratedLine++;\n        }\n      }\n      else {\n        if (i > 0) {\n          if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n            continue;\n          }\n          next += ',';\n        }\n      }\n\n      next += base64VLQ.encode(mapping.generatedColumn\n                                 - previousGeneratedColumn);\n      previousGeneratedColumn = mapping.generatedColumn;\n\n      if (mapping.source != null) {\n        sourceIdx = this._sources.indexOf(mapping.source);\n        next += base64VLQ.encode(sourceIdx - previousSource);\n        previousSource = sourceIdx;\n\n        // lines are stored 0-based in SourceMap spec version 3\n        next += base64VLQ.encode(mapping.originalLine - 1\n                                   - previousOriginalLine);\n        previousOriginalLine = mapping.originalLine - 1;\n\n        next += base64VLQ.encode(mapping.originalColumn\n                                   - previousOriginalColumn);\n        previousOriginalColumn = mapping.originalColumn;\n\n        if (mapping.name != null) {\n          nameIdx = this._names.indexOf(mapping.name);\n          next += base64VLQ.encode(nameIdx - previousName);\n          previousName = nameIdx;\n        }\n      }\n\n      result += next;\n    }\n\n    return result;\n  };\n\nSourceMapGenerator.prototype._generateSourcesContent =\n  function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n    return aSources.map(function (source) {\n      if (!this._sourcesContents) {\n        return null;\n      }\n      if (aSourceRoot != null) {\n        source = util.relative(aSourceRoot, source);\n      }\n      var key = util.toSetString(source);\n      return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n        ? this._sourcesContents[key]\n        : null;\n    }, this);\n  };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON =\n  function SourceMapGenerator_toJSON() {\n    var map = {\n      version: this._version,\n      sources: this._sources.toArray(),\n      names: this._names.toArray(),\n      mappings: this._serializeMappings()\n    };\n    if (this._file != null) {\n      map.file = this._file;\n    }\n    if (this._sourceRoot != null) {\n      map.sourceRoot = this._sourceRoot;\n    }\n    if (this._sourcesContents) {\n      map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n    }\n\n    return map;\n  };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString =\n  function SourceMapGenerator_toString() {\n    return JSON.stringify(this.toJSON());\n  };\n\nexports.SourceMapGenerator = SourceMapGenerator;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n  // This function terminates when one of the following is true:\n  //\n  //   1. We find the exact element we are looking for.\n  //\n  //   2. We did not find the exact element, but we can return the index of\n  //      the next-closest element.\n  //\n  //   3. We did not find the exact element, and there is no next-closest\n  //      element than the one we are searching for, so we return -1.\n  var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n  var cmp = aCompare(aNeedle, aHaystack[mid], true);\n  if (cmp === 0) {\n    // Found the element we are looking for.\n    return mid;\n  }\n  else if (cmp > 0) {\n    // Our needle is greater than aHaystack[mid].\n    if (aHigh - mid > 1) {\n      // The element is in the upper half.\n      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // The exact needle element was not found in this haystack. Determine if\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return aHigh < aHaystack.length ? aHigh : -1;\n    } else {\n      return mid;\n    }\n  }\n  else {\n    // Our needle is less than aHaystack[mid].\n    if (mid - aLow > 1) {\n      // The element is in the lower half.\n      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return mid;\n    } else {\n      return aLow < 0 ? -1 : aLow;\n    }\n  }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n *     array and returns -1, 0, or 1 depending on whether the needle is less\n *     than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n  if (aHaystack.length === 0) {\n    return -1;\n  }\n\n  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n                              aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n  if (index < 0) {\n    return -1;\n  }\n\n  // We have found either the exact element, or the next-closest element than\n  // the one we are searching for. However, there may be more than one such\n  // element. Make sure we always return the smallest of these.\n  while (index - 1 >= 0) {\n    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n      break;\n    }\n    --index;\n  }\n\n  return index;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\nfunction SortTemplate(comparator) {\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n *        The array.\n * @param {Number} x\n *        The index of the first item.\n * @param {Number} y\n *        The index of the second item.\n */\nfunction swap(ary, x, y) {\n  var temp = ary[x];\n  ary[x] = ary[y];\n  ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n *        The lower bound on the range.\n * @param {Number} high\n *        The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n  return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n * @param {Number} p\n *        Start index of the array\n * @param {Number} r\n *        End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n  // If our lower bound is less than our upper bound, we (1) partition the\n  // array into two pieces and (2) recurse on each half. If it is not, this is\n  // the empty array and our base case.\n\n  if (p < r) {\n    // (1) Partitioning.\n    //\n    // The partitioning chooses a pivot between `p` and `r` and moves all\n    // elements that are less than or equal to the pivot to the before it, and\n    // all the elements that are greater than it after it. The effect is that\n    // once partition is done, the pivot is in the exact place it will be when\n    // the array is put in sorted order, and it will not need to be moved\n    // again. This runs in O(n) time.\n\n    // Always choose a random pivot so that an input array which is reverse\n    // sorted does not cause O(n^2) running time.\n    var pivotIndex = randomIntInRange(p, r);\n    var i = p - 1;\n\n    swap(ary, pivotIndex, r);\n    var pivot = ary[r];\n\n    // Immediately after `j` is incremented in this loop, the following hold\n    // true:\n    //\n    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.\n    //\n    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n    for (var j = p; j < r; j++) {\n      if (comparator(ary[j], pivot, false) <= 0) {\n        i += 1;\n        swap(ary, i, j);\n      }\n    }\n\n    swap(ary, i + 1, j);\n    var q = i + 1;\n\n    // (2) Recurse on each half.\n\n    doQuickSort(ary, comparator, p, q - 1);\n    doQuickSort(ary, comparator, q + 1, r);\n  }\n}\n\n  return doQuickSort;\n}\n\nfunction cloneSort(comparator) {\n  let template = SortTemplate.toString();\n  let templateFn = new Function(`return ${template}`)();\n  return templateFn(comparator);\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n */\n\nlet sortCache = new WeakMap();\nexports.quickSort = function (ary, comparator, start = 0) {\n  let doQuickSort = sortCache.get(comparator);\n  if (doQuickSort === void 0) {\n    doQuickSort = cloneSort(comparator);\n    sortCache.set(comparator, doQuickSort);\n  }\n  doQuickSort(ary, comparator, start, ary.length - 1);\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\n\nfunction SourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  return sourceMap.sections != null\n    ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)\n    : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);\n}\n\nSourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {\n  return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);\n}\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n//     {\n//       generatedLine: The line number in the generated code,\n//       generatedColumn: The column number in the generated code,\n//       source: The path to the original source file that generated this\n//               chunk of code,\n//       originalLine: The line number in the original source that\n//                     corresponds to this chunk of generated code,\n//       originalColumn: The column number in the original source that\n//                       corresponds to this chunk of generated code,\n//       name: The name of the original symbol which generated this chunk of\n//             code.\n//     }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n  configurable: true,\n  enumerable: true,\n  get: function () {\n    if (!this.__generatedMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__generatedMappings;\n  }\n});\n\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n  configurable: true,\n  enumerable: true,\n  get: function () {\n    if (!this.__originalMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__originalMappings;\n  }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n  function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n    var c = aStr.charAt(index);\n    return c === \";\" || c === \",\";\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    throw new Error(\"Subclasses must implement _parseMappings\");\n  };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n *        The function that is called with each mapping.\n * @param Object aContext\n *        Optional. If specified, this object will be the value of `this` every\n *        time that `aCallback` is called.\n * @param aOrder\n *        Either `SourceMapConsumer.GENERATED_ORDER` or\n *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n *        iterate over the mappings sorted by the generated file's line/column\n *        order or the original's source/line/column order, respectively. Defaults to\n *        `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping =\n  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n    var context = aContext || null;\n    var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\n    var mappings;\n    switch (order) {\n    case SourceMapConsumer.GENERATED_ORDER:\n      mappings = this._generatedMappings;\n      break;\n    case SourceMapConsumer.ORIGINAL_ORDER:\n      mappings = this._originalMappings;\n      break;\n    default:\n      throw new Error(\"Unknown order of iteration.\");\n    }\n\n    var sourceRoot = this.sourceRoot;\n    var boundCallback = aCallback.bind(context);\n    var names = this._names;\n    var sources = this._sources;\n    var sourceMapURL = this._sourceMapURL;\n\n    for (var i = 0, n = mappings.length; i < n; i++) {\n      var mapping = mappings[i];\n      var source = mapping.source === null ? null : sources.at(mapping.source);\n      if(source !== null) {\n        source = util.computeSourceURL(sourceRoot, source, sourceMapURL);\n      }\n      boundCallback({\n        source: source,\n        generatedLine: mapping.generatedLine,\n        generatedColumn: mapping.generatedColumn,\n        originalLine: mapping.originalLine,\n        originalColumn: mapping.originalColumn,\n        name: mapping.name === null ? null : names.at(mapping.name)\n      });\n    }\n  };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number is 1-based.\n *   - column: Optional. the column number in the original source.\n *    The column number is 0-based.\n *\n * and an array of objects is returned, each with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *    line number is 1-based.\n *   - column: The column number in the generated source, or null.\n *    The column number is 0-based.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor =\n  function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n    var line = util.getArg(aArgs, 'line');\n\n    // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n    // returns the index of the closest mapping less than the needle. By\n    // setting needle.originalColumn to 0, we thus find the last mapping for\n    // the given line, provided such a mapping exists.\n    var needle = {\n      source: util.getArg(aArgs, 'source'),\n      originalLine: line,\n      originalColumn: util.getArg(aArgs, 'column', 0)\n    };\n\n    needle.source = this._findSourceIndex(needle.source);\n    if (needle.source < 0) {\n      return [];\n    }\n\n    var mappings = [];\n\n    var index = this._findMapping(needle,\n                                  this._originalMappings,\n                                  \"originalLine\",\n                                  \"originalColumn\",\n                                  util.compareByOriginalPositions,\n                                  binarySearch.LEAST_UPPER_BOUND);\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (aArgs.column === undefined) {\n        var originalLine = mapping.originalLine;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we found. Since\n        // mappings are sorted, this is guaranteed to find all mappings for\n        // the line we found.\n        while (mapping && mapping.originalLine === originalLine) {\n          mappings.push({\n            line: util.getArg(mapping, 'generatedLine', null),\n            column: util.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      } else {\n        var originalColumn = mapping.originalColumn;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we were searching for.\n        // Since mappings are sorted, this is guaranteed to find all mappings for\n        // the line we are searching for.\n        while (mapping &&\n               mapping.originalLine === line &&\n               mapping.originalColumn == originalColumn) {\n          mappings.push({\n            line: util.getArg(mapping, 'generatedLine', null),\n            column: util.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      }\n    }\n\n    return mappings;\n  };\n\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The first parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - sources: An array of URLs to the original source files.\n *   - names: An array of identifiers which can be referrenced by individual mappings.\n *   - sourceRoot: Optional. The URL root from which all sources are relative.\n *   - sourcesContent: Optional. An array of contents of the original source files.\n *   - mappings: A string of base64 VLQs which contain the actual mappings.\n *   - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n *     {\n *       version : 3,\n *       file: \"out.js\",\n *       sourceRoot : \"\",\n *       sources: [\"foo.js\", \"bar.js\"],\n *       names: [\"src\", \"maps\", \"are\", \"fun\"],\n *       mappings: \"AA,AB;;ABCDE;\"\n *     }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found.  This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  var version = util.getArg(sourceMap, 'version');\n  var sources = util.getArg(sourceMap, 'sources');\n  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n  // requires the array) to play nice here.\n  var names = util.getArg(sourceMap, 'names', []);\n  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n  var mappings = util.getArg(sourceMap, 'mappings');\n  var file = util.getArg(sourceMap, 'file', null);\n\n  // Once again, Sass deviates from the spec and supplies the version as a\n  // string rather than a number, so we use loose equality checking here.\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  if (sourceRoot) {\n    sourceRoot = util.normalize(sourceRoot);\n  }\n\n  sources = sources\n    .map(String)\n    // Some source maps produce relative source paths like \"./foo.js\" instead of\n    // \"foo.js\".  Normalize these first so that future comparisons will succeed.\n    // See bugzil.la/1090768.\n    .map(util.normalize)\n    // Always ensure that absolute sources are internally stored relative to\n    // the source root, if the source root is absolute. Not doing this would\n    // be particularly problematic when the source root is a prefix of the\n    // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n    .map(function (source) {\n      return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n        ? util.relative(sourceRoot, source)\n        : source;\n    });\n\n  // Pass `true` below to allow duplicate names and sources. While source maps\n  // are intended to be compressed and deduplicated, the TypeScript compiler\n  // sometimes generates source maps with duplicates in them. See Github issue\n  // #72 and bugzil.la/889492.\n  this._names = ArraySet.fromArray(names.map(String), true);\n  this._sources = ArraySet.fromArray(sources, true);\n\n  this._absoluteSources = this._sources.toArray().map(function (s) {\n    return util.computeSourceURL(sourceRoot, s, aSourceMapURL);\n  });\n\n  this.sourceRoot = sourceRoot;\n  this.sourcesContent = sourcesContent;\n  this._mappings = mappings;\n  this._sourceMapURL = aSourceMapURL;\n  this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Utility function to find the index of a source.  Returns -1 if not\n * found.\n */\nBasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {\n  var relativeSource = aSource;\n  if (this.sourceRoot != null) {\n    relativeSource = util.relative(this.sourceRoot, relativeSource);\n  }\n\n  if (this._sources.has(relativeSource)) {\n    return this._sources.indexOf(relativeSource);\n  }\n\n  // Maybe aSource is an absolute URL as returned by |sources|.  In\n  // this case we can't simply undo the transform.\n  var i;\n  for (i = 0; i < this._absoluteSources.length; ++i) {\n    if (this._absoluteSources[i] == aSource) {\n      return i;\n    }\n  }\n\n  return -1;\n};\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n *        The source map that will be consumed.\n * @param String aSourceMapURL\n *        The URL at which the source map can be found (optional)\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n  function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {\n    var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n    var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n    var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n    smc.sourceRoot = aSourceMap._sourceRoot;\n    smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n                                                            smc.sourceRoot);\n    smc.file = aSourceMap._file;\n    smc._sourceMapURL = aSourceMapURL;\n    smc._absoluteSources = smc._sources.toArray().map(function (s) {\n      return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);\n    });\n\n    // Because we are modifying the entries (by converting string sources and\n    // names to indices into the sources and names ArraySets), we have to make\n    // a copy of the entry or else bad things happen. Shared mutable state\n    // strikes again! See github issue #191.\n\n    var generatedMappings = aSourceMap._mappings.toArray().slice();\n    var destGeneratedMappings = smc.__generatedMappings = [];\n    var destOriginalMappings = smc.__originalMappings = [];\n\n    for (var i = 0, length = generatedMappings.length; i < length; i++) {\n      var srcMapping = generatedMappings[i];\n      var destMapping = new Mapping;\n      destMapping.generatedLine = srcMapping.generatedLine;\n      destMapping.generatedColumn = srcMapping.generatedColumn;\n\n      if (srcMapping.source) {\n        destMapping.source = sources.indexOf(srcMapping.source);\n        destMapping.originalLine = srcMapping.originalLine;\n        destMapping.originalColumn = srcMapping.originalColumn;\n\n        if (srcMapping.name) {\n          destMapping.name = names.indexOf(srcMapping.name);\n        }\n\n        destOriginalMappings.push(destMapping);\n      }\n\n      destGeneratedMappings.push(destMapping);\n    }\n\n    quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\n    return smc;\n  };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    return this._absoluteSources.slice();\n  }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n  this.generatedLine = 0;\n  this.generatedColumn = 0;\n  this.source = null;\n  this.originalLine = null;\n  this.originalColumn = null;\n  this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\n\nconst compareGenerated = util.compareByGeneratedPositionsDeflatedNoLine;\nfunction sortGenerated(array, start) {\n  let l = array.length;\n  let n = array.length - start;\n  if (n <= 1) {\n    return;\n  } else if (n == 2) {\n    let a = array[start];\n    let b = array[start + 1];\n    if (compareGenerated(a, b) > 0) {\n      array[start] = b;\n      array[start + 1] = a;\n    }\n  } else if (n < 20) {\n    for (let i = start; i < l; i++) {\n      for (let j = i; j > start; j--) {\n        let a = array[j - 1];\n        let b = array[j];\n        if (compareGenerated(a, b) <= 0) {\n          break;\n        }\n        array[j - 1] = b;\n        array[j] = a;\n      }\n    }\n  } else {\n    quickSort(array, compareGenerated, start);\n  }\n}\nBasicSourceMapConsumer.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    var generatedLine = 1;\n    var previousGeneratedColumn = 0;\n    var previousOriginalLine = 0;\n    var previousOriginalColumn = 0;\n    var previousSource = 0;\n    var previousName = 0;\n    var length = aStr.length;\n    var index = 0;\n    var cachedSegments = {};\n    var temp = {};\n    var originalMappings = [];\n    var generatedMappings = [];\n    var mapping, str, segment, end, value;\n\n    let subarrayStart = 0;\n    while (index < length) {\n      if (aStr.charAt(index) === ';') {\n        generatedLine++;\n        index++;\n        previousGeneratedColumn = 0;\n\n        sortGenerated(generatedMappings, subarrayStart);\n        subarrayStart = generatedMappings.length;\n      }\n      else if (aStr.charAt(index) === ',') {\n        index++;\n      }\n      else {\n        mapping = new Mapping();\n        mapping.generatedLine = generatedLine;\n\n        for (end = index; end < length; end++) {\n          if (this._charIsMappingSeparator(aStr, end)) {\n            break;\n          }\n        }\n        str = aStr.slice(index, end);\n\n        segment = [];\n        while (index < end) {\n          base64VLQ.decode(aStr, index, temp);\n          value = temp.value;\n          index = temp.rest;\n          segment.push(value);\n        }\n\n        if (segment.length === 2) {\n          throw new Error('Found a source, but no line and column');\n        }\n\n        if (segment.length === 3) {\n          throw new Error('Found a source and line, but no column');\n        }\n\n        // Generated column.\n        mapping.generatedColumn = previousGeneratedColumn + segment[0];\n        previousGeneratedColumn = mapping.generatedColumn;\n\n        if (segment.length > 1) {\n          // Original source.\n          mapping.source = previousSource + segment[1];\n          previousSource += segment[1];\n\n          // Original line.\n          mapping.originalLine = previousOriginalLine + segment[2];\n          previousOriginalLine = mapping.originalLine;\n          // Lines are stored 0-based\n          mapping.originalLine += 1;\n\n          // Original column.\n          mapping.originalColumn = previousOriginalColumn + segment[3];\n          previousOriginalColumn = mapping.originalColumn;\n\n          if (segment.length > 4) {\n            // Original name.\n            mapping.name = previousName + segment[4];\n            previousName += segment[4];\n          }\n        }\n\n        generatedMappings.push(mapping);\n        if (typeof mapping.originalLine === 'number') {\n          let currentSource = mapping.source;\n          while (originalMappings.length <= currentSource) {\n            originalMappings.push(null);\n          }\n          if (originalMappings[currentSource] === null) {\n            originalMappings[currentSource] = [];\n          }\n          originalMappings[currentSource].push(mapping);\n        }\n      }\n    }\n\n    sortGenerated(generatedMappings, subarrayStart);\n    this.__generatedMappings = generatedMappings;\n\n    for (var i = 0; i < originalMappings.length; i++) {\n      if (originalMappings[i] != null) {\n        quickSort(originalMappings[i], util.compareByOriginalPositionsNoSource);\n      }\n    }\n    this.__originalMappings = [].concat(...originalMappings);\n  };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping =\n  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n                                         aColumnName, aComparator, aBias) {\n    // To return the position we are searching for, we must first find the\n    // mapping for the given position and then return the opposite position it\n    // points to. Because the mappings are sorted, we can use binary search to\n    // find the best mapping.\n\n    if (aNeedle[aLineName] <= 0) {\n      throw new TypeError('Line must be greater than or equal to 1, got '\n                          + aNeedle[aLineName]);\n    }\n    if (aNeedle[aColumnName] < 0) {\n      throw new TypeError('Column must be greater than or equal to 0, got '\n                          + aNeedle[aColumnName]);\n    }\n\n    return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n  };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans =\n  function SourceMapConsumer_computeColumnSpans() {\n    for (var index = 0; index < this._generatedMappings.length; ++index) {\n      var mapping = this._generatedMappings[index];\n\n      // Mappings do not contain a field for the last generated columnt. We\n      // can come up with an optimistic estimate, however, by assuming that\n      // mappings are contiguous (i.e. given two consecutive mappings, the\n      // first mapping ends where the second one starts).\n      if (index + 1 < this._generatedMappings.length) {\n        var nextMapping = this._generatedMappings[index + 1];\n\n        if (mapping.generatedLine === nextMapping.generatedLine) {\n          mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n          continue;\n        }\n      }\n\n      // The last mapping for each line spans the entire line.\n      mapping.lastGeneratedColumn = Infinity;\n    }\n  };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.  The line number\n *     is 1-based.\n *   - column: The column number in the generated source.  The column\n *     number is 0-based.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the original source, or null.  The\n *     column number is 0-based.\n *   - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n  function SourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util.getArg(aArgs, 'line'),\n      generatedColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._generatedMappings,\n      \"generatedLine\",\n      \"generatedColumn\",\n      util.compareByGeneratedPositionsDeflated,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._generatedMappings[index];\n\n      if (mapping.generatedLine === needle.generatedLine) {\n        var source = util.getArg(mapping, 'source', null);\n        if (source !== null) {\n          source = this._sources.at(source);\n          source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);\n        }\n        var name = util.getArg(mapping, 'name', null);\n        if (name !== null) {\n          name = this._names.at(name);\n        }\n        return {\n          source: source,\n          line: util.getArg(mapping, 'originalLine', null),\n          column: util.getArg(mapping, 'originalColumn', null),\n          name: name\n        };\n      }\n    }\n\n    return {\n      source: null,\n      line: null,\n      column: null,\n      name: null\n    };\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n  function BasicSourceMapConsumer_hasContentsOfAllSources() {\n    if (!this.sourcesContent) {\n      return false;\n    }\n    return this.sourcesContent.length >= this._sources.size() &&\n      !this.sourcesContent.some(function (sc) { return sc == null; });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor =\n  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    if (!this.sourcesContent) {\n      return null;\n    }\n\n    var index = this._findSourceIndex(aSource);\n    if (index >= 0) {\n      return this.sourcesContent[index];\n    }\n\n    var relativeSource = aSource;\n    if (this.sourceRoot != null) {\n      relativeSource = util.relative(this.sourceRoot, relativeSource);\n    }\n\n    var url;\n    if (this.sourceRoot != null\n        && (url = util.urlParse(this.sourceRoot))) {\n      // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n      // many users. We can help them out when they expect file:// URIs to\n      // behave like it would if they were running a local HTTP server. See\n      // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n      var fileUriAbsPath = relativeSource.replace(/^file:\\/\\//, \"\");\n      if (url.scheme == \"file\"\n          && this._sources.has(fileUriAbsPath)) {\n        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n      }\n\n      if ((!url.path || url.path == \"/\")\n          && this._sources.has(\"/\" + relativeSource)) {\n        return this.sourcesContent[this._sources.indexOf(\"/\" + relativeSource)];\n      }\n    }\n\n    // This function is used recursively from\n    // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n    // don't want to throw if we can't find the source - we just want to\n    // return null, so we provide a flag to exit gracefully.\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + relativeSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number\n *     is 1-based.\n *   - column: The column number in the original source.  The column\n *     number is 0-based.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the generated source, or null.\n *     The column number is 0-based.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n  function SourceMapConsumer_generatedPositionFor(aArgs) {\n    var source = util.getArg(aArgs, 'source');\n    source = this._findSourceIndex(source);\n    if (source < 0) {\n      return {\n        line: null,\n        column: null,\n        lastColumn: null\n      };\n    }\n\n    var needle = {\n      source: source,\n      originalLine: util.getArg(aArgs, 'line'),\n      originalColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._originalMappings,\n      \"originalLine\",\n      \"originalColumn\",\n      util.compareByOriginalPositions,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (mapping.source === needle.source) {\n        return {\n          line: util.getArg(mapping, 'generatedLine', null),\n          column: util.getArg(mapping, 'generatedColumn', null),\n          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n        };\n      }\n    }\n\n    return {\n      line: null,\n      column: null,\n      lastColumn: null\n    };\n  };\n\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The first parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - file: Optional. The generated file this source map is associated with.\n *   - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n *   - offset: The offset into the original specified at which this section\n *       begins to apply, defined as an object with a \"line\" and \"column\"\n *       field.\n *   - map: A source map definition. This source map could also be indexed,\n *       but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n *  {\n *    version : 3,\n *    file: \"app.js\",\n *    sections: [{\n *      offset: {line:100, column:10},\n *      map: {\n *        version : 3,\n *        file: \"section.js\",\n *        sources: [\"foo.js\", \"bar.js\"],\n *        names: [\"src\", \"maps\", \"are\", \"fun\"],\n *        mappings: \"AAAA,E;;ABCDE;\"\n *      }\n *    }],\n *  }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found.  This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  var version = util.getArg(sourceMap, 'version');\n  var sections = util.getArg(sourceMap, 'sections');\n\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n\n  var lastOffset = {\n    line: -1,\n    column: 0\n  };\n  this._sections = sections.map(function (s) {\n    if (s.url) {\n      // The url field will require support for asynchronicity.\n      // See https://github.com/mozilla/source-map/issues/16\n      throw new Error('Support for url field in sections not implemented.');\n    }\n    var offset = util.getArg(s, 'offset');\n    var offsetLine = util.getArg(offset, 'line');\n    var offsetColumn = util.getArg(offset, 'column');\n\n    if (offsetLine < lastOffset.line ||\n        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n      throw new Error('Section offsets must be ordered and non-overlapping.');\n    }\n    lastOffset = offset;\n\n    return {\n      generatedOffset: {\n        // The offset fields are 0-based, but we use 1-based indices when\n        // encoding/decoding from VLQ.\n        generatedLine: offsetLine + 1,\n        generatedColumn: offsetColumn + 1\n      },\n      consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)\n    }\n  });\n}\n\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    var sources = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n        sources.push(this._sections[i].consumer.sources[j]);\n      }\n    }\n    return sources;\n  }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.  The line number\n *     is 1-based.\n *   - column: The column number in the generated source.  The column\n *     number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the original source, or null.  The\n *     column number is 0-based.\n *   - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n  function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util.getArg(aArgs, 'line'),\n      generatedColumn: util.getArg(aArgs, 'column')\n    };\n\n    // Find the section containing the generated position we're trying to map\n    // to an original position.\n    var sectionIndex = binarySearch.search(needle, this._sections,\n      function(needle, section) {\n        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n        if (cmp) {\n          return cmp;\n        }\n\n        return (needle.generatedColumn -\n                section.generatedOffset.generatedColumn);\n      });\n    var section = this._sections[sectionIndex];\n\n    if (!section) {\n      return {\n        source: null,\n        line: null,\n        column: null,\n        name: null\n      };\n    }\n\n    return section.consumer.originalPositionFor({\n      line: needle.generatedLine -\n        (section.generatedOffset.generatedLine - 1),\n      column: needle.generatedColumn -\n        (section.generatedOffset.generatedLine === needle.generatedLine\n         ? section.generatedOffset.generatedColumn - 1\n         : 0),\n      bias: aArgs.bias\n    });\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n  function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n    return this._sections.every(function (s) {\n      return s.consumer.hasContentsOfAllSources();\n    });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor =\n  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      var content = section.consumer.sourceContentFor(aSource, true);\n      if (content || content === '') {\n        return content;\n      }\n    }\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number\n *     is 1-based.\n *   - column: The column number in the original source.  The column\n *     number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *     line number is 1-based. \n *   - column: The column number in the generated source, or null.\n *     The column number is 0-based.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n  function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      // Only consider this section if the requested source is in the list of\n      // sources of the consumer.\n      if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {\n        continue;\n      }\n      var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n      if (generatedPosition) {\n        var ret = {\n          line: generatedPosition.line +\n            (section.generatedOffset.generatedLine - 1),\n          column: generatedPosition.column +\n            (section.generatedOffset.generatedLine === generatedPosition.line\n             ? section.generatedOffset.generatedColumn - 1\n             : 0)\n        };\n        return ret;\n      }\n    }\n\n    return {\n      line: null,\n      column: null\n    };\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings =\n  function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    this.__generatedMappings = [];\n    this.__originalMappings = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n      var sectionMappings = section.consumer._generatedMappings;\n      for (var j = 0; j < sectionMappings.length; j++) {\n        var mapping = sectionMappings[j];\n\n        var source = section.consumer._sources.at(mapping.source);\n        if(source !== null) {\n          source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);\n        }\n        this._sources.add(source);\n        source = this._sources.indexOf(source);\n\n        var name = null;\n        if (mapping.name) {\n          name = section.consumer._names.at(mapping.name);\n          this._names.add(name);\n          name = this._names.indexOf(name);\n        }\n\n        // The mappings coming from the consumer for the section have\n        // generated positions relative to the start of the section, so we\n        // need to offset them to be relative to the start of the concatenated\n        // generated file.\n        var adjustedMapping = {\n          source: source,\n          generatedLine: mapping.generatedLine +\n            (section.generatedOffset.generatedLine - 1),\n          generatedColumn: mapping.generatedColumn +\n            (section.generatedOffset.generatedLine === mapping.generatedLine\n            ? section.generatedOffset.generatedColumn - 1\n            : 0),\n          originalLine: mapping.originalLine,\n          originalColumn: mapping.originalColumn,\n          name: name\n        };\n\n        this.__generatedMappings.push(adjustedMapping);\n        if (typeof adjustedMapping.originalLine === 'number') {\n          this.__originalMappings.push(adjustedMapping);\n        }\n      }\n    }\n\n    quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n    quickSort(this.__originalMappings, util.compareByOriginalPositions);\n  };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;\nvar util = require('./util');\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n *        generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n  this.children = [];\n  this.sourceContents = {};\n  this.line = aLine == null ? null : aLine;\n  this.column = aColumn == null ? null : aColumn;\n  this.source = aSource == null ? null : aSource;\n  this.name = aName == null ? null : aName;\n  this[isSourceNode] = true;\n  if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n *        SourceMapConsumer should be relative to.\n */\nSourceNode.fromStringWithSourceMap =\n  function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n    // The SourceNode we want to fill with the generated code\n    // and the SourceMap\n    var node = new SourceNode();\n\n    // All even indices of this array are one line of the generated code,\n    // while all odd indices are the newlines between two adjacent lines\n    // (since `REGEX_NEWLINE` captures its match).\n    // Processed fragments are accessed by calling `shiftNextLine`.\n    var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n    var remainingLinesIndex = 0;\n    var shiftNextLine = function() {\n      var lineContents = getNextLine();\n      // The last line of a file might not have a newline.\n      var newLine = getNextLine() || \"\";\n      return lineContents + newLine;\n\n      function getNextLine() {\n        return remainingLinesIndex < remainingLines.length ?\n            remainingLines[remainingLinesIndex++] : undefined;\n      }\n    };\n\n    // We need to remember the position of \"remainingLines\"\n    var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\n    // The generate SourceNodes we need a code range.\n    // To extract it current and last mapping is used.\n    // Here we store the last mapping.\n    var lastMapping = null;\n\n    aSourceMapConsumer.eachMapping(function (mapping) {\n      if (lastMapping !== null) {\n        // We add the code from \"lastMapping\" to \"mapping\":\n        // First check if there is a new line in between.\n        if (lastGeneratedLine < mapping.generatedLine) {\n          // Associate first line with \"lastMapping\"\n          addMappingWithCode(lastMapping, shiftNextLine());\n          lastGeneratedLine++;\n          lastGeneratedColumn = 0;\n          // The remaining code is added without mapping\n        } else {\n          // There is no new line in between.\n          // Associate the code between \"lastGeneratedColumn\" and\n          // \"mapping.generatedColumn\" with \"lastMapping\"\n          var nextLine = remainingLines[remainingLinesIndex] || '';\n          var code = nextLine.substr(0, mapping.generatedColumn -\n                                        lastGeneratedColumn);\n          remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n                                              lastGeneratedColumn);\n          lastGeneratedColumn = mapping.generatedColumn;\n          addMappingWithCode(lastMapping, code);\n          // No more remaining code, continue\n          lastMapping = mapping;\n          return;\n        }\n      }\n      // We add the generated code until the first mapping\n      // to the SourceNode without any mapping.\n      // Each line is added as separate string.\n      while (lastGeneratedLine < mapping.generatedLine) {\n        node.add(shiftNextLine());\n        lastGeneratedLine++;\n      }\n      if (lastGeneratedColumn < mapping.generatedColumn) {\n        var nextLine = remainingLines[remainingLinesIndex] || '';\n        node.add(nextLine.substr(0, mapping.generatedColumn));\n        remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n        lastGeneratedColumn = mapping.generatedColumn;\n      }\n      lastMapping = mapping;\n    }, this);\n    // We have processed all mappings.\n    if (remainingLinesIndex < remainingLines.length) {\n      if (lastMapping) {\n        // Associate the remaining code in the current line with \"lastMapping\"\n        addMappingWithCode(lastMapping, shiftNextLine());\n      }\n      // and add the remaining lines without any mapping\n      node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n    }\n\n    // Copy sourcesContent into SourceNode\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        if (aRelativePath != null) {\n          sourceFile = util.join(aRelativePath, sourceFile);\n        }\n        node.setSourceContent(sourceFile, content);\n      }\n    });\n\n    return node;\n\n    function addMappingWithCode(mapping, code) {\n      if (mapping === null || mapping.source === undefined) {\n        node.add(code);\n      } else {\n        var source = aRelativePath\n          ? util.join(aRelativePath, mapping.source)\n          : mapping.source;\n        node.add(new SourceNode(mapping.originalLine,\n                                mapping.originalColumn,\n                                source,\n                                code,\n                                mapping.name));\n      }\n    }\n  };\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.add = function SourceNode_add(aChunk) {\n  if (Array.isArray(aChunk)) {\n    aChunk.forEach(function (chunk) {\n      this.add(chunk);\n    }, this);\n  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    if (aChunk) {\n      this.children.push(aChunk);\n    }\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\n  }\n  return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n  if (Array.isArray(aChunk)) {\n    for (var i = aChunk.length-1; i >= 0; i--) {\n      this.prepend(aChunk[i]);\n    }\n  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    this.children.unshift(aChunk);\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\n  }\n  return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n  var chunk;\n  for (var i = 0, len = this.children.length; i < len; i++) {\n    chunk = this.children[i];\n    if (chunk[isSourceNode]) {\n      chunk.walk(aFn);\n    }\n    else {\n      if (chunk !== '') {\n        aFn(chunk, { source: this.source,\n                     line: this.line,\n                     column: this.column,\n                     name: this.name });\n      }\n    }\n  }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode.prototype.join = function SourceNode_join(aSep) {\n  var newChildren;\n  var i;\n  var len = this.children.length;\n  if (len > 0) {\n    newChildren = [];\n    for (i = 0; i < len-1; i++) {\n      newChildren.push(this.children[i]);\n      newChildren.push(aSep);\n    }\n    newChildren.push(this.children[i]);\n    this.children = newChildren;\n  }\n  return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n  var lastChild = this.children[this.children.length - 1];\n  if (lastChild[isSourceNode]) {\n    lastChild.replaceRight(aPattern, aReplacement);\n  }\n  else if (typeof lastChild === 'string') {\n    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n  }\n  else {\n    this.children.push(''.replace(aPattern, aReplacement));\n  }\n  return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode.prototype.setSourceContent =\n  function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n    this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n  };\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walkSourceContents =\n  function SourceNode_walkSourceContents(aFn) {\n    for (var i = 0, len = this.children.length; i < len; i++) {\n      if (this.children[i][isSourceNode]) {\n        this.children[i].walkSourceContents(aFn);\n      }\n    }\n\n    var sources = Object.keys(this.sourceContents);\n    for (var i = 0, len = sources.length; i < len; i++) {\n      aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n    }\n  };\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode.prototype.toString = function SourceNode_toString() {\n  var str = \"\";\n  this.walk(function (chunk) {\n    str += chunk;\n  });\n  return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n  var generated = {\n    code: \"\",\n    line: 1,\n    column: 0\n  };\n  var map = new SourceMapGenerator(aArgs);\n  var sourceMappingActive = false;\n  var lastOriginalSource = null;\n  var lastOriginalLine = null;\n  var lastOriginalColumn = null;\n  var lastOriginalName = null;\n  this.walk(function (chunk, original) {\n    generated.code += chunk;\n    if (original.source !== null\n        && original.line !== null\n        && original.column !== null) {\n      if(lastOriginalSource !== original.source\n         || lastOriginalLine !== original.line\n         || lastOriginalColumn !== original.column\n         || lastOriginalName !== original.name) {\n        map.addMapping({\n          source: original.source,\n          original: {\n            line: original.line,\n            column: original.column\n          },\n          generated: {\n            line: generated.line,\n            column: generated.column\n          },\n          name: original.name\n        });\n      }\n      lastOriginalSource = original.source;\n      lastOriginalLine = original.line;\n      lastOriginalColumn = original.column;\n      lastOriginalName = original.name;\n      sourceMappingActive = true;\n    } else if (sourceMappingActive) {\n      map.addMapping({\n        generated: {\n          line: generated.line,\n          column: generated.column\n        }\n      });\n      lastOriginalSource = null;\n      sourceMappingActive = false;\n    }\n    for (var idx = 0, length = chunk.length; idx < length; idx++) {\n      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n        generated.line++;\n        generated.column = 0;\n        // Mappings end at eol\n        if (idx + 1 === length) {\n          lastOriginalSource = null;\n          sourceMappingActive = false;\n        } else if (sourceMappingActive) {\n          map.addMapping({\n            source: original.source,\n            original: {\n              line: original.line,\n              column: original.column\n            },\n            generated: {\n              line: generated.line,\n              column: generated.column\n            },\n            name: original.name\n          });\n        }\n      } else {\n        generated.column++;\n      }\n    }\n  });\n  this.walkSourceContents(function (sourceFile, sourceContent) {\n    map.setSourceContent(sourceFile, sourceContent);\n  });\n\n  return { code: generated.code, map: map };\n};\n\nexports.SourceNode = SourceNode;\n","/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;\nexports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;\nexports.SourceNode = require('./lib/source-node').SourceNode;\n","/**\n* @vue/compiler-core v3.5.18\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar shared = require('@vue/shared');\nvar decode_js = require('entities/lib/decode.js');\nvar parser = require('@babel/parser');\nvar estreeWalker = require('estree-walker');\nvar sourceMapJs = require('source-map-js');\n\nconst FRAGMENT = Symbol(``);\nconst TELEPORT = Symbol(``);\nconst SUSPENSE = Symbol(``);\nconst KEEP_ALIVE = Symbol(``);\nconst BASE_TRANSITION = Symbol(\n  ``\n);\nconst OPEN_BLOCK = Symbol(``);\nconst CREATE_BLOCK = Symbol(``);\nconst CREATE_ELEMENT_BLOCK = Symbol(\n  ``\n);\nconst CREATE_VNODE = Symbol(``);\nconst CREATE_ELEMENT_VNODE = Symbol(\n  ``\n);\nconst CREATE_COMMENT = Symbol(\n  ``\n);\nconst CREATE_TEXT = Symbol(\n  ``\n);\nconst CREATE_STATIC = Symbol(\n  ``\n);\nconst RESOLVE_COMPONENT = Symbol(\n  ``\n);\nconst RESOLVE_DYNAMIC_COMPONENT = Symbol(\n  ``\n);\nconst RESOLVE_DIRECTIVE = Symbol(\n  ``\n);\nconst RESOLVE_FILTER = Symbol(\n  ``\n);\nconst WITH_DIRECTIVES = Symbol(\n  ``\n);\nconst RENDER_LIST = Symbol(``);\nconst RENDER_SLOT = Symbol(``);\nconst CREATE_SLOTS = Symbol(``);\nconst TO_DISPLAY_STRING = Symbol(\n  ``\n);\nconst MERGE_PROPS = Symbol(``);\nconst NORMALIZE_CLASS = Symbol(\n  ``\n);\nconst NORMALIZE_STYLE = Symbol(\n  ``\n);\nconst NORMALIZE_PROPS = Symbol(\n  ``\n);\nconst GUARD_REACTIVE_PROPS = Symbol(\n  ``\n);\nconst TO_HANDLERS = Symbol(``);\nconst CAMELIZE = Symbol(``);\nconst CAPITALIZE = Symbol(``);\nconst TO_HANDLER_KEY = Symbol(\n  ``\n);\nconst SET_BLOCK_TRACKING = Symbol(\n  ``\n);\nconst PUSH_SCOPE_ID = Symbol(``);\nconst POP_SCOPE_ID = Symbol(``);\nconst WITH_CTX = Symbol(``);\nconst UNREF = Symbol(``);\nconst IS_REF = Symbol(``);\nconst WITH_MEMO = Symbol(``);\nconst IS_MEMO_SAME = Symbol(``);\nconst helperNameMap = {\n  [FRAGMENT]: `Fragment`,\n  [TELEPORT]: `Teleport`,\n  [SUSPENSE]: `Suspense`,\n  [KEEP_ALIVE]: `KeepAlive`,\n  [BASE_TRANSITION]: `BaseTransition`,\n  [OPEN_BLOCK]: `openBlock`,\n  [CREATE_BLOCK]: `createBlock`,\n  [CREATE_ELEMENT_BLOCK]: `createElementBlock`,\n  [CREATE_VNODE]: `createVNode`,\n  [CREATE_ELEMENT_VNODE]: `createElementVNode`,\n  [CREATE_COMMENT]: `createCommentVNode`,\n  [CREATE_TEXT]: `createTextVNode`,\n  [CREATE_STATIC]: `createStaticVNode`,\n  [RESOLVE_COMPONENT]: `resolveComponent`,\n  [RESOLVE_DYNAMIC_COMPONENT]: `resolveDynamicComponent`,\n  [RESOLVE_DIRECTIVE]: `resolveDirective`,\n  [RESOLVE_FILTER]: `resolveFilter`,\n  [WITH_DIRECTIVES]: `withDirectives`,\n  [RENDER_LIST]: `renderList`,\n  [RENDER_SLOT]: `renderSlot`,\n  [CREATE_SLOTS]: `createSlots`,\n  [TO_DISPLAY_STRING]: `toDisplayString`,\n  [MERGE_PROPS]: `mergeProps`,\n  [NORMALIZE_CLASS]: `normalizeClass`,\n  [NORMALIZE_STYLE]: `normalizeStyle`,\n  [NORMALIZE_PROPS]: `normalizeProps`,\n  [GUARD_REACTIVE_PROPS]: `guardReactiveProps`,\n  [TO_HANDLERS]: `toHandlers`,\n  [CAMELIZE]: `camelize`,\n  [CAPITALIZE]: `capitalize`,\n  [TO_HANDLER_KEY]: `toHandlerKey`,\n  [SET_BLOCK_TRACKING]: `setBlockTracking`,\n  [PUSH_SCOPE_ID]: `pushScopeId`,\n  [POP_SCOPE_ID]: `popScopeId`,\n  [WITH_CTX]: `withCtx`,\n  [UNREF]: `unref`,\n  [IS_REF]: `isRef`,\n  [WITH_MEMO]: `withMemo`,\n  [IS_MEMO_SAME]: `isMemoSame`\n};\nfunction registerRuntimeHelpers(helpers) {\n  Object.getOwnPropertySymbols(helpers).forEach((s) => {\n    helperNameMap[s] = helpers[s];\n  });\n}\n\nconst Namespaces = {\n  \"HTML\": 0,\n  \"0\": \"HTML\",\n  \"SVG\": 1,\n  \"1\": \"SVG\",\n  \"MATH_ML\": 2,\n  \"2\": \"MATH_ML\"\n};\nconst NodeTypes = {\n  \"ROOT\": 0,\n  \"0\": \"ROOT\",\n  \"ELEMENT\": 1,\n  \"1\": \"ELEMENT\",\n  \"TEXT\": 2,\n  \"2\": \"TEXT\",\n  \"COMMENT\": 3,\n  \"3\": \"COMMENT\",\n  \"SIMPLE_EXPRESSION\": 4,\n  \"4\": \"SIMPLE_EXPRESSION\",\n  \"INTERPOLATION\": 5,\n  \"5\": \"INTERPOLATION\",\n  \"ATTRIBUTE\": 6,\n  \"6\": \"ATTRIBUTE\",\n  \"DIRECTIVE\": 7,\n  \"7\": \"DIRECTIVE\",\n  \"COMPOUND_EXPRESSION\": 8,\n  \"8\": \"COMPOUND_EXPRESSION\",\n  \"IF\": 9,\n  \"9\": \"IF\",\n  \"IF_BRANCH\": 10,\n  \"10\": \"IF_BRANCH\",\n  \"FOR\": 11,\n  \"11\": \"FOR\",\n  \"TEXT_CALL\": 12,\n  \"12\": \"TEXT_CALL\",\n  \"VNODE_CALL\": 13,\n  \"13\": \"VNODE_CALL\",\n  \"JS_CALL_EXPRESSION\": 14,\n  \"14\": \"JS_CALL_EXPRESSION\",\n  \"JS_OBJECT_EXPRESSION\": 15,\n  \"15\": \"JS_OBJECT_EXPRESSION\",\n  \"JS_PROPERTY\": 16,\n  \"16\": \"JS_PROPERTY\",\n  \"JS_ARRAY_EXPRESSION\": 17,\n  \"17\": \"JS_ARRAY_EXPRESSION\",\n  \"JS_FUNCTION_EXPRESSION\": 18,\n  \"18\": \"JS_FUNCTION_EXPRESSION\",\n  \"JS_CONDITIONAL_EXPRESSION\": 19,\n  \"19\": \"JS_CONDITIONAL_EXPRESSION\",\n  \"JS_CACHE_EXPRESSION\": 20,\n  \"20\": \"JS_CACHE_EXPRESSION\",\n  \"JS_BLOCK_STATEMENT\": 21,\n  \"21\": \"JS_BLOCK_STATEMENT\",\n  \"JS_TEMPLATE_LITERAL\": 22,\n  \"22\": \"JS_TEMPLATE_LITERAL\",\n  \"JS_IF_STATEMENT\": 23,\n  \"23\": \"JS_IF_STATEMENT\",\n  \"JS_ASSIGNMENT_EXPRESSION\": 24,\n  \"24\": \"JS_ASSIGNMENT_EXPRESSION\",\n  \"JS_SEQUENCE_EXPRESSION\": 25,\n  \"25\": \"JS_SEQUENCE_EXPRESSION\",\n  \"JS_RETURN_STATEMENT\": 26,\n  \"26\": \"JS_RETURN_STATEMENT\"\n};\nconst ElementTypes = {\n  \"ELEMENT\": 0,\n  \"0\": \"ELEMENT\",\n  \"COMPONENT\": 1,\n  \"1\": \"COMPONENT\",\n  \"SLOT\": 2,\n  \"2\": \"SLOT\",\n  \"TEMPLATE\": 3,\n  \"3\": \"TEMPLATE\"\n};\nconst ConstantTypes = {\n  \"NOT_CONSTANT\": 0,\n  \"0\": \"NOT_CONSTANT\",\n  \"CAN_SKIP_PATCH\": 1,\n  \"1\": \"CAN_SKIP_PATCH\",\n  \"CAN_CACHE\": 2,\n  \"2\": \"CAN_CACHE\",\n  \"CAN_STRINGIFY\": 3,\n  \"3\": \"CAN_STRINGIFY\"\n};\nconst locStub = {\n  start: { line: 1, column: 1, offset: 0 },\n  end: { line: 1, column: 1, offset: 0 },\n  source: \"\"\n};\nfunction createRoot(children, source = \"\") {\n  return {\n    type: 0,\n    source,\n    children,\n    helpers: /* @__PURE__ */ new Set(),\n    components: [],\n    directives: [],\n    hoists: [],\n    imports: [],\n    cached: [],\n    temps: 0,\n    codegenNode: void 0,\n    loc: locStub\n  };\n}\nfunction createVNodeCall(context, tag, props, children, patchFlag, dynamicProps, directives, isBlock = false, disableTracking = false, isComponent = false, loc = locStub) {\n  if (context) {\n    if (isBlock) {\n      context.helper(OPEN_BLOCK);\n      context.helper(getVNodeBlockHelper(context.inSSR, isComponent));\n    } else {\n      context.helper(getVNodeHelper(context.inSSR, isComponent));\n    }\n    if (directives) {\n      context.helper(WITH_DIRECTIVES);\n    }\n  }\n  return {\n    type: 13,\n    tag,\n    props,\n    children,\n    patchFlag,\n    dynamicProps,\n    directives,\n    isBlock,\n    disableTracking,\n    isComponent,\n    loc\n  };\n}\nfunction createArrayExpression(elements, loc = locStub) {\n  return {\n    type: 17,\n    loc,\n    elements\n  };\n}\nfunction createObjectExpression(properties, loc = locStub) {\n  return {\n    type: 15,\n    loc,\n    properties\n  };\n}\nfunction createObjectProperty(key, value) {\n  return {\n    type: 16,\n    loc: locStub,\n    key: shared.isString(key) ? createSimpleExpression(key, true) : key,\n    value\n  };\n}\nfunction createSimpleExpression(content, isStatic = false, loc = locStub, constType = 0) {\n  return {\n    type: 4,\n    loc,\n    content,\n    isStatic,\n    constType: isStatic ? 3 : constType\n  };\n}\nfunction createInterpolation(content, loc) {\n  return {\n    type: 5,\n    loc,\n    content: shared.isString(content) ? createSimpleExpression(content, false, loc) : content\n  };\n}\nfunction createCompoundExpression(children, loc = locStub) {\n  return {\n    type: 8,\n    loc,\n    children\n  };\n}\nfunction createCallExpression(callee, args = [], loc = locStub) {\n  return {\n    type: 14,\n    loc,\n    callee,\n    arguments: args\n  };\n}\nfunction createFunctionExpression(params, returns = void 0, newline = false, isSlot = false, loc = locStub) {\n  return {\n    type: 18,\n    params,\n    returns,\n    newline,\n    isSlot,\n    loc\n  };\n}\nfunction createConditionalExpression(test, consequent, alternate, newline = true) {\n  return {\n    type: 19,\n    test,\n    consequent,\n    alternate,\n    newline,\n    loc: locStub\n  };\n}\nfunction createCacheExpression(index, value, needPauseTracking = false, inVOnce = false) {\n  return {\n    type: 20,\n    index,\n    value,\n    needPauseTracking,\n    inVOnce,\n    needArraySpread: false,\n    loc: locStub\n  };\n}\nfunction createBlockStatement(body) {\n  return {\n    type: 21,\n    body,\n    loc: locStub\n  };\n}\nfunction createTemplateLiteral(elements) {\n  return {\n    type: 22,\n    elements,\n    loc: locStub\n  };\n}\nfunction createIfStatement(test, consequent, alternate) {\n  return {\n    type: 23,\n    test,\n    consequent,\n    alternate,\n    loc: locStub\n  };\n}\nfunction createAssignmentExpression(left, right) {\n  return {\n    type: 24,\n    left,\n    right,\n    loc: locStub\n  };\n}\nfunction createSequenceExpression(expressions) {\n  return {\n    type: 25,\n    expressions,\n    loc: locStub\n  };\n}\nfunction createReturnStatement(returns) {\n  return {\n    type: 26,\n    returns,\n    loc: locStub\n  };\n}\nfunction getVNodeHelper(ssr, isComponent) {\n  return ssr || isComponent ? CREATE_VNODE : CREATE_ELEMENT_VNODE;\n}\nfunction getVNodeBlockHelper(ssr, isComponent) {\n  return ssr || isComponent ? CREATE_BLOCK : CREATE_ELEMENT_BLOCK;\n}\nfunction convertToBlock(node, { helper, removeHelper, inSSR }) {\n  if (!node.isBlock) {\n    node.isBlock = true;\n    removeHelper(getVNodeHelper(inSSR, node.isComponent));\n    helper(OPEN_BLOCK);\n    helper(getVNodeBlockHelper(inSSR, node.isComponent));\n  }\n}\n\nconst defaultDelimitersOpen = new Uint8Array([123, 123]);\nconst defaultDelimitersClose = new Uint8Array([125, 125]);\nfunction isTagStartChar(c) {\n  return c >= 97 && c <= 122 || c >= 65 && c <= 90;\n}\nfunction isWhitespace(c) {\n  return c === 32 || c === 10 || c === 9 || c === 12 || c === 13;\n}\nfunction isEndOfTagSection(c) {\n  return c === 47 || c === 62 || isWhitespace(c);\n}\nfunction toCharCodes(str) {\n  const ret = new Uint8Array(str.length);\n  for (let i = 0; i < str.length; i++) {\n    ret[i] = str.charCodeAt(i);\n  }\n  return ret;\n}\nconst Sequences = {\n  Cdata: new Uint8Array([67, 68, 65, 84, 65, 91]),\n  // CDATA[\n  CdataEnd: new Uint8Array([93, 93, 62]),\n  // ]]>\n  CommentEnd: new Uint8Array([45, 45, 62]),\n  // `-->`\n  ScriptEnd: new Uint8Array([60, 47, 115, 99, 114, 105, 112, 116]),\n  // `<\\/script`\n  StyleEnd: new Uint8Array([60, 47, 115, 116, 121, 108, 101]),\n  // `</style`\n  TitleEnd: new Uint8Array([60, 47, 116, 105, 116, 108, 101]),\n  // `</title`\n  TextareaEnd: new Uint8Array([\n    60,\n    47,\n    116,\n    101,\n    120,\n    116,\n    97,\n    114,\n    101,\n    97\n  ])\n  // `</textarea\n};\nclass Tokenizer {\n  constructor(stack, cbs) {\n    this.stack = stack;\n    this.cbs = cbs;\n    /** The current state the tokenizer is in. */\n    this.state = 1;\n    /** The read buffer. */\n    this.buffer = \"\";\n    /** The beginning of the section that is currently being read. */\n    this.sectionStart = 0;\n    /** The index within the buffer that we are currently looking at. */\n    this.index = 0;\n    /** The start of the last entity. */\n    this.entityStart = 0;\n    /** Some behavior, eg. when decoding entities, is done while we are in another state. This keeps track of the other state type. */\n    this.baseState = 1;\n    /** For special parsing behavior inside of script and style tags. */\n    this.inRCDATA = false;\n    /** For disabling RCDATA tags handling */\n    this.inXML = false;\n    /** For disabling interpolation parsing in v-pre */\n    this.inVPre = false;\n    /** Record newline positions for fast line / column calculation */\n    this.newlines = [];\n    this.mode = 0;\n    this.delimiterOpen = defaultDelimitersOpen;\n    this.delimiterClose = defaultDelimitersClose;\n    this.delimiterIndex = -1;\n    this.currentSequence = void 0;\n    this.sequenceIndex = 0;\n    {\n      this.entityDecoder = new decode_js.EntityDecoder(\n        decode_js.htmlDecodeTree,\n        (cp, consumed) => this.emitCodePoint(cp, consumed)\n      );\n    }\n  }\n  get inSFCRoot() {\n    return this.mode === 2 && this.stack.length === 0;\n  }\n  reset() {\n    this.state = 1;\n    this.mode = 0;\n    this.buffer = \"\";\n    this.sectionStart = 0;\n    this.index = 0;\n    this.baseState = 1;\n    this.inRCDATA = false;\n    this.currentSequence = void 0;\n    this.newlines.length = 0;\n    this.delimiterOpen = defaultDelimitersOpen;\n    this.delimiterClose = defaultDelimitersClose;\n  }\n  /**\n   * Generate Position object with line / column information using recorded\n   * newline positions. We know the index is always going to be an already\n   * processed index, so all the newlines up to this index should have been\n   * recorded.\n   */\n  getPos(index) {\n    let line = 1;\n    let column = index + 1;\n    for (let i = this.newlines.length - 1; i >= 0; i--) {\n      const newlineIndex = this.newlines[i];\n      if (index > newlineIndex) {\n        line = i + 2;\n        column = index - newlineIndex;\n        break;\n      }\n    }\n    return {\n      column,\n      line,\n      offset: index\n    };\n  }\n  peek() {\n    return this.buffer.charCodeAt(this.index + 1);\n  }\n  stateText(c) {\n    if (c === 60) {\n      if (this.index > this.sectionStart) {\n        this.cbs.ontext(this.sectionStart, this.index);\n      }\n      this.state = 5;\n      this.sectionStart = this.index;\n    } else if (c === 38) {\n      this.startEntity();\n    } else if (!this.inVPre && c === this.delimiterOpen[0]) {\n      this.state = 2;\n      this.delimiterIndex = 0;\n      this.stateInterpolationOpen(c);\n    }\n  }\n  stateInterpolationOpen(c) {\n    if (c === this.delimiterOpen[this.delimiterIndex]) {\n      if (this.delimiterIndex === this.delimiterOpen.length - 1) {\n        const start = this.index + 1 - this.delimiterOpen.length;\n        if (start > this.sectionStart) {\n          this.cbs.ontext(this.sectionStart, start);\n        }\n        this.state = 3;\n        this.sectionStart = start;\n      } else {\n        this.delimiterIndex++;\n      }\n    } else if (this.inRCDATA) {\n      this.state = 32;\n      this.stateInRCDATA(c);\n    } else {\n      this.state = 1;\n      this.stateText(c);\n    }\n  }\n  stateInterpolation(c) {\n    if (c === this.delimiterClose[0]) {\n      this.state = 4;\n      this.delimiterIndex = 0;\n      this.stateInterpolationClose(c);\n    }\n  }\n  stateInterpolationClose(c) {\n    if (c === this.delimiterClose[this.delimiterIndex]) {\n      if (this.delimiterIndex === this.delimiterClose.length - 1) {\n        this.cbs.oninterpolation(this.sectionStart, this.index + 1);\n        if (this.inRCDATA) {\n          this.state = 32;\n        } else {\n          this.state = 1;\n        }\n        this.sectionStart = this.index + 1;\n      } else {\n        this.delimiterIndex++;\n      }\n    } else {\n      this.state = 3;\n      this.stateInterpolation(c);\n    }\n  }\n  stateSpecialStartSequence(c) {\n    const isEnd = this.sequenceIndex === this.currentSequence.length;\n    const isMatch = isEnd ? (\n      // If we are at the end of the sequence, make sure the tag name has ended\n      isEndOfTagSection(c)\n    ) : (\n      // Otherwise, do a case-insensitive comparison\n      (c | 32) === this.currentSequence[this.sequenceIndex]\n    );\n    if (!isMatch) {\n      this.inRCDATA = false;\n    } else if (!isEnd) {\n      this.sequenceIndex++;\n      return;\n    }\n    this.sequenceIndex = 0;\n    this.state = 6;\n    this.stateInTagName(c);\n  }\n  /** Look for an end tag. For <title> and <textarea>, also decode entities. */\n  stateInRCDATA(c) {\n    if (this.sequenceIndex === this.currentSequence.length) {\n      if (c === 62 || isWhitespace(c)) {\n        const endOfText = this.index - this.currentSequence.length;\n        if (this.sectionStart < endOfText) {\n          const actualIndex = this.index;\n          this.index = endOfText;\n          this.cbs.ontext(this.sectionStart, endOfText);\n          this.index = actualIndex;\n        }\n        this.sectionStart = endOfText + 2;\n        this.stateInClosingTagName(c);\n        this.inRCDATA = false;\n        return;\n      }\n      this.sequenceIndex = 0;\n    }\n    if ((c | 32) === this.currentSequence[this.sequenceIndex]) {\n      this.sequenceIndex += 1;\n    } else if (this.sequenceIndex === 0) {\n      if (this.currentSequence === Sequences.TitleEnd || this.currentSequence === Sequences.TextareaEnd && !this.inSFCRoot) {\n        if (c === 38) {\n          this.startEntity();\n        } else if (!this.inVPre && c === this.delimiterOpen[0]) {\n          this.state = 2;\n          this.delimiterIndex = 0;\n          this.stateInterpolationOpen(c);\n        }\n      } else if (this.fastForwardTo(60)) {\n        this.sequenceIndex = 1;\n      }\n    } else {\n      this.sequenceIndex = Number(c === 60);\n    }\n  }\n  stateCDATASequence(c) {\n    if (c === Sequences.Cdata[this.sequenceIndex]) {\n      if (++this.sequenceIndex === Sequences.Cdata.length) {\n        this.state = 28;\n        this.currentSequence = Sequences.CdataEnd;\n        this.sequenceIndex = 0;\n        this.sectionStart = this.index + 1;\n      }\n    } else {\n      this.sequenceIndex = 0;\n      this.state = 23;\n      this.stateInDeclaration(c);\n    }\n  }\n  /**\n   * When we wait for one specific character, we can speed things up\n   * by skipping through the buffer until we find it.\n   *\n   * @returns Whether the character was found.\n   */\n  fastForwardTo(c) {\n    while (++this.index < this.buffer.length) {\n      const cc = this.buffer.charCodeAt(this.index);\n      if (cc === 10) {\n        this.newlines.push(this.index);\n      }\n      if (cc === c) {\n        return true;\n      }\n    }\n    this.index = this.buffer.length - 1;\n    return false;\n  }\n  /**\n   * Comments and CDATA end with `-->` and `]]>`.\n   *\n   * Their common qualities are:\n   * - Their end sequences have a distinct character they start with.\n   * - That character is then repeated, so we have to check multiple repeats.\n   * - All characters but the start character of the sequence can be skipped.\n   */\n  stateInCommentLike(c) {\n    if (c === this.currentSequence[this.sequenceIndex]) {\n      if (++this.sequenceIndex === this.currentSequence.length) {\n        if (this.currentSequence === Sequences.CdataEnd) {\n          this.cbs.oncdata(this.sectionStart, this.index - 2);\n        } else {\n          this.cbs.oncomment(this.sectionStart, this.index - 2);\n        }\n        this.sequenceIndex = 0;\n        this.sectionStart = this.index + 1;\n        this.state = 1;\n      }\n    } else if (this.sequenceIndex === 0) {\n      if (this.fastForwardTo(this.currentSequence[0])) {\n        this.sequenceIndex = 1;\n      }\n    } else if (c !== this.currentSequence[this.sequenceIndex - 1]) {\n      this.sequenceIndex = 0;\n    }\n  }\n  startSpecial(sequence, offset) {\n    this.enterRCDATA(sequence, offset);\n    this.state = 31;\n  }\n  enterRCDATA(sequence, offset) {\n    this.inRCDATA = true;\n    this.currentSequence = sequence;\n    this.sequenceIndex = offset;\n  }\n  stateBeforeTagName(c) {\n    if (c === 33) {\n      this.state = 22;\n      this.sectionStart = this.index + 1;\n    } else if (c === 63) {\n      this.state = 24;\n      this.sectionStart = this.index + 1;\n    } else if (isTagStartChar(c)) {\n      this.sectionStart = this.index;\n      if (this.mode === 0) {\n        this.state = 6;\n      } else if (this.inSFCRoot) {\n        this.state = 34;\n      } else if (!this.inXML) {\n        if (c === 116) {\n          this.state = 30;\n        } else {\n          this.state = c === 115 ? 29 : 6;\n        }\n      } else {\n        this.state = 6;\n      }\n    } else if (c === 47) {\n      this.state = 8;\n    } else {\n      this.state = 1;\n      this.stateText(c);\n    }\n  }\n  stateInTagName(c) {\n    if (isEndOfTagSection(c)) {\n      this.handleTagName(c);\n    }\n  }\n  stateInSFCRootTagName(c) {\n    if (isEndOfTagSection(c)) {\n      const tag = this.buffer.slice(this.sectionStart, this.index);\n      if (tag !== \"template\") {\n        this.enterRCDATA(toCharCodes(`</` + tag), 0);\n      }\n      this.handleTagName(c);\n    }\n  }\n  handleTagName(c) {\n    this.cbs.onopentagname(this.sectionStart, this.index);\n    this.sectionStart = -1;\n    this.state = 11;\n    this.stateBeforeAttrName(c);\n  }\n  stateBeforeClosingTagName(c) {\n    if (isWhitespace(c)) ; else if (c === 62) {\n      {\n        this.cbs.onerr(14, this.index);\n      }\n      this.state = 1;\n      this.sectionStart = this.index + 1;\n    } else {\n      this.state = isTagStartChar(c) ? 9 : 27;\n      this.sectionStart = this.index;\n    }\n  }\n  stateInClosingTagName(c) {\n    if (c === 62 || isWhitespace(c)) {\n      this.cbs.onclosetag(this.sectionStart, this.index);\n      this.sectionStart = -1;\n      this.state = 10;\n      this.stateAfterClosingTagName(c);\n    }\n  }\n  stateAfterClosingTagName(c) {\n    if (c === 62) {\n      this.state = 1;\n      this.sectionStart = this.index + 1;\n    }\n  }\n  stateBeforeAttrName(c) {\n    if (c === 62) {\n      this.cbs.onopentagend(this.index);\n      if (this.inRCDATA) {\n        this.state = 32;\n      } else {\n        this.state = 1;\n      }\n      this.sectionStart = this.index + 1;\n    } else if (c === 47) {\n      this.state = 7;\n      if (this.peek() !== 62) {\n        this.cbs.onerr(22, this.index);\n      }\n    } else if (c === 60 && this.peek() === 47) {\n      this.cbs.onopentagend(this.index);\n      this.state = 5;\n      this.sectionStart = this.index;\n    } else if (!isWhitespace(c)) {\n      if (c === 61) {\n        this.cbs.onerr(\n          19,\n          this.index\n        );\n      }\n      this.handleAttrStart(c);\n    }\n  }\n  handleAttrStart(c) {\n    if (c === 118 && this.peek() === 45) {\n      this.state = 13;\n      this.sectionStart = this.index;\n    } else if (c === 46 || c === 58 || c === 64 || c === 35) {\n      this.cbs.ondirname(this.index, this.index + 1);\n      this.state = 14;\n      this.sectionStart = this.index + 1;\n    } else {\n      this.state = 12;\n      this.sectionStart = this.index;\n    }\n  }\n  stateInSelfClosingTag(c) {\n    if (c === 62) {\n      this.cbs.onselfclosingtag(this.index);\n      this.state = 1;\n      this.sectionStart = this.index + 1;\n      this.inRCDATA = false;\n    } else if (!isWhitespace(c)) {\n      this.state = 11;\n      this.stateBeforeAttrName(c);\n    }\n  }\n  stateInAttrName(c) {\n    if (c === 61 || isEndOfTagSection(c)) {\n      this.cbs.onattribname(this.sectionStart, this.index);\n      this.handleAttrNameEnd(c);\n    } else if (c === 34 || c === 39 || c === 60) {\n      this.cbs.onerr(\n        17,\n        this.index\n      );\n    }\n  }\n  stateInDirName(c) {\n    if (c === 61 || isEndOfTagSection(c)) {\n      this.cbs.ondirname(this.sectionStart, this.index);\n      this.handleAttrNameEnd(c);\n    } else if (c === 58) {\n      this.cbs.ondirname(this.sectionStart, this.index);\n      this.state = 14;\n      this.sectionStart = this.index + 1;\n    } else if (c === 46) {\n      this.cbs.ondirname(this.sectionStart, this.index);\n      this.state = 16;\n      this.sectionStart = this.index + 1;\n    }\n  }\n  stateInDirArg(c) {\n    if (c === 61 || isEndOfTagSection(c)) {\n      this.cbs.ondirarg(this.sectionStart, this.index);\n      this.handleAttrNameEnd(c);\n    } else if (c === 91) {\n      this.state = 15;\n    } else if (c === 46) {\n      this.cbs.ondirarg(this.sectionStart, this.index);\n      this.state = 16;\n      this.sectionStart = this.index + 1;\n    }\n  }\n  stateInDynamicDirArg(c) {\n    if (c === 93) {\n      this.state = 14;\n    } else if (c === 61 || isEndOfTagSection(c)) {\n      this.cbs.ondirarg(this.sectionStart, this.index + 1);\n      this.handleAttrNameEnd(c);\n      {\n        this.cbs.onerr(\n          27,\n          this.index\n        );\n      }\n    }\n  }\n  stateInDirModifier(c) {\n    if (c === 61 || isEndOfTagSection(c)) {\n      this.cbs.ondirmodifier(this.sectionStart, this.index);\n      this.handleAttrNameEnd(c);\n    } else if (c === 46) {\n      this.cbs.ondirmodifier(this.sectionStart, this.index);\n      this.sectionStart = this.index + 1;\n    }\n  }\n  handleAttrNameEnd(c) {\n    this.sectionStart = this.index;\n    this.state = 17;\n    this.cbs.onattribnameend(this.index);\n    this.stateAfterAttrName(c);\n  }\n  stateAfterAttrName(c) {\n    if (c === 61) {\n      this.state = 18;\n    } else if (c === 47 || c === 62) {\n      this.cbs.onattribend(0, this.sectionStart);\n      this.sectionStart = -1;\n      this.state = 11;\n      this.stateBeforeAttrName(c);\n    } else if (!isWhitespace(c)) {\n      this.cbs.onattribend(0, this.sectionStart);\n      this.handleAttrStart(c);\n    }\n  }\n  stateBeforeAttrValue(c) {\n    if (c === 34) {\n      this.state = 19;\n      this.sectionStart = this.index + 1;\n    } else if (c === 39) {\n      this.state = 20;\n      this.sectionStart = this.index + 1;\n    } else if (!isWhitespace(c)) {\n      this.sectionStart = this.index;\n      this.state = 21;\n      this.stateInAttrValueNoQuotes(c);\n    }\n  }\n  handleInAttrValue(c, quote) {\n    if (c === quote || false) {\n      this.cbs.onattribdata(this.sectionStart, this.index);\n      this.sectionStart = -1;\n      this.cbs.onattribend(\n        quote === 34 ? 3 : 2,\n        this.index + 1\n      );\n      this.state = 11;\n    } else if (c === 38) {\n      this.startEntity();\n    }\n  }\n  stateInAttrValueDoubleQuotes(c) {\n    this.handleInAttrValue(c, 34);\n  }\n  stateInAttrValueSingleQuotes(c) {\n    this.handleInAttrValue(c, 39);\n  }\n  stateInAttrValueNoQuotes(c) {\n    if (isWhitespace(c) || c === 62) {\n      this.cbs.onattribdata(this.sectionStart, this.index);\n      this.sectionStart = -1;\n      this.cbs.onattribend(1, this.index);\n      this.state = 11;\n      this.stateBeforeAttrName(c);\n    } else if (c === 34 || c === 39 || c === 60 || c === 61 || c === 96) {\n      this.cbs.onerr(\n        18,\n        this.index\n      );\n    } else if (c === 38) {\n      this.startEntity();\n    }\n  }\n  stateBeforeDeclaration(c) {\n    if (c === 91) {\n      this.state = 26;\n      this.sequenceIndex = 0;\n    } else {\n      this.state = c === 45 ? 25 : 23;\n    }\n  }\n  stateInDeclaration(c) {\n    if (c === 62 || this.fastForwardTo(62)) {\n      this.state = 1;\n      this.sectionStart = this.index + 1;\n    }\n  }\n  stateInProcessingInstruction(c) {\n    if (c === 62 || this.fastForwardTo(62)) {\n      this.cbs.onprocessinginstruction(this.sectionStart, this.index);\n      this.state = 1;\n      this.sectionStart = this.index + 1;\n    }\n  }\n  stateBeforeComment(c) {\n    if (c === 45) {\n      this.state = 28;\n      this.currentSequence = Sequences.CommentEnd;\n      this.sequenceIndex = 2;\n      this.sectionStart = this.index + 1;\n    } else {\n      this.state = 23;\n    }\n  }\n  stateInSpecialComment(c) {\n    if (c === 62 || this.fastForwardTo(62)) {\n      this.cbs.oncomment(this.sectionStart, this.index);\n      this.state = 1;\n      this.sectionStart = this.index + 1;\n    }\n  }\n  stateBeforeSpecialS(c) {\n    if (c === Sequences.ScriptEnd[3]) {\n      this.startSpecial(Sequences.ScriptEnd, 4);\n    } else if (c === Sequences.StyleEnd[3]) {\n      this.startSpecial(Sequences.StyleEnd, 4);\n    } else {\n      this.state = 6;\n      this.stateInTagName(c);\n    }\n  }\n  stateBeforeSpecialT(c) {\n    if (c === Sequences.TitleEnd[3]) {\n      this.startSpecial(Sequences.TitleEnd, 4);\n    } else if (c === Sequences.TextareaEnd[3]) {\n      this.startSpecial(Sequences.TextareaEnd, 4);\n    } else {\n      this.state = 6;\n      this.stateInTagName(c);\n    }\n  }\n  startEntity() {\n    {\n      this.baseState = this.state;\n      this.state = 33;\n      this.entityStart = this.index;\n      this.entityDecoder.startEntity(\n        this.baseState === 1 || this.baseState === 32 ? decode_js.DecodingMode.Legacy : decode_js.DecodingMode.Attribute\n      );\n    }\n  }\n  stateInEntity() {\n    {\n      const length = this.entityDecoder.write(this.buffer, this.index);\n      if (length >= 0) {\n        this.state = this.baseState;\n        if (length === 0) {\n          this.index = this.entityStart;\n        }\n      } else {\n        this.index = this.buffer.length - 1;\n      }\n    }\n  }\n  /**\n   * Iterates through the buffer, calling the function corresponding to the current state.\n   *\n   * States that are more likely to be hit are higher up, as a performance improvement.\n   */\n  parse(input) {\n    this.buffer = input;\n    while (this.index < this.buffer.length) {\n      const c = this.buffer.charCodeAt(this.index);\n      if (c === 10 && this.state !== 33) {\n        this.newlines.push(this.index);\n      }\n      switch (this.state) {\n        case 1: {\n          this.stateText(c);\n          break;\n        }\n        case 2: {\n          this.stateInterpolationOpen(c);\n          break;\n        }\n        case 3: {\n          this.stateInterpolation(c);\n          break;\n        }\n        case 4: {\n          this.stateInterpolationClose(c);\n          break;\n        }\n        case 31: {\n          this.stateSpecialStartSequence(c);\n          break;\n        }\n        case 32: {\n          this.stateInRCDATA(c);\n          break;\n        }\n        case 26: {\n          this.stateCDATASequence(c);\n          break;\n        }\n        case 19: {\n          this.stateInAttrValueDoubleQuotes(c);\n          break;\n        }\n        case 12: {\n          this.stateInAttrName(c);\n          break;\n        }\n        case 13: {\n          this.stateInDirName(c);\n          break;\n        }\n        case 14: {\n          this.stateInDirArg(c);\n          break;\n        }\n        case 15: {\n          this.stateInDynamicDirArg(c);\n          break;\n        }\n        case 16: {\n          this.stateInDirModifier(c);\n          break;\n        }\n        case 28: {\n          this.stateInCommentLike(c);\n          break;\n        }\n        case 27: {\n          this.stateInSpecialComment(c);\n          break;\n        }\n        case 11: {\n          this.stateBeforeAttrName(c);\n          break;\n        }\n        case 6: {\n          this.stateInTagName(c);\n          break;\n        }\n        case 34: {\n          this.stateInSFCRootTagName(c);\n          break;\n        }\n        case 9: {\n          this.stateInClosingTagName(c);\n          break;\n        }\n        case 5: {\n          this.stateBeforeTagName(c);\n          break;\n        }\n        case 17: {\n          this.stateAfterAttrName(c);\n          break;\n        }\n        case 20: {\n          this.stateInAttrValueSingleQuotes(c);\n          break;\n        }\n        case 18: {\n          this.stateBeforeAttrValue(c);\n          break;\n        }\n        case 8: {\n          this.stateBeforeClosingTagName(c);\n          break;\n        }\n        case 10: {\n          this.stateAfterClosingTagName(c);\n          break;\n        }\n        case 29: {\n          this.stateBeforeSpecialS(c);\n          break;\n        }\n        case 30: {\n          this.stateBeforeSpecialT(c);\n          break;\n        }\n        case 21: {\n          this.stateInAttrValueNoQuotes(c);\n          break;\n        }\n        case 7: {\n          this.stateInSelfClosingTag(c);\n          break;\n        }\n        case 23: {\n          this.stateInDeclaration(c);\n          break;\n        }\n        case 22: {\n          this.stateBeforeDeclaration(c);\n          break;\n        }\n        case 25: {\n          this.stateBeforeComment(c);\n          break;\n        }\n        case 24: {\n          this.stateInProcessingInstruction(c);\n          break;\n        }\n        case 33: {\n          this.stateInEntity();\n          break;\n        }\n      }\n      this.index++;\n    }\n    this.cleanup();\n    this.finish();\n  }\n  /**\n   * Remove data that has already been consumed from the buffer.\n   */\n  cleanup() {\n    if (this.sectionStart !== this.index) {\n      if (this.state === 1 || this.state === 32 && this.sequenceIndex === 0) {\n        this.cbs.ontext(this.sectionStart, this.index);\n        this.sectionStart = this.index;\n      } else if (this.state === 19 || this.state === 20 || this.state === 21) {\n        this.cbs.onattribdata(this.sectionStart, this.index);\n        this.sectionStart = this.index;\n      }\n    }\n  }\n  finish() {\n    if (this.state === 33) {\n      this.entityDecoder.end();\n      this.state = this.baseState;\n    }\n    this.handleTrailingData();\n    this.cbs.onend();\n  }\n  /** Handle any trailing data. */\n  handleTrailingData() {\n    const endIndex = this.buffer.length;\n    if (this.sectionStart >= endIndex) {\n      return;\n    }\n    if (this.state === 28) {\n      if (this.currentSequence === Sequences.CdataEnd) {\n        this.cbs.oncdata(this.sectionStart, endIndex);\n      } else {\n        this.cbs.oncomment(this.sectionStart, endIndex);\n      }\n    } else if (this.state === 6 || this.state === 11 || this.state === 18 || this.state === 17 || this.state === 12 || this.state === 13 || this.state === 14 || this.state === 15 || this.state === 16 || this.state === 20 || this.state === 19 || this.state === 21 || this.state === 9) ; else {\n      this.cbs.ontext(this.sectionStart, endIndex);\n    }\n  }\n  emitCodePoint(cp, consumed) {\n    {\n      if (this.baseState !== 1 && this.baseState !== 32) {\n        if (this.sectionStart < this.entityStart) {\n          this.cbs.onattribdata(this.sectionStart, this.entityStart);\n        }\n        this.sectionStart = this.entityStart + consumed;\n        this.index = this.sectionStart - 1;\n        this.cbs.onattribentity(\n          decode_js.fromCodePoint(cp),\n          this.entityStart,\n          this.sectionStart\n        );\n      } else {\n        if (this.sectionStart < this.entityStart) {\n          this.cbs.ontext(this.sectionStart, this.entityStart);\n        }\n        this.sectionStart = this.entityStart + consumed;\n        this.index = this.sectionStart - 1;\n        this.cbs.ontextentity(\n          decode_js.fromCodePoint(cp),\n          this.entityStart,\n          this.sectionStart\n        );\n      }\n    }\n  }\n}\n\nconst CompilerDeprecationTypes = {\n  \"COMPILER_IS_ON_ELEMENT\": \"COMPILER_IS_ON_ELEMENT\",\n  \"COMPILER_V_BIND_SYNC\": \"COMPILER_V_BIND_SYNC\",\n  \"COMPILER_V_BIND_OBJECT_ORDER\": \"COMPILER_V_BIND_OBJECT_ORDER\",\n  \"COMPILER_V_ON_NATIVE\": \"COMPILER_V_ON_NATIVE\",\n  \"COMPILER_V_IF_V_FOR_PRECEDENCE\": \"COMPILER_V_IF_V_FOR_PRECEDENCE\",\n  \"COMPILER_NATIVE_TEMPLATE\": \"COMPILER_NATIVE_TEMPLATE\",\n  \"COMPILER_INLINE_TEMPLATE\": \"COMPILER_INLINE_TEMPLATE\",\n  \"COMPILER_FILTERS\": \"COMPILER_FILTERS\"\n};\nconst deprecationData = {\n  [\"COMPILER_IS_ON_ELEMENT\"]: {\n    message: `Platform-native elements with \"is\" prop will no longer be treated as components in Vue 3 unless the \"is\" value is explicitly prefixed with \"vue:\".`,\n    link: `https://v3-migration.vuejs.org/breaking-changes/custom-elements-interop.html`\n  },\n  [\"COMPILER_V_BIND_SYNC\"]: {\n    message: (key) => `.sync modifier for v-bind has been removed. Use v-model with argument instead. \\`v-bind:${key}.sync\\` should be changed to \\`v-model:${key}\\`.`,\n    link: `https://v3-migration.vuejs.org/breaking-changes/v-model.html`\n  },\n  [\"COMPILER_V_BIND_OBJECT_ORDER\"]: {\n    message: `v-bind=\"obj\" usage is now order sensitive and behaves like JavaScript object spread: it will now overwrite an existing non-mergeable attribute that appears before v-bind in the case of conflict. To retain 2.x behavior, move v-bind to make it the first attribute. You can also suppress this warning if the usage is intended.`,\n    link: `https://v3-migration.vuejs.org/breaking-changes/v-bind.html`\n  },\n  [\"COMPILER_V_ON_NATIVE\"]: {\n    message: `.native modifier for v-on has been removed as is no longer necessary.`,\n    link: `https://v3-migration.vuejs.org/breaking-changes/v-on-native-modifier-removed.html`\n  },\n  [\"COMPILER_V_IF_V_FOR_PRECEDENCE\"]: {\n    message: `v-if / v-for precedence when used on the same element has changed in Vue 3: v-if now takes higher precedence and will no longer have access to v-for scope variables. It is best to avoid the ambiguity with <template> tags or use a computed property that filters v-for data source.`,\n    link: `https://v3-migration.vuejs.org/breaking-changes/v-if-v-for.html`\n  },\n  [\"COMPILER_NATIVE_TEMPLATE\"]: {\n    message: `<template> with no special directives will render as a native template element instead of its inner content in Vue 3.`\n  },\n  [\"COMPILER_INLINE_TEMPLATE\"]: {\n    message: `\"inline-template\" has been removed in Vue 3.`,\n    link: `https://v3-migration.vuejs.org/breaking-changes/inline-template-attribute.html`\n  },\n  [\"COMPILER_FILTERS\"]: {\n    message: `filters have been removed in Vue 3. The \"|\" symbol will be treated as native JavaScript bitwise OR operator. Use method calls or computed properties instead.`,\n    link: `https://v3-migration.vuejs.org/breaking-changes/filters.html`\n  }\n};\nfunction getCompatValue(key, { compatConfig }) {\n  const value = compatConfig && compatConfig[key];\n  if (key === \"MODE\") {\n    return value || 3;\n  } else {\n    return value;\n  }\n}\nfunction isCompatEnabled(key, context) {\n  const mode = getCompatValue(\"MODE\", context);\n  const value = getCompatValue(key, context);\n  return mode === 3 ? value === true : value !== false;\n}\nfunction checkCompatEnabled(key, context, loc, ...args) {\n  const enabled = isCompatEnabled(key, context);\n  return enabled;\n}\nfunction warnDeprecation(key, context, loc, ...args) {\n  const val = getCompatValue(key, context);\n  if (val === \"suppress-warning\") {\n    return;\n  }\n  const { message, link } = deprecationData[key];\n  const msg = `(deprecation ${key}) ${typeof message === \"function\" ? message(...args) : message}${link ? `\n  Details: ${link}` : ``}`;\n  const err = new SyntaxError(msg);\n  err.code = key;\n  if (loc) err.loc = loc;\n  context.onWarn(err);\n}\n\nfunction defaultOnError(error) {\n  throw error;\n}\nfunction defaultOnWarn(msg) {\n}\nfunction createCompilerError(code, loc, messages, additionalMessage) {\n  const msg = (messages || errorMessages)[code] + (additionalMessage || ``) ;\n  const error = new SyntaxError(String(msg));\n  error.code = code;\n  error.loc = loc;\n  return error;\n}\nconst ErrorCodes = {\n  \"ABRUPT_CLOSING_OF_EMPTY_COMMENT\": 0,\n  \"0\": \"ABRUPT_CLOSING_OF_EMPTY_COMMENT\",\n  \"CDATA_IN_HTML_CONTENT\": 1,\n  \"1\": \"CDATA_IN_HTML_CONTENT\",\n  \"DUPLICATE_ATTRIBUTE\": 2,\n  \"2\": \"DUPLICATE_ATTRIBUTE\",\n  \"END_TAG_WITH_ATTRIBUTES\": 3,\n  \"3\": \"END_TAG_WITH_ATTRIBUTES\",\n  \"END_TAG_WITH_TRAILING_SOLIDUS\": 4,\n  \"4\": \"END_TAG_WITH_TRAILING_SOLIDUS\",\n  \"EOF_BEFORE_TAG_NAME\": 5,\n  \"5\": \"EOF_BEFORE_TAG_NAME\",\n  \"EOF_IN_CDATA\": 6,\n  \"6\": \"EOF_IN_CDATA\",\n  \"EOF_IN_COMMENT\": 7,\n  \"7\": \"EOF_IN_COMMENT\",\n  \"EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT\": 8,\n  \"8\": \"EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT\",\n  \"EOF_IN_TAG\": 9,\n  \"9\": \"EOF_IN_TAG\",\n  \"INCORRECTLY_CLOSED_COMMENT\": 10,\n  \"10\": \"INCORRECTLY_CLOSED_COMMENT\",\n  \"INCORRECTLY_OPENED_COMMENT\": 11,\n  \"11\": \"INCORRECTLY_OPENED_COMMENT\",\n  \"INVALID_FIRST_CHARACTER_OF_TAG_NAME\": 12,\n  \"12\": \"INVALID_FIRST_CHARACTER_OF_TAG_NAME\",\n  \"MISSING_ATTRIBUTE_VALUE\": 13,\n  \"13\": \"MISSING_ATTRIBUTE_VALUE\",\n  \"MISSING_END_TAG_NAME\": 14,\n  \"14\": \"MISSING_END_TAG_NAME\",\n  \"MISSING_WHITESPACE_BETWEEN_ATTRIBUTES\": 15,\n  \"15\": \"MISSING_WHITESPACE_BETWEEN_ATTRIBUTES\",\n  \"NESTED_COMMENT\": 16,\n  \"16\": \"NESTED_COMMENT\",\n  \"UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME\": 17,\n  \"17\": \"UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME\",\n  \"UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE\": 18,\n  \"18\": \"UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE\",\n  \"UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME\": 19,\n  \"19\": \"UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME\",\n  \"UNEXPECTED_NULL_CHARACTER\": 20,\n  \"20\": \"UNEXPECTED_NULL_CHARACTER\",\n  \"UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME\": 21,\n  \"21\": \"UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME\",\n  \"UNEXPECTED_SOLIDUS_IN_TAG\": 22,\n  \"22\": \"UNEXPECTED_SOLIDUS_IN_TAG\",\n  \"X_INVALID_END_TAG\": 23,\n  \"23\": \"X_INVALID_END_TAG\",\n  \"X_MISSING_END_TAG\": 24,\n  \"24\": \"X_MISSING_END_TAG\",\n  \"X_MISSING_INTERPOLATION_END\": 25,\n  \"25\": \"X_MISSING_INTERPOLATION_END\",\n  \"X_MISSING_DIRECTIVE_NAME\": 26,\n  \"26\": \"X_MISSING_DIRECTIVE_NAME\",\n  \"X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END\": 27,\n  \"27\": \"X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END\",\n  \"X_V_IF_NO_EXPRESSION\": 28,\n  \"28\": \"X_V_IF_NO_EXPRESSION\",\n  \"X_V_IF_SAME_KEY\": 29,\n  \"29\": \"X_V_IF_SAME_KEY\",\n  \"X_V_ELSE_NO_ADJACENT_IF\": 30,\n  \"30\": \"X_V_ELSE_NO_ADJACENT_IF\",\n  \"X_V_FOR_NO_EXPRESSION\": 31,\n  \"31\": \"X_V_FOR_NO_EXPRESSION\",\n  \"X_V_FOR_MALFORMED_EXPRESSION\": 32,\n  \"32\": \"X_V_FOR_MALFORMED_EXPRESSION\",\n  \"X_V_FOR_TEMPLATE_KEY_PLACEMENT\": 33,\n  \"33\": \"X_V_FOR_TEMPLATE_KEY_PLACEMENT\",\n  \"X_V_BIND_NO_EXPRESSION\": 34,\n  \"34\": \"X_V_BIND_NO_EXPRESSION\",\n  \"X_V_ON_NO_EXPRESSION\": 35,\n  \"35\": \"X_V_ON_NO_EXPRESSION\",\n  \"X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET\": 36,\n  \"36\": \"X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET\",\n  \"X_V_SLOT_MIXED_SLOT_USAGE\": 37,\n  \"37\": \"X_V_SLOT_MIXED_SLOT_USAGE\",\n  \"X_V_SLOT_DUPLICATE_SLOT_NAMES\": 38,\n  \"38\": \"X_V_SLOT_DUPLICATE_SLOT_NAMES\",\n  \"X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN\": 39,\n  \"39\": \"X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN\",\n  \"X_V_SLOT_MISPLACED\": 40,\n  \"40\": \"X_V_SLOT_MISPLACED\",\n  \"X_V_MODEL_NO_EXPRESSION\": 41,\n  \"41\": \"X_V_MODEL_NO_EXPRESSION\",\n  \"X_V_MODEL_MALFORMED_EXPRESSION\": 42,\n  \"42\": \"X_V_MODEL_MALFORMED_EXPRESSION\",\n  \"X_V_MODEL_ON_SCOPE_VARIABLE\": 43,\n  \"43\": \"X_V_MODEL_ON_SCOPE_VARIABLE\",\n  \"X_V_MODEL_ON_PROPS\": 44,\n  \"44\": \"X_V_MODEL_ON_PROPS\",\n  \"X_INVALID_EXPRESSION\": 45,\n  \"45\": \"X_INVALID_EXPRESSION\",\n  \"X_KEEP_ALIVE_INVALID_CHILDREN\": 46,\n  \"46\": \"X_KEEP_ALIVE_INVALID_CHILDREN\",\n  \"X_PREFIX_ID_NOT_SUPPORTED\": 47,\n  \"47\": \"X_PREFIX_ID_NOT_SUPPORTED\",\n  \"X_MODULE_MODE_NOT_SUPPORTED\": 48,\n  \"48\": \"X_MODULE_MODE_NOT_SUPPORTED\",\n  \"X_CACHE_HANDLER_NOT_SUPPORTED\": 49,\n  \"49\": \"X_CACHE_HANDLER_NOT_SUPPORTED\",\n  \"X_SCOPE_ID_NOT_SUPPORTED\": 50,\n  \"50\": \"X_SCOPE_ID_NOT_SUPPORTED\",\n  \"X_VNODE_HOOKS\": 51,\n  \"51\": \"X_VNODE_HOOKS\",\n  \"X_V_BIND_INVALID_SAME_NAME_ARGUMENT\": 52,\n  \"52\": \"X_V_BIND_INVALID_SAME_NAME_ARGUMENT\",\n  \"__EXTEND_POINT__\": 53,\n  \"53\": \"__EXTEND_POINT__\"\n};\nconst errorMessages = {\n  // parse errors\n  [0]: \"Illegal comment.\",\n  [1]: \"CDATA section is allowed only in XML context.\",\n  [2]: \"Duplicate attribute.\",\n  [3]: \"End tag cannot have attributes.\",\n  [4]: \"Illegal '/' in tags.\",\n  [5]: \"Unexpected EOF in tag.\",\n  [6]: \"Unexpected EOF in CDATA section.\",\n  [7]: \"Unexpected EOF in comment.\",\n  [8]: \"Unexpected EOF in script.\",\n  [9]: \"Unexpected EOF in tag.\",\n  [10]: \"Incorrectly closed comment.\",\n  [11]: \"Incorrectly opened comment.\",\n  [12]: \"Illegal tag name. Use '&lt;' to print '<'.\",\n  [13]: \"Attribute value was expected.\",\n  [14]: \"End tag name was expected.\",\n  [15]: \"Whitespace was expected.\",\n  [16]: \"Unexpected '<!--' in comment.\",\n  [17]: `Attribute name cannot contain U+0022 (\"), U+0027 ('), and U+003C (<).`,\n  [18]: \"Unquoted attribute value cannot contain U+0022 (\\\"), U+0027 ('), U+003C (<), U+003D (=), and U+0060 (`).\",\n  [19]: \"Attribute name cannot start with '='.\",\n  [21]: \"'<?' is allowed only in XML context.\",\n  [20]: `Unexpected null character.`,\n  [22]: \"Illegal '/' in tags.\",\n  // Vue-specific parse errors\n  [23]: \"Invalid end tag.\",\n  [24]: \"Element is missing end tag.\",\n  [25]: \"Interpolation end sign was not found.\",\n  [27]: \"End bracket for dynamic directive argument was not found. Note that dynamic directive argument cannot contain spaces.\",\n  [26]: \"Legal directive name was expected.\",\n  // transform errors\n  [28]: `v-if/v-else-if is missing expression.`,\n  [29]: `v-if/else branches must use unique keys.`,\n  [30]: `v-else/v-else-if has no adjacent v-if or v-else-if.`,\n  [31]: `v-for is missing expression.`,\n  [32]: `v-for has invalid expression.`,\n  [33]: `<template v-for> key should be placed on the <template> tag.`,\n  [34]: `v-bind is missing expression.`,\n  [52]: `v-bind with same-name shorthand only allows static argument.`,\n  [35]: `v-on is missing expression.`,\n  [36]: `Unexpected custom directive on <slot> outlet.`,\n  [37]: `Mixed v-slot usage on both the component and nested <template>. When there are multiple named slots, all slots should use <template> syntax to avoid scope ambiguity.`,\n  [38]: `Duplicate slot names found. `,\n  [39]: `Extraneous children found when component already has explicitly named default slot. These children will be ignored.`,\n  [40]: `v-slot can only be used on components or <template> tags.`,\n  [41]: `v-model is missing expression.`,\n  [42]: `v-model value must be a valid JavaScript member expression.`,\n  [43]: `v-model cannot be used on v-for or v-slot scope variables because they are not writable.`,\n  [44]: `v-model cannot be used on a prop, because local prop bindings are not writable.\nUse a v-bind binding combined with a v-on listener that emits update:x event instead.`,\n  [45]: `Error parsing JavaScript expression: `,\n  [46]: `<KeepAlive> expects exactly one child component.`,\n  [51]: `@vnode-* hooks in templates are no longer supported. Use the vue: prefix instead. For example, @vnode-mounted should be changed to @vue:mounted. @vnode-* hooks support has been removed in 3.4.`,\n  // generic errors\n  [47]: `\"prefixIdentifiers\" option is not supported in this build of compiler.`,\n  [48]: `ES module mode is not supported in this build of compiler.`,\n  [49]: `\"cacheHandlers\" option is only supported when the \"prefixIdentifiers\" option is enabled.`,\n  [50]: `\"scopeId\" option is only supported in module mode.`,\n  // just to fulfill types\n  [53]: ``\n};\n\nfunction walkIdentifiers(root, onIdentifier, includeAll = false, parentStack = [], knownIds = /* @__PURE__ */ Object.create(null)) {\n  const rootExp = root.type === \"Program\" ? root.body[0].type === \"ExpressionStatement\" && root.body[0].expression : root;\n  estreeWalker.walk(root, {\n    enter(node, parent) {\n      parent && parentStack.push(parent);\n      if (parent && parent.type.startsWith(\"TS\") && !TS_NODE_TYPES.includes(parent.type)) {\n        return this.skip();\n      }\n      if (node.type === \"Identifier\") {\n        const isLocal = !!knownIds[node.name];\n        const isRefed = isReferencedIdentifier(node, parent, parentStack);\n        if (includeAll || isRefed && !isLocal) {\n          onIdentifier(node, parent, parentStack, isRefed, isLocal);\n        }\n      } else if (node.type === \"ObjectProperty\" && // eslint-disable-next-line no-restricted-syntax\n      (parent == null ? void 0 : parent.type) === \"ObjectPattern\") {\n        node.inPattern = true;\n      } else if (isFunctionType(node)) {\n        if (node.scopeIds) {\n          node.scopeIds.forEach((id) => markKnownIds(id, knownIds));\n        } else {\n          walkFunctionParams(\n            node,\n            (id) => markScopeIdentifier(node, id, knownIds)\n          );\n        }\n      } else if (node.type === \"BlockStatement\") {\n        if (node.scopeIds) {\n          node.scopeIds.forEach((id) => markKnownIds(id, knownIds));\n        } else {\n          walkBlockDeclarations(\n            node,\n            (id) => markScopeIdentifier(node, id, knownIds)\n          );\n        }\n      } else if (node.type === \"CatchClause\" && node.param) {\n        for (const id of extractIdentifiers(node.param)) {\n          markScopeIdentifier(node, id, knownIds);\n        }\n      } else if (isForStatement(node)) {\n        walkForStatement(\n          node,\n          false,\n          (id) => markScopeIdentifier(node, id, knownIds)\n        );\n      }\n    },\n    leave(node, parent) {\n      parent && parentStack.pop();\n      if (node !== rootExp && node.scopeIds) {\n        for (const id of node.scopeIds) {\n          knownIds[id]--;\n          if (knownIds[id] === 0) {\n            delete knownIds[id];\n          }\n        }\n      }\n    }\n  });\n}\nfunction isReferencedIdentifier(id, parent, parentStack) {\n  if (!parent) {\n    return true;\n  }\n  if (id.name === \"arguments\") {\n    return false;\n  }\n  if (isReferenced(id, parent, parentStack[parentStack.length - 2])) {\n    return true;\n  }\n  switch (parent.type) {\n    case \"AssignmentExpression\":\n    case \"AssignmentPattern\":\n      return true;\n    case \"ObjectProperty\":\n      return parent.key !== id && isInDestructureAssignment(parent, parentStack);\n    case \"ArrayPattern\":\n      return isInDestructureAssignment(parent, parentStack);\n  }\n  return false;\n}\nfunction isInDestructureAssignment(parent, parentStack) {\n  if (parent && (parent.type === \"ObjectProperty\" || parent.type === \"ArrayPattern\")) {\n    let i = parentStack.length;\n    while (i--) {\n      const p = parentStack[i];\n      if (p.type === \"AssignmentExpression\") {\n        return true;\n      } else if (p.type !== \"ObjectProperty\" && !p.type.endsWith(\"Pattern\")) {\n        break;\n      }\n    }\n  }\n  return false;\n}\nfunction isInNewExpression(parentStack) {\n  let i = parentStack.length;\n  while (i--) {\n    const p = parentStack[i];\n    if (p.type === \"NewExpression\") {\n      return true;\n    } else if (p.type !== \"MemberExpression\") {\n      break;\n    }\n  }\n  return false;\n}\nfunction walkFunctionParams(node, onIdent) {\n  for (const p of node.params) {\n    for (const id of extractIdentifiers(p)) {\n      onIdent(id);\n    }\n  }\n}\nfunction walkBlockDeclarations(block, onIdent) {\n  for (const stmt of block.body) {\n    if (stmt.type === \"VariableDeclaration\") {\n      if (stmt.declare) continue;\n      for (const decl of stmt.declarations) {\n        for (const id of extractIdentifiers(decl.id)) {\n          onIdent(id);\n        }\n      }\n    } else if (stmt.type === \"FunctionDeclaration\" || stmt.type === \"ClassDeclaration\") {\n      if (stmt.declare || !stmt.id) continue;\n      onIdent(stmt.id);\n    } else if (isForStatement(stmt)) {\n      walkForStatement(stmt, true, onIdent);\n    }\n  }\n}\nfunction isForStatement(stmt) {\n  return stmt.type === \"ForOfStatement\" || stmt.type === \"ForInStatement\" || stmt.type === \"ForStatement\";\n}\nfunction walkForStatement(stmt, isVar, onIdent) {\n  const variable = stmt.type === \"ForStatement\" ? stmt.init : stmt.left;\n  if (variable && variable.type === \"VariableDeclaration\" && (variable.kind === \"var\" ? isVar : !isVar)) {\n    for (const decl of variable.declarations) {\n      for (const id of extractIdentifiers(decl.id)) {\n        onIdent(id);\n      }\n    }\n  }\n}\nfunction extractIdentifiers(param, nodes = []) {\n  switch (param.type) {\n    case \"Identifier\":\n      nodes.push(param);\n      break;\n    case \"MemberExpression\":\n      let object = param;\n      while (object.type === \"MemberExpression\") {\n        object = object.object;\n      }\n      nodes.push(object);\n      break;\n    case \"ObjectPattern\":\n      for (const prop of param.properties) {\n        if (prop.type === \"RestElement\") {\n          extractIdentifiers(prop.argument, nodes);\n        } else {\n          extractIdentifiers(prop.value, nodes);\n        }\n      }\n      break;\n    case \"ArrayPattern\":\n      param.elements.forEach((element) => {\n        if (element) extractIdentifiers(element, nodes);\n      });\n      break;\n    case \"RestElement\":\n      extractIdentifiers(param.argument, nodes);\n      break;\n    case \"AssignmentPattern\":\n      extractIdentifiers(param.left, nodes);\n      break;\n  }\n  return nodes;\n}\nfunction markKnownIds(name, knownIds) {\n  if (name in knownIds) {\n    knownIds[name]++;\n  } else {\n    knownIds[name] = 1;\n  }\n}\nfunction markScopeIdentifier(node, child, knownIds) {\n  const { name } = child;\n  if (node.scopeIds && node.scopeIds.has(name)) {\n    return;\n  }\n  markKnownIds(name, knownIds);\n  (node.scopeIds || (node.scopeIds = /* @__PURE__ */ new Set())).add(name);\n}\nconst isFunctionType = (node) => {\n  return /Function(?:Expression|Declaration)$|Method$/.test(node.type);\n};\nconst isStaticProperty = (node) => node && (node.type === \"ObjectProperty\" || node.type === \"ObjectMethod\") && !node.computed;\nconst isStaticPropertyKey = (node, parent) => isStaticProperty(parent) && parent.key === node;\nfunction isReferenced(node, parent, grandparent) {\n  switch (parent.type) {\n    // yes: PARENT[NODE]\n    // yes: NODE.child\n    // no: parent.NODE\n    case \"MemberExpression\":\n    case \"OptionalMemberExpression\":\n      if (parent.property === node) {\n        return !!parent.computed;\n      }\n      return parent.object === node;\n    case \"JSXMemberExpression\":\n      return parent.object === node;\n    // no: let NODE = init;\n    // yes: let id = NODE;\n    case \"VariableDeclarator\":\n      return parent.init === node;\n    // yes: () => NODE\n    // no: (NODE) => {}\n    case \"ArrowFunctionExpression\":\n      return parent.body === node;\n    // no: class { #NODE; }\n    // no: class { get #NODE() {} }\n    // no: class { #NODE() {} }\n    // no: class { fn() { return this.#NODE; } }\n    case \"PrivateName\":\n      return false;\n    // no: class { NODE() {} }\n    // yes: class { [NODE]() {} }\n    // no: class { foo(NODE) {} }\n    case \"ClassMethod\":\n    case \"ClassPrivateMethod\":\n    case \"ObjectMethod\":\n      if (parent.key === node) {\n        return !!parent.computed;\n      }\n      return false;\n    // yes: { [NODE]: \"\" }\n    // no: { NODE: \"\" }\n    // depends: { NODE }\n    // depends: { key: NODE }\n    case \"ObjectProperty\":\n      if (parent.key === node) {\n        return !!parent.computed;\n      }\n      return !grandparent || grandparent.type !== \"ObjectPattern\";\n    // no: class { NODE = value; }\n    // yes: class { [NODE] = value; }\n    // yes: class { key = NODE; }\n    case \"ClassProperty\":\n      if (parent.key === node) {\n        return !!parent.computed;\n      }\n      return true;\n    case \"ClassPrivateProperty\":\n      return parent.key !== node;\n    // no: class NODE {}\n    // yes: class Foo extends NODE {}\n    case \"ClassDeclaration\":\n    case \"ClassExpression\":\n      return parent.superClass === node;\n    // yes: left = NODE;\n    // no: NODE = right;\n    case \"AssignmentExpression\":\n      return parent.right === node;\n    // no: [NODE = foo] = [];\n    // yes: [foo = NODE] = [];\n    case \"AssignmentPattern\":\n      return parent.right === node;\n    // no: NODE: for (;;) {}\n    case \"LabeledStatement\":\n      return false;\n    // no: try {} catch (NODE) {}\n    case \"CatchClause\":\n      return false;\n    // no: function foo(...NODE) {}\n    case \"RestElement\":\n      return false;\n    case \"BreakStatement\":\n    case \"ContinueStatement\":\n      return false;\n    // no: function NODE() {}\n    // no: function foo(NODE) {}\n    case \"FunctionDeclaration\":\n    case \"FunctionExpression\":\n      return false;\n    // no: export NODE from \"foo\";\n    // no: export * as NODE from \"foo\";\n    case \"ExportNamespaceSpecifier\":\n    case \"ExportDefaultSpecifier\":\n      return false;\n    // no: export { foo as NODE };\n    // yes: export { NODE as foo };\n    // no: export { NODE as foo } from \"foo\";\n    case \"ExportSpecifier\":\n      if (grandparent == null ? void 0 : grandparent.source) {\n        return false;\n      }\n      return parent.local === node;\n    // no: import NODE from \"foo\";\n    // no: import * as NODE from \"foo\";\n    // no: import { NODE as foo } from \"foo\";\n    // no: import { foo as NODE } from \"foo\";\n    // no: import NODE from \"bar\";\n    case \"ImportDefaultSpecifier\":\n    case \"ImportNamespaceSpecifier\":\n    case \"ImportSpecifier\":\n      return false;\n    // no: import \"foo\" assert { NODE: \"json\" }\n    case \"ImportAttribute\":\n      return false;\n    // no: <div NODE=\"foo\" />\n    case \"JSXAttribute\":\n      return false;\n    // no: [NODE] = [];\n    // no: ({ NODE }) = [];\n    case \"ObjectPattern\":\n    case \"ArrayPattern\":\n      return false;\n    // no: new.NODE\n    // no: NODE.target\n    case \"MetaProperty\":\n      return false;\n    // yes: type X = { someProperty: NODE }\n    // no: type X = { NODE: OtherType }\n    case \"ObjectTypeProperty\":\n      return parent.key !== node;\n    // yes: enum X { Foo = NODE }\n    // no: enum X { NODE }\n    case \"TSEnumMember\":\n      return parent.id !== node;\n    // yes: { [NODE]: value }\n    // no: { NODE: value }\n    case \"TSPropertySignature\":\n      if (parent.key === node) {\n        return !!parent.computed;\n      }\n      return true;\n  }\n  return true;\n}\nconst TS_NODE_TYPES = [\n  \"TSAsExpression\",\n  // foo as number\n  \"TSTypeAssertion\",\n  // (<number>foo)\n  \"TSNonNullExpression\",\n  // foo!\n  \"TSInstantiationExpression\",\n  // foo<string>\n  \"TSSatisfiesExpression\"\n  // foo satisfies T\n];\nfunction unwrapTSNode(node) {\n  if (TS_NODE_TYPES.includes(node.type)) {\n    return unwrapTSNode(node.expression);\n  } else {\n    return node;\n  }\n}\n\nconst isStaticExp = (p) => p.type === 4 && p.isStatic;\nfunction isCoreComponent(tag) {\n  switch (tag) {\n    case \"Teleport\":\n    case \"teleport\":\n      return TELEPORT;\n    case \"Suspense\":\n    case \"suspense\":\n      return SUSPENSE;\n    case \"KeepAlive\":\n    case \"keep-alive\":\n      return KEEP_ALIVE;\n    case \"BaseTransition\":\n    case \"base-transition\":\n      return BASE_TRANSITION;\n  }\n}\nconst nonIdentifierRE = /^$|^\\d|[^\\$\\w\\xA0-\\uFFFF]/;\nconst isSimpleIdentifier = (name) => !nonIdentifierRE.test(name);\nconst validFirstIdentCharRE = /[A-Za-z_$\\xA0-\\uFFFF]/;\nconst validIdentCharRE = /[\\.\\?\\w$\\xA0-\\uFFFF]/;\nconst whitespaceRE = /\\s+[.[]\\s*|\\s*[.[]\\s+/g;\nconst getExpSource = (exp) => exp.type === 4 ? exp.content : exp.loc.source;\nconst isMemberExpressionBrowser = (exp) => {\n  const path = getExpSource(exp).trim().replace(whitespaceRE, (s) => s.trim());\n  let state = 0 /* inMemberExp */;\n  let stateStack = [];\n  let currentOpenBracketCount = 0;\n  let currentOpenParensCount = 0;\n  let currentStringType = null;\n  for (let i = 0; i < path.length; i++) {\n    const char = path.charAt(i);\n    switch (state) {\n      case 0 /* inMemberExp */:\n        if (char === \"[\") {\n          stateStack.push(state);\n          state = 1 /* inBrackets */;\n          currentOpenBracketCount++;\n        } else if (char === \"(\") {\n          stateStack.push(state);\n          state = 2 /* inParens */;\n          currentOpenParensCount++;\n        } else if (!(i === 0 ? validFirstIdentCharRE : validIdentCharRE).test(char)) {\n          return false;\n        }\n        break;\n      case 1 /* inBrackets */:\n        if (char === `'` || char === `\"` || char === \"`\") {\n          stateStack.push(state);\n          state = 3 /* inString */;\n          currentStringType = char;\n        } else if (char === `[`) {\n          currentOpenBracketCount++;\n        } else if (char === `]`) {\n          if (!--currentOpenBracketCount) {\n            state = stateStack.pop();\n          }\n        }\n        break;\n      case 2 /* inParens */:\n        if (char === `'` || char === `\"` || char === \"`\") {\n          stateStack.push(state);\n          state = 3 /* inString */;\n          currentStringType = char;\n        } else if (char === `(`) {\n          currentOpenParensCount++;\n        } else if (char === `)`) {\n          if (i === path.length - 1) {\n            return false;\n          }\n          if (!--currentOpenParensCount) {\n            state = stateStack.pop();\n          }\n        }\n        break;\n      case 3 /* inString */:\n        if (char === currentStringType) {\n          state = stateStack.pop();\n          currentStringType = null;\n        }\n        break;\n    }\n  }\n  return !currentOpenBracketCount && !currentOpenParensCount;\n};\nconst isMemberExpressionNode = (exp, context) => {\n  try {\n    let ret = exp.ast || parser.parseExpression(getExpSource(exp), {\n      plugins: context.expressionPlugins ? [...context.expressionPlugins, \"typescript\"] : [\"typescript\"]\n    });\n    ret = unwrapTSNode(ret);\n    return ret.type === \"MemberExpression\" || ret.type === \"OptionalMemberExpression\" || ret.type === \"Identifier\" && ret.name !== \"undefined\";\n  } catch (e) {\n    return false;\n  }\n};\nconst isMemberExpression = isMemberExpressionNode;\nconst fnExpRE = /^\\s*(async\\s*)?(\\([^)]*?\\)|[\\w$_]+)\\s*(:[^=]+)?=>|^\\s*(async\\s+)?function(?:\\s+[\\w$]+)?\\s*\\(/;\nconst isFnExpressionBrowser = (exp) => fnExpRE.test(getExpSource(exp));\nconst isFnExpressionNode = (exp, context) => {\n  try {\n    let ret = exp.ast || parser.parseExpression(getExpSource(exp), {\n      plugins: context.expressionPlugins ? [...context.expressionPlugins, \"typescript\"] : [\"typescript\"]\n    });\n    if (ret.type === \"Program\") {\n      ret = ret.body[0];\n      if (ret.type === \"ExpressionStatement\") {\n        ret = ret.expression;\n      }\n    }\n    ret = unwrapTSNode(ret);\n    return ret.type === \"FunctionExpression\" || ret.type === \"ArrowFunctionExpression\";\n  } catch (e) {\n    return false;\n  }\n};\nconst isFnExpression = isFnExpressionNode;\nfunction advancePositionWithClone(pos, source, numberOfCharacters = source.length) {\n  return advancePositionWithMutation(\n    {\n      offset: pos.offset,\n      line: pos.line,\n      column: pos.column\n    },\n    source,\n    numberOfCharacters\n  );\n}\nfunction advancePositionWithMutation(pos, source, numberOfCharacters = source.length) {\n  let linesCount = 0;\n  let lastNewLinePos = -1;\n  for (let i = 0; i < numberOfCharacters; i++) {\n    if (source.charCodeAt(i) === 10) {\n      linesCount++;\n      lastNewLinePos = i;\n    }\n  }\n  pos.offset += numberOfCharacters;\n  pos.line += linesCount;\n  pos.column = lastNewLinePos === -1 ? pos.column + numberOfCharacters : numberOfCharacters - lastNewLinePos;\n  return pos;\n}\nfunction assert(condition, msg) {\n  if (!condition) {\n    throw new Error(msg || `unexpected compiler condition`);\n  }\n}\nfunction findDir(node, name, allowEmpty = false) {\n  for (let i = 0; i < node.props.length; i++) {\n    const p = node.props[i];\n    if (p.type === 7 && (allowEmpty || p.exp) && (shared.isString(name) ? p.name === name : name.test(p.name))) {\n      return p;\n    }\n  }\n}\nfunction findProp(node, name, dynamicOnly = false, allowEmpty = false) {\n  for (let i = 0; i < node.props.length; i++) {\n    const p = node.props[i];\n    if (p.type === 6) {\n      if (dynamicOnly) continue;\n      if (p.name === name && (p.value || allowEmpty)) {\n        return p;\n      }\n    } else if (p.name === \"bind\" && (p.exp || allowEmpty) && isStaticArgOf(p.arg, name)) {\n      return p;\n    }\n  }\n}\nfunction isStaticArgOf(arg, name) {\n  return !!(arg && isStaticExp(arg) && arg.content === name);\n}\nfunction hasDynamicKeyVBind(node) {\n  return node.props.some(\n    (p) => p.type === 7 && p.name === \"bind\" && (!p.arg || // v-bind=\"obj\"\n    p.arg.type !== 4 || // v-bind:[_ctx.foo]\n    !p.arg.isStatic)\n    // v-bind:[foo]\n  );\n}\nfunction isText$1(node) {\n  return node.type === 5 || node.type === 2;\n}\nfunction isVPre(p) {\n  return p.type === 7 && p.name === \"pre\";\n}\nfunction isVSlot(p) {\n  return p.type === 7 && p.name === \"slot\";\n}\nfunction isTemplateNode(node) {\n  return node.type === 1 && node.tagType === 3;\n}\nfunction isSlotOutlet(node) {\n  return node.type === 1 && node.tagType === 2;\n}\nconst propsHelperSet = /* @__PURE__ */ new Set([NORMALIZE_PROPS, GUARD_REACTIVE_PROPS]);\nfunction getUnnormalizedProps(props, callPath = []) {\n  if (props && !shared.isString(props) && props.type === 14) {\n    const callee = props.callee;\n    if (!shared.isString(callee) && propsHelperSet.has(callee)) {\n      return getUnnormalizedProps(\n        props.arguments[0],\n        callPath.concat(props)\n      );\n    }\n  }\n  return [props, callPath];\n}\nfunction injectProp(node, prop, context) {\n  let propsWithInjection;\n  let props = node.type === 13 ? node.props : node.arguments[2];\n  let callPath = [];\n  let parentCall;\n  if (props && !shared.isString(props) && props.type === 14) {\n    const ret = getUnnormalizedProps(props);\n    props = ret[0];\n    callPath = ret[1];\n    parentCall = callPath[callPath.length - 1];\n  }\n  if (props == null || shared.isString(props)) {\n    propsWithInjection = createObjectExpression([prop]);\n  } else if (props.type === 14) {\n    const first = props.arguments[0];\n    if (!shared.isString(first) && first.type === 15) {\n      if (!hasProp(prop, first)) {\n        first.properties.unshift(prop);\n      }\n    } else {\n      if (props.callee === TO_HANDLERS) {\n        propsWithInjection = createCallExpression(context.helper(MERGE_PROPS), [\n          createObjectExpression([prop]),\n          props\n        ]);\n      } else {\n        props.arguments.unshift(createObjectExpression([prop]));\n      }\n    }\n    !propsWithInjection && (propsWithInjection = props);\n  } else if (props.type === 15) {\n    if (!hasProp(prop, props)) {\n      props.properties.unshift(prop);\n    }\n    propsWithInjection = props;\n  } else {\n    propsWithInjection = createCallExpression(context.helper(MERGE_PROPS), [\n      createObjectExpression([prop]),\n      props\n    ]);\n    if (parentCall && parentCall.callee === GUARD_REACTIVE_PROPS) {\n      parentCall = callPath[callPath.length - 2];\n    }\n  }\n  if (node.type === 13) {\n    if (parentCall) {\n      parentCall.arguments[0] = propsWithInjection;\n    } else {\n      node.props = propsWithInjection;\n    }\n  } else {\n    if (parentCall) {\n      parentCall.arguments[0] = propsWithInjection;\n    } else {\n      node.arguments[2] = propsWithInjection;\n    }\n  }\n}\nfunction hasProp(prop, props) {\n  let result = false;\n  if (prop.key.type === 4) {\n    const propKeyName = prop.key.content;\n    result = props.properties.some(\n      (p) => p.key.type === 4 && p.key.content === propKeyName\n    );\n  }\n  return result;\n}\nfunction toValidAssetId(name, type) {\n  return `_${type}_${name.replace(/[^\\w]/g, (searchValue, replaceValue) => {\n    return searchValue === \"-\" ? \"_\" : name.charCodeAt(replaceValue).toString();\n  })}`;\n}\nfunction hasScopeRef(node, ids) {\n  if (!node || Object.keys(ids).length === 0) {\n    return false;\n  }\n  switch (node.type) {\n    case 1:\n      for (let i = 0; i < node.props.length; i++) {\n        const p = node.props[i];\n        if (p.type === 7 && (hasScopeRef(p.arg, ids) || hasScopeRef(p.exp, ids))) {\n          return true;\n        }\n      }\n      return node.children.some((c) => hasScopeRef(c, ids));\n    case 11:\n      if (hasScopeRef(node.source, ids)) {\n        return true;\n      }\n      return node.children.some((c) => hasScopeRef(c, ids));\n    case 9:\n      return node.branches.some((b) => hasScopeRef(b, ids));\n    case 10:\n      if (hasScopeRef(node.condition, ids)) {\n        return true;\n      }\n      return node.children.some((c) => hasScopeRef(c, ids));\n    case 4:\n      return !node.isStatic && isSimpleIdentifier(node.content) && !!ids[node.content];\n    case 8:\n      return node.children.some((c) => shared.isObject(c) && hasScopeRef(c, ids));\n    case 5:\n    case 12:\n      return hasScopeRef(node.content, ids);\n    case 2:\n    case 3:\n    case 20:\n      return false;\n    default:\n      return false;\n  }\n}\nfunction getMemoedVNodeCall(node) {\n  if (node.type === 14 && node.callee === WITH_MEMO) {\n    return node.arguments[1].returns;\n  } else {\n    return node;\n  }\n}\nconst forAliasRE = /([\\s\\S]*?)\\s+(?:in|of)\\s+(\\S[\\s\\S]*)/;\n\nconst defaultParserOptions = {\n  parseMode: \"base\",\n  ns: 0,\n  delimiters: [`{{`, `}}`],\n  getNamespace: () => 0,\n  isVoidTag: shared.NO,\n  isPreTag: shared.NO,\n  isIgnoreNewlineTag: shared.NO,\n  isCustomElement: shared.NO,\n  onError: defaultOnError,\n  onWarn: defaultOnWarn,\n  comments: false,\n  prefixIdentifiers: false\n};\nlet currentOptions = defaultParserOptions;\nlet currentRoot = null;\nlet currentInput = \"\";\nlet currentOpenTag = null;\nlet currentProp = null;\nlet currentAttrValue = \"\";\nlet currentAttrStartIndex = -1;\nlet currentAttrEndIndex = -1;\nlet inPre = 0;\nlet inVPre = false;\nlet currentVPreBoundary = null;\nconst stack = [];\nconst tokenizer = new Tokenizer(stack, {\n  onerr: emitError,\n  ontext(start, end) {\n    onText(getSlice(start, end), start, end);\n  },\n  ontextentity(char, start, end) {\n    onText(char, start, end);\n  },\n  oninterpolation(start, end) {\n    if (inVPre) {\n      return onText(getSlice(start, end), start, end);\n    }\n    let innerStart = start + tokenizer.delimiterOpen.length;\n    let innerEnd = end - tokenizer.delimiterClose.length;\n    while (isWhitespace(currentInput.charCodeAt(innerStart))) {\n      innerStart++;\n    }\n    while (isWhitespace(currentInput.charCodeAt(innerEnd - 1))) {\n      innerEnd--;\n    }\n    let exp = getSlice(innerStart, innerEnd);\n    if (exp.includes(\"&\")) {\n      {\n        exp = decode_js.decodeHTML(exp);\n      }\n    }\n    addNode({\n      type: 5,\n      content: createExp(exp, false, getLoc(innerStart, innerEnd)),\n      loc: getLoc(start, end)\n    });\n  },\n  onopentagname(start, end) {\n    const name = getSlice(start, end);\n    currentOpenTag = {\n      type: 1,\n      tag: name,\n      ns: currentOptions.getNamespace(name, stack[0], currentOptions.ns),\n      tagType: 0,\n      // will be refined on tag close\n      props: [],\n      children: [],\n      loc: getLoc(start - 1, end),\n      codegenNode: void 0\n    };\n  },\n  onopentagend(end) {\n    endOpenTag(end);\n  },\n  onclosetag(start, end) {\n    const name = getSlice(start, end);\n    if (!currentOptions.isVoidTag(name)) {\n      let found = false;\n      for (let i = 0; i < stack.length; i++) {\n        const e = stack[i];\n        if (e.tag.toLowerCase() === name.toLowerCase()) {\n          found = true;\n          if (i > 0) {\n            emitError(24, stack[0].loc.start.offset);\n          }\n          for (let j = 0; j <= i; j++) {\n            const el = stack.shift();\n            onCloseTag(el, end, j < i);\n          }\n          break;\n        }\n      }\n      if (!found) {\n        emitError(23, backTrack(start, 60));\n      }\n    }\n  },\n  onselfclosingtag(end) {\n    const name = currentOpenTag.tag;\n    currentOpenTag.isSelfClosing = true;\n    endOpenTag(end);\n    if (stack[0] && stack[0].tag === name) {\n      onCloseTag(stack.shift(), end);\n    }\n  },\n  onattribname(start, end) {\n    currentProp = {\n      type: 6,\n      name: getSlice(start, end),\n      nameLoc: getLoc(start, end),\n      value: void 0,\n      loc: getLoc(start)\n    };\n  },\n  ondirname(start, end) {\n    const raw = getSlice(start, end);\n    const name = raw === \".\" || raw === \":\" ? \"bind\" : raw === \"@\" ? \"on\" : raw === \"#\" ? \"slot\" : raw.slice(2);\n    if (!inVPre && name === \"\") {\n      emitError(26, start);\n    }\n    if (inVPre || name === \"\") {\n      currentProp = {\n        type: 6,\n        name: raw,\n        nameLoc: getLoc(start, end),\n        value: void 0,\n        loc: getLoc(start)\n      };\n    } else {\n      currentProp = {\n        type: 7,\n        name,\n        rawName: raw,\n        exp: void 0,\n        arg: void 0,\n        modifiers: raw === \".\" ? [createSimpleExpression(\"prop\")] : [],\n        loc: getLoc(start)\n      };\n      if (name === \"pre\") {\n        inVPre = tokenizer.inVPre = true;\n        currentVPreBoundary = currentOpenTag;\n        const props = currentOpenTag.props;\n        for (let i = 0; i < props.length; i++) {\n          if (props[i].type === 7) {\n            props[i] = dirToAttr(props[i]);\n          }\n        }\n      }\n    }\n  },\n  ondirarg(start, end) {\n    if (start === end) return;\n    const arg = getSlice(start, end);\n    if (inVPre && !isVPre(currentProp)) {\n      currentProp.name += arg;\n      setLocEnd(currentProp.nameLoc, end);\n    } else {\n      const isStatic = arg[0] !== `[`;\n      currentProp.arg = createExp(\n        isStatic ? arg : arg.slice(1, -1),\n        isStatic,\n        getLoc(start, end),\n        isStatic ? 3 : 0\n      );\n    }\n  },\n  ondirmodifier(start, end) {\n    const mod = getSlice(start, end);\n    if (inVPre && !isVPre(currentProp)) {\n      currentProp.name += \".\" + mod;\n      setLocEnd(currentProp.nameLoc, end);\n    } else if (currentProp.name === \"slot\") {\n      const arg = currentProp.arg;\n      if (arg) {\n        arg.content += \".\" + mod;\n        setLocEnd(arg.loc, end);\n      }\n    } else {\n      const exp = createSimpleExpression(mod, true, getLoc(start, end));\n      currentProp.modifiers.push(exp);\n    }\n  },\n  onattribdata(start, end) {\n    currentAttrValue += getSlice(start, end);\n    if (currentAttrStartIndex < 0) currentAttrStartIndex = start;\n    currentAttrEndIndex = end;\n  },\n  onattribentity(char, start, end) {\n    currentAttrValue += char;\n    if (currentAttrStartIndex < 0) currentAttrStartIndex = start;\n    currentAttrEndIndex = end;\n  },\n  onattribnameend(end) {\n    const start = currentProp.loc.start.offset;\n    const name = getSlice(start, end);\n    if (currentProp.type === 7) {\n      currentProp.rawName = name;\n    }\n    if (currentOpenTag.props.some(\n      (p) => (p.type === 7 ? p.rawName : p.name) === name\n    )) {\n      emitError(2, start);\n    }\n  },\n  onattribend(quote, end) {\n    if (currentOpenTag && currentProp) {\n      setLocEnd(currentProp.loc, end);\n      if (quote !== 0) {\n        if (currentProp.type === 6) {\n          if (currentProp.name === \"class\") {\n            currentAttrValue = condense(currentAttrValue).trim();\n          }\n          if (quote === 1 && !currentAttrValue) {\n            emitError(13, end);\n          }\n          currentProp.value = {\n            type: 2,\n            content: currentAttrValue,\n            loc: quote === 1 ? getLoc(currentAttrStartIndex, currentAttrEndIndex) : getLoc(currentAttrStartIndex - 1, currentAttrEndIndex + 1)\n          };\n          if (tokenizer.inSFCRoot && currentOpenTag.tag === \"template\" && currentProp.name === \"lang\" && currentAttrValue && currentAttrValue !== \"html\") {\n            tokenizer.enterRCDATA(toCharCodes(`</template`), 0);\n          }\n        } else {\n          let expParseMode = 0 /* Normal */;\n          {\n            if (currentProp.name === \"for\") {\n              expParseMode = 3 /* Skip */;\n            } else if (currentProp.name === \"slot\") {\n              expParseMode = 1 /* Params */;\n            } else if (currentProp.name === \"on\" && currentAttrValue.includes(\";\")) {\n              expParseMode = 2 /* Statements */;\n            }\n          }\n          currentProp.exp = createExp(\n            currentAttrValue,\n            false,\n            getLoc(currentAttrStartIndex, currentAttrEndIndex),\n            0,\n            expParseMode\n          );\n          if (currentProp.name === \"for\") {\n            currentProp.forParseResult = parseForExpression(currentProp.exp);\n          }\n          let syncIndex = -1;\n          if (currentProp.name === \"bind\" && (syncIndex = currentProp.modifiers.findIndex(\n            (mod) => mod.content === \"sync\"\n          )) > -1 && checkCompatEnabled(\n            \"COMPILER_V_BIND_SYNC\",\n            currentOptions,\n            currentProp.loc,\n            currentProp.arg.loc.source\n          )) {\n            currentProp.name = \"model\";\n            currentProp.modifiers.splice(syncIndex, 1);\n          }\n        }\n      }\n      if (currentProp.type !== 7 || currentProp.name !== \"pre\") {\n        currentOpenTag.props.push(currentProp);\n      }\n    }\n    currentAttrValue = \"\";\n    currentAttrStartIndex = currentAttrEndIndex = -1;\n  },\n  oncomment(start, end) {\n    if (currentOptions.comments) {\n      addNode({\n        type: 3,\n        content: getSlice(start, end),\n        loc: getLoc(start - 4, end + 3)\n      });\n    }\n  },\n  onend() {\n    const end = currentInput.length;\n    if (tokenizer.state !== 1) {\n      switch (tokenizer.state) {\n        case 5:\n        case 8:\n          emitError(5, end);\n          break;\n        case 3:\n        case 4:\n          emitError(\n            25,\n            tokenizer.sectionStart\n          );\n          break;\n        case 28:\n          if (tokenizer.currentSequence === Sequences.CdataEnd) {\n            emitError(6, end);\n          } else {\n            emitError(7, end);\n          }\n          break;\n        case 6:\n        case 7:\n        case 9:\n        case 11:\n        case 12:\n        case 13:\n        case 14:\n        case 15:\n        case 16:\n        case 17:\n        case 18:\n        case 19:\n        // \"\n        case 20:\n        // '\n        case 21:\n          emitError(9, end);\n          break;\n      }\n    }\n    for (let index = 0; index < stack.length; index++) {\n      onCloseTag(stack[index], end - 1);\n      emitError(24, stack[index].loc.start.offset);\n    }\n  },\n  oncdata(start, end) {\n    if (stack[0].ns !== 0) {\n      onText(getSlice(start, end), start, end);\n    } else {\n      emitError(1, start - 9);\n    }\n  },\n  onprocessinginstruction(start) {\n    if ((stack[0] ? stack[0].ns : currentOptions.ns) === 0) {\n      emitError(\n        21,\n        start - 1\n      );\n    }\n  }\n});\nconst forIteratorRE = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/;\nconst stripParensRE = /^\\(|\\)$/g;\nfunction parseForExpression(input) {\n  const loc = input.loc;\n  const exp = input.content;\n  const inMatch = exp.match(forAliasRE);\n  if (!inMatch) return;\n  const [, LHS, RHS] = inMatch;\n  const createAliasExpression = (content, offset, asParam = false) => {\n    const start = loc.start.offset + offset;\n    const end = start + content.length;\n    return createExp(\n      content,\n      false,\n      getLoc(start, end),\n      0,\n      asParam ? 1 /* Params */ : 0 /* Normal */\n    );\n  };\n  const result = {\n    source: createAliasExpression(RHS.trim(), exp.indexOf(RHS, LHS.length)),\n    value: void 0,\n    key: void 0,\n    index: void 0,\n    finalized: false\n  };\n  let valueContent = LHS.trim().replace(stripParensRE, \"\").trim();\n  const trimmedOffset = LHS.indexOf(valueContent);\n  const iteratorMatch = valueContent.match(forIteratorRE);\n  if (iteratorMatch) {\n    valueContent = valueContent.replace(forIteratorRE, \"\").trim();\n    const keyContent = iteratorMatch[1].trim();\n    let keyOffset;\n    if (keyContent) {\n      keyOffset = exp.indexOf(keyContent, trimmedOffset + valueContent.length);\n      result.key = createAliasExpression(keyContent, keyOffset, true);\n    }\n    if (iteratorMatch[2]) {\n      const indexContent = iteratorMatch[2].trim();\n      if (indexContent) {\n        result.index = createAliasExpression(\n          indexContent,\n          exp.indexOf(\n            indexContent,\n            result.key ? keyOffset + keyContent.length : trimmedOffset + valueContent.length\n          ),\n          true\n        );\n      }\n    }\n  }\n  if (valueContent) {\n    result.value = createAliasExpression(valueContent, trimmedOffset, true);\n  }\n  return result;\n}\nfunction getSlice(start, end) {\n  return currentInput.slice(start, end);\n}\nfunction endOpenTag(end) {\n  if (tokenizer.inSFCRoot) {\n    currentOpenTag.innerLoc = getLoc(end + 1, end + 1);\n  }\n  addNode(currentOpenTag);\n  const { tag, ns } = currentOpenTag;\n  if (ns === 0 && currentOptions.isPreTag(tag)) {\n    inPre++;\n  }\n  if (currentOptions.isVoidTag(tag)) {\n    onCloseTag(currentOpenTag, end);\n  } else {\n    stack.unshift(currentOpenTag);\n    if (ns === 1 || ns === 2) {\n      tokenizer.inXML = true;\n    }\n  }\n  currentOpenTag = null;\n}\nfunction onText(content, start, end) {\n  const parent = stack[0] || currentRoot;\n  const lastNode = parent.children[parent.children.length - 1];\n  if (lastNode && lastNode.type === 2) {\n    lastNode.content += content;\n    setLocEnd(lastNode.loc, end);\n  } else {\n    parent.children.push({\n      type: 2,\n      content,\n      loc: getLoc(start, end)\n    });\n  }\n}\nfunction onCloseTag(el, end, isImplied = false) {\n  if (isImplied) {\n    setLocEnd(el.loc, backTrack(end, 60));\n  } else {\n    setLocEnd(el.loc, lookAhead(end, 62) + 1);\n  }\n  if (tokenizer.inSFCRoot) {\n    if (el.children.length) {\n      el.innerLoc.end = shared.extend({}, el.children[el.children.length - 1].loc.end);\n    } else {\n      el.innerLoc.end = shared.extend({}, el.innerLoc.start);\n    }\n    el.innerLoc.source = getSlice(\n      el.innerLoc.start.offset,\n      el.innerLoc.end.offset\n    );\n  }\n  const { tag, ns, children } = el;\n  if (!inVPre) {\n    if (tag === \"slot\") {\n      el.tagType = 2;\n    } else if (isFragmentTemplate(el)) {\n      el.tagType = 3;\n    } else if (isComponent(el)) {\n      el.tagType = 1;\n    }\n  }\n  if (!tokenizer.inRCDATA) {\n    el.children = condenseWhitespace(children);\n  }\n  if (ns === 0 && currentOptions.isIgnoreNewlineTag(tag)) {\n    const first = children[0];\n    if (first && first.type === 2) {\n      first.content = first.content.replace(/^\\r?\\n/, \"\");\n    }\n  }\n  if (ns === 0 && currentOptions.isPreTag(tag)) {\n    inPre--;\n  }\n  if (currentVPreBoundary === el) {\n    inVPre = tokenizer.inVPre = false;\n    currentVPreBoundary = null;\n  }\n  if (tokenizer.inXML && (stack[0] ? stack[0].ns : currentOptions.ns) === 0) {\n    tokenizer.inXML = false;\n  }\n  {\n    const props = el.props;\n    if (!tokenizer.inSFCRoot && isCompatEnabled(\n      \"COMPILER_NATIVE_TEMPLATE\",\n      currentOptions\n    ) && el.tag === \"template\" && !isFragmentTemplate(el)) {\n      const parent = stack[0] || currentRoot;\n      const index = parent.children.indexOf(el);\n      parent.children.splice(index, 1, ...el.children);\n    }\n    const inlineTemplateProp = props.find(\n      (p) => p.type === 6 && p.name === \"inline-template\"\n    );\n    if (inlineTemplateProp && checkCompatEnabled(\n      \"COMPILER_INLINE_TEMPLATE\",\n      currentOptions,\n      inlineTemplateProp.loc\n    ) && el.children.length) {\n      inlineTemplateProp.value = {\n        type: 2,\n        content: getSlice(\n          el.children[0].loc.start.offset,\n          el.children[el.children.length - 1].loc.end.offset\n        ),\n        loc: inlineTemplateProp.loc\n      };\n    }\n  }\n}\nfunction lookAhead(index, c) {\n  let i = index;\n  while (currentInput.charCodeAt(i) !== c && i < currentInput.length - 1) i++;\n  return i;\n}\nfunction backTrack(index, c) {\n  let i = index;\n  while (currentInput.charCodeAt(i) !== c && i >= 0) i--;\n  return i;\n}\nconst specialTemplateDir = /* @__PURE__ */ new Set([\"if\", \"else\", \"else-if\", \"for\", \"slot\"]);\nfunction isFragmentTemplate({ tag, props }) {\n  if (tag === \"template\") {\n    for (let i = 0; i < props.length; i++) {\n      if (props[i].type === 7 && specialTemplateDir.has(props[i].name)) {\n        return true;\n      }\n    }\n  }\n  return false;\n}\nfunction isComponent({ tag, props }) {\n  if (currentOptions.isCustomElement(tag)) {\n    return false;\n  }\n  if (tag === \"component\" || isUpperCase(tag.charCodeAt(0)) || isCoreComponent(tag) || currentOptions.isBuiltInComponent && currentOptions.isBuiltInComponent(tag) || currentOptions.isNativeTag && !currentOptions.isNativeTag(tag)) {\n    return true;\n  }\n  for (let i = 0; i < props.length; i++) {\n    const p = props[i];\n    if (p.type === 6) {\n      if (p.name === \"is\" && p.value) {\n        if (p.value.content.startsWith(\"vue:\")) {\n          return true;\n        } else if (checkCompatEnabled(\n          \"COMPILER_IS_ON_ELEMENT\",\n          currentOptions,\n          p.loc\n        )) {\n          return true;\n        }\n      }\n    } else if (// :is on plain element - only treat as component in compat mode\n    p.name === \"bind\" && isStaticArgOf(p.arg, \"is\") && checkCompatEnabled(\n      \"COMPILER_IS_ON_ELEMENT\",\n      currentOptions,\n      p.loc\n    )) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction isUpperCase(c) {\n  return c > 64 && c < 91;\n}\nconst windowsNewlineRE = /\\r\\n/g;\nfunction condenseWhitespace(nodes) {\n  const shouldCondense = currentOptions.whitespace !== \"preserve\";\n  let removedWhitespace = false;\n  for (let i = 0; i < nodes.length; i++) {\n    const node = nodes[i];\n    if (node.type === 2) {\n      if (!inPre) {\n        if (isAllWhitespace(node.content)) {\n          const prev = nodes[i - 1] && nodes[i - 1].type;\n          const next = nodes[i + 1] && nodes[i + 1].type;\n          if (!prev || !next || shouldCondense && (prev === 3 && (next === 3 || next === 1) || prev === 1 && (next === 3 || next === 1 && hasNewlineChar(node.content)))) {\n            removedWhitespace = true;\n            nodes[i] = null;\n          } else {\n            node.content = \" \";\n          }\n        } else if (shouldCondense) {\n          node.content = condense(node.content);\n        }\n      } else {\n        node.content = node.content.replace(windowsNewlineRE, \"\\n\");\n      }\n    }\n  }\n  return removedWhitespace ? nodes.filter(Boolean) : nodes;\n}\nfunction isAllWhitespace(str) {\n  for (let i = 0; i < str.length; i++) {\n    if (!isWhitespace(str.charCodeAt(i))) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction hasNewlineChar(str) {\n  for (let i = 0; i < str.length; i++) {\n    const c = str.charCodeAt(i);\n    if (c === 10 || c === 13) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction condense(str) {\n  let ret = \"\";\n  let prevCharIsWhitespace = false;\n  for (let i = 0; i < str.length; i++) {\n    if (isWhitespace(str.charCodeAt(i))) {\n      if (!prevCharIsWhitespace) {\n        ret += \" \";\n        prevCharIsWhitespace = true;\n      }\n    } else {\n      ret += str[i];\n      prevCharIsWhitespace = false;\n    }\n  }\n  return ret;\n}\nfunction addNode(node) {\n  (stack[0] || currentRoot).children.push(node);\n}\nfunction getLoc(start, end) {\n  return {\n    start: tokenizer.getPos(start),\n    // @ts-expect-error allow late attachment\n    end: end == null ? end : tokenizer.getPos(end),\n    // @ts-expect-error allow late attachment\n    source: end == null ? end : getSlice(start, end)\n  };\n}\nfunction cloneLoc(loc) {\n  return getLoc(loc.start.offset, loc.end.offset);\n}\nfunction setLocEnd(loc, end) {\n  loc.end = tokenizer.getPos(end);\n  loc.source = getSlice(loc.start.offset, end);\n}\nfunction dirToAttr(dir) {\n  const attr = {\n    type: 6,\n    name: dir.rawName,\n    nameLoc: getLoc(\n      dir.loc.start.offset,\n      dir.loc.start.offset + dir.rawName.length\n    ),\n    value: void 0,\n    loc: dir.loc\n  };\n  if (dir.exp) {\n    const loc = dir.exp.loc;\n    if (loc.end.offset < dir.loc.end.offset) {\n      loc.start.offset--;\n      loc.start.column--;\n      loc.end.offset++;\n      loc.end.column++;\n    }\n    attr.value = {\n      type: 2,\n      content: dir.exp.content,\n      loc\n    };\n  }\n  return attr;\n}\nfunction createExp(content, isStatic = false, loc, constType = 0, parseMode = 0 /* Normal */) {\n  const exp = createSimpleExpression(content, isStatic, loc, constType);\n  if (!isStatic && currentOptions.prefixIdentifiers && parseMode !== 3 /* Skip */ && content.trim()) {\n    if (isSimpleIdentifier(content)) {\n      exp.ast = null;\n      return exp;\n    }\n    try {\n      const plugins = currentOptions.expressionPlugins;\n      const options = {\n        plugins: plugins ? [...plugins, \"typescript\"] : [\"typescript\"]\n      };\n      if (parseMode === 2 /* Statements */) {\n        exp.ast = parser.parse(` ${content} `, options).program;\n      } else if (parseMode === 1 /* Params */) {\n        exp.ast = parser.parseExpression(`(${content})=>{}`, options);\n      } else {\n        exp.ast = parser.parseExpression(`(${content})`, options);\n      }\n    } catch (e) {\n      exp.ast = false;\n      emitError(45, loc.start.offset, e.message);\n    }\n  }\n  return exp;\n}\nfunction emitError(code, index, message) {\n  currentOptions.onError(\n    createCompilerError(code, getLoc(index, index), void 0, message)\n  );\n}\nfunction reset() {\n  tokenizer.reset();\n  currentOpenTag = null;\n  currentProp = null;\n  currentAttrValue = \"\";\n  currentAttrStartIndex = -1;\n  currentAttrEndIndex = -1;\n  stack.length = 0;\n}\nfunction baseParse(input, options) {\n  reset();\n  currentInput = input;\n  currentOptions = shared.extend({}, defaultParserOptions);\n  if (options) {\n    let key;\n    for (key in options) {\n      if (options[key] != null) {\n        currentOptions[key] = options[key];\n      }\n    }\n  }\n  tokenizer.mode = currentOptions.parseMode === \"html\" ? 1 : currentOptions.parseMode === \"sfc\" ? 2 : 0;\n  tokenizer.inXML = currentOptions.ns === 1 || currentOptions.ns === 2;\n  const delimiters = options && options.delimiters;\n  if (delimiters) {\n    tokenizer.delimiterOpen = toCharCodes(delimiters[0]);\n    tokenizer.delimiterClose = toCharCodes(delimiters[1]);\n  }\n  const root = currentRoot = createRoot([], input);\n  tokenizer.parse(currentInput);\n  root.loc = getLoc(0, input.length);\n  root.children = condenseWhitespace(root.children);\n  currentRoot = null;\n  return root;\n}\n\nfunction cacheStatic(root, context) {\n  walk(\n    root,\n    void 0,\n    context,\n    // Root node is unfortunately non-hoistable due to potential parent\n    // fallthrough attributes.\n    !!getSingleElementRoot(root)\n  );\n}\nfunction getSingleElementRoot(root) {\n  const children = root.children.filter((x) => x.type !== 3);\n  return children.length === 1 && children[0].type === 1 && !isSlotOutlet(children[0]) ? children[0] : null;\n}\nfunction walk(node, parent, context, doNotHoistNode = false, inFor = false) {\n  const { children } = node;\n  const toCache = [];\n  for (let i = 0; i < children.length; i++) {\n    const child = children[i];\n    if (child.type === 1 && child.tagType === 0) {\n      const constantType = doNotHoistNode ? 0 : getConstantType(child, context);\n      if (constantType > 0) {\n        if (constantType >= 2) {\n          child.codegenNode.patchFlag = -1;\n          toCache.push(child);\n          continue;\n        }\n      } else {\n        const codegenNode = child.codegenNode;\n        if (codegenNode.type === 13) {\n          const flag = codegenNode.patchFlag;\n          if ((flag === void 0 || flag === 512 || flag === 1) && getGeneratedPropsConstantType(child, context) >= 2) {\n            const props = getNodeProps(child);\n            if (props) {\n              codegenNode.props = context.hoist(props);\n            }\n          }\n          if (codegenNode.dynamicProps) {\n            codegenNode.dynamicProps = context.hoist(codegenNode.dynamicProps);\n          }\n        }\n      }\n    } else if (child.type === 12) {\n      const constantType = doNotHoistNode ? 0 : getConstantType(child, context);\n      if (constantType >= 2) {\n        if (child.codegenNode.type === 14 && child.codegenNode.arguments.length > 0) {\n          child.codegenNode.arguments.push(\n            -1 + (``)\n          );\n        }\n        toCache.push(child);\n        continue;\n      }\n    }\n    if (child.type === 1) {\n      const isComponent = child.tagType === 1;\n      if (isComponent) {\n        context.scopes.vSlot++;\n      }\n      walk(child, node, context, false, inFor);\n      if (isComponent) {\n        context.scopes.vSlot--;\n      }\n    } else if (child.type === 11) {\n      walk(child, node, context, child.children.length === 1, true);\n    } else if (child.type === 9) {\n      for (let i2 = 0; i2 < child.branches.length; i2++) {\n        walk(\n          child.branches[i2],\n          node,\n          context,\n          child.branches[i2].children.length === 1,\n          inFor\n        );\n      }\n    }\n  }\n  let cachedAsArray = false;\n  const slotCacheKeys = [];\n  if (toCache.length === children.length && node.type === 1) {\n    if (node.tagType === 0 && node.codegenNode && node.codegenNode.type === 13 && shared.isArray(node.codegenNode.children)) {\n      node.codegenNode.children = getCacheExpression(\n        createArrayExpression(node.codegenNode.children)\n      );\n      cachedAsArray = true;\n    } else if (node.tagType === 1 && node.codegenNode && node.codegenNode.type === 13 && node.codegenNode.children && !shared.isArray(node.codegenNode.children) && node.codegenNode.children.type === 15) {\n      const slot = getSlotNode(node.codegenNode, \"default\");\n      if (slot) {\n        slotCacheKeys.push(context.cached.length);\n        slot.returns = getCacheExpression(\n          createArrayExpression(slot.returns)\n        );\n        cachedAsArray = true;\n      }\n    } else if (node.tagType === 3 && parent && parent.type === 1 && parent.tagType === 1 && parent.codegenNode && parent.codegenNode.type === 13 && parent.codegenNode.children && !shared.isArray(parent.codegenNode.children) && parent.codegenNode.children.type === 15) {\n      const slotName = findDir(node, \"slot\", true);\n      const slot = slotName && slotName.arg && getSlotNode(parent.codegenNode, slotName.arg);\n      if (slot) {\n        slotCacheKeys.push(context.cached.length);\n        slot.returns = getCacheExpression(\n          createArrayExpression(slot.returns)\n        );\n        cachedAsArray = true;\n      }\n    }\n  }\n  if (!cachedAsArray) {\n    for (const child of toCache) {\n      slotCacheKeys.push(context.cached.length);\n      child.codegenNode = context.cache(child.codegenNode);\n    }\n  }\n  if (slotCacheKeys.length && node.type === 1 && node.tagType === 1 && node.codegenNode && node.codegenNode.type === 13 && node.codegenNode.children && !shared.isArray(node.codegenNode.children) && node.codegenNode.children.type === 15) {\n    node.codegenNode.children.properties.push(\n      createObjectProperty(\n        `__`,\n        createSimpleExpression(JSON.stringify(slotCacheKeys), false)\n      )\n    );\n  }\n  function getCacheExpression(value) {\n    const exp = context.cache(value);\n    if (inFor && context.hmr) {\n      exp.needArraySpread = true;\n    }\n    return exp;\n  }\n  function getSlotNode(node2, name) {\n    if (node2.children && !shared.isArray(node2.children) && node2.children.type === 15) {\n      const slot = node2.children.properties.find(\n        (p) => p.key === name || p.key.content === name\n      );\n      return slot && slot.value;\n    }\n  }\n  if (toCache.length && context.transformHoist) {\n    context.transformHoist(children, context, node);\n  }\n}\nfunction getConstantType(node, context) {\n  const { constantCache } = context;\n  switch (node.type) {\n    case 1:\n      if (node.tagType !== 0) {\n        return 0;\n      }\n      const cached = constantCache.get(node);\n      if (cached !== void 0) {\n        return cached;\n      }\n      const codegenNode = node.codegenNode;\n      if (codegenNode.type !== 13) {\n        return 0;\n      }\n      if (codegenNode.isBlock && node.tag !== \"svg\" && node.tag !== \"foreignObject\" && node.tag !== \"math\") {\n        return 0;\n      }\n      if (codegenNode.patchFlag === void 0) {\n        let returnType2 = 3;\n        const generatedPropsType = getGeneratedPropsConstantType(node, context);\n        if (generatedPropsType === 0) {\n          constantCache.set(node, 0);\n          return 0;\n        }\n        if (generatedPropsType < returnType2) {\n          returnType2 = generatedPropsType;\n        }\n        for (let i = 0; i < node.children.length; i++) {\n          const childType = getConstantType(node.children[i], context);\n          if (childType === 0) {\n            constantCache.set(node, 0);\n            return 0;\n          }\n          if (childType < returnType2) {\n            returnType2 = childType;\n          }\n        }\n        if (returnType2 > 1) {\n          for (let i = 0; i < node.props.length; i++) {\n            const p = node.props[i];\n            if (p.type === 7 && p.name === \"bind\" && p.exp) {\n              const expType = getConstantType(p.exp, context);\n              if (expType === 0) {\n                constantCache.set(node, 0);\n                return 0;\n              }\n              if (expType < returnType2) {\n                returnType2 = expType;\n              }\n            }\n          }\n        }\n        if (codegenNode.isBlock) {\n          for (let i = 0; i < node.props.length; i++) {\n            const p = node.props[i];\n            if (p.type === 7) {\n              constantCache.set(node, 0);\n              return 0;\n            }\n          }\n          context.removeHelper(OPEN_BLOCK);\n          context.removeHelper(\n            getVNodeBlockHelper(context.inSSR, codegenNode.isComponent)\n          );\n          codegenNode.isBlock = false;\n          context.helper(getVNodeHelper(context.inSSR, codegenNode.isComponent));\n        }\n        constantCache.set(node, returnType2);\n        return returnType2;\n      } else {\n        constantCache.set(node, 0);\n        return 0;\n      }\n    case 2:\n    case 3:\n      return 3;\n    case 9:\n    case 11:\n    case 10:\n      return 0;\n    case 5:\n    case 12:\n      return getConstantType(node.content, context);\n    case 4:\n      return node.constType;\n    case 8:\n      let returnType = 3;\n      for (let i = 0; i < node.children.length; i++) {\n        const child = node.children[i];\n        if (shared.isString(child) || shared.isSymbol(child)) {\n          continue;\n        }\n        const childType = getConstantType(child, context);\n        if (childType === 0) {\n          return 0;\n        } else if (childType < returnType) {\n          returnType = childType;\n        }\n      }\n      return returnType;\n    case 20:\n      return 2;\n    default:\n      return 0;\n  }\n}\nconst allowHoistedHelperSet = /* @__PURE__ */ new Set([\n  NORMALIZE_CLASS,\n  NORMALIZE_STYLE,\n  NORMALIZE_PROPS,\n  GUARD_REACTIVE_PROPS\n]);\nfunction getConstantTypeOfHelperCall(value, context) {\n  if (value.type === 14 && !shared.isString(value.callee) && allowHoistedHelperSet.has(value.callee)) {\n    const arg = value.arguments[0];\n    if (arg.type === 4) {\n      return getConstantType(arg, context);\n    } else if (arg.type === 14) {\n      return getConstantTypeOfHelperCall(arg, context);\n    }\n  }\n  return 0;\n}\nfunction getGeneratedPropsConstantType(node, context) {\n  let returnType = 3;\n  const props = getNodeProps(node);\n  if (props && props.type === 15) {\n    const { properties } = props;\n    for (let i = 0; i < properties.length; i++) {\n      const { key, value } = properties[i];\n      const keyType = getConstantType(key, context);\n      if (keyType === 0) {\n        return keyType;\n      }\n      if (keyType < returnType) {\n        returnType = keyType;\n      }\n      let valueType;\n      if (value.type === 4) {\n        valueType = getConstantType(value, context);\n      } else if (value.type === 14) {\n        valueType = getConstantTypeOfHelperCall(value, context);\n      } else {\n        valueType = 0;\n      }\n      if (valueType === 0) {\n        return valueType;\n      }\n      if (valueType < returnType) {\n        returnType = valueType;\n      }\n    }\n  }\n  return returnType;\n}\nfunction getNodeProps(node) {\n  const codegenNode = node.codegenNode;\n  if (codegenNode.type === 13) {\n    return codegenNode.props;\n  }\n}\n\nfunction createTransformContext(root, {\n  filename = \"\",\n  prefixIdentifiers = false,\n  hoistStatic = false,\n  hmr = false,\n  cacheHandlers = false,\n  nodeTransforms = [],\n  directiveTransforms = {},\n  transformHoist = null,\n  isBuiltInComponent = shared.NOOP,\n  isCustomElement = shared.NOOP,\n  expressionPlugins = [],\n  scopeId = null,\n  slotted = true,\n  ssr = false,\n  inSSR = false,\n  ssrCssVars = ``,\n  bindingMetadata = shared.EMPTY_OBJ,\n  inline = false,\n  isTS = false,\n  onError = defaultOnError,\n  onWarn = defaultOnWarn,\n  compatConfig\n}) {\n  const nameMatch = filename.replace(/\\?.*$/, \"\").match(/([^/\\\\]+)\\.\\w+$/);\n  const context = {\n    // options\n    filename,\n    selfName: nameMatch && shared.capitalize(shared.camelize(nameMatch[1])),\n    prefixIdentifiers,\n    hoistStatic,\n    hmr,\n    cacheHandlers,\n    nodeTransforms,\n    directiveTransforms,\n    transformHoist,\n    isBuiltInComponent,\n    isCustomElement,\n    expressionPlugins,\n    scopeId,\n    slotted,\n    ssr,\n    inSSR,\n    ssrCssVars,\n    bindingMetadata,\n    inline,\n    isTS,\n    onError,\n    onWarn,\n    compatConfig,\n    // state\n    root,\n    helpers: /* @__PURE__ */ new Map(),\n    components: /* @__PURE__ */ new Set(),\n    directives: /* @__PURE__ */ new Set(),\n    hoists: [],\n    imports: [],\n    cached: [],\n    constantCache: /* @__PURE__ */ new WeakMap(),\n    temps: 0,\n    identifiers: /* @__PURE__ */ Object.create(null),\n    scopes: {\n      vFor: 0,\n      vSlot: 0,\n      vPre: 0,\n      vOnce: 0\n    },\n    parent: null,\n    grandParent: null,\n    currentNode: root,\n    childIndex: 0,\n    inVOnce: false,\n    // methods\n    helper(name) {\n      const count = context.helpers.get(name) || 0;\n      context.helpers.set(name, count + 1);\n      return name;\n    },\n    removeHelper(name) {\n      const count = context.helpers.get(name);\n      if (count) {\n        const currentCount = count - 1;\n        if (!currentCount) {\n          context.helpers.delete(name);\n        } else {\n          context.helpers.set(name, currentCount);\n        }\n      }\n    },\n    helperString(name) {\n      return `_${helperNameMap[context.helper(name)]}`;\n    },\n    replaceNode(node) {\n      context.parent.children[context.childIndex] = context.currentNode = node;\n    },\n    removeNode(node) {\n      const list = context.parent.children;\n      const removalIndex = node ? list.indexOf(node) : context.currentNode ? context.childIndex : -1;\n      if (!node || node === context.currentNode) {\n        context.currentNode = null;\n        context.onNodeRemoved();\n      } else {\n        if (context.childIndex > removalIndex) {\n          context.childIndex--;\n          context.onNodeRemoved();\n        }\n      }\n      context.parent.children.splice(removalIndex, 1);\n    },\n    onNodeRemoved: shared.NOOP,\n    addIdentifiers(exp) {\n      {\n        if (shared.isString(exp)) {\n          addId(exp);\n        } else if (exp.identifiers) {\n          exp.identifiers.forEach(addId);\n        } else if (exp.type === 4) {\n          addId(exp.content);\n        }\n      }\n    },\n    removeIdentifiers(exp) {\n      {\n        if (shared.isString(exp)) {\n          removeId(exp);\n        } else if (exp.identifiers) {\n          exp.identifiers.forEach(removeId);\n        } else if (exp.type === 4) {\n          removeId(exp.content);\n        }\n      }\n    },\n    hoist(exp) {\n      if (shared.isString(exp)) exp = createSimpleExpression(exp);\n      context.hoists.push(exp);\n      const identifier = createSimpleExpression(\n        `_hoisted_${context.hoists.length}`,\n        false,\n        exp.loc,\n        2\n      );\n      identifier.hoisted = exp;\n      return identifier;\n    },\n    cache(exp, isVNode = false, inVOnce = false) {\n      const cacheExp = createCacheExpression(\n        context.cached.length,\n        exp,\n        isVNode,\n        inVOnce\n      );\n      context.cached.push(cacheExp);\n      return cacheExp;\n    }\n  };\n  {\n    context.filters = /* @__PURE__ */ new Set();\n  }\n  function addId(id) {\n    const { identifiers } = context;\n    if (identifiers[id] === void 0) {\n      identifiers[id] = 0;\n    }\n    identifiers[id]++;\n  }\n  function removeId(id) {\n    context.identifiers[id]--;\n  }\n  return context;\n}\nfunction transform(root, options) {\n  const context = createTransformContext(root, options);\n  traverseNode(root, context);\n  if (options.hoistStatic) {\n    cacheStatic(root, context);\n  }\n  if (!options.ssr) {\n    createRootCodegen(root, context);\n  }\n  root.helpers = /* @__PURE__ */ new Set([...context.helpers.keys()]);\n  root.components = [...context.components];\n  root.directives = [...context.directives];\n  root.imports = context.imports;\n  root.hoists = context.hoists;\n  root.temps = context.temps;\n  root.cached = context.cached;\n  root.transformed = true;\n  {\n    root.filters = [...context.filters];\n  }\n}\nfunction createRootCodegen(root, context) {\n  const { helper } = context;\n  const { children } = root;\n  if (children.length === 1) {\n    const singleElementRootChild = getSingleElementRoot(root);\n    if (singleElementRootChild && singleElementRootChild.codegenNode) {\n      const codegenNode = singleElementRootChild.codegenNode;\n      if (codegenNode.type === 13) {\n        convertToBlock(codegenNode, context);\n      }\n      root.codegenNode = codegenNode;\n    } else {\n      root.codegenNode = children[0];\n    }\n  } else if (children.length > 1) {\n    let patchFlag = 64;\n    root.codegenNode = createVNodeCall(\n      context,\n      helper(FRAGMENT),\n      void 0,\n      root.children,\n      patchFlag,\n      void 0,\n      void 0,\n      true,\n      void 0,\n      false\n    );\n  } else ;\n}\nfunction traverseChildren(parent, context) {\n  let i = 0;\n  const nodeRemoved = () => {\n    i--;\n  };\n  for (; i < parent.children.length; i++) {\n    const child = parent.children[i];\n    if (shared.isString(child)) continue;\n    context.grandParent = context.parent;\n    context.parent = parent;\n    context.childIndex = i;\n    context.onNodeRemoved = nodeRemoved;\n    traverseNode(child, context);\n  }\n}\nfunction traverseNode(node, context) {\n  context.currentNode = node;\n  const { nodeTransforms } = context;\n  const exitFns = [];\n  for (let i2 = 0; i2 < nodeTransforms.length; i2++) {\n    const onExit = nodeTransforms[i2](node, context);\n    if (onExit) {\n      if (shared.isArray(onExit)) {\n        exitFns.push(...onExit);\n      } else {\n        exitFns.push(onExit);\n      }\n    }\n    if (!context.currentNode) {\n      return;\n    } else {\n      node = context.currentNode;\n    }\n  }\n  switch (node.type) {\n    case 3:\n      if (!context.ssr) {\n        context.helper(CREATE_COMMENT);\n      }\n      break;\n    case 5:\n      if (!context.ssr) {\n        context.helper(TO_DISPLAY_STRING);\n      }\n      break;\n    // for container types, further traverse downwards\n    case 9:\n      for (let i2 = 0; i2 < node.branches.length; i2++) {\n        traverseNode(node.branches[i2], context);\n      }\n      break;\n    case 10:\n    case 11:\n    case 1:\n    case 0:\n      traverseChildren(node, context);\n      break;\n  }\n  context.currentNode = node;\n  let i = exitFns.length;\n  while (i--) {\n    exitFns[i]();\n  }\n}\nfunction createStructuralDirectiveTransform(name, fn) {\n  const matches = shared.isString(name) ? (n) => n === name : (n) => name.test(n);\n  return (node, context) => {\n    if (node.type === 1) {\n      const { props } = node;\n      if (node.tagType === 3 && props.some(isVSlot)) {\n        return;\n      }\n      const exitFns = [];\n      for (let i = 0; i < props.length; i++) {\n        const prop = props[i];\n        if (prop.type === 7 && matches(prop.name)) {\n          props.splice(i, 1);\n          i--;\n          const onExit = fn(node, prop, context);\n          if (onExit) exitFns.push(onExit);\n        }\n      }\n      return exitFns;\n    }\n  };\n}\n\nconst PURE_ANNOTATION = `/*@__PURE__*/`;\nconst aliasHelper = (s) => `${helperNameMap[s]}: _${helperNameMap[s]}`;\nfunction createCodegenContext(ast, {\n  mode = \"function\",\n  prefixIdentifiers = mode === \"module\",\n  sourceMap = false,\n  filename = `template.vue.html`,\n  scopeId = null,\n  optimizeImports = false,\n  runtimeGlobalName = `Vue`,\n  runtimeModuleName = `vue`,\n  ssrRuntimeModuleName = \"vue/server-renderer\",\n  ssr = false,\n  isTS = false,\n  inSSR = false\n}) {\n  const context = {\n    mode,\n    prefixIdentifiers,\n    sourceMap,\n    filename,\n    scopeId,\n    optimizeImports,\n    runtimeGlobalName,\n    runtimeModuleName,\n    ssrRuntimeModuleName,\n    ssr,\n    isTS,\n    inSSR,\n    source: ast.source,\n    code: ``,\n    column: 1,\n    line: 1,\n    offset: 0,\n    indentLevel: 0,\n    pure: false,\n    map: void 0,\n    helper(key) {\n      return `_${helperNameMap[key]}`;\n    },\n    push(code, newlineIndex = -2 /* None */, node) {\n      context.code += code;\n      if (context.map) {\n        if (node) {\n          let name;\n          if (node.type === 4 && !node.isStatic) {\n            const content = node.content.replace(/^_ctx\\./, \"\");\n            if (content !== node.content && isSimpleIdentifier(content)) {\n              name = content;\n            }\n          }\n          if (node.loc.source) {\n            addMapping(node.loc.start, name);\n          }\n        }\n        if (newlineIndex === -3 /* Unknown */) {\n          advancePositionWithMutation(context, code);\n        } else {\n          context.offset += code.length;\n          if (newlineIndex === -2 /* None */) {\n            context.column += code.length;\n          } else {\n            if (newlineIndex === -1 /* End */) {\n              newlineIndex = code.length - 1;\n            }\n            context.line++;\n            context.column = code.length - newlineIndex;\n          }\n        }\n        if (node && node.loc !== locStub && node.loc.source) {\n          addMapping(node.loc.end);\n        }\n      }\n    },\n    indent() {\n      newline(++context.indentLevel);\n    },\n    deindent(withoutNewLine = false) {\n      if (withoutNewLine) {\n        --context.indentLevel;\n      } else {\n        newline(--context.indentLevel);\n      }\n    },\n    newline() {\n      newline(context.indentLevel);\n    }\n  };\n  function newline(n) {\n    context.push(\"\\n\" + `  `.repeat(n), 0 /* Start */);\n  }\n  function addMapping(loc, name = null) {\n    const { _names, _mappings } = context.map;\n    if (name !== null && !_names.has(name)) _names.add(name);\n    _mappings.add({\n      originalLine: loc.line,\n      originalColumn: loc.column - 1,\n      // source-map column is 0 based\n      generatedLine: context.line,\n      generatedColumn: context.column - 1,\n      source: filename,\n      name\n    });\n  }\n  if (sourceMap) {\n    context.map = new sourceMapJs.SourceMapGenerator();\n    context.map.setSourceContent(filename, context.source);\n    context.map._sources.add(filename);\n  }\n  return context;\n}\nfunction generate(ast, options = {}) {\n  const context = createCodegenContext(ast, options);\n  if (options.onContextCreated) options.onContextCreated(context);\n  const {\n    mode,\n    push,\n    prefixIdentifiers,\n    indent,\n    deindent,\n    newline,\n    scopeId,\n    ssr\n  } = context;\n  const helpers = Array.from(ast.helpers);\n  const hasHelpers = helpers.length > 0;\n  const useWithBlock = !prefixIdentifiers && mode !== \"module\";\n  const genScopeId = scopeId != null && mode === \"module\";\n  const isSetupInlined = !!options.inline;\n  const preambleContext = isSetupInlined ? createCodegenContext(ast, options) : context;\n  if (mode === \"module\") {\n    genModulePreamble(ast, preambleContext, genScopeId, isSetupInlined);\n  } else {\n    genFunctionPreamble(ast, preambleContext);\n  }\n  const functionName = ssr ? `ssrRender` : `render`;\n  const args = ssr ? [\"_ctx\", \"_push\", \"_parent\", \"_attrs\"] : [\"_ctx\", \"_cache\"];\n  if (options.bindingMetadata && !options.inline) {\n    args.push(\"$props\", \"$setup\", \"$data\", \"$options\");\n  }\n  const signature = options.isTS ? args.map((arg) => `${arg}: any`).join(\",\") : args.join(\", \");\n  if (isSetupInlined) {\n    push(`(${signature}) => {`);\n  } else {\n    push(`function ${functionName}(${signature}) {`);\n  }\n  indent();\n  if (useWithBlock) {\n    push(`with (_ctx) {`);\n    indent();\n    if (hasHelpers) {\n      push(\n        `const { ${helpers.map(aliasHelper).join(\", \")} } = _Vue\n`,\n        -1 /* End */\n      );\n      newline();\n    }\n  }\n  if (ast.components.length) {\n    genAssets(ast.components, \"component\", context);\n    if (ast.directives.length || ast.temps > 0) {\n      newline();\n    }\n  }\n  if (ast.directives.length) {\n    genAssets(ast.directives, \"directive\", context);\n    if (ast.temps > 0) {\n      newline();\n    }\n  }\n  if (ast.filters && ast.filters.length) {\n    newline();\n    genAssets(ast.filters, \"filter\", context);\n    newline();\n  }\n  if (ast.temps > 0) {\n    push(`let `);\n    for (let i = 0; i < ast.temps; i++) {\n      push(`${i > 0 ? `, ` : ``}_temp${i}`);\n    }\n  }\n  if (ast.components.length || ast.directives.length || ast.temps) {\n    push(`\n`, 0 /* Start */);\n    newline();\n  }\n  if (!ssr) {\n    push(`return `);\n  }\n  if (ast.codegenNode) {\n    genNode(ast.codegenNode, context);\n  } else {\n    push(`null`);\n  }\n  if (useWithBlock) {\n    deindent();\n    push(`}`);\n  }\n  deindent();\n  push(`}`);\n  return {\n    ast,\n    code: context.code,\n    preamble: isSetupInlined ? preambleContext.code : ``,\n    map: context.map ? context.map.toJSON() : void 0\n  };\n}\nfunction genFunctionPreamble(ast, context) {\n  const {\n    ssr,\n    prefixIdentifiers,\n    push,\n    newline,\n    runtimeModuleName,\n    runtimeGlobalName,\n    ssrRuntimeModuleName\n  } = context;\n  const VueBinding = ssr ? `require(${JSON.stringify(runtimeModuleName)})` : runtimeGlobalName;\n  const helpers = Array.from(ast.helpers);\n  if (helpers.length > 0) {\n    if (prefixIdentifiers) {\n      push(\n        `const { ${helpers.map(aliasHelper).join(\", \")} } = ${VueBinding}\n`,\n        -1 /* End */\n      );\n    } else {\n      push(`const _Vue = ${VueBinding}\n`, -1 /* End */);\n      if (ast.hoists.length) {\n        const staticHelpers = [\n          CREATE_VNODE,\n          CREATE_ELEMENT_VNODE,\n          CREATE_COMMENT,\n          CREATE_TEXT,\n          CREATE_STATIC\n        ].filter((helper) => helpers.includes(helper)).map(aliasHelper).join(\", \");\n        push(`const { ${staticHelpers} } = _Vue\n`, -1 /* End */);\n      }\n    }\n  }\n  if (ast.ssrHelpers && ast.ssrHelpers.length) {\n    push(\n      `const { ${ast.ssrHelpers.map(aliasHelper).join(\", \")} } = require(\"${ssrRuntimeModuleName}\")\n`,\n      -1 /* End */\n    );\n  }\n  genHoists(ast.hoists, context);\n  newline();\n  push(`return `);\n}\nfunction genModulePreamble(ast, context, genScopeId, inline) {\n  const {\n    push,\n    newline,\n    optimizeImports,\n    runtimeModuleName,\n    ssrRuntimeModuleName\n  } = context;\n  if (ast.helpers.size) {\n    const helpers = Array.from(ast.helpers);\n    if (optimizeImports) {\n      push(\n        `import { ${helpers.map((s) => helperNameMap[s]).join(\", \")} } from ${JSON.stringify(runtimeModuleName)}\n`,\n        -1 /* End */\n      );\n      push(\n        `\n// Binding optimization for webpack code-split\nconst ${helpers.map((s) => `_${helperNameMap[s]} = ${helperNameMap[s]}`).join(\", \")}\n`,\n        -1 /* End */\n      );\n    } else {\n      push(\n        `import { ${helpers.map((s) => `${helperNameMap[s]} as _${helperNameMap[s]}`).join(\", \")} } from ${JSON.stringify(runtimeModuleName)}\n`,\n        -1 /* End */\n      );\n    }\n  }\n  if (ast.ssrHelpers && ast.ssrHelpers.length) {\n    push(\n      `import { ${ast.ssrHelpers.map((s) => `${helperNameMap[s]} as _${helperNameMap[s]}`).join(\", \")} } from \"${ssrRuntimeModuleName}\"\n`,\n      -1 /* End */\n    );\n  }\n  if (ast.imports.length) {\n    genImports(ast.imports, context);\n    newline();\n  }\n  genHoists(ast.hoists, context);\n  newline();\n  if (!inline) {\n    push(`export `);\n  }\n}\nfunction genAssets(assets, type, { helper, push, newline, isTS }) {\n  const resolver = helper(\n    type === \"filter\" ? RESOLVE_FILTER : type === \"component\" ? RESOLVE_COMPONENT : RESOLVE_DIRECTIVE\n  );\n  for (let i = 0; i < assets.length; i++) {\n    let id = assets[i];\n    const maybeSelfReference = id.endsWith(\"__self\");\n    if (maybeSelfReference) {\n      id = id.slice(0, -6);\n    }\n    push(\n      `const ${toValidAssetId(id, type)} = ${resolver}(${JSON.stringify(id)}${maybeSelfReference ? `, true` : ``})${isTS ? `!` : ``}`\n    );\n    if (i < assets.length - 1) {\n      newline();\n    }\n  }\n}\nfunction genHoists(hoists, context) {\n  if (!hoists.length) {\n    return;\n  }\n  context.pure = true;\n  const { push, newline } = context;\n  newline();\n  for (let i = 0; i < hoists.length; i++) {\n    const exp = hoists[i];\n    if (exp) {\n      push(`const _hoisted_${i + 1} = `);\n      genNode(exp, context);\n      newline();\n    }\n  }\n  context.pure = false;\n}\nfunction genImports(importsOptions, context) {\n  if (!importsOptions.length) {\n    return;\n  }\n  importsOptions.forEach((imports) => {\n    context.push(`import `);\n    genNode(imports.exp, context);\n    context.push(` from '${imports.path}'`);\n    context.newline();\n  });\n}\nfunction isText(n) {\n  return shared.isString(n) || n.type === 4 || n.type === 2 || n.type === 5 || n.type === 8;\n}\nfunction genNodeListAsArray(nodes, context) {\n  const multilines = nodes.length > 3 || nodes.some((n) => shared.isArray(n) || !isText(n));\n  context.push(`[`);\n  multilines && context.indent();\n  genNodeList(nodes, context, multilines);\n  multilines && context.deindent();\n  context.push(`]`);\n}\nfunction genNodeList(nodes, context, multilines = false, comma = true) {\n  const { push, newline } = context;\n  for (let i = 0; i < nodes.length; i++) {\n    const node = nodes[i];\n    if (shared.isString(node)) {\n      push(node, -3 /* Unknown */);\n    } else if (shared.isArray(node)) {\n      genNodeListAsArray(node, context);\n    } else {\n      genNode(node, context);\n    }\n    if (i < nodes.length - 1) {\n      if (multilines) {\n        comma && push(\",\");\n        newline();\n      } else {\n        comma && push(\", \");\n      }\n    }\n  }\n}\nfunction genNode(node, context) {\n  if (shared.isString(node)) {\n    context.push(node, -3 /* Unknown */);\n    return;\n  }\n  if (shared.isSymbol(node)) {\n    context.push(context.helper(node));\n    return;\n  }\n  switch (node.type) {\n    case 1:\n    case 9:\n    case 11:\n      genNode(node.codegenNode, context);\n      break;\n    case 2:\n      genText(node, context);\n      break;\n    case 4:\n      genExpression(node, context);\n      break;\n    case 5:\n      genInterpolation(node, context);\n      break;\n    case 12:\n      genNode(node.codegenNode, context);\n      break;\n    case 8:\n      genCompoundExpression(node, context);\n      break;\n    case 3:\n      genComment(node, context);\n      break;\n    case 13:\n      genVNodeCall(node, context);\n      break;\n    case 14:\n      genCallExpression(node, context);\n      break;\n    case 15:\n      genObjectExpression(node, context);\n      break;\n    case 17:\n      genArrayExpression(node, context);\n      break;\n    case 18:\n      genFunctionExpression(node, context);\n      break;\n    case 19:\n      genConditionalExpression(node, context);\n      break;\n    case 20:\n      genCacheExpression(node, context);\n      break;\n    case 21:\n      genNodeList(node.body, context, true, false);\n      break;\n    // SSR only types\n    case 22:\n      genTemplateLiteral(node, context);\n      break;\n    case 23:\n      genIfStatement(node, context);\n      break;\n    case 24:\n      genAssignmentExpression(node, context);\n      break;\n    case 25:\n      genSequenceExpression(node, context);\n      break;\n    case 26:\n      genReturnStatement(node, context);\n      break;\n  }\n}\nfunction genText(node, context) {\n  context.push(JSON.stringify(node.content), -3 /* Unknown */, node);\n}\nfunction genExpression(node, context) {\n  const { content, isStatic } = node;\n  context.push(\n    isStatic ? JSON.stringify(content) : content,\n    -3 /* Unknown */,\n    node\n  );\n}\nfunction genInterpolation(node, context) {\n  const { push, helper, pure } = context;\n  if (pure) push(PURE_ANNOTATION);\n  push(`${helper(TO_DISPLAY_STRING)}(`);\n  genNode(node.content, context);\n  push(`)`);\n}\nfunction genCompoundExpression(node, context) {\n  for (let i = 0; i < node.children.length; i++) {\n    const child = node.children[i];\n    if (shared.isString(child)) {\n      context.push(child, -3 /* Unknown */);\n    } else {\n      genNode(child, context);\n    }\n  }\n}\nfunction genExpressionAsPropertyKey(node, context) {\n  const { push } = context;\n  if (node.type === 8) {\n    push(`[`);\n    genCompoundExpression(node, context);\n    push(`]`);\n  } else if (node.isStatic) {\n    const text = isSimpleIdentifier(node.content) ? node.content : JSON.stringify(node.content);\n    push(text, -2 /* None */, node);\n  } else {\n    push(`[${node.content}]`, -3 /* Unknown */, node);\n  }\n}\nfunction genComment(node, context) {\n  const { push, helper, pure } = context;\n  if (pure) {\n    push(PURE_ANNOTATION);\n  }\n  push(\n    `${helper(CREATE_COMMENT)}(${JSON.stringify(node.content)})`,\n    -3 /* Unknown */,\n    node\n  );\n}\nfunction genVNodeCall(node, context) {\n  const { push, helper, pure } = context;\n  const {\n    tag,\n    props,\n    children,\n    patchFlag,\n    dynamicProps,\n    directives,\n    isBlock,\n    disableTracking,\n    isComponent\n  } = node;\n  let patchFlagString;\n  if (patchFlag) {\n    {\n      patchFlagString = String(patchFlag);\n    }\n  }\n  if (directives) {\n    push(helper(WITH_DIRECTIVES) + `(`);\n  }\n  if (isBlock) {\n    push(`(${helper(OPEN_BLOCK)}(${disableTracking ? `true` : ``}), `);\n  }\n  if (pure) {\n    push(PURE_ANNOTATION);\n  }\n  const callHelper = isBlock ? getVNodeBlockHelper(context.inSSR, isComponent) : getVNodeHelper(context.inSSR, isComponent);\n  push(helper(callHelper) + `(`, -2 /* None */, node);\n  genNodeList(\n    genNullableArgs([tag, props, children, patchFlagString, dynamicProps]),\n    context\n  );\n  push(`)`);\n  if (isBlock) {\n    push(`)`);\n  }\n  if (directives) {\n    push(`, `);\n    genNode(directives, context);\n    push(`)`);\n  }\n}\nfunction genNullableArgs(args) {\n  let i = args.length;\n  while (i--) {\n    if (args[i] != null) break;\n  }\n  return args.slice(0, i + 1).map((arg) => arg || `null`);\n}\nfunction genCallExpression(node, context) {\n  const { push, helper, pure } = context;\n  const callee = shared.isString(node.callee) ? node.callee : helper(node.callee);\n  if (pure) {\n    push(PURE_ANNOTATION);\n  }\n  push(callee + `(`, -2 /* None */, node);\n  genNodeList(node.arguments, context);\n  push(`)`);\n}\nfunction genObjectExpression(node, context) {\n  const { push, indent, deindent, newline } = context;\n  const { properties } = node;\n  if (!properties.length) {\n    push(`{}`, -2 /* None */, node);\n    return;\n  }\n  const multilines = properties.length > 1 || properties.some((p) => p.value.type !== 4);\n  push(multilines ? `{` : `{ `);\n  multilines && indent();\n  for (let i = 0; i < properties.length; i++) {\n    const { key, value } = properties[i];\n    genExpressionAsPropertyKey(key, context);\n    push(`: `);\n    genNode(value, context);\n    if (i < properties.length - 1) {\n      push(`,`);\n      newline();\n    }\n  }\n  multilines && deindent();\n  push(multilines ? `}` : ` }`);\n}\nfunction genArrayExpression(node, context) {\n  genNodeListAsArray(node.elements, context);\n}\nfunction genFunctionExpression(node, context) {\n  const { push, indent, deindent } = context;\n  const { params, returns, body, newline, isSlot } = node;\n  if (isSlot) {\n    push(`_${helperNameMap[WITH_CTX]}(`);\n  }\n  push(`(`, -2 /* None */, node);\n  if (shared.isArray(params)) {\n    genNodeList(params, context);\n  } else if (params) {\n    genNode(params, context);\n  }\n  push(`) => `);\n  if (newline || body) {\n    push(`{`);\n    indent();\n  }\n  if (returns) {\n    if (newline) {\n      push(`return `);\n    }\n    if (shared.isArray(returns)) {\n      genNodeListAsArray(returns, context);\n    } else {\n      genNode(returns, context);\n    }\n  } else if (body) {\n    genNode(body, context);\n  }\n  if (newline || body) {\n    deindent();\n    push(`}`);\n  }\n  if (isSlot) {\n    if (node.isNonScopedSlot) {\n      push(`, undefined, true`);\n    }\n    push(`)`);\n  }\n}\nfunction genConditionalExpression(node, context) {\n  const { test, consequent, alternate, newline: needNewline } = node;\n  const { push, indent, deindent, newline } = context;\n  if (test.type === 4) {\n    const needsParens = !isSimpleIdentifier(test.content);\n    needsParens && push(`(`);\n    genExpression(test, context);\n    needsParens && push(`)`);\n  } else {\n    push(`(`);\n    genNode(test, context);\n    push(`)`);\n  }\n  needNewline && indent();\n  context.indentLevel++;\n  needNewline || push(` `);\n  push(`? `);\n  genNode(consequent, context);\n  context.indentLevel--;\n  needNewline && newline();\n  needNewline || push(` `);\n  push(`: `);\n  const isNested = alternate.type === 19;\n  if (!isNested) {\n    context.indentLevel++;\n  }\n  genNode(alternate, context);\n  if (!isNested) {\n    context.indentLevel--;\n  }\n  needNewline && deindent(\n    true\n    /* without newline */\n  );\n}\nfunction genCacheExpression(node, context) {\n  const { push, helper, indent, deindent, newline } = context;\n  const { needPauseTracking, needArraySpread } = node;\n  if (needArraySpread) {\n    push(`[...(`);\n  }\n  push(`_cache[${node.index}] || (`);\n  if (needPauseTracking) {\n    indent();\n    push(`${helper(SET_BLOCK_TRACKING)}(-1`);\n    if (node.inVOnce) push(`, true`);\n    push(`),`);\n    newline();\n    push(`(`);\n  }\n  push(`_cache[${node.index}] = `);\n  genNode(node.value, context);\n  if (needPauseTracking) {\n    push(`).cacheIndex = ${node.index},`);\n    newline();\n    push(`${helper(SET_BLOCK_TRACKING)}(1),`);\n    newline();\n    push(`_cache[${node.index}]`);\n    deindent();\n  }\n  push(`)`);\n  if (needArraySpread) {\n    push(`)]`);\n  }\n}\nfunction genTemplateLiteral(node, context) {\n  const { push, indent, deindent } = context;\n  push(\"`\");\n  const l = node.elements.length;\n  const multilines = l > 3;\n  for (let i = 0; i < l; i++) {\n    const e = node.elements[i];\n    if (shared.isString(e)) {\n      push(e.replace(/(`|\\$|\\\\)/g, \"\\\\$1\"), -3 /* Unknown */);\n    } else {\n      push(\"${\");\n      if (multilines) indent();\n      genNode(e, context);\n      if (multilines) deindent();\n      push(\"}\");\n    }\n  }\n  push(\"`\");\n}\nfunction genIfStatement(node, context) {\n  const { push, indent, deindent } = context;\n  const { test, consequent, alternate } = node;\n  push(`if (`);\n  genNode(test, context);\n  push(`) {`);\n  indent();\n  genNode(consequent, context);\n  deindent();\n  push(`}`);\n  if (alternate) {\n    push(` else `);\n    if (alternate.type === 23) {\n      genIfStatement(alternate, context);\n    } else {\n      push(`{`);\n      indent();\n      genNode(alternate, context);\n      deindent();\n      push(`}`);\n    }\n  }\n}\nfunction genAssignmentExpression(node, context) {\n  genNode(node.left, context);\n  context.push(` = `);\n  genNode(node.right, context);\n}\nfunction genSequenceExpression(node, context) {\n  context.push(`(`);\n  genNodeList(node.expressions, context);\n  context.push(`)`);\n}\nfunction genReturnStatement({ returns }, context) {\n  context.push(`return `);\n  if (shared.isArray(returns)) {\n    genNodeListAsArray(returns, context);\n  } else {\n    genNode(returns, context);\n  }\n}\n\nconst isLiteralWhitelisted = /* @__PURE__ */ shared.makeMap(\"true,false,null,this\");\nconst transformExpression = (node, context) => {\n  if (node.type === 5) {\n    node.content = processExpression(\n      node.content,\n      context\n    );\n  } else if (node.type === 1) {\n    const memo = findDir(node, \"memo\");\n    for (let i = 0; i < node.props.length; i++) {\n      const dir = node.props[i];\n      if (dir.type === 7 && dir.name !== \"for\") {\n        const exp = dir.exp;\n        const arg = dir.arg;\n        if (exp && exp.type === 4 && !(dir.name === \"on\" && arg) && // key has been processed in transformFor(vMemo + vFor)\n        !(memo && arg && arg.type === 4 && arg.content === \"key\")) {\n          dir.exp = processExpression(\n            exp,\n            context,\n            // slot args must be processed as function params\n            dir.name === \"slot\"\n          );\n        }\n        if (arg && arg.type === 4 && !arg.isStatic) {\n          dir.arg = processExpression(arg, context);\n        }\n      }\n    }\n  }\n};\nfunction processExpression(node, context, asParams = false, asRawStatements = false, localVars = Object.create(context.identifiers)) {\n  if (!context.prefixIdentifiers || !node.content.trim()) {\n    return node;\n  }\n  const { inline, bindingMetadata } = context;\n  const rewriteIdentifier = (raw, parent, id) => {\n    const type = shared.hasOwn(bindingMetadata, raw) && bindingMetadata[raw];\n    if (inline) {\n      const isAssignmentLVal = parent && parent.type === \"AssignmentExpression\" && parent.left === id;\n      const isUpdateArg = parent && parent.type === \"UpdateExpression\" && parent.argument === id;\n      const isDestructureAssignment = parent && isInDestructureAssignment(parent, parentStack);\n      const isNewExpression = parent && isInNewExpression(parentStack);\n      const wrapWithUnref = (raw2) => {\n        const wrapped = `${context.helperString(UNREF)}(${raw2})`;\n        return isNewExpression ? `(${wrapped})` : wrapped;\n      };\n      if (isConst(type) || type === \"setup-reactive-const\" || localVars[raw]) {\n        return raw;\n      } else if (type === \"setup-ref\") {\n        return `${raw}.value`;\n      } else if (type === \"setup-maybe-ref\") {\n        return isAssignmentLVal || isUpdateArg || isDestructureAssignment ? `${raw}.value` : wrapWithUnref(raw);\n      } else if (type === \"setup-let\") {\n        if (isAssignmentLVal) {\n          const { right: rVal, operator } = parent;\n          const rExp = rawExp.slice(rVal.start - 1, rVal.end - 1);\n          const rExpString = stringifyExpression(\n            processExpression(\n              createSimpleExpression(rExp, false),\n              context,\n              false,\n              false,\n              knownIds\n            )\n          );\n          return `${context.helperString(IS_REF)}(${raw})${context.isTS ? ` //@ts-ignore\n` : ``} ? ${raw}.value ${operator} ${rExpString} : ${raw}`;\n        } else if (isUpdateArg) {\n          id.start = parent.start;\n          id.end = parent.end;\n          const { prefix: isPrefix, operator } = parent;\n          const prefix = isPrefix ? operator : ``;\n          const postfix = isPrefix ? `` : operator;\n          return `${context.helperString(IS_REF)}(${raw})${context.isTS ? ` //@ts-ignore\n` : ``} ? ${prefix}${raw}.value${postfix} : ${prefix}${raw}${postfix}`;\n        } else if (isDestructureAssignment) {\n          return raw;\n        } else {\n          return wrapWithUnref(raw);\n        }\n      } else if (type === \"props\") {\n        return shared.genPropsAccessExp(raw);\n      } else if (type === \"props-aliased\") {\n        return shared.genPropsAccessExp(bindingMetadata.__propsAliases[raw]);\n      }\n    } else {\n      if (type && type.startsWith(\"setup\") || type === \"literal-const\") {\n        return `$setup.${raw}`;\n      } else if (type === \"props-aliased\") {\n        return `$props['${bindingMetadata.__propsAliases[raw]}']`;\n      } else if (type) {\n        return `$${type}.${raw}`;\n      }\n    }\n    return `_ctx.${raw}`;\n  };\n  const rawExp = node.content;\n  let ast = node.ast;\n  if (ast === false) {\n    return node;\n  }\n  if (ast === null || !ast && isSimpleIdentifier(rawExp)) {\n    const isScopeVarReference = context.identifiers[rawExp];\n    const isAllowedGlobal = shared.isGloballyAllowed(rawExp);\n    const isLiteral = isLiteralWhitelisted(rawExp);\n    if (!asParams && !isScopeVarReference && !isLiteral && (!isAllowedGlobal || bindingMetadata[rawExp])) {\n      if (isConst(bindingMetadata[rawExp])) {\n        node.constType = 1;\n      }\n      node.content = rewriteIdentifier(rawExp);\n    } else if (!isScopeVarReference) {\n      if (isLiteral) {\n        node.constType = 3;\n      } else {\n        node.constType = 2;\n      }\n    }\n    return node;\n  }\n  if (!ast) {\n    const source = asRawStatements ? ` ${rawExp} ` : `(${rawExp})${asParams ? `=>{}` : ``}`;\n    try {\n      ast = parser.parseExpression(source, {\n        sourceType: \"module\",\n        plugins: context.expressionPlugins\n      });\n    } catch (e) {\n      context.onError(\n        createCompilerError(\n          45,\n          node.loc,\n          void 0,\n          e.message\n        )\n      );\n      return node;\n    }\n  }\n  const ids = [];\n  const parentStack = [];\n  const knownIds = Object.create(context.identifiers);\n  walkIdentifiers(\n    ast,\n    (node2, parent, _, isReferenced, isLocal) => {\n      if (isStaticPropertyKey(node2, parent)) {\n        return;\n      }\n      if (node2.name.startsWith(\"_filter_\")) {\n        return;\n      }\n      const needPrefix = isReferenced && canPrefix(node2);\n      if (needPrefix && !isLocal) {\n        if (isStaticProperty(parent) && parent.shorthand) {\n          node2.prefix = `${node2.name}: `;\n        }\n        node2.name = rewriteIdentifier(node2.name, parent, node2);\n        ids.push(node2);\n      } else {\n        if (!(needPrefix && isLocal) && (!parent || parent.type !== \"CallExpression\" && parent.type !== \"NewExpression\" && parent.type !== \"MemberExpression\")) {\n          node2.isConstant = true;\n        }\n        ids.push(node2);\n      }\n    },\n    true,\n    // invoke on ALL identifiers\n    parentStack,\n    knownIds\n  );\n  const children = [];\n  ids.sort((a, b) => a.start - b.start);\n  ids.forEach((id, i) => {\n    const start = id.start - 1;\n    const end = id.end - 1;\n    const last = ids[i - 1];\n    const leadingText = rawExp.slice(last ? last.end - 1 : 0, start);\n    if (leadingText.length || id.prefix) {\n      children.push(leadingText + (id.prefix || ``));\n    }\n    const source = rawExp.slice(start, end);\n    children.push(\n      createSimpleExpression(\n        id.name,\n        false,\n        {\n          start: advancePositionWithClone(node.loc.start, source, start),\n          end: advancePositionWithClone(node.loc.start, source, end),\n          source\n        },\n        id.isConstant ? 3 : 0\n      )\n    );\n    if (i === ids.length - 1 && end < rawExp.length) {\n      children.push(rawExp.slice(end));\n    }\n  });\n  let ret;\n  if (children.length) {\n    ret = createCompoundExpression(children, node.loc);\n    ret.ast = ast;\n  } else {\n    ret = node;\n    ret.constType = 3;\n  }\n  ret.identifiers = Object.keys(knownIds);\n  return ret;\n}\nfunction canPrefix(id) {\n  if (shared.isGloballyAllowed(id.name)) {\n    return false;\n  }\n  if (id.name === \"require\") {\n    return false;\n  }\n  return true;\n}\nfunction stringifyExpression(exp) {\n  if (shared.isString(exp)) {\n    return exp;\n  } else if (exp.type === 4) {\n    return exp.content;\n  } else {\n    return exp.children.map(stringifyExpression).join(\"\");\n  }\n}\nfunction isConst(type) {\n  return type === \"setup-const\" || type === \"literal-const\";\n}\n\nconst transformIf = createStructuralDirectiveTransform(\n  /^(if|else|else-if)$/,\n  (node, dir, context) => {\n    return processIf(node, dir, context, (ifNode, branch, isRoot) => {\n      const siblings = context.parent.children;\n      let i = siblings.indexOf(ifNode);\n      let key = 0;\n      while (i-- >= 0) {\n        const sibling = siblings[i];\n        if (sibling && sibling.type === 9) {\n          key += sibling.branches.length;\n        }\n      }\n      return () => {\n        if (isRoot) {\n          ifNode.codegenNode = createCodegenNodeForBranch(\n            branch,\n            key,\n            context\n          );\n        } else {\n          const parentCondition = getParentCondition(ifNode.codegenNode);\n          parentCondition.alternate = createCodegenNodeForBranch(\n            branch,\n            key + ifNode.branches.length - 1,\n            context\n          );\n        }\n      };\n    });\n  }\n);\nfunction processIf(node, dir, context, processCodegen) {\n  if (dir.name !== \"else\" && (!dir.exp || !dir.exp.content.trim())) {\n    const loc = dir.exp ? dir.exp.loc : node.loc;\n    context.onError(\n      createCompilerError(28, dir.loc)\n    );\n    dir.exp = createSimpleExpression(`true`, false, loc);\n  }\n  if (context.prefixIdentifiers && dir.exp) {\n    dir.exp = processExpression(dir.exp, context);\n  }\n  if (dir.name === \"if\") {\n    const branch = createIfBranch(node, dir);\n    const ifNode = {\n      type: 9,\n      loc: cloneLoc(node.loc),\n      branches: [branch]\n    };\n    context.replaceNode(ifNode);\n    if (processCodegen) {\n      return processCodegen(ifNode, branch, true);\n    }\n  } else {\n    const siblings = context.parent.children;\n    let i = siblings.indexOf(node);\n    while (i-- >= -1) {\n      const sibling = siblings[i];\n      if (sibling && sibling.type === 3) {\n        context.removeNode(sibling);\n        continue;\n      }\n      if (sibling && sibling.type === 2 && !sibling.content.trim().length) {\n        context.removeNode(sibling);\n        continue;\n      }\n      if (sibling && sibling.type === 9) {\n        if (dir.name === \"else-if\" && sibling.branches[sibling.branches.length - 1].condition === void 0) {\n          context.onError(\n            createCompilerError(30, node.loc)\n          );\n        }\n        context.removeNode();\n        const branch = createIfBranch(node, dir);\n        {\n          const key = branch.userKey;\n          if (key) {\n            sibling.branches.forEach(({ userKey }) => {\n              if (isSameKey(userKey, key)) {\n                context.onError(\n                  createCompilerError(\n                    29,\n                    branch.userKey.loc\n                  )\n                );\n              }\n            });\n          }\n        }\n        sibling.branches.push(branch);\n        const onExit = processCodegen && processCodegen(sibling, branch, false);\n        traverseNode(branch, context);\n        if (onExit) onExit();\n        context.currentNode = null;\n      } else {\n        context.onError(\n          createCompilerError(30, node.loc)\n        );\n      }\n      break;\n    }\n  }\n}\nfunction createIfBranch(node, dir) {\n  const isTemplateIf = node.tagType === 3;\n  return {\n    type: 10,\n    loc: node.loc,\n    condition: dir.name === \"else\" ? void 0 : dir.exp,\n    children: isTemplateIf && !findDir(node, \"for\") ? node.children : [node],\n    userKey: findProp(node, `key`),\n    isTemplateIf\n  };\n}\nfunction createCodegenNodeForBranch(branch, keyIndex, context) {\n  if (branch.condition) {\n    return createConditionalExpression(\n      branch.condition,\n      createChildrenCodegenNode(branch, keyIndex, context),\n      // make sure to pass in asBlock: true so that the comment node call\n      // closes the current block.\n      createCallExpression(context.helper(CREATE_COMMENT), [\n        '\"\"',\n        \"true\"\n      ])\n    );\n  } else {\n    return createChildrenCodegenNode(branch, keyIndex, context);\n  }\n}\nfunction createChildrenCodegenNode(branch, keyIndex, context) {\n  const { helper } = context;\n  const keyProperty = createObjectProperty(\n    `key`,\n    createSimpleExpression(\n      `${keyIndex}`,\n      false,\n      locStub,\n      2\n    )\n  );\n  const { children } = branch;\n  const firstChild = children[0];\n  const needFragmentWrapper = children.length !== 1 || firstChild.type !== 1;\n  if (needFragmentWrapper) {\n    if (children.length === 1 && firstChild.type === 11) {\n      const vnodeCall = firstChild.codegenNode;\n      injectProp(vnodeCall, keyProperty, context);\n      return vnodeCall;\n    } else {\n      let patchFlag = 64;\n      return createVNodeCall(\n        context,\n        helper(FRAGMENT),\n        createObjectExpression([keyProperty]),\n        children,\n        patchFlag,\n        void 0,\n        void 0,\n        true,\n        false,\n        false,\n        branch.loc\n      );\n    }\n  } else {\n    const ret = firstChild.codegenNode;\n    const vnodeCall = getMemoedVNodeCall(ret);\n    if (vnodeCall.type === 13) {\n      convertToBlock(vnodeCall, context);\n    }\n    injectProp(vnodeCall, keyProperty, context);\n    return ret;\n  }\n}\nfunction isSameKey(a, b) {\n  if (!a || a.type !== b.type) {\n    return false;\n  }\n  if (a.type === 6) {\n    if (a.value.content !== b.value.content) {\n      return false;\n    }\n  } else {\n    const exp = a.exp;\n    const branchExp = b.exp;\n    if (exp.type !== branchExp.type) {\n      return false;\n    }\n    if (exp.type !== 4 || exp.isStatic !== branchExp.isStatic || exp.content !== branchExp.content) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction getParentCondition(node) {\n  while (true) {\n    if (node.type === 19) {\n      if (node.alternate.type === 19) {\n        node = node.alternate;\n      } else {\n        return node;\n      }\n    } else if (node.type === 20) {\n      node = node.value;\n    }\n  }\n}\n\nconst transformBind = (dir, _node, context) => {\n  const { modifiers, loc } = dir;\n  const arg = dir.arg;\n  let { exp } = dir;\n  if (exp && exp.type === 4 && !exp.content.trim()) {\n    {\n      context.onError(\n        createCompilerError(34, loc)\n      );\n      return {\n        props: [\n          createObjectProperty(arg, createSimpleExpression(\"\", true, loc))\n        ]\n      };\n    }\n  }\n  if (!exp) {\n    if (arg.type !== 4 || !arg.isStatic) {\n      context.onError(\n        createCompilerError(\n          52,\n          arg.loc\n        )\n      );\n      return {\n        props: [\n          createObjectProperty(arg, createSimpleExpression(\"\", true, loc))\n        ]\n      };\n    }\n    transformBindShorthand(dir, context);\n    exp = dir.exp;\n  }\n  if (arg.type !== 4) {\n    arg.children.unshift(`(`);\n    arg.children.push(`) || \"\"`);\n  } else if (!arg.isStatic) {\n    arg.content = arg.content ? `${arg.content} || \"\"` : `\"\"`;\n  }\n  if (modifiers.some((mod) => mod.content === \"camel\")) {\n    if (arg.type === 4) {\n      if (arg.isStatic) {\n        arg.content = shared.camelize(arg.content);\n      } else {\n        arg.content = `${context.helperString(CAMELIZE)}(${arg.content})`;\n      }\n    } else {\n      arg.children.unshift(`${context.helperString(CAMELIZE)}(`);\n      arg.children.push(`)`);\n    }\n  }\n  if (!context.inSSR) {\n    if (modifiers.some((mod) => mod.content === \"prop\")) {\n      injectPrefix(arg, \".\");\n    }\n    if (modifiers.some((mod) => mod.content === \"attr\")) {\n      injectPrefix(arg, \"^\");\n    }\n  }\n  return {\n    props: [createObjectProperty(arg, exp)]\n  };\n};\nconst transformBindShorthand = (dir, context) => {\n  const arg = dir.arg;\n  const propName = shared.camelize(arg.content);\n  dir.exp = createSimpleExpression(propName, false, arg.loc);\n  {\n    dir.exp = processExpression(dir.exp, context);\n  }\n};\nconst injectPrefix = (arg, prefix) => {\n  if (arg.type === 4) {\n    if (arg.isStatic) {\n      arg.content = prefix + arg.content;\n    } else {\n      arg.content = `\\`${prefix}\\${${arg.content}}\\``;\n    }\n  } else {\n    arg.children.unshift(`'${prefix}' + (`);\n    arg.children.push(`)`);\n  }\n};\n\nconst transformFor = createStructuralDirectiveTransform(\n  \"for\",\n  (node, dir, context) => {\n    const { helper, removeHelper } = context;\n    return processFor(node, dir, context, (forNode) => {\n      const renderExp = createCallExpression(helper(RENDER_LIST), [\n        forNode.source\n      ]);\n      const isTemplate = isTemplateNode(node);\n      const memo = findDir(node, \"memo\");\n      const keyProp = findProp(node, `key`, false, true);\n      const isDirKey = keyProp && keyProp.type === 7;\n      if (isDirKey && !keyProp.exp) {\n        transformBindShorthand(keyProp, context);\n      }\n      let keyExp = keyProp && (keyProp.type === 6 ? keyProp.value ? createSimpleExpression(keyProp.value.content, true) : void 0 : keyProp.exp);\n      if (memo && keyExp && isDirKey) {\n        {\n          keyProp.exp = keyExp = processExpression(\n            keyExp,\n            context\n          );\n        }\n      }\n      const keyProperty = keyProp && keyExp ? createObjectProperty(`key`, keyExp) : null;\n      if (isTemplate) {\n        if (memo) {\n          memo.exp = processExpression(\n            memo.exp,\n            context\n          );\n        }\n        if (keyProperty && keyProp.type !== 6) {\n          keyProperty.value = processExpression(\n            keyProperty.value,\n            context\n          );\n        }\n      }\n      const isStableFragment = forNode.source.type === 4 && forNode.source.constType > 0;\n      const fragmentFlag = isStableFragment ? 64 : keyProp ? 128 : 256;\n      forNode.codegenNode = createVNodeCall(\n        context,\n        helper(FRAGMENT),\n        void 0,\n        renderExp,\n        fragmentFlag,\n        void 0,\n        void 0,\n        true,\n        !isStableFragment,\n        false,\n        node.loc\n      );\n      return () => {\n        let childBlock;\n        const { children } = forNode;\n        if (isTemplate) {\n          node.children.some((c) => {\n            if (c.type === 1) {\n              const key = findProp(c, \"key\");\n              if (key) {\n                context.onError(\n                  createCompilerError(\n                    33,\n                    key.loc\n                  )\n                );\n                return true;\n              }\n            }\n          });\n        }\n        const needFragmentWrapper = children.length !== 1 || children[0].type !== 1;\n        const slotOutlet = isSlotOutlet(node) ? node : isTemplate && node.children.length === 1 && isSlotOutlet(node.children[0]) ? node.children[0] : null;\n        if (slotOutlet) {\n          childBlock = slotOutlet.codegenNode;\n          if (isTemplate && keyProperty) {\n            injectProp(childBlock, keyProperty, context);\n          }\n        } else if (needFragmentWrapper) {\n          childBlock = createVNodeCall(\n            context,\n            helper(FRAGMENT),\n            keyProperty ? createObjectExpression([keyProperty]) : void 0,\n            node.children,\n            64,\n            void 0,\n            void 0,\n            true,\n            void 0,\n            false\n          );\n        } else {\n          childBlock = children[0].codegenNode;\n          if (isTemplate && keyProperty) {\n            injectProp(childBlock, keyProperty, context);\n          }\n          if (childBlock.isBlock !== !isStableFragment) {\n            if (childBlock.isBlock) {\n              removeHelper(OPEN_BLOCK);\n              removeHelper(\n                getVNodeBlockHelper(context.inSSR, childBlock.isComponent)\n              );\n            } else {\n              removeHelper(\n                getVNodeHelper(context.inSSR, childBlock.isComponent)\n              );\n            }\n          }\n          childBlock.isBlock = !isStableFragment;\n          if (childBlock.isBlock) {\n            helper(OPEN_BLOCK);\n            helper(getVNodeBlockHelper(context.inSSR, childBlock.isComponent));\n          } else {\n            helper(getVNodeHelper(context.inSSR, childBlock.isComponent));\n          }\n        }\n        if (memo) {\n          const loop = createFunctionExpression(\n            createForLoopParams(forNode.parseResult, [\n              createSimpleExpression(`_cached`)\n            ])\n          );\n          loop.body = createBlockStatement([\n            createCompoundExpression([`const _memo = (`, memo.exp, `)`]),\n            createCompoundExpression([\n              `if (_cached`,\n              ...keyExp ? [` && _cached.key === `, keyExp] : [],\n              ` && ${context.helperString(\n                IS_MEMO_SAME\n              )}(_cached, _memo)) return _cached`\n            ]),\n            createCompoundExpression([`const _item = `, childBlock]),\n            createSimpleExpression(`_item.memo = _memo`),\n            createSimpleExpression(`return _item`)\n          ]);\n          renderExp.arguments.push(\n            loop,\n            createSimpleExpression(`_cache`),\n            createSimpleExpression(String(context.cached.length))\n          );\n          context.cached.push(null);\n        } else {\n          renderExp.arguments.push(\n            createFunctionExpression(\n              createForLoopParams(forNode.parseResult),\n              childBlock,\n              true\n            )\n          );\n        }\n      };\n    });\n  }\n);\nfunction processFor(node, dir, context, processCodegen) {\n  if (!dir.exp) {\n    context.onError(\n      createCompilerError(31, dir.loc)\n    );\n    return;\n  }\n  const parseResult = dir.forParseResult;\n  if (!parseResult) {\n    context.onError(\n      createCompilerError(32, dir.loc)\n    );\n    return;\n  }\n  finalizeForParseResult(parseResult, context);\n  const { addIdentifiers, removeIdentifiers, scopes } = context;\n  const { source, value, key, index } = parseResult;\n  const forNode = {\n    type: 11,\n    loc: dir.loc,\n    source,\n    valueAlias: value,\n    keyAlias: key,\n    objectIndexAlias: index,\n    parseResult,\n    children: isTemplateNode(node) ? node.children : [node]\n  };\n  context.replaceNode(forNode);\n  scopes.vFor++;\n  if (context.prefixIdentifiers) {\n    value && addIdentifiers(value);\n    key && addIdentifiers(key);\n    index && addIdentifiers(index);\n  }\n  const onExit = processCodegen && processCodegen(forNode);\n  return () => {\n    scopes.vFor--;\n    if (context.prefixIdentifiers) {\n      value && removeIdentifiers(value);\n      key && removeIdentifiers(key);\n      index && removeIdentifiers(index);\n    }\n    if (onExit) onExit();\n  };\n}\nfunction finalizeForParseResult(result, context) {\n  if (result.finalized) return;\n  if (context.prefixIdentifiers) {\n    result.source = processExpression(\n      result.source,\n      context\n    );\n    if (result.key) {\n      result.key = processExpression(\n        result.key,\n        context,\n        true\n      );\n    }\n    if (result.index) {\n      result.index = processExpression(\n        result.index,\n        context,\n        true\n      );\n    }\n    if (result.value) {\n      result.value = processExpression(\n        result.value,\n        context,\n        true\n      );\n    }\n  }\n  result.finalized = true;\n}\nfunction createForLoopParams({ value, key, index }, memoArgs = []) {\n  return createParamsList([value, key, index, ...memoArgs]);\n}\nfunction createParamsList(args) {\n  let i = args.length;\n  while (i--) {\n    if (args[i]) break;\n  }\n  return args.slice(0, i + 1).map((arg, i2) => arg || createSimpleExpression(`_`.repeat(i2 + 1), false));\n}\n\nconst defaultFallback = createSimpleExpression(`undefined`, false);\nconst trackSlotScopes = (node, context) => {\n  if (node.type === 1 && (node.tagType === 1 || node.tagType === 3)) {\n    const vSlot = findDir(node, \"slot\");\n    if (vSlot) {\n      const slotProps = vSlot.exp;\n      if (context.prefixIdentifiers) {\n        slotProps && context.addIdentifiers(slotProps);\n      }\n      context.scopes.vSlot++;\n      return () => {\n        if (context.prefixIdentifiers) {\n          slotProps && context.removeIdentifiers(slotProps);\n        }\n        context.scopes.vSlot--;\n      };\n    }\n  }\n};\nconst trackVForSlotScopes = (node, context) => {\n  let vFor;\n  if (isTemplateNode(node) && node.props.some(isVSlot) && (vFor = findDir(node, \"for\"))) {\n    const result = vFor.forParseResult;\n    if (result) {\n      finalizeForParseResult(result, context);\n      const { value, key, index } = result;\n      const { addIdentifiers, removeIdentifiers } = context;\n      value && addIdentifiers(value);\n      key && addIdentifiers(key);\n      index && addIdentifiers(index);\n      return () => {\n        value && removeIdentifiers(value);\n        key && removeIdentifiers(key);\n        index && removeIdentifiers(index);\n      };\n    }\n  }\n};\nconst buildClientSlotFn = (props, _vForExp, children, loc) => createFunctionExpression(\n  props,\n  children,\n  false,\n  true,\n  children.length ? children[0].loc : loc\n);\nfunction buildSlots(node, context, buildSlotFn = buildClientSlotFn) {\n  context.helper(WITH_CTX);\n  const { children, loc } = node;\n  const slotsProperties = [];\n  const dynamicSlots = [];\n  let hasDynamicSlots = context.scopes.vSlot > 0 || context.scopes.vFor > 0;\n  if (!context.ssr && context.prefixIdentifiers) {\n    hasDynamicSlots = hasScopeRef(node, context.identifiers);\n  }\n  const onComponentSlot = findDir(node, \"slot\", true);\n  if (onComponentSlot) {\n    const { arg, exp } = onComponentSlot;\n    if (arg && !isStaticExp(arg)) {\n      hasDynamicSlots = true;\n    }\n    slotsProperties.push(\n      createObjectProperty(\n        arg || createSimpleExpression(\"default\", true),\n        buildSlotFn(exp, void 0, children, loc)\n      )\n    );\n  }\n  let hasTemplateSlots = false;\n  let hasNamedDefaultSlot = false;\n  const implicitDefaultChildren = [];\n  const seenSlotNames = /* @__PURE__ */ new Set();\n  let conditionalBranchIndex = 0;\n  for (let i = 0; i < children.length; i++) {\n    const slotElement = children[i];\n    let slotDir;\n    if (!isTemplateNode(slotElement) || !(slotDir = findDir(slotElement, \"slot\", true))) {\n      if (slotElement.type !== 3) {\n        implicitDefaultChildren.push(slotElement);\n      }\n      continue;\n    }\n    if (onComponentSlot) {\n      context.onError(\n        createCompilerError(37, slotDir.loc)\n      );\n      break;\n    }\n    hasTemplateSlots = true;\n    const { children: slotChildren, loc: slotLoc } = slotElement;\n    const {\n      arg: slotName = createSimpleExpression(`default`, true),\n      exp: slotProps,\n      loc: dirLoc\n    } = slotDir;\n    let staticSlotName;\n    if (isStaticExp(slotName)) {\n      staticSlotName = slotName ? slotName.content : `default`;\n    } else {\n      hasDynamicSlots = true;\n    }\n    const vFor = findDir(slotElement, \"for\");\n    const slotFunction = buildSlotFn(slotProps, vFor, slotChildren, slotLoc);\n    let vIf;\n    let vElse;\n    if (vIf = findDir(slotElement, \"if\")) {\n      hasDynamicSlots = true;\n      dynamicSlots.push(\n        createConditionalExpression(\n          vIf.exp,\n          buildDynamicSlot(slotName, slotFunction, conditionalBranchIndex++),\n          defaultFallback\n        )\n      );\n    } else if (vElse = findDir(\n      slotElement,\n      /^else(-if)?$/,\n      true\n      /* allowEmpty */\n    )) {\n      let j = i;\n      let prev;\n      while (j--) {\n        prev = children[j];\n        if (prev.type !== 3 && isNonWhitespaceContent(prev)) {\n          break;\n        }\n      }\n      if (prev && isTemplateNode(prev) && findDir(prev, /^(else-)?if$/)) {\n        let conditional = dynamicSlots[dynamicSlots.length - 1];\n        while (conditional.alternate.type === 19) {\n          conditional = conditional.alternate;\n        }\n        conditional.alternate = vElse.exp ? createConditionalExpression(\n          vElse.exp,\n          buildDynamicSlot(\n            slotName,\n            slotFunction,\n            conditionalBranchIndex++\n          ),\n          defaultFallback\n        ) : buildDynamicSlot(slotName, slotFunction, conditionalBranchIndex++);\n      } else {\n        context.onError(\n          createCompilerError(30, vElse.loc)\n        );\n      }\n    } else if (vFor) {\n      hasDynamicSlots = true;\n      const parseResult = vFor.forParseResult;\n      if (parseResult) {\n        finalizeForParseResult(parseResult, context);\n        dynamicSlots.push(\n          createCallExpression(context.helper(RENDER_LIST), [\n            parseResult.source,\n            createFunctionExpression(\n              createForLoopParams(parseResult),\n              buildDynamicSlot(slotName, slotFunction),\n              true\n            )\n          ])\n        );\n      } else {\n        context.onError(\n          createCompilerError(\n            32,\n            vFor.loc\n          )\n        );\n      }\n    } else {\n      if (staticSlotName) {\n        if (seenSlotNames.has(staticSlotName)) {\n          context.onError(\n            createCompilerError(\n              38,\n              dirLoc\n            )\n          );\n          continue;\n        }\n        seenSlotNames.add(staticSlotName);\n        if (staticSlotName === \"default\") {\n          hasNamedDefaultSlot = true;\n        }\n      }\n      slotsProperties.push(createObjectProperty(slotName, slotFunction));\n    }\n  }\n  if (!onComponentSlot) {\n    const buildDefaultSlotProperty = (props, children2) => {\n      const fn = buildSlotFn(props, void 0, children2, loc);\n      if (context.compatConfig) {\n        fn.isNonScopedSlot = true;\n      }\n      return createObjectProperty(`default`, fn);\n    };\n    if (!hasTemplateSlots) {\n      slotsProperties.push(buildDefaultSlotProperty(void 0, children));\n    } else if (implicitDefaultChildren.length && // #3766\n    // with whitespace: 'preserve', whitespaces between slots will end up in\n    // implicitDefaultChildren. Ignore if all implicit children are whitespaces.\n    implicitDefaultChildren.some((node2) => isNonWhitespaceContent(node2))) {\n      if (hasNamedDefaultSlot) {\n        context.onError(\n          createCompilerError(\n            39,\n            implicitDefaultChildren[0].loc\n          )\n        );\n      } else {\n        slotsProperties.push(\n          buildDefaultSlotProperty(void 0, implicitDefaultChildren)\n        );\n      }\n    }\n  }\n  const slotFlag = hasDynamicSlots ? 2 : hasForwardedSlots(node.children) ? 3 : 1;\n  let slots = createObjectExpression(\n    slotsProperties.concat(\n      createObjectProperty(\n        `_`,\n        // 2 = compiled but dynamic = can skip normalization, but must run diff\n        // 1 = compiled and static = can skip normalization AND diff as optimized\n        createSimpleExpression(\n          slotFlag + (``),\n          false\n        )\n      )\n    ),\n    loc\n  );\n  if (dynamicSlots.length) {\n    slots = createCallExpression(context.helper(CREATE_SLOTS), [\n      slots,\n      createArrayExpression(dynamicSlots)\n    ]);\n  }\n  return {\n    slots,\n    hasDynamicSlots\n  };\n}\nfunction buildDynamicSlot(name, fn, index) {\n  const props = [\n    createObjectProperty(`name`, name),\n    createObjectProperty(`fn`, fn)\n  ];\n  if (index != null) {\n    props.push(\n      createObjectProperty(`key`, createSimpleExpression(String(index), true))\n    );\n  }\n  return createObjectExpression(props);\n}\nfunction hasForwardedSlots(children) {\n  for (let i = 0; i < children.length; i++) {\n    const child = children[i];\n    switch (child.type) {\n      case 1:\n        if (child.tagType === 2 || hasForwardedSlots(child.children)) {\n          return true;\n        }\n        break;\n      case 9:\n        if (hasForwardedSlots(child.branches)) return true;\n        break;\n      case 10:\n      case 11:\n        if (hasForwardedSlots(child.children)) return true;\n        break;\n    }\n  }\n  return false;\n}\nfunction isNonWhitespaceContent(node) {\n  if (node.type !== 2 && node.type !== 12)\n    return true;\n  return node.type === 2 ? !!node.content.trim() : isNonWhitespaceContent(node.content);\n}\n\nconst directiveImportMap = /* @__PURE__ */ new WeakMap();\nconst transformElement = (node, context) => {\n  return function postTransformElement() {\n    node = context.currentNode;\n    if (!(node.type === 1 && (node.tagType === 0 || node.tagType === 1))) {\n      return;\n    }\n    const { tag, props } = node;\n    const isComponent = node.tagType === 1;\n    let vnodeTag = isComponent ? resolveComponentType(node, context) : `\"${tag}\"`;\n    const isDynamicComponent = shared.isObject(vnodeTag) && vnodeTag.callee === RESOLVE_DYNAMIC_COMPONENT;\n    let vnodeProps;\n    let vnodeChildren;\n    let patchFlag = 0;\n    let vnodeDynamicProps;\n    let dynamicPropNames;\n    let vnodeDirectives;\n    let shouldUseBlock = (\n      // dynamic component may resolve to plain elements\n      isDynamicComponent || vnodeTag === TELEPORT || vnodeTag === SUSPENSE || !isComponent && // <svg> and <foreignObject> must be forced into blocks so that block\n      // updates inside get proper isSVG flag at runtime. (#639, #643)\n      // This is technically web-specific, but splitting the logic out of core\n      // leads to too much unnecessary complexity.\n      (tag === \"svg\" || tag === \"foreignObject\" || tag === \"math\")\n    );\n    if (props.length > 0) {\n      const propsBuildResult = buildProps(\n        node,\n        context,\n        void 0,\n        isComponent,\n        isDynamicComponent\n      );\n      vnodeProps = propsBuildResult.props;\n      patchFlag = propsBuildResult.patchFlag;\n      dynamicPropNames = propsBuildResult.dynamicPropNames;\n      const directives = propsBuildResult.directives;\n      vnodeDirectives = directives && directives.length ? createArrayExpression(\n        directives.map((dir) => buildDirectiveArgs(dir, context))\n      ) : void 0;\n      if (propsBuildResult.shouldUseBlock) {\n        shouldUseBlock = true;\n      }\n    }\n    if (node.children.length > 0) {\n      if (vnodeTag === KEEP_ALIVE) {\n        shouldUseBlock = true;\n        patchFlag |= 1024;\n      }\n      const shouldBuildAsSlots = isComponent && // Teleport is not a real component and has dedicated runtime handling\n      vnodeTag !== TELEPORT && // explained above.\n      vnodeTag !== KEEP_ALIVE;\n      if (shouldBuildAsSlots) {\n        const { slots, hasDynamicSlots } = buildSlots(node, context);\n        vnodeChildren = slots;\n        if (hasDynamicSlots) {\n          patchFlag |= 1024;\n        }\n      } else if (node.children.length === 1 && vnodeTag !== TELEPORT) {\n        const child = node.children[0];\n        const type = child.type;\n        const hasDynamicTextChild = type === 5 || type === 8;\n        if (hasDynamicTextChild && getConstantType(child, context) === 0) {\n          patchFlag |= 1;\n        }\n        if (hasDynamicTextChild || type === 2) {\n          vnodeChildren = child;\n        } else {\n          vnodeChildren = node.children;\n        }\n      } else {\n        vnodeChildren = node.children;\n      }\n    }\n    if (dynamicPropNames && dynamicPropNames.length) {\n      vnodeDynamicProps = stringifyDynamicPropNames(dynamicPropNames);\n    }\n    node.codegenNode = createVNodeCall(\n      context,\n      vnodeTag,\n      vnodeProps,\n      vnodeChildren,\n      patchFlag === 0 ? void 0 : patchFlag,\n      vnodeDynamicProps,\n      vnodeDirectives,\n      !!shouldUseBlock,\n      false,\n      isComponent,\n      node.loc\n    );\n  };\n};\nfunction resolveComponentType(node, context, ssr = false) {\n  let { tag } = node;\n  const isExplicitDynamic = isComponentTag(tag);\n  const isProp = findProp(\n    node,\n    \"is\",\n    false,\n    true\n    /* allow empty */\n  );\n  if (isProp) {\n    if (isExplicitDynamic || isCompatEnabled(\n      \"COMPILER_IS_ON_ELEMENT\",\n      context\n    )) {\n      let exp;\n      if (isProp.type === 6) {\n        exp = isProp.value && createSimpleExpression(isProp.value.content, true);\n      } else {\n        exp = isProp.exp;\n        if (!exp) {\n          exp = createSimpleExpression(`is`, false, isProp.arg.loc);\n          {\n            exp = isProp.exp = processExpression(exp, context);\n          }\n        }\n      }\n      if (exp) {\n        return createCallExpression(context.helper(RESOLVE_DYNAMIC_COMPONENT), [\n          exp\n        ]);\n      }\n    } else if (isProp.type === 6 && isProp.value.content.startsWith(\"vue:\")) {\n      tag = isProp.value.content.slice(4);\n    }\n  }\n  const builtIn = isCoreComponent(tag) || context.isBuiltInComponent(tag);\n  if (builtIn) {\n    if (!ssr) context.helper(builtIn);\n    return builtIn;\n  }\n  {\n    const fromSetup = resolveSetupReference(tag, context);\n    if (fromSetup) {\n      return fromSetup;\n    }\n    const dotIndex = tag.indexOf(\".\");\n    if (dotIndex > 0) {\n      const ns = resolveSetupReference(tag.slice(0, dotIndex), context);\n      if (ns) {\n        return ns + tag.slice(dotIndex);\n      }\n    }\n  }\n  if (context.selfName && shared.capitalize(shared.camelize(tag)) === context.selfName) {\n    context.helper(RESOLVE_COMPONENT);\n    context.components.add(tag + `__self`);\n    return toValidAssetId(tag, `component`);\n  }\n  context.helper(RESOLVE_COMPONENT);\n  context.components.add(tag);\n  return toValidAssetId(tag, `component`);\n}\nfunction resolveSetupReference(name, context) {\n  const bindings = context.bindingMetadata;\n  if (!bindings || bindings.__isScriptSetup === false) {\n    return;\n  }\n  const camelName = shared.camelize(name);\n  const PascalName = shared.capitalize(camelName);\n  const checkType = (type) => {\n    if (bindings[name] === type) {\n      return name;\n    }\n    if (bindings[camelName] === type) {\n      return camelName;\n    }\n    if (bindings[PascalName] === type) {\n      return PascalName;\n    }\n  };\n  const fromConst = checkType(\"setup-const\") || checkType(\"setup-reactive-const\") || checkType(\"literal-const\");\n  if (fromConst) {\n    return context.inline ? (\n      // in inline mode, const setup bindings (e.g. imports) can be used as-is\n      fromConst\n    ) : `$setup[${JSON.stringify(fromConst)}]`;\n  }\n  const fromMaybeRef = checkType(\"setup-let\") || checkType(\"setup-ref\") || checkType(\"setup-maybe-ref\");\n  if (fromMaybeRef) {\n    return context.inline ? (\n      // setup scope bindings that may be refs need to be unrefed\n      `${context.helperString(UNREF)}(${fromMaybeRef})`\n    ) : `$setup[${JSON.stringify(fromMaybeRef)}]`;\n  }\n  const fromProps = checkType(\"props\");\n  if (fromProps) {\n    return `${context.helperString(UNREF)}(${context.inline ? \"__props\" : \"$props\"}[${JSON.stringify(fromProps)}])`;\n  }\n}\nfunction buildProps(node, context, props = node.props, isComponent, isDynamicComponent, ssr = false) {\n  const { tag, loc: elementLoc, children } = node;\n  let properties = [];\n  const mergeArgs = [];\n  const runtimeDirectives = [];\n  const hasChildren = children.length > 0;\n  let shouldUseBlock = false;\n  let patchFlag = 0;\n  let hasRef = false;\n  let hasClassBinding = false;\n  let hasStyleBinding = false;\n  let hasHydrationEventBinding = false;\n  let hasDynamicKeys = false;\n  let hasVnodeHook = false;\n  const dynamicPropNames = [];\n  const pushMergeArg = (arg) => {\n    if (properties.length) {\n      mergeArgs.push(\n        createObjectExpression(dedupeProperties(properties), elementLoc)\n      );\n      properties = [];\n    }\n    if (arg) mergeArgs.push(arg);\n  };\n  const pushRefVForMarker = () => {\n    if (context.scopes.vFor > 0) {\n      properties.push(\n        createObjectProperty(\n          createSimpleExpression(\"ref_for\", true),\n          createSimpleExpression(\"true\")\n        )\n      );\n    }\n  };\n  const analyzePatchFlag = ({ key, value }) => {\n    if (isStaticExp(key)) {\n      const name = key.content;\n      const isEventHandler = shared.isOn(name);\n      if (isEventHandler && (!isComponent || isDynamicComponent) && // omit the flag for click handlers because hydration gives click\n      // dedicated fast path.\n      name.toLowerCase() !== \"onclick\" && // omit v-model handlers\n      name !== \"onUpdate:modelValue\" && // omit onVnodeXXX hooks\n      !shared.isReservedProp(name)) {\n        hasHydrationEventBinding = true;\n      }\n      if (isEventHandler && shared.isReservedProp(name)) {\n        hasVnodeHook = true;\n      }\n      if (isEventHandler && value.type === 14) {\n        value = value.arguments[0];\n      }\n      if (value.type === 20 || (value.type === 4 || value.type === 8) && getConstantType(value, context) > 0) {\n        return;\n      }\n      if (name === \"ref\") {\n        hasRef = true;\n      } else if (name === \"class\") {\n        hasClassBinding = true;\n      } else if (name === \"style\") {\n        hasStyleBinding = true;\n      } else if (name !== \"key\" && !dynamicPropNames.includes(name)) {\n        dynamicPropNames.push(name);\n      }\n      if (isComponent && (name === \"class\" || name === \"style\") && !dynamicPropNames.includes(name)) {\n        dynamicPropNames.push(name);\n      }\n    } else {\n      hasDynamicKeys = true;\n    }\n  };\n  for (let i = 0; i < props.length; i++) {\n    const prop = props[i];\n    if (prop.type === 6) {\n      const { loc, name, nameLoc, value } = prop;\n      let isStatic = true;\n      if (name === \"ref\") {\n        hasRef = true;\n        pushRefVForMarker();\n        if (value && context.inline) {\n          const binding = context.bindingMetadata[value.content];\n          if (binding === \"setup-let\" || binding === \"setup-ref\" || binding === \"setup-maybe-ref\") {\n            isStatic = false;\n            properties.push(\n              createObjectProperty(\n                createSimpleExpression(\"ref_key\", true),\n                createSimpleExpression(value.content, true, value.loc)\n              )\n            );\n          }\n        }\n      }\n      if (name === \"is\" && (isComponentTag(tag) || value && value.content.startsWith(\"vue:\") || isCompatEnabled(\n        \"COMPILER_IS_ON_ELEMENT\",\n        context\n      ))) {\n        continue;\n      }\n      properties.push(\n        createObjectProperty(\n          createSimpleExpression(name, true, nameLoc),\n          createSimpleExpression(\n            value ? value.content : \"\",\n            isStatic,\n            value ? value.loc : loc\n          )\n        )\n      );\n    } else {\n      const { name, arg, exp, loc, modifiers } = prop;\n      const isVBind = name === \"bind\";\n      const isVOn = name === \"on\";\n      if (name === \"slot\") {\n        if (!isComponent) {\n          context.onError(\n            createCompilerError(40, loc)\n          );\n        }\n        continue;\n      }\n      if (name === \"once\" || name === \"memo\") {\n        continue;\n      }\n      if (name === \"is\" || isVBind && isStaticArgOf(arg, \"is\") && (isComponentTag(tag) || isCompatEnabled(\n        \"COMPILER_IS_ON_ELEMENT\",\n        context\n      ))) {\n        continue;\n      }\n      if (isVOn && ssr) {\n        continue;\n      }\n      if (\n        // #938: elements with dynamic keys should be forced into blocks\n        isVBind && isStaticArgOf(arg, \"key\") || // inline before-update hooks need to force block so that it is invoked\n        // before children\n        isVOn && hasChildren && isStaticArgOf(arg, \"vue:before-update\")\n      ) {\n        shouldUseBlock = true;\n      }\n      if (isVBind && isStaticArgOf(arg, \"ref\")) {\n        pushRefVForMarker();\n      }\n      if (!arg && (isVBind || isVOn)) {\n        hasDynamicKeys = true;\n        if (exp) {\n          if (isVBind) {\n            {\n              pushMergeArg();\n              if (isCompatEnabled(\n                \"COMPILER_V_BIND_OBJECT_ORDER\",\n                context\n              )) {\n                mergeArgs.unshift(exp);\n                continue;\n              }\n            }\n            pushRefVForMarker();\n            pushMergeArg();\n            mergeArgs.push(exp);\n          } else {\n            pushMergeArg({\n              type: 14,\n              loc,\n              callee: context.helper(TO_HANDLERS),\n              arguments: isComponent ? [exp] : [exp, `true`]\n            });\n          }\n        } else {\n          context.onError(\n            createCompilerError(\n              isVBind ? 34 : 35,\n              loc\n            )\n          );\n        }\n        continue;\n      }\n      if (isVBind && modifiers.some((mod) => mod.content === \"prop\")) {\n        patchFlag |= 32;\n      }\n      const directiveTransform = context.directiveTransforms[name];\n      if (directiveTransform) {\n        const { props: props2, needRuntime } = directiveTransform(prop, node, context);\n        !ssr && props2.forEach(analyzePatchFlag);\n        if (isVOn && arg && !isStaticExp(arg)) {\n          pushMergeArg(createObjectExpression(props2, elementLoc));\n        } else {\n          properties.push(...props2);\n        }\n        if (needRuntime) {\n          runtimeDirectives.push(prop);\n          if (shared.isSymbol(needRuntime)) {\n            directiveImportMap.set(prop, needRuntime);\n          }\n        }\n      } else if (!shared.isBuiltInDirective(name)) {\n        runtimeDirectives.push(prop);\n        if (hasChildren) {\n          shouldUseBlock = true;\n        }\n      }\n    }\n  }\n  let propsExpression = void 0;\n  if (mergeArgs.length) {\n    pushMergeArg();\n    if (mergeArgs.length > 1) {\n      propsExpression = createCallExpression(\n        context.helper(MERGE_PROPS),\n        mergeArgs,\n        elementLoc\n      );\n    } else {\n      propsExpression = mergeArgs[0];\n    }\n  } else if (properties.length) {\n    propsExpression = createObjectExpression(\n      dedupeProperties(properties),\n      elementLoc\n    );\n  }\n  if (hasDynamicKeys) {\n    patchFlag |= 16;\n  } else {\n    if (hasClassBinding && !isComponent) {\n      patchFlag |= 2;\n    }\n    if (hasStyleBinding && !isComponent) {\n      patchFlag |= 4;\n    }\n    if (dynamicPropNames.length) {\n      patchFlag |= 8;\n    }\n    if (hasHydrationEventBinding) {\n      patchFlag |= 32;\n    }\n  }\n  if (!shouldUseBlock && (patchFlag === 0 || patchFlag === 32) && (hasRef || hasVnodeHook || runtimeDirectives.length > 0)) {\n    patchFlag |= 512;\n  }\n  if (!context.inSSR && propsExpression) {\n    switch (propsExpression.type) {\n      case 15:\n        let classKeyIndex = -1;\n        let styleKeyIndex = -1;\n        let hasDynamicKey = false;\n        for (let i = 0; i < propsExpression.properties.length; i++) {\n          const key = propsExpression.properties[i].key;\n          if (isStaticExp(key)) {\n            if (key.content === \"class\") {\n              classKeyIndex = i;\n            } else if (key.content === \"style\") {\n              styleKeyIndex = i;\n            }\n          } else if (!key.isHandlerKey) {\n            hasDynamicKey = true;\n          }\n        }\n        const classProp = propsExpression.properties[classKeyIndex];\n        const styleProp = propsExpression.properties[styleKeyIndex];\n        if (!hasDynamicKey) {\n          if (classProp && !isStaticExp(classProp.value)) {\n            classProp.value = createCallExpression(\n              context.helper(NORMALIZE_CLASS),\n              [classProp.value]\n            );\n          }\n          if (styleProp && // the static style is compiled into an object,\n          // so use `hasStyleBinding` to ensure that it is a dynamic style binding\n          (hasStyleBinding || styleProp.value.type === 4 && styleProp.value.content.trim()[0] === `[` || // v-bind:style and style both exist,\n          // v-bind:style with static literal object\n          styleProp.value.type === 17)) {\n            styleProp.value = createCallExpression(\n              context.helper(NORMALIZE_STYLE),\n              [styleProp.value]\n            );\n          }\n        } else {\n          propsExpression = createCallExpression(\n            context.helper(NORMALIZE_PROPS),\n            [propsExpression]\n          );\n        }\n        break;\n      case 14:\n        break;\n      default:\n        propsExpression = createCallExpression(\n          context.helper(NORMALIZE_PROPS),\n          [\n            createCallExpression(context.helper(GUARD_REACTIVE_PROPS), [\n              propsExpression\n            ])\n          ]\n        );\n        break;\n    }\n  }\n  return {\n    props: propsExpression,\n    directives: runtimeDirectives,\n    patchFlag,\n    dynamicPropNames,\n    shouldUseBlock\n  };\n}\nfunction dedupeProperties(properties) {\n  const knownProps = /* @__PURE__ */ new Map();\n  const deduped = [];\n  for (let i = 0; i < properties.length; i++) {\n    const prop = properties[i];\n    if (prop.key.type === 8 || !prop.key.isStatic) {\n      deduped.push(prop);\n      continue;\n    }\n    const name = prop.key.content;\n    const existing = knownProps.get(name);\n    if (existing) {\n      if (name === \"style\" || name === \"class\" || shared.isOn(name)) {\n        mergeAsArray(existing, prop);\n      }\n    } else {\n      knownProps.set(name, prop);\n      deduped.push(prop);\n    }\n  }\n  return deduped;\n}\nfunction mergeAsArray(existing, incoming) {\n  if (existing.value.type === 17) {\n    existing.value.elements.push(incoming.value);\n  } else {\n    existing.value = createArrayExpression(\n      [existing.value, incoming.value],\n      existing.loc\n    );\n  }\n}\nfunction buildDirectiveArgs(dir, context) {\n  const dirArgs = [];\n  const runtime = directiveImportMap.get(dir);\n  if (runtime) {\n    dirArgs.push(context.helperString(runtime));\n  } else {\n    const fromSetup = resolveSetupReference(\"v-\" + dir.name, context);\n    if (fromSetup) {\n      dirArgs.push(fromSetup);\n    } else {\n      context.helper(RESOLVE_DIRECTIVE);\n      context.directives.add(dir.name);\n      dirArgs.push(toValidAssetId(dir.name, `directive`));\n    }\n  }\n  const { loc } = dir;\n  if (dir.exp) dirArgs.push(dir.exp);\n  if (dir.arg) {\n    if (!dir.exp) {\n      dirArgs.push(`void 0`);\n    }\n    dirArgs.push(dir.arg);\n  }\n  if (Object.keys(dir.modifiers).length) {\n    if (!dir.arg) {\n      if (!dir.exp) {\n        dirArgs.push(`void 0`);\n      }\n      dirArgs.push(`void 0`);\n    }\n    const trueExpression = createSimpleExpression(`true`, false, loc);\n    dirArgs.push(\n      createObjectExpression(\n        dir.modifiers.map(\n          (modifier) => createObjectProperty(modifier, trueExpression)\n        ),\n        loc\n      )\n    );\n  }\n  return createArrayExpression(dirArgs, dir.loc);\n}\nfunction stringifyDynamicPropNames(props) {\n  let propsNamesString = `[`;\n  for (let i = 0, l = props.length; i < l; i++) {\n    propsNamesString += JSON.stringify(props[i]);\n    if (i < l - 1) propsNamesString += \", \";\n  }\n  return propsNamesString + `]`;\n}\nfunction isComponentTag(tag) {\n  return tag === \"component\" || tag === \"Component\";\n}\n\nconst transformSlotOutlet = (node, context) => {\n  if (isSlotOutlet(node)) {\n    const { children, loc } = node;\n    const { slotName, slotProps } = processSlotOutlet(node, context);\n    const slotArgs = [\n      context.prefixIdentifiers ? `_ctx.$slots` : `$slots`,\n      slotName,\n      \"{}\",\n      \"undefined\",\n      \"true\"\n    ];\n    let expectedLen = 2;\n    if (slotProps) {\n      slotArgs[2] = slotProps;\n      expectedLen = 3;\n    }\n    if (children.length) {\n      slotArgs[3] = createFunctionExpression([], children, false, false, loc);\n      expectedLen = 4;\n    }\n    if (context.scopeId && !context.slotted) {\n      expectedLen = 5;\n    }\n    slotArgs.splice(expectedLen);\n    node.codegenNode = createCallExpression(\n      context.helper(RENDER_SLOT),\n      slotArgs,\n      loc\n    );\n  }\n};\nfunction processSlotOutlet(node, context) {\n  let slotName = `\"default\"`;\n  let slotProps = void 0;\n  const nonNameProps = [];\n  for (let i = 0; i < node.props.length; i++) {\n    const p = node.props[i];\n    if (p.type === 6) {\n      if (p.value) {\n        if (p.name === \"name\") {\n          slotName = JSON.stringify(p.value.content);\n        } else {\n          p.name = shared.camelize(p.name);\n          nonNameProps.push(p);\n        }\n      }\n    } else {\n      if (p.name === \"bind\" && isStaticArgOf(p.arg, \"name\")) {\n        if (p.exp) {\n          slotName = p.exp;\n        } else if (p.arg && p.arg.type === 4) {\n          const name = shared.camelize(p.arg.content);\n          slotName = p.exp = createSimpleExpression(name, false, p.arg.loc);\n          {\n            slotName = p.exp = processExpression(p.exp, context);\n          }\n        }\n      } else {\n        if (p.name === \"bind\" && p.arg && isStaticExp(p.arg)) {\n          p.arg.content = shared.camelize(p.arg.content);\n        }\n        nonNameProps.push(p);\n      }\n    }\n  }\n  if (nonNameProps.length > 0) {\n    const { props, directives } = buildProps(\n      node,\n      context,\n      nonNameProps,\n      false,\n      false\n    );\n    slotProps = props;\n    if (directives.length) {\n      context.onError(\n        createCompilerError(\n          36,\n          directives[0].loc\n        )\n      );\n    }\n  }\n  return {\n    slotName,\n    slotProps\n  };\n}\n\nconst transformOn = (dir, node, context, augmentor) => {\n  const { loc, modifiers, arg } = dir;\n  if (!dir.exp && !modifiers.length) {\n    context.onError(createCompilerError(35, loc));\n  }\n  let eventName;\n  if (arg.type === 4) {\n    if (arg.isStatic) {\n      let rawName = arg.content;\n      if (rawName.startsWith(\"vue:\")) {\n        rawName = `vnode-${rawName.slice(4)}`;\n      }\n      const eventString = node.tagType !== 0 || rawName.startsWith(\"vnode\") || !/[A-Z]/.test(rawName) ? (\n        // for non-element and vnode lifecycle event listeners, auto convert\n        // it to camelCase. See issue #2249\n        shared.toHandlerKey(shared.camelize(rawName))\n      ) : (\n        // preserve case for plain element listeners that have uppercase\n        // letters, as these may be custom elements' custom events\n        `on:${rawName}`\n      );\n      eventName = createSimpleExpression(eventString, true, arg.loc);\n    } else {\n      eventName = createCompoundExpression([\n        `${context.helperString(TO_HANDLER_KEY)}(`,\n        arg,\n        `)`\n      ]);\n    }\n  } else {\n    eventName = arg;\n    eventName.children.unshift(`${context.helperString(TO_HANDLER_KEY)}(`);\n    eventName.children.push(`)`);\n  }\n  let exp = dir.exp;\n  if (exp && !exp.content.trim()) {\n    exp = void 0;\n  }\n  let shouldCache = context.cacheHandlers && !exp && !context.inVOnce;\n  if (exp) {\n    const isMemberExp = isMemberExpression(exp, context);\n    const isInlineStatement = !(isMemberExp || isFnExpression(exp, context));\n    const hasMultipleStatements = exp.content.includes(`;`);\n    if (context.prefixIdentifiers) {\n      isInlineStatement && context.addIdentifiers(`$event`);\n      exp = dir.exp = processExpression(\n        exp,\n        context,\n        false,\n        hasMultipleStatements\n      );\n      isInlineStatement && context.removeIdentifiers(`$event`);\n      shouldCache = context.cacheHandlers && // unnecessary to cache inside v-once\n      !context.inVOnce && // runtime constants don't need to be cached\n      // (this is analyzed by compileScript in SFC <script setup>)\n      !(exp.type === 4 && exp.constType > 0) && // #1541 bail if this is a member exp handler passed to a component -\n      // we need to use the original function to preserve arity,\n      // e.g. <transition> relies on checking cb.length to determine\n      // transition end handling. Inline function is ok since its arity\n      // is preserved even when cached.\n      !(isMemberExp && node.tagType === 1) && // bail if the function references closure variables (v-for, v-slot)\n      // it must be passed fresh to avoid stale values.\n      !hasScopeRef(exp, context.identifiers);\n      if (shouldCache && isMemberExp) {\n        if (exp.type === 4) {\n          exp.content = `${exp.content} && ${exp.content}(...args)`;\n        } else {\n          exp.children = [...exp.children, ` && `, ...exp.children, `(...args)`];\n        }\n      }\n    }\n    if (isInlineStatement || shouldCache && isMemberExp) {\n      exp = createCompoundExpression([\n        `${isInlineStatement ? context.isTS ? `($event: any)` : `$event` : `${context.isTS ? `\n//@ts-ignore\n` : ``}(...args)`} => ${hasMultipleStatements ? `{` : `(`}`,\n        exp,\n        hasMultipleStatements ? `}` : `)`\n      ]);\n    }\n  }\n  let ret = {\n    props: [\n      createObjectProperty(\n        eventName,\n        exp || createSimpleExpression(`() => {}`, false, loc)\n      )\n    ]\n  };\n  if (augmentor) {\n    ret = augmentor(ret);\n  }\n  if (shouldCache) {\n    ret.props[0].value = context.cache(ret.props[0].value);\n  }\n  ret.props.forEach((p) => p.key.isHandlerKey = true);\n  return ret;\n};\n\nconst transformText = (node, context) => {\n  if (node.type === 0 || node.type === 1 || node.type === 11 || node.type === 10) {\n    return () => {\n      const children = node.children;\n      let currentContainer = void 0;\n      let hasText = false;\n      for (let i = 0; i < children.length; i++) {\n        const child = children[i];\n        if (isText$1(child)) {\n          hasText = true;\n          for (let j = i + 1; j < children.length; j++) {\n            const next = children[j];\n            if (isText$1(next)) {\n              if (!currentContainer) {\n                currentContainer = children[i] = createCompoundExpression(\n                  [child],\n                  child.loc\n                );\n              }\n              currentContainer.children.push(` + `, next);\n              children.splice(j, 1);\n              j--;\n            } else {\n              currentContainer = void 0;\n              break;\n            }\n          }\n        }\n      }\n      if (!hasText || // if this is a plain element with a single text child, leave it\n      // as-is since the runtime has dedicated fast path for this by directly\n      // setting textContent of the element.\n      // for component root it's always normalized anyway.\n      children.length === 1 && (node.type === 0 || node.type === 1 && node.tagType === 0 && // #3756\n      // custom directives can potentially add DOM elements arbitrarily,\n      // we need to avoid setting textContent of the element at runtime\n      // to avoid accidentally overwriting the DOM elements added\n      // by the user through custom directives.\n      !node.props.find(\n        (p) => p.type === 7 && !context.directiveTransforms[p.name]\n      ) && // in compat mode, <template> tags with no special directives\n      // will be rendered as a fragment so its children must be\n      // converted into vnodes.\n      !(node.tag === \"template\"))) {\n        return;\n      }\n      for (let i = 0; i < children.length; i++) {\n        const child = children[i];\n        if (isText$1(child) || child.type === 8) {\n          const callArgs = [];\n          if (child.type !== 2 || child.content !== \" \") {\n            callArgs.push(child);\n          }\n          if (!context.ssr && getConstantType(child, context) === 0) {\n            callArgs.push(\n              1 + (``)\n            );\n          }\n          children[i] = {\n            type: 12,\n            content: child,\n            loc: child.loc,\n            codegenNode: createCallExpression(\n              context.helper(CREATE_TEXT),\n              callArgs\n            )\n          };\n        }\n      }\n    };\n  }\n};\n\nconst seen$1 = /* @__PURE__ */ new WeakSet();\nconst transformOnce = (node, context) => {\n  if (node.type === 1 && findDir(node, \"once\", true)) {\n    if (seen$1.has(node) || context.inVOnce || context.inSSR) {\n      return;\n    }\n    seen$1.add(node);\n    context.inVOnce = true;\n    context.helper(SET_BLOCK_TRACKING);\n    return () => {\n      context.inVOnce = false;\n      const cur = context.currentNode;\n      if (cur.codegenNode) {\n        cur.codegenNode = context.cache(\n          cur.codegenNode,\n          true,\n          true\n        );\n      }\n    };\n  }\n};\n\nconst transformModel = (dir, node, context) => {\n  const { exp, arg } = dir;\n  if (!exp) {\n    context.onError(\n      createCompilerError(41, dir.loc)\n    );\n    return createTransformProps();\n  }\n  const rawExp = exp.loc.source.trim();\n  const expString = exp.type === 4 ? exp.content : rawExp;\n  const bindingType = context.bindingMetadata[rawExp];\n  if (bindingType === \"props\" || bindingType === \"props-aliased\") {\n    context.onError(createCompilerError(44, exp.loc));\n    return createTransformProps();\n  }\n  const maybeRef = context.inline && (bindingType === \"setup-let\" || bindingType === \"setup-ref\" || bindingType === \"setup-maybe-ref\");\n  if (!expString.trim() || !isMemberExpression(exp, context) && !maybeRef) {\n    context.onError(\n      createCompilerError(42, exp.loc)\n    );\n    return createTransformProps();\n  }\n  if (context.prefixIdentifiers && isSimpleIdentifier(expString) && context.identifiers[expString]) {\n    context.onError(\n      createCompilerError(43, exp.loc)\n    );\n    return createTransformProps();\n  }\n  const propName = arg ? arg : createSimpleExpression(\"modelValue\", true);\n  const eventName = arg ? isStaticExp(arg) ? `onUpdate:${shared.camelize(arg.content)}` : createCompoundExpression(['\"onUpdate:\" + ', arg]) : `onUpdate:modelValue`;\n  let assignmentExp;\n  const eventArg = context.isTS ? `($event: any)` : `$event`;\n  if (maybeRef) {\n    if (bindingType === \"setup-ref\") {\n      assignmentExp = createCompoundExpression([\n        `${eventArg} => ((`,\n        createSimpleExpression(rawExp, false, exp.loc),\n        `).value = $event)`\n      ]);\n    } else {\n      const altAssignment = bindingType === \"setup-let\" ? `${rawExp} = $event` : `null`;\n      assignmentExp = createCompoundExpression([\n        `${eventArg} => (${context.helperString(IS_REF)}(${rawExp}) ? (`,\n        createSimpleExpression(rawExp, false, exp.loc),\n        `).value = $event : ${altAssignment})`\n      ]);\n    }\n  } else {\n    assignmentExp = createCompoundExpression([\n      `${eventArg} => ((`,\n      exp,\n      `) = $event)`\n    ]);\n  }\n  const props = [\n    // modelValue: foo\n    createObjectProperty(propName, dir.exp),\n    // \"onUpdate:modelValue\": $event => (foo = $event)\n    createObjectProperty(eventName, assignmentExp)\n  ];\n  if (context.prefixIdentifiers && !context.inVOnce && context.cacheHandlers && !hasScopeRef(exp, context.identifiers)) {\n    props[1].value = context.cache(props[1].value);\n  }\n  if (dir.modifiers.length && node.tagType === 1) {\n    const modifiers = dir.modifiers.map((m) => m.content).map((m) => (isSimpleIdentifier(m) ? m : JSON.stringify(m)) + `: true`).join(`, `);\n    const modifiersKey = arg ? isStaticExp(arg) ? `${arg.content}Modifiers` : createCompoundExpression([arg, ' + \"Modifiers\"']) : `modelModifiers`;\n    props.push(\n      createObjectProperty(\n        modifiersKey,\n        createSimpleExpression(\n          `{ ${modifiers} }`,\n          false,\n          dir.loc,\n          2\n        )\n      )\n    );\n  }\n  return createTransformProps(props);\n};\nfunction createTransformProps(props = []) {\n  return { props };\n}\n\nconst validDivisionCharRE = /[\\w).+\\-_$\\]]/;\nconst transformFilter = (node, context) => {\n  if (!isCompatEnabled(\"COMPILER_FILTERS\", context)) {\n    return;\n  }\n  if (node.type === 5) {\n    rewriteFilter(node.content, context);\n  } else if (node.type === 1) {\n    node.props.forEach((prop) => {\n      if (prop.type === 7 && prop.name !== \"for\" && prop.exp) {\n        rewriteFilter(prop.exp, context);\n      }\n    });\n  }\n};\nfunction rewriteFilter(node, context) {\n  if (node.type === 4) {\n    parseFilter(node, context);\n  } else {\n    for (let i = 0; i < node.children.length; i++) {\n      const child = node.children[i];\n      if (typeof child !== \"object\") continue;\n      if (child.type === 4) {\n        parseFilter(child, context);\n      } else if (child.type === 8) {\n        rewriteFilter(node, context);\n      } else if (child.type === 5) {\n        rewriteFilter(child.content, context);\n      }\n    }\n  }\n}\nfunction parseFilter(node, context) {\n  const exp = node.content;\n  let inSingle = false;\n  let inDouble = false;\n  let inTemplateString = false;\n  let inRegex = false;\n  let curly = 0;\n  let square = 0;\n  let paren = 0;\n  let lastFilterIndex = 0;\n  let c, prev, i, expression, filters = [];\n  for (i = 0; i < exp.length; i++) {\n    prev = c;\n    c = exp.charCodeAt(i);\n    if (inSingle) {\n      if (c === 39 && prev !== 92) inSingle = false;\n    } else if (inDouble) {\n      if (c === 34 && prev !== 92) inDouble = false;\n    } else if (inTemplateString) {\n      if (c === 96 && prev !== 92) inTemplateString = false;\n    } else if (inRegex) {\n      if (c === 47 && prev !== 92) inRegex = false;\n    } else if (c === 124 && // pipe\n    exp.charCodeAt(i + 1) !== 124 && exp.charCodeAt(i - 1) !== 124 && !curly && !square && !paren) {\n      if (expression === void 0) {\n        lastFilterIndex = i + 1;\n        expression = exp.slice(0, i).trim();\n      } else {\n        pushFilter();\n      }\n    } else {\n      switch (c) {\n        case 34:\n          inDouble = true;\n          break;\n        // \"\n        case 39:\n          inSingle = true;\n          break;\n        // '\n        case 96:\n          inTemplateString = true;\n          break;\n        // `\n        case 40:\n          paren++;\n          break;\n        // (\n        case 41:\n          paren--;\n          break;\n        // )\n        case 91:\n          square++;\n          break;\n        // [\n        case 93:\n          square--;\n          break;\n        // ]\n        case 123:\n          curly++;\n          break;\n        // {\n        case 125:\n          curly--;\n          break;\n      }\n      if (c === 47) {\n        let j = i - 1;\n        let p;\n        for (; j >= 0; j--) {\n          p = exp.charAt(j);\n          if (p !== \" \") break;\n        }\n        if (!p || !validDivisionCharRE.test(p)) {\n          inRegex = true;\n        }\n      }\n    }\n  }\n  if (expression === void 0) {\n    expression = exp.slice(0, i).trim();\n  } else if (lastFilterIndex !== 0) {\n    pushFilter();\n  }\n  function pushFilter() {\n    filters.push(exp.slice(lastFilterIndex, i).trim());\n    lastFilterIndex = i + 1;\n  }\n  if (filters.length) {\n    for (i = 0; i < filters.length; i++) {\n      expression = wrapFilter(expression, filters[i], context);\n    }\n    node.content = expression;\n    node.ast = void 0;\n  }\n}\nfunction wrapFilter(exp, filter, context) {\n  context.helper(RESOLVE_FILTER);\n  const i = filter.indexOf(\"(\");\n  if (i < 0) {\n    context.filters.add(filter);\n    return `${toValidAssetId(filter, \"filter\")}(${exp})`;\n  } else {\n    const name = filter.slice(0, i);\n    const args = filter.slice(i + 1);\n    context.filters.add(name);\n    return `${toValidAssetId(name, \"filter\")}(${exp}${args !== \")\" ? \",\" + args : args}`;\n  }\n}\n\nconst seen = /* @__PURE__ */ new WeakSet();\nconst transformMemo = (node, context) => {\n  if (node.type === 1) {\n    const dir = findDir(node, \"memo\");\n    if (!dir || seen.has(node)) {\n      return;\n    }\n    seen.add(node);\n    return () => {\n      const codegenNode = node.codegenNode || context.currentNode.codegenNode;\n      if (codegenNode && codegenNode.type === 13) {\n        if (node.tagType !== 1) {\n          convertToBlock(codegenNode, context);\n        }\n        node.codegenNode = createCallExpression(context.helper(WITH_MEMO), [\n          dir.exp,\n          createFunctionExpression(void 0, codegenNode),\n          `_cache`,\n          String(context.cached.length)\n        ]);\n        context.cached.push(null);\n      }\n    };\n  }\n};\n\nfunction getBaseTransformPreset(prefixIdentifiers) {\n  return [\n    [\n      transformOnce,\n      transformIf,\n      transformMemo,\n      transformFor,\n      ...[transformFilter] ,\n      ...prefixIdentifiers ? [\n        // order is important\n        trackVForSlotScopes,\n        transformExpression\n      ] : [],\n      transformSlotOutlet,\n      transformElement,\n      trackSlotScopes,\n      transformText\n    ],\n    {\n      on: transformOn,\n      bind: transformBind,\n      model: transformModel\n    }\n  ];\n}\nfunction baseCompile(source, options = {}) {\n  const onError = options.onError || defaultOnError;\n  const isModuleMode = options.mode === \"module\";\n  const prefixIdentifiers = options.prefixIdentifiers === true || isModuleMode;\n  if (!prefixIdentifiers && options.cacheHandlers) {\n    onError(createCompilerError(49));\n  }\n  if (options.scopeId && !isModuleMode) {\n    onError(createCompilerError(50));\n  }\n  const resolvedOptions = shared.extend({}, options, {\n    prefixIdentifiers\n  });\n  const ast = shared.isString(source) ? baseParse(source, resolvedOptions) : source;\n  const [nodeTransforms, directiveTransforms] = getBaseTransformPreset(prefixIdentifiers);\n  if (options.isTS) {\n    const { expressionPlugins } = options;\n    if (!expressionPlugins || !expressionPlugins.includes(\"typescript\")) {\n      options.expressionPlugins = [...expressionPlugins || [], \"typescript\"];\n    }\n  }\n  transform(\n    ast,\n    shared.extend({}, resolvedOptions, {\n      nodeTransforms: [\n        ...nodeTransforms,\n        ...options.nodeTransforms || []\n        // user transforms\n      ],\n      directiveTransforms: shared.extend(\n        {},\n        directiveTransforms,\n        options.directiveTransforms || {}\n        // user transforms\n      )\n    })\n  );\n  return generate(ast, resolvedOptions);\n}\n\nconst BindingTypes = {\n  \"DATA\": \"data\",\n  \"PROPS\": \"props\",\n  \"PROPS_ALIASED\": \"props-aliased\",\n  \"SETUP_LET\": \"setup-let\",\n  \"SETUP_CONST\": \"setup-const\",\n  \"SETUP_REACTIVE_CONST\": \"setup-reactive-const\",\n  \"SETUP_MAYBE_REF\": \"setup-maybe-ref\",\n  \"SETUP_REF\": \"setup-ref\",\n  \"OPTIONS\": \"options\",\n  \"LITERAL_CONST\": \"literal-const\"\n};\n\nconst noopDirectiveTransform = () => ({ props: [] });\n\nexports.generateCodeFrame = shared.generateCodeFrame;\nexports.BASE_TRANSITION = BASE_TRANSITION;\nexports.BindingTypes = BindingTypes;\nexports.CAMELIZE = CAMELIZE;\nexports.CAPITALIZE = CAPITALIZE;\nexports.CREATE_BLOCK = CREATE_BLOCK;\nexports.CREATE_COMMENT = CREATE_COMMENT;\nexports.CREATE_ELEMENT_BLOCK = CREATE_ELEMENT_BLOCK;\nexports.CREATE_ELEMENT_VNODE = CREATE_ELEMENT_VNODE;\nexports.CREATE_SLOTS = CREATE_SLOTS;\nexports.CREATE_STATIC = CREATE_STATIC;\nexports.CREATE_TEXT = CREATE_TEXT;\nexports.CREATE_VNODE = CREATE_VNODE;\nexports.CompilerDeprecationTypes = CompilerDeprecationTypes;\nexports.ConstantTypes = ConstantTypes;\nexports.ElementTypes = ElementTypes;\nexports.ErrorCodes = ErrorCodes;\nexports.FRAGMENT = FRAGMENT;\nexports.GUARD_REACTIVE_PROPS = GUARD_REACTIVE_PROPS;\nexports.IS_MEMO_SAME = IS_MEMO_SAME;\nexports.IS_REF = IS_REF;\nexports.KEEP_ALIVE = KEEP_ALIVE;\nexports.MERGE_PROPS = MERGE_PROPS;\nexports.NORMALIZE_CLASS = NORMALIZE_CLASS;\nexports.NORMALIZE_PROPS = NORMALIZE_PROPS;\nexports.NORMALIZE_STYLE = NORMALIZE_STYLE;\nexports.Namespaces = Namespaces;\nexports.NodeTypes = NodeTypes;\nexports.OPEN_BLOCK = OPEN_BLOCK;\nexports.POP_SCOPE_ID = POP_SCOPE_ID;\nexports.PUSH_SCOPE_ID = PUSH_SCOPE_ID;\nexports.RENDER_LIST = RENDER_LIST;\nexports.RENDER_SLOT = RENDER_SLOT;\nexports.RESOLVE_COMPONENT = RESOLVE_COMPONENT;\nexports.RESOLVE_DIRECTIVE = RESOLVE_DIRECTIVE;\nexports.RESOLVE_DYNAMIC_COMPONENT = RESOLVE_DYNAMIC_COMPONENT;\nexports.RESOLVE_FILTER = RESOLVE_FILTER;\nexports.SET_BLOCK_TRACKING = SET_BLOCK_TRACKING;\nexports.SUSPENSE = SUSPENSE;\nexports.TELEPORT = TELEPORT;\nexports.TO_DISPLAY_STRING = TO_DISPLAY_STRING;\nexports.TO_HANDLERS = TO_HANDLERS;\nexports.TO_HANDLER_KEY = TO_HANDLER_KEY;\nexports.TS_NODE_TYPES = TS_NODE_TYPES;\nexports.UNREF = UNREF;\nexports.WITH_CTX = WITH_CTX;\nexports.WITH_DIRECTIVES = WITH_DIRECTIVES;\nexports.WITH_MEMO = WITH_MEMO;\nexports.advancePositionWithClone = advancePositionWithClone;\nexports.advancePositionWithMutation = advancePositionWithMutation;\nexports.assert = assert;\nexports.baseCompile = baseCompile;\nexports.baseParse = baseParse;\nexports.buildDirectiveArgs = buildDirectiveArgs;\nexports.buildProps = buildProps;\nexports.buildSlots = buildSlots;\nexports.checkCompatEnabled = checkCompatEnabled;\nexports.convertToBlock = convertToBlock;\nexports.createArrayExpression = createArrayExpression;\nexports.createAssignmentExpression = createAssignmentExpression;\nexports.createBlockStatement = createBlockStatement;\nexports.createCacheExpression = createCacheExpression;\nexports.createCallExpression = createCallExpression;\nexports.createCompilerError = createCompilerError;\nexports.createCompoundExpression = createCompoundExpression;\nexports.createConditionalExpression = createConditionalExpression;\nexports.createForLoopParams = createForLoopParams;\nexports.createFunctionExpression = createFunctionExpression;\nexports.createIfStatement = createIfStatement;\nexports.createInterpolation = createInterpolation;\nexports.createObjectExpression = createObjectExpression;\nexports.createObjectProperty = createObjectProperty;\nexports.createReturnStatement = createReturnStatement;\nexports.createRoot = createRoot;\nexports.createSequenceExpression = createSequenceExpression;\nexports.createSimpleExpression = createSimpleExpression;\nexports.createStructuralDirectiveTransform = createStructuralDirectiveTransform;\nexports.createTemplateLiteral = createTemplateLiteral;\nexports.createTransformContext = createTransformContext;\nexports.createVNodeCall = createVNodeCall;\nexports.errorMessages = errorMessages;\nexports.extractIdentifiers = extractIdentifiers;\nexports.findDir = findDir;\nexports.findProp = findProp;\nexports.forAliasRE = forAliasRE;\nexports.generate = generate;\nexports.getBaseTransformPreset = getBaseTransformPreset;\nexports.getConstantType = getConstantType;\nexports.getMemoedVNodeCall = getMemoedVNodeCall;\nexports.getVNodeBlockHelper = getVNodeBlockHelper;\nexports.getVNodeHelper = getVNodeHelper;\nexports.hasDynamicKeyVBind = hasDynamicKeyVBind;\nexports.hasScopeRef = hasScopeRef;\nexports.helperNameMap = helperNameMap;\nexports.injectProp = injectProp;\nexports.isCoreComponent = isCoreComponent;\nexports.isFnExpression = isFnExpression;\nexports.isFnExpressionBrowser = isFnExpressionBrowser;\nexports.isFnExpressionNode = isFnExpressionNode;\nexports.isFunctionType = isFunctionType;\nexports.isInDestructureAssignment = isInDestructureAssignment;\nexports.isInNewExpression = isInNewExpression;\nexports.isMemberExpression = isMemberExpression;\nexports.isMemberExpressionBrowser = isMemberExpressionBrowser;\nexports.isMemberExpressionNode = isMemberExpressionNode;\nexports.isReferencedIdentifier = isReferencedIdentifier;\nexports.isSimpleIdentifier = isSimpleIdentifier;\nexports.isSlotOutlet = isSlotOutlet;\nexports.isStaticArgOf = isStaticArgOf;\nexports.isStaticExp = isStaticExp;\nexports.isStaticProperty = isStaticProperty;\nexports.isStaticPropertyKey = isStaticPropertyKey;\nexports.isTemplateNode = isTemplateNode;\nexports.isText = isText$1;\nexports.isVPre = isVPre;\nexports.isVSlot = isVSlot;\nexports.locStub = locStub;\nexports.noopDirectiveTransform = noopDirectiveTransform;\nexports.processExpression = processExpression;\nexports.processFor = processFor;\nexports.processIf = processIf;\nexports.processSlotOutlet = processSlotOutlet;\nexports.registerRuntimeHelpers = registerRuntimeHelpers;\nexports.resolveComponentType = resolveComponentType;\nexports.stringifyExpression = stringifyExpression;\nexports.toValidAssetId = toValidAssetId;\nexports.trackSlotScopes = trackSlotScopes;\nexports.trackVForSlotScopes = trackVForSlotScopes;\nexports.transform = transform;\nexports.transformBind = transformBind;\nexports.transformElement = transformElement;\nexports.transformExpression = transformExpression;\nexports.transformModel = transformModel;\nexports.transformOn = transformOn;\nexports.traverseNode = traverseNode;\nexports.unwrapTSNode = unwrapTSNode;\nexports.walkBlockDeclarations = walkBlockDeclarations;\nexports.walkFunctionParams = walkFunctionParams;\nexports.walkIdentifiers = walkIdentifiers;\nexports.warnDeprecation = warnDeprecation;\n","'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./dist/compiler-core.cjs.prod.js')\n} else {\n  module.exports = require('./dist/compiler-core.cjs.js')\n}\n","/**\n* @vue/compiler-dom v3.5.18\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar compilerCore = require('@vue/compiler-core');\nvar shared = require('@vue/shared');\n\nconst V_MODEL_RADIO = Symbol(``);\nconst V_MODEL_CHECKBOX = Symbol(\n  ``\n);\nconst V_MODEL_TEXT = Symbol(``);\nconst V_MODEL_SELECT = Symbol(\n  ``\n);\nconst V_MODEL_DYNAMIC = Symbol(\n  ``\n);\nconst V_ON_WITH_MODIFIERS = Symbol(\n  ``\n);\nconst V_ON_WITH_KEYS = Symbol(\n  ``\n);\nconst V_SHOW = Symbol(``);\nconst TRANSITION = Symbol(``);\nconst TRANSITION_GROUP = Symbol(\n  ``\n);\ncompilerCore.registerRuntimeHelpers({\n  [V_MODEL_RADIO]: `vModelRadio`,\n  [V_MODEL_CHECKBOX]: `vModelCheckbox`,\n  [V_MODEL_TEXT]: `vModelText`,\n  [V_MODEL_SELECT]: `vModelSelect`,\n  [V_MODEL_DYNAMIC]: `vModelDynamic`,\n  [V_ON_WITH_MODIFIERS]: `withModifiers`,\n  [V_ON_WITH_KEYS]: `withKeys`,\n  [V_SHOW]: `vShow`,\n  [TRANSITION]: `Transition`,\n  [TRANSITION_GROUP]: `TransitionGroup`\n});\n\nconst parserOptions = {\n  parseMode: \"html\",\n  isVoidTag: shared.isVoidTag,\n  isNativeTag: (tag) => shared.isHTMLTag(tag) || shared.isSVGTag(tag) || shared.isMathMLTag(tag),\n  isPreTag: (tag) => tag === \"pre\",\n  isIgnoreNewlineTag: (tag) => tag === \"pre\" || tag === \"textarea\",\n  decodeEntities: void 0,\n  isBuiltInComponent: (tag) => {\n    if (tag === \"Transition\" || tag === \"transition\") {\n      return TRANSITION;\n    } else if (tag === \"TransitionGroup\" || tag === \"transition-group\") {\n      return TRANSITION_GROUP;\n    }\n  },\n  // https://html.spec.whatwg.org/multipage/parsing.html#tree-construction-dispatcher\n  getNamespace(tag, parent, rootNamespace) {\n    let ns = parent ? parent.ns : rootNamespace;\n    if (parent && ns === 2) {\n      if (parent.tag === \"annotation-xml\") {\n        if (tag === \"svg\") {\n          return 1;\n        }\n        if (parent.props.some(\n          (a) => a.type === 6 && a.name === \"encoding\" && a.value != null && (a.value.content === \"text/html\" || a.value.content === \"application/xhtml+xml\")\n        )) {\n          ns = 0;\n        }\n      } else if (/^m(?:[ions]|text)$/.test(parent.tag) && tag !== \"mglyph\" && tag !== \"malignmark\") {\n        ns = 0;\n      }\n    } else if (parent && ns === 1) {\n      if (parent.tag === \"foreignObject\" || parent.tag === \"desc\" || parent.tag === \"title\") {\n        ns = 0;\n      }\n    }\n    if (ns === 0) {\n      if (tag === \"svg\") {\n        return 1;\n      }\n      if (tag === \"math\") {\n        return 2;\n      }\n    }\n    return ns;\n  }\n};\n\nconst transformStyle = (node) => {\n  if (node.type === 1) {\n    node.props.forEach((p, i) => {\n      if (p.type === 6 && p.name === \"style\" && p.value) {\n        node.props[i] = {\n          type: 7,\n          name: `bind`,\n          arg: compilerCore.createSimpleExpression(`style`, true, p.loc),\n          exp: parseInlineCSS(p.value.content, p.loc),\n          modifiers: [],\n          loc: p.loc\n        };\n      }\n    });\n  }\n};\nconst parseInlineCSS = (cssText, loc) => {\n  const normalized = shared.parseStringStyle(cssText);\n  return compilerCore.createSimpleExpression(\n    JSON.stringify(normalized),\n    false,\n    loc,\n    3\n  );\n};\n\nfunction createDOMCompilerError(code, loc) {\n  return compilerCore.createCompilerError(\n    code,\n    loc,\n    DOMErrorMessages \n  );\n}\nconst DOMErrorCodes = {\n  \"X_V_HTML_NO_EXPRESSION\": 53,\n  \"53\": \"X_V_HTML_NO_EXPRESSION\",\n  \"X_V_HTML_WITH_CHILDREN\": 54,\n  \"54\": \"X_V_HTML_WITH_CHILDREN\",\n  \"X_V_TEXT_NO_EXPRESSION\": 55,\n  \"55\": \"X_V_TEXT_NO_EXPRESSION\",\n  \"X_V_TEXT_WITH_CHILDREN\": 56,\n  \"56\": \"X_V_TEXT_WITH_CHILDREN\",\n  \"X_V_MODEL_ON_INVALID_ELEMENT\": 57,\n  \"57\": \"X_V_MODEL_ON_INVALID_ELEMENT\",\n  \"X_V_MODEL_ARG_ON_ELEMENT\": 58,\n  \"58\": \"X_V_MODEL_ARG_ON_ELEMENT\",\n  \"X_V_MODEL_ON_FILE_INPUT_ELEMENT\": 59,\n  \"59\": \"X_V_MODEL_ON_FILE_INPUT_ELEMENT\",\n  \"X_V_MODEL_UNNECESSARY_VALUE\": 60,\n  \"60\": \"X_V_MODEL_UNNECESSARY_VALUE\",\n  \"X_V_SHOW_NO_EXPRESSION\": 61,\n  \"61\": \"X_V_SHOW_NO_EXPRESSION\",\n  \"X_TRANSITION_INVALID_CHILDREN\": 62,\n  \"62\": \"X_TRANSITION_INVALID_CHILDREN\",\n  \"X_IGNORED_SIDE_EFFECT_TAG\": 63,\n  \"63\": \"X_IGNORED_SIDE_EFFECT_TAG\",\n  \"__EXTEND_POINT__\": 64,\n  \"64\": \"__EXTEND_POINT__\"\n};\nconst DOMErrorMessages = {\n  [53]: `v-html is missing expression.`,\n  [54]: `v-html will override element children.`,\n  [55]: `v-text is missing expression.`,\n  [56]: `v-text will override element children.`,\n  [57]: `v-model can only be used on <input>, <textarea> and <select> elements.`,\n  [58]: `v-model argument is not supported on plain elements.`,\n  [59]: `v-model cannot be used on file inputs since they are read-only. Use a v-on:change listener instead.`,\n  [60]: `Unnecessary value binding used alongside v-model. It will interfere with v-model's behavior.`,\n  [61]: `v-show is missing expression.`,\n  [62]: `<Transition> expects exactly one child element or component.`,\n  [63]: `Tags with side effect (<script> and <style>) are ignored in client component templates.`\n};\n\nconst transformVHtml = (dir, node, context) => {\n  const { exp, loc } = dir;\n  if (!exp) {\n    context.onError(\n      createDOMCompilerError(53, loc)\n    );\n  }\n  if (node.children.length) {\n    context.onError(\n      createDOMCompilerError(54, loc)\n    );\n    node.children.length = 0;\n  }\n  return {\n    props: [\n      compilerCore.createObjectProperty(\n        compilerCore.createSimpleExpression(`innerHTML`, true, loc),\n        exp || compilerCore.createSimpleExpression(\"\", true)\n      )\n    ]\n  };\n};\n\nconst transformVText = (dir, node, context) => {\n  const { exp, loc } = dir;\n  if (!exp) {\n    context.onError(\n      createDOMCompilerError(55, loc)\n    );\n  }\n  if (node.children.length) {\n    context.onError(\n      createDOMCompilerError(56, loc)\n    );\n    node.children.length = 0;\n  }\n  return {\n    props: [\n      compilerCore.createObjectProperty(\n        compilerCore.createSimpleExpression(`textContent`, true),\n        exp ? compilerCore.getConstantType(exp, context) > 0 ? exp : compilerCore.createCallExpression(\n          context.helperString(compilerCore.TO_DISPLAY_STRING),\n          [exp],\n          loc\n        ) : compilerCore.createSimpleExpression(\"\", true)\n      )\n    ]\n  };\n};\n\nconst transformModel = (dir, node, context) => {\n  const baseResult = compilerCore.transformModel(dir, node, context);\n  if (!baseResult.props.length || node.tagType === 1) {\n    return baseResult;\n  }\n  if (dir.arg) {\n    context.onError(\n      createDOMCompilerError(\n        58,\n        dir.arg.loc\n      )\n    );\n  }\n  const { tag } = node;\n  const isCustomElement = context.isCustomElement(tag);\n  if (tag === \"input\" || tag === \"textarea\" || tag === \"select\" || isCustomElement) {\n    let directiveToUse = V_MODEL_TEXT;\n    let isInvalidType = false;\n    if (tag === \"input\" || isCustomElement) {\n      const type = compilerCore.findProp(node, `type`);\n      if (type) {\n        if (type.type === 7) {\n          directiveToUse = V_MODEL_DYNAMIC;\n        } else if (type.value) {\n          switch (type.value.content) {\n            case \"radio\":\n              directiveToUse = V_MODEL_RADIO;\n              break;\n            case \"checkbox\":\n              directiveToUse = V_MODEL_CHECKBOX;\n              break;\n            case \"file\":\n              isInvalidType = true;\n              context.onError(\n                createDOMCompilerError(\n                  59,\n                  dir.loc\n                )\n              );\n              break;\n          }\n        }\n      } else if (compilerCore.hasDynamicKeyVBind(node)) {\n        directiveToUse = V_MODEL_DYNAMIC;\n      } else ;\n    } else if (tag === \"select\") {\n      directiveToUse = V_MODEL_SELECT;\n    } else ;\n    if (!isInvalidType) {\n      baseResult.needRuntime = context.helper(directiveToUse);\n    }\n  } else {\n    context.onError(\n      createDOMCompilerError(\n        57,\n        dir.loc\n      )\n    );\n  }\n  baseResult.props = baseResult.props.filter(\n    (p) => !(p.key.type === 4 && p.key.content === \"modelValue\")\n  );\n  return baseResult;\n};\n\nconst isEventOptionModifier = /* @__PURE__ */ shared.makeMap(`passive,once,capture`);\nconst isNonKeyModifier = /* @__PURE__ */ shared.makeMap(\n  // event propagation management\n  `stop,prevent,self,ctrl,shift,alt,meta,exact,middle`\n);\nconst maybeKeyModifier = /* @__PURE__ */ shared.makeMap(\"left,right\");\nconst isKeyboardEvent = /* @__PURE__ */ shared.makeMap(`onkeyup,onkeydown,onkeypress`);\nconst resolveModifiers = (key, modifiers, context, loc) => {\n  const keyModifiers = [];\n  const nonKeyModifiers = [];\n  const eventOptionModifiers = [];\n  for (let i = 0; i < modifiers.length; i++) {\n    const modifier = modifiers[i].content;\n    if (modifier === \"native\" && compilerCore.checkCompatEnabled(\n      \"COMPILER_V_ON_NATIVE\",\n      context,\n      loc\n    )) {\n      eventOptionModifiers.push(modifier);\n    } else if (isEventOptionModifier(modifier)) {\n      eventOptionModifiers.push(modifier);\n    } else {\n      if (maybeKeyModifier(modifier)) {\n        if (compilerCore.isStaticExp(key)) {\n          if (isKeyboardEvent(key.content.toLowerCase())) {\n            keyModifiers.push(modifier);\n          } else {\n            nonKeyModifiers.push(modifier);\n          }\n        } else {\n          keyModifiers.push(modifier);\n          nonKeyModifiers.push(modifier);\n        }\n      } else {\n        if (isNonKeyModifier(modifier)) {\n          nonKeyModifiers.push(modifier);\n        } else {\n          keyModifiers.push(modifier);\n        }\n      }\n    }\n  }\n  return {\n    keyModifiers,\n    nonKeyModifiers,\n    eventOptionModifiers\n  };\n};\nconst transformClick = (key, event) => {\n  const isStaticClick = compilerCore.isStaticExp(key) && key.content.toLowerCase() === \"onclick\";\n  return isStaticClick ? compilerCore.createSimpleExpression(event, true) : key.type !== 4 ? compilerCore.createCompoundExpression([\n    `(`,\n    key,\n    `) === \"onClick\" ? \"${event}\" : (`,\n    key,\n    `)`\n  ]) : key;\n};\nconst transformOn = (dir, node, context) => {\n  return compilerCore.transformOn(dir, node, context, (baseResult) => {\n    const { modifiers } = dir;\n    if (!modifiers.length) return baseResult;\n    let { key, value: handlerExp } = baseResult.props[0];\n    const { keyModifiers, nonKeyModifiers, eventOptionModifiers } = resolveModifiers(key, modifiers, context, dir.loc);\n    if (nonKeyModifiers.includes(\"right\")) {\n      key = transformClick(key, `onContextmenu`);\n    }\n    if (nonKeyModifiers.includes(\"middle\")) {\n      key = transformClick(key, `onMouseup`);\n    }\n    if (nonKeyModifiers.length) {\n      handlerExp = compilerCore.createCallExpression(context.helper(V_ON_WITH_MODIFIERS), [\n        handlerExp,\n        JSON.stringify(nonKeyModifiers)\n      ]);\n    }\n    if (keyModifiers.length && // if event name is dynamic, always wrap with keys guard\n    (!compilerCore.isStaticExp(key) || isKeyboardEvent(key.content.toLowerCase()))) {\n      handlerExp = compilerCore.createCallExpression(context.helper(V_ON_WITH_KEYS), [\n        handlerExp,\n        JSON.stringify(keyModifiers)\n      ]);\n    }\n    if (eventOptionModifiers.length) {\n      const modifierPostfix = eventOptionModifiers.map(shared.capitalize).join(\"\");\n      key = compilerCore.isStaticExp(key) ? compilerCore.createSimpleExpression(`${key.content}${modifierPostfix}`, true) : compilerCore.createCompoundExpression([`(`, key, `) + \"${modifierPostfix}\"`]);\n    }\n    return {\n      props: [compilerCore.createObjectProperty(key, handlerExp)]\n    };\n  });\n};\n\nconst transformShow = (dir, node, context) => {\n  const { exp, loc } = dir;\n  if (!exp) {\n    context.onError(\n      createDOMCompilerError(61, loc)\n    );\n  }\n  return {\n    props: [],\n    needRuntime: context.helper(V_SHOW)\n  };\n};\n\nconst expReplaceRE = /__VUE_EXP_START__(.*?)__VUE_EXP_END__/g;\nconst stringifyStatic = (children, context, parent) => {\n  if (context.scopes.vSlot > 0) {\n    return;\n  }\n  const isParentCached = parent.type === 1 && parent.codegenNode && parent.codegenNode.type === 13 && parent.codegenNode.children && !shared.isArray(parent.codegenNode.children) && parent.codegenNode.children.type === 20;\n  let nc = 0;\n  let ec = 0;\n  const currentChunk = [];\n  const stringifyCurrentChunk = (currentIndex) => {\n    if (nc >= 20 || ec >= 5) {\n      const staticCall = compilerCore.createCallExpression(context.helper(compilerCore.CREATE_STATIC), [\n        JSON.stringify(\n          currentChunk.map((node) => stringifyNode(node, context)).join(\"\")\n        ).replace(expReplaceRE, `\" + $1 + \"`),\n        // the 2nd argument indicates the number of DOM nodes this static vnode\n        // will insert / hydrate\n        String(currentChunk.length)\n      ]);\n      const deleteCount = currentChunk.length - 1;\n      if (isParentCached) {\n        children.splice(\n          currentIndex - currentChunk.length,\n          currentChunk.length,\n          // @ts-expect-error\n          staticCall\n        );\n      } else {\n        currentChunk[0].codegenNode.value = staticCall;\n        if (currentChunk.length > 1) {\n          children.splice(currentIndex - currentChunk.length + 1, deleteCount);\n          const cacheIndex = context.cached.indexOf(\n            currentChunk[currentChunk.length - 1].codegenNode\n          );\n          if (cacheIndex > -1) {\n            for (let i2 = cacheIndex; i2 < context.cached.length; i2++) {\n              const c = context.cached[i2];\n              if (c) c.index -= deleteCount;\n            }\n            context.cached.splice(cacheIndex - deleteCount + 1, deleteCount);\n          }\n        }\n      }\n      return deleteCount;\n    }\n    return 0;\n  };\n  let i = 0;\n  for (; i < children.length; i++) {\n    const child = children[i];\n    const isCached = isParentCached || getCachedNode(child);\n    if (isCached) {\n      const result = analyzeNode(child);\n      if (result) {\n        nc += result[0];\n        ec += result[1];\n        currentChunk.push(child);\n        continue;\n      }\n    }\n    i -= stringifyCurrentChunk(i);\n    nc = 0;\n    ec = 0;\n    currentChunk.length = 0;\n  }\n  stringifyCurrentChunk(i);\n};\nconst getCachedNode = (node) => {\n  if ((node.type === 1 && node.tagType === 0 || node.type === 12) && node.codegenNode && node.codegenNode.type === 20) {\n    return node.codegenNode;\n  }\n};\nconst dataAriaRE = /^(data|aria)-/;\nconst isStringifiableAttr = (name, ns) => {\n  return (ns === 0 ? shared.isKnownHtmlAttr(name) : ns === 1 ? shared.isKnownSvgAttr(name) : ns === 2 ? shared.isKnownMathMLAttr(name) : false) || dataAriaRE.test(name);\n};\nconst isNonStringifiable = /* @__PURE__ */ shared.makeMap(\n  `caption,thead,tr,th,tbody,td,tfoot,colgroup,col`\n);\nfunction analyzeNode(node) {\n  if (node.type === 1 && isNonStringifiable(node.tag)) {\n    return false;\n  }\n  if (node.type === 12) {\n    return [1, 0];\n  }\n  let nc = 1;\n  let ec = node.props.length > 0 ? 1 : 0;\n  let bailed = false;\n  const bail = () => {\n    bailed = true;\n    return false;\n  };\n  function walk(node2) {\n    const isOptionTag = node2.tag === \"option\" && node2.ns === 0;\n    for (let i = 0; i < node2.props.length; i++) {\n      const p = node2.props[i];\n      if (p.type === 6 && !isStringifiableAttr(p.name, node2.ns)) {\n        return bail();\n      }\n      if (p.type === 7 && p.name === \"bind\") {\n        if (p.arg && (p.arg.type === 8 || p.arg.isStatic && !isStringifiableAttr(p.arg.content, node2.ns))) {\n          return bail();\n        }\n        if (p.exp && (p.exp.type === 8 || p.exp.constType < 3)) {\n          return bail();\n        }\n        if (isOptionTag && compilerCore.isStaticArgOf(p.arg, \"value\") && p.exp && !p.exp.isStatic) {\n          return bail();\n        }\n      }\n    }\n    for (let i = 0; i < node2.children.length; i++) {\n      nc++;\n      const child = node2.children[i];\n      if (child.type === 1) {\n        if (child.props.length > 0) {\n          ec++;\n        }\n        walk(child);\n        if (bailed) {\n          return false;\n        }\n      }\n    }\n    return true;\n  }\n  return walk(node) ? [nc, ec] : false;\n}\nfunction stringifyNode(node, context) {\n  if (shared.isString(node)) {\n    return node;\n  }\n  if (shared.isSymbol(node)) {\n    return ``;\n  }\n  switch (node.type) {\n    case 1:\n      return stringifyElement(node, context);\n    case 2:\n      return shared.escapeHtml(node.content);\n    case 3:\n      return `<!--${shared.escapeHtml(node.content)}-->`;\n    case 5:\n      return shared.escapeHtml(shared.toDisplayString(evaluateConstant(node.content)));\n    case 8:\n      return shared.escapeHtml(evaluateConstant(node));\n    case 12:\n      return stringifyNode(node.content, context);\n    default:\n      return \"\";\n  }\n}\nfunction stringifyElement(node, context) {\n  let res = `<${node.tag}`;\n  let innerHTML = \"\";\n  for (let i = 0; i < node.props.length; i++) {\n    const p = node.props[i];\n    if (p.type === 6) {\n      res += ` ${p.name}`;\n      if (p.value) {\n        res += `=\"${shared.escapeHtml(p.value.content)}\"`;\n      }\n    } else if (p.type === 7) {\n      if (p.name === \"bind\") {\n        const exp = p.exp;\n        if (exp.content[0] === \"_\") {\n          res += ` ${p.arg.content}=\"__VUE_EXP_START__${exp.content}__VUE_EXP_END__\"`;\n          continue;\n        }\n        if (shared.isBooleanAttr(p.arg.content) && exp.content === \"false\") {\n          continue;\n        }\n        let evaluated = evaluateConstant(exp);\n        if (evaluated != null) {\n          const arg = p.arg && p.arg.content;\n          if (arg === \"class\") {\n            evaluated = shared.normalizeClass(evaluated);\n          } else if (arg === \"style\") {\n            evaluated = shared.stringifyStyle(shared.normalizeStyle(evaluated));\n          }\n          res += ` ${p.arg.content}=\"${shared.escapeHtml(\n            evaluated\n          )}\"`;\n        }\n      } else if (p.name === \"html\") {\n        innerHTML = evaluateConstant(p.exp);\n      } else if (p.name === \"text\") {\n        innerHTML = shared.escapeHtml(\n          shared.toDisplayString(evaluateConstant(p.exp))\n        );\n      }\n    }\n  }\n  if (context.scopeId) {\n    res += ` ${context.scopeId}`;\n  }\n  res += `>`;\n  if (innerHTML) {\n    res += innerHTML;\n  } else {\n    for (let i = 0; i < node.children.length; i++) {\n      res += stringifyNode(node.children[i], context);\n    }\n  }\n  if (!shared.isVoidTag(node.tag)) {\n    res += `</${node.tag}>`;\n  }\n  return res;\n}\nfunction evaluateConstant(exp) {\n  if (exp.type === 4) {\n    return new Function(`return (${exp.content})`)();\n  } else {\n    let res = ``;\n    exp.children.forEach((c) => {\n      if (shared.isString(c) || shared.isSymbol(c)) {\n        return;\n      }\n      if (c.type === 2) {\n        res += c.content;\n      } else if (c.type === 5) {\n        res += shared.toDisplayString(evaluateConstant(c.content));\n      } else {\n        res += evaluateConstant(c);\n      }\n    });\n    return res;\n  }\n}\n\nconst ignoreSideEffectTags = (node, context) => {\n  if (node.type === 1 && node.tagType === 0 && (node.tag === \"script\" || node.tag === \"style\")) {\n    context.removeNode();\n  }\n};\n\nconst DOMNodeTransforms = [\n  transformStyle,\n  ...[]\n];\nconst DOMDirectiveTransforms = {\n  cloak: compilerCore.noopDirectiveTransform,\n  html: transformVHtml,\n  text: transformVText,\n  model: transformModel,\n  // override compiler-core\n  on: transformOn,\n  // override compiler-core\n  show: transformShow\n};\nfunction compile(src, options = {}) {\n  return compilerCore.baseCompile(\n    src,\n    shared.extend({}, parserOptions, options, {\n      nodeTransforms: [\n        // ignore <script> and <tag>\n        // this is not put inside DOMNodeTransforms because that list is used\n        // by compiler-ssr to generate vnode fallback branches\n        ignoreSideEffectTags,\n        ...DOMNodeTransforms,\n        ...options.nodeTransforms || []\n      ],\n      directiveTransforms: shared.extend(\n        {},\n        DOMDirectiveTransforms,\n        options.directiveTransforms || {}\n      ),\n      transformHoist: stringifyStatic\n    })\n  );\n}\nfunction parse(template, options = {}) {\n  return compilerCore.baseParse(template, shared.extend({}, parserOptions, options));\n}\n\nexports.DOMDirectiveTransforms = DOMDirectiveTransforms;\nexports.DOMErrorCodes = DOMErrorCodes;\nexports.DOMErrorMessages = DOMErrorMessages;\nexports.DOMNodeTransforms = DOMNodeTransforms;\nexports.TRANSITION = TRANSITION;\nexports.TRANSITION_GROUP = TRANSITION_GROUP;\nexports.V_MODEL_CHECKBOX = V_MODEL_CHECKBOX;\nexports.V_MODEL_DYNAMIC = V_MODEL_DYNAMIC;\nexports.V_MODEL_RADIO = V_MODEL_RADIO;\nexports.V_MODEL_SELECT = V_MODEL_SELECT;\nexports.V_MODEL_TEXT = V_MODEL_TEXT;\nexports.V_ON_WITH_KEYS = V_ON_WITH_KEYS;\nexports.V_ON_WITH_MODIFIERS = V_ON_WITH_MODIFIERS;\nexports.V_SHOW = V_SHOW;\nexports.compile = compile;\nexports.createDOMCompilerError = createDOMCompilerError;\nexports.parse = parse;\nexports.parserOptions = parserOptions;\nexports.transformStyle = transformStyle;\nObject.keys(compilerCore).forEach(function (k) {\n  if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) exports[k] = compilerCore[k];\n});\n","'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./dist/compiler-dom.cjs.prod.js')\n} else {\n  module.exports = require('./dist/compiler-dom.cjs.js')\n}\n","/**\n* @vue/reactivity v3.5.18\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar shared = require('@vue/shared');\n\nlet activeEffectScope;\nclass EffectScope {\n  constructor(detached = false) {\n    this.detached = detached;\n    /**\n     * @internal\n     */\n    this._active = true;\n    /**\n     * @internal track `on` calls, allow `on` call multiple times\n     */\n    this._on = 0;\n    /**\n     * @internal\n     */\n    this.effects = [];\n    /**\n     * @internal\n     */\n    this.cleanups = [];\n    this._isPaused = false;\n    this.parent = activeEffectScope;\n    if (!detached && activeEffectScope) {\n      this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(\n        this\n      ) - 1;\n    }\n  }\n  get active() {\n    return this._active;\n  }\n  pause() {\n    if (this._active) {\n      this._isPaused = true;\n      let i, l;\n      if (this.scopes) {\n        for (i = 0, l = this.scopes.length; i < l; i++) {\n          this.scopes[i].pause();\n        }\n      }\n      for (i = 0, l = this.effects.length; i < l; i++) {\n        this.effects[i].pause();\n      }\n    }\n  }\n  /**\n   * Resumes the effect scope, including all child scopes and effects.\n   */\n  resume() {\n    if (this._active) {\n      if (this._isPaused) {\n        this._isPaused = false;\n        let i, l;\n        if (this.scopes) {\n          for (i = 0, l = this.scopes.length; i < l; i++) {\n            this.scopes[i].resume();\n          }\n        }\n        for (i = 0, l = this.effects.length; i < l; i++) {\n          this.effects[i].resume();\n        }\n      }\n    }\n  }\n  run(fn) {\n    if (this._active) {\n      const currentEffectScope = activeEffectScope;\n      try {\n        activeEffectScope = this;\n        return fn();\n      } finally {\n        activeEffectScope = currentEffectScope;\n      }\n    }\n  }\n  /**\n   * This should only be called on non-detached scopes\n   * @internal\n   */\n  on() {\n    if (++this._on === 1) {\n      this.prevScope = activeEffectScope;\n      activeEffectScope = this;\n    }\n  }\n  /**\n   * This should only be called on non-detached scopes\n   * @internal\n   */\n  off() {\n    if (this._on > 0 && --this._on === 0) {\n      activeEffectScope = this.prevScope;\n      this.prevScope = void 0;\n    }\n  }\n  stop(fromParent) {\n    if (this._active) {\n      this._active = false;\n      let i, l;\n      for (i = 0, l = this.effects.length; i < l; i++) {\n        this.effects[i].stop();\n      }\n      this.effects.length = 0;\n      for (i = 0, l = this.cleanups.length; i < l; i++) {\n        this.cleanups[i]();\n      }\n      this.cleanups.length = 0;\n      if (this.scopes) {\n        for (i = 0, l = this.scopes.length; i < l; i++) {\n          this.scopes[i].stop(true);\n        }\n        this.scopes.length = 0;\n      }\n      if (!this.detached && this.parent && !fromParent) {\n        const last = this.parent.scopes.pop();\n        if (last && last !== this) {\n          this.parent.scopes[this.index] = last;\n          last.index = this.index;\n        }\n      }\n      this.parent = void 0;\n    }\n  }\n}\nfunction effectScope(detached) {\n  return new EffectScope(detached);\n}\nfunction getCurrentScope() {\n  return activeEffectScope;\n}\nfunction onScopeDispose(fn, failSilently = false) {\n  if (activeEffectScope) {\n    activeEffectScope.cleanups.push(fn);\n  }\n}\n\nlet activeSub;\nconst EffectFlags = {\n  \"ACTIVE\": 1,\n  \"1\": \"ACTIVE\",\n  \"RUNNING\": 2,\n  \"2\": \"RUNNING\",\n  \"TRACKING\": 4,\n  \"4\": \"TRACKING\",\n  \"NOTIFIED\": 8,\n  \"8\": \"NOTIFIED\",\n  \"DIRTY\": 16,\n  \"16\": \"DIRTY\",\n  \"ALLOW_RECURSE\": 32,\n  \"32\": \"ALLOW_RECURSE\",\n  \"PAUSED\": 64,\n  \"64\": \"PAUSED\",\n  \"EVALUATED\": 128,\n  \"128\": \"EVALUATED\"\n};\nconst pausedQueueEffects = /* @__PURE__ */ new WeakSet();\nclass ReactiveEffect {\n  constructor(fn) {\n    this.fn = fn;\n    /**\n     * @internal\n     */\n    this.deps = void 0;\n    /**\n     * @internal\n     */\n    this.depsTail = void 0;\n    /**\n     * @internal\n     */\n    this.flags = 1 | 4;\n    /**\n     * @internal\n     */\n    this.next = void 0;\n    /**\n     * @internal\n     */\n    this.cleanup = void 0;\n    this.scheduler = void 0;\n    if (activeEffectScope && activeEffectScope.active) {\n      activeEffectScope.effects.push(this);\n    }\n  }\n  pause() {\n    this.flags |= 64;\n  }\n  resume() {\n    if (this.flags & 64) {\n      this.flags &= -65;\n      if (pausedQueueEffects.has(this)) {\n        pausedQueueEffects.delete(this);\n        this.trigger();\n      }\n    }\n  }\n  /**\n   * @internal\n   */\n  notify() {\n    if (this.flags & 2 && !(this.flags & 32)) {\n      return;\n    }\n    if (!(this.flags & 8)) {\n      batch(this);\n    }\n  }\n  run() {\n    if (!(this.flags & 1)) {\n      return this.fn();\n    }\n    this.flags |= 2;\n    cleanupEffect(this);\n    prepareDeps(this);\n    const prevEffect = activeSub;\n    const prevShouldTrack = shouldTrack;\n    activeSub = this;\n    shouldTrack = true;\n    try {\n      return this.fn();\n    } finally {\n      cleanupDeps(this);\n      activeSub = prevEffect;\n      shouldTrack = prevShouldTrack;\n      this.flags &= -3;\n    }\n  }\n  stop() {\n    if (this.flags & 1) {\n      for (let link = this.deps; link; link = link.nextDep) {\n        removeSub(link);\n      }\n      this.deps = this.depsTail = void 0;\n      cleanupEffect(this);\n      this.onStop && this.onStop();\n      this.flags &= -2;\n    }\n  }\n  trigger() {\n    if (this.flags & 64) {\n      pausedQueueEffects.add(this);\n    } else if (this.scheduler) {\n      this.scheduler();\n    } else {\n      this.runIfDirty();\n    }\n  }\n  /**\n   * @internal\n   */\n  runIfDirty() {\n    if (isDirty(this)) {\n      this.run();\n    }\n  }\n  get dirty() {\n    return isDirty(this);\n  }\n}\nlet batchDepth = 0;\nlet batchedSub;\nlet batchedComputed;\nfunction batch(sub, isComputed = false) {\n  sub.flags |= 8;\n  if (isComputed) {\n    sub.next = batchedComputed;\n    batchedComputed = sub;\n    return;\n  }\n  sub.next = batchedSub;\n  batchedSub = sub;\n}\nfunction startBatch() {\n  batchDepth++;\n}\nfunction endBatch() {\n  if (--batchDepth > 0) {\n    return;\n  }\n  if (batchedComputed) {\n    let e = batchedComputed;\n    batchedComputed = void 0;\n    while (e) {\n      const next = e.next;\n      e.next = void 0;\n      e.flags &= -9;\n      e = next;\n    }\n  }\n  let error;\n  while (batchedSub) {\n    let e = batchedSub;\n    batchedSub = void 0;\n    while (e) {\n      const next = e.next;\n      e.next = void 0;\n      e.flags &= -9;\n      if (e.flags & 1) {\n        try {\n          ;\n          e.trigger();\n        } catch (err) {\n          if (!error) error = err;\n        }\n      }\n      e = next;\n    }\n  }\n  if (error) throw error;\n}\nfunction prepareDeps(sub) {\n  for (let link = sub.deps; link; link = link.nextDep) {\n    link.version = -1;\n    link.prevActiveLink = link.dep.activeLink;\n    link.dep.activeLink = link;\n  }\n}\nfunction cleanupDeps(sub) {\n  let head;\n  let tail = sub.depsTail;\n  let link = tail;\n  while (link) {\n    const prev = link.prevDep;\n    if (link.version === -1) {\n      if (link === tail) tail = prev;\n      removeSub(link);\n      removeDep(link);\n    } else {\n      head = link;\n    }\n    link.dep.activeLink = link.prevActiveLink;\n    link.prevActiveLink = void 0;\n    link = prev;\n  }\n  sub.deps = head;\n  sub.depsTail = tail;\n}\nfunction isDirty(sub) {\n  for (let link = sub.deps; link; link = link.nextDep) {\n    if (link.dep.version !== link.version || link.dep.computed && (refreshComputed(link.dep.computed) || link.dep.version !== link.version)) {\n      return true;\n    }\n  }\n  if (sub._dirty) {\n    return true;\n  }\n  return false;\n}\nfunction refreshComputed(computed) {\n  if (computed.flags & 4 && !(computed.flags & 16)) {\n    return;\n  }\n  computed.flags &= -17;\n  if (computed.globalVersion === globalVersion) {\n    return;\n  }\n  computed.globalVersion = globalVersion;\n  if (!computed.isSSR && computed.flags & 128 && (!computed.deps && !computed._dirty || !isDirty(computed))) {\n    return;\n  }\n  computed.flags |= 2;\n  const dep = computed.dep;\n  const prevSub = activeSub;\n  const prevShouldTrack = shouldTrack;\n  activeSub = computed;\n  shouldTrack = true;\n  try {\n    prepareDeps(computed);\n    const value = computed.fn(computed._value);\n    if (dep.version === 0 || shared.hasChanged(value, computed._value)) {\n      computed.flags |= 128;\n      computed._value = value;\n      dep.version++;\n    }\n  } catch (err) {\n    dep.version++;\n    throw err;\n  } finally {\n    activeSub = prevSub;\n    shouldTrack = prevShouldTrack;\n    cleanupDeps(computed);\n    computed.flags &= -3;\n  }\n}\nfunction removeSub(link, soft = false) {\n  const { dep, prevSub, nextSub } = link;\n  if (prevSub) {\n    prevSub.nextSub = nextSub;\n    link.prevSub = void 0;\n  }\n  if (nextSub) {\n    nextSub.prevSub = prevSub;\n    link.nextSub = void 0;\n  }\n  if (dep.subs === link) {\n    dep.subs = prevSub;\n    if (!prevSub && dep.computed) {\n      dep.computed.flags &= -5;\n      for (let l = dep.computed.deps; l; l = l.nextDep) {\n        removeSub(l, true);\n      }\n    }\n  }\n  if (!soft && !--dep.sc && dep.map) {\n    dep.map.delete(dep.key);\n  }\n}\nfunction removeDep(link) {\n  const { prevDep, nextDep } = link;\n  if (prevDep) {\n    prevDep.nextDep = nextDep;\n    link.prevDep = void 0;\n  }\n  if (nextDep) {\n    nextDep.prevDep = prevDep;\n    link.nextDep = void 0;\n  }\n}\nfunction effect(fn, options) {\n  if (fn.effect instanceof ReactiveEffect) {\n    fn = fn.effect.fn;\n  }\n  const e = new ReactiveEffect(fn);\n  if (options) {\n    shared.extend(e, options);\n  }\n  try {\n    e.run();\n  } catch (err) {\n    e.stop();\n    throw err;\n  }\n  const runner = e.run.bind(e);\n  runner.effect = e;\n  return runner;\n}\nfunction stop(runner) {\n  runner.effect.stop();\n}\nlet shouldTrack = true;\nconst trackStack = [];\nfunction pauseTracking() {\n  trackStack.push(shouldTrack);\n  shouldTrack = false;\n}\nfunction enableTracking() {\n  trackStack.push(shouldTrack);\n  shouldTrack = true;\n}\nfunction resetTracking() {\n  const last = trackStack.pop();\n  shouldTrack = last === void 0 ? true : last;\n}\nfunction onEffectCleanup(fn, failSilently = false) {\n  if (activeSub instanceof ReactiveEffect) {\n    activeSub.cleanup = fn;\n  }\n}\nfunction cleanupEffect(e) {\n  const { cleanup } = e;\n  e.cleanup = void 0;\n  if (cleanup) {\n    const prevSub = activeSub;\n    activeSub = void 0;\n    try {\n      cleanup();\n    } finally {\n      activeSub = prevSub;\n    }\n  }\n}\n\nlet globalVersion = 0;\nclass Link {\n  constructor(sub, dep) {\n    this.sub = sub;\n    this.dep = dep;\n    this.version = dep.version;\n    this.nextDep = this.prevDep = this.nextSub = this.prevSub = this.prevActiveLink = void 0;\n  }\n}\nclass Dep {\n  // TODO isolatedDeclarations \"__v_skip\"\n  constructor(computed) {\n    this.computed = computed;\n    this.version = 0;\n    /**\n     * Link between this dep and the current active effect\n     */\n    this.activeLink = void 0;\n    /**\n     * Doubly linked list representing the subscribing effects (tail)\n     */\n    this.subs = void 0;\n    /**\n     * For object property deps cleanup\n     */\n    this.map = void 0;\n    this.key = void 0;\n    /**\n     * Subscriber counter\n     */\n    this.sc = 0;\n    /**\n     * @internal\n     */\n    this.__v_skip = true;\n  }\n  track(debugInfo) {\n    if (!activeSub || !shouldTrack || activeSub === this.computed) {\n      return;\n    }\n    let link = this.activeLink;\n    if (link === void 0 || link.sub !== activeSub) {\n      link = this.activeLink = new Link(activeSub, this);\n      if (!activeSub.deps) {\n        activeSub.deps = activeSub.depsTail = link;\n      } else {\n        link.prevDep = activeSub.depsTail;\n        activeSub.depsTail.nextDep = link;\n        activeSub.depsTail = link;\n      }\n      addSub(link);\n    } else if (link.version === -1) {\n      link.version = this.version;\n      if (link.nextDep) {\n        const next = link.nextDep;\n        next.prevDep = link.prevDep;\n        if (link.prevDep) {\n          link.prevDep.nextDep = next;\n        }\n        link.prevDep = activeSub.depsTail;\n        link.nextDep = void 0;\n        activeSub.depsTail.nextDep = link;\n        activeSub.depsTail = link;\n        if (activeSub.deps === link) {\n          activeSub.deps = next;\n        }\n      }\n    }\n    return link;\n  }\n  trigger(debugInfo) {\n    this.version++;\n    globalVersion++;\n    this.notify(debugInfo);\n  }\n  notify(debugInfo) {\n    startBatch();\n    try {\n      if (false) ;\n      for (let link = this.subs; link; link = link.prevSub) {\n        if (link.sub.notify()) {\n          ;\n          link.sub.dep.notify();\n        }\n      }\n    } finally {\n      endBatch();\n    }\n  }\n}\nfunction addSub(link) {\n  link.dep.sc++;\n  if (link.sub.flags & 4) {\n    const computed = link.dep.computed;\n    if (computed && !link.dep.subs) {\n      computed.flags |= 4 | 16;\n      for (let l = computed.deps; l; l = l.nextDep) {\n        addSub(l);\n      }\n    }\n    const currentTail = link.dep.subs;\n    if (currentTail !== link) {\n      link.prevSub = currentTail;\n      if (currentTail) currentTail.nextSub = link;\n    }\n    link.dep.subs = link;\n  }\n}\nconst targetMap = /* @__PURE__ */ new WeakMap();\nconst ITERATE_KEY = Symbol(\n  \"\"\n);\nconst MAP_KEY_ITERATE_KEY = Symbol(\n  \"\"\n);\nconst ARRAY_ITERATE_KEY = Symbol(\n  \"\"\n);\nfunction track(target, type, key) {\n  if (shouldTrack && activeSub) {\n    let depsMap = targetMap.get(target);\n    if (!depsMap) {\n      targetMap.set(target, depsMap = /* @__PURE__ */ new Map());\n    }\n    let dep = depsMap.get(key);\n    if (!dep) {\n      depsMap.set(key, dep = new Dep());\n      dep.map = depsMap;\n      dep.key = key;\n    }\n    {\n      dep.track();\n    }\n  }\n}\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\n  const depsMap = targetMap.get(target);\n  if (!depsMap) {\n    globalVersion++;\n    return;\n  }\n  const run = (dep) => {\n    if (dep) {\n      {\n        dep.trigger();\n      }\n    }\n  };\n  startBatch();\n  if (type === \"clear\") {\n    depsMap.forEach(run);\n  } else {\n    const targetIsArray = shared.isArray(target);\n    const isArrayIndex = targetIsArray && shared.isIntegerKey(key);\n    if (targetIsArray && key === \"length\") {\n      const newLength = Number(newValue);\n      depsMap.forEach((dep, key2) => {\n        if (key2 === \"length\" || key2 === ARRAY_ITERATE_KEY || !shared.isSymbol(key2) && key2 >= newLength) {\n          run(dep);\n        }\n      });\n    } else {\n      if (key !== void 0 || depsMap.has(void 0)) {\n        run(depsMap.get(key));\n      }\n      if (isArrayIndex) {\n        run(depsMap.get(ARRAY_ITERATE_KEY));\n      }\n      switch (type) {\n        case \"add\":\n          if (!targetIsArray) {\n            run(depsMap.get(ITERATE_KEY));\n            if (shared.isMap(target)) {\n              run(depsMap.get(MAP_KEY_ITERATE_KEY));\n            }\n          } else if (isArrayIndex) {\n            run(depsMap.get(\"length\"));\n          }\n          break;\n        case \"delete\":\n          if (!targetIsArray) {\n            run(depsMap.get(ITERATE_KEY));\n            if (shared.isMap(target)) {\n              run(depsMap.get(MAP_KEY_ITERATE_KEY));\n            }\n          }\n          break;\n        case \"set\":\n          if (shared.isMap(target)) {\n            run(depsMap.get(ITERATE_KEY));\n          }\n          break;\n      }\n    }\n  }\n  endBatch();\n}\nfunction getDepFromReactive(object, key) {\n  const depMap = targetMap.get(object);\n  return depMap && depMap.get(key);\n}\n\nfunction reactiveReadArray(array) {\n  const raw = toRaw(array);\n  if (raw === array) return raw;\n  track(raw, \"iterate\", ARRAY_ITERATE_KEY);\n  return isShallow(array) ? raw : raw.map(toReactive);\n}\nfunction shallowReadArray(arr) {\n  track(arr = toRaw(arr), \"iterate\", ARRAY_ITERATE_KEY);\n  return arr;\n}\nconst arrayInstrumentations = {\n  __proto__: null,\n  [Symbol.iterator]() {\n    return iterator(this, Symbol.iterator, toReactive);\n  },\n  concat(...args) {\n    return reactiveReadArray(this).concat(\n      ...args.map((x) => shared.isArray(x) ? reactiveReadArray(x) : x)\n    );\n  },\n  entries() {\n    return iterator(this, \"entries\", (value) => {\n      value[1] = toReactive(value[1]);\n      return value;\n    });\n  },\n  every(fn, thisArg) {\n    return apply(this, \"every\", fn, thisArg, void 0, arguments);\n  },\n  filter(fn, thisArg) {\n    return apply(this, \"filter\", fn, thisArg, (v) => v.map(toReactive), arguments);\n  },\n  find(fn, thisArg) {\n    return apply(this, \"find\", fn, thisArg, toReactive, arguments);\n  },\n  findIndex(fn, thisArg) {\n    return apply(this, \"findIndex\", fn, thisArg, void 0, arguments);\n  },\n  findLast(fn, thisArg) {\n    return apply(this, \"findLast\", fn, thisArg, toReactive, arguments);\n  },\n  findLastIndex(fn, thisArg) {\n    return apply(this, \"findLastIndex\", fn, thisArg, void 0, arguments);\n  },\n  // flat, flatMap could benefit from ARRAY_ITERATE but are not straight-forward to implement\n  forEach(fn, thisArg) {\n    return apply(this, \"forEach\", fn, thisArg, void 0, arguments);\n  },\n  includes(...args) {\n    return searchProxy(this, \"includes\", args);\n  },\n  indexOf(...args) {\n    return searchProxy(this, \"indexOf\", args);\n  },\n  join(separator) {\n    return reactiveReadArray(this).join(separator);\n  },\n  // keys() iterator only reads `length`, no optimisation required\n  lastIndexOf(...args) {\n    return searchProxy(this, \"lastIndexOf\", args);\n  },\n  map(fn, thisArg) {\n    return apply(this, \"map\", fn, thisArg, void 0, arguments);\n  },\n  pop() {\n    return noTracking(this, \"pop\");\n  },\n  push(...args) {\n    return noTracking(this, \"push\", args);\n  },\n  reduce(fn, ...args) {\n    return reduce(this, \"reduce\", fn, args);\n  },\n  reduceRight(fn, ...args) {\n    return reduce(this, \"reduceRight\", fn, args);\n  },\n  shift() {\n    return noTracking(this, \"shift\");\n  },\n  // slice could use ARRAY_ITERATE but also seems to beg for range tracking\n  some(fn, thisArg) {\n    return apply(this, \"some\", fn, thisArg, void 0, arguments);\n  },\n  splice(...args) {\n    return noTracking(this, \"splice\", args);\n  },\n  toReversed() {\n    return reactiveReadArray(this).toReversed();\n  },\n  toSorted(comparer) {\n    return reactiveReadArray(this).toSorted(comparer);\n  },\n  toSpliced(...args) {\n    return reactiveReadArray(this).toSpliced(...args);\n  },\n  unshift(...args) {\n    return noTracking(this, \"unshift\", args);\n  },\n  values() {\n    return iterator(this, \"values\", toReactive);\n  }\n};\nfunction iterator(self, method, wrapValue) {\n  const arr = shallowReadArray(self);\n  const iter = arr[method]();\n  if (arr !== self && !isShallow(self)) {\n    iter._next = iter.next;\n    iter.next = () => {\n      const result = iter._next();\n      if (result.value) {\n        result.value = wrapValue(result.value);\n      }\n      return result;\n    };\n  }\n  return iter;\n}\nconst arrayProto = Array.prototype;\nfunction apply(self, method, fn, thisArg, wrappedRetFn, args) {\n  const arr = shallowReadArray(self);\n  const needsWrap = arr !== self && !isShallow(self);\n  const methodFn = arr[method];\n  if (methodFn !== arrayProto[method]) {\n    const result2 = methodFn.apply(self, args);\n    return needsWrap ? toReactive(result2) : result2;\n  }\n  let wrappedFn = fn;\n  if (arr !== self) {\n    if (needsWrap) {\n      wrappedFn = function(item, index) {\n        return fn.call(this, toReactive(item), index, self);\n      };\n    } else if (fn.length > 2) {\n      wrappedFn = function(item, index) {\n        return fn.call(this, item, index, self);\n      };\n    }\n  }\n  const result = methodFn.call(arr, wrappedFn, thisArg);\n  return needsWrap && wrappedRetFn ? wrappedRetFn(result) : result;\n}\nfunction reduce(self, method, fn, args) {\n  const arr = shallowReadArray(self);\n  let wrappedFn = fn;\n  if (arr !== self) {\n    if (!isShallow(self)) {\n      wrappedFn = function(acc, item, index) {\n        return fn.call(this, acc, toReactive(item), index, self);\n      };\n    } else if (fn.length > 3) {\n      wrappedFn = function(acc, item, index) {\n        return fn.call(this, acc, item, index, self);\n      };\n    }\n  }\n  return arr[method](wrappedFn, ...args);\n}\nfunction searchProxy(self, method, args) {\n  const arr = toRaw(self);\n  track(arr, \"iterate\", ARRAY_ITERATE_KEY);\n  const res = arr[method](...args);\n  if ((res === -1 || res === false) && isProxy(args[0])) {\n    args[0] = toRaw(args[0]);\n    return arr[method](...args);\n  }\n  return res;\n}\nfunction noTracking(self, method, args = []) {\n  pauseTracking();\n  startBatch();\n  const res = toRaw(self)[method].apply(self, args);\n  endBatch();\n  resetTracking();\n  return res;\n}\n\nconst isNonTrackableKeys = /* @__PURE__ */ shared.makeMap(`__proto__,__v_isRef,__isVue`);\nconst builtInSymbols = new Set(\n  /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== \"arguments\" && key !== \"caller\").map((key) => Symbol[key]).filter(shared.isSymbol)\n);\nfunction hasOwnProperty(key) {\n  if (!shared.isSymbol(key)) key = String(key);\n  const obj = toRaw(this);\n  track(obj, \"has\", key);\n  return obj.hasOwnProperty(key);\n}\nclass BaseReactiveHandler {\n  constructor(_isReadonly = false, _isShallow = false) {\n    this._isReadonly = _isReadonly;\n    this._isShallow = _isShallow;\n  }\n  get(target, key, receiver) {\n    if (key === \"__v_skip\") return target[\"__v_skip\"];\n    const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow;\n    if (key === \"__v_isReactive\") {\n      return !isReadonly2;\n    } else if (key === \"__v_isReadonly\") {\n      return isReadonly2;\n    } else if (key === \"__v_isShallow\") {\n      return isShallow2;\n    } else if (key === \"__v_raw\") {\n      if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype\n      // this means the receiver is a user proxy of the reactive proxy\n      Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) {\n        return target;\n      }\n      return;\n    }\n    const targetIsArray = shared.isArray(target);\n    if (!isReadonly2) {\n      let fn;\n      if (targetIsArray && (fn = arrayInstrumentations[key])) {\n        return fn;\n      }\n      if (key === \"hasOwnProperty\") {\n        return hasOwnProperty;\n      }\n    }\n    const res = Reflect.get(\n      target,\n      key,\n      // if this is a proxy wrapping a ref, return methods using the raw ref\n      // as receiver so that we don't have to call `toRaw` on the ref in all\n      // its class methods\n      isRef(target) ? target : receiver\n    );\n    if (shared.isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n      return res;\n    }\n    if (!isReadonly2) {\n      track(target, \"get\", key);\n    }\n    if (isShallow2) {\n      return res;\n    }\n    if (isRef(res)) {\n      return targetIsArray && shared.isIntegerKey(key) ? res : res.value;\n    }\n    if (shared.isObject(res)) {\n      return isReadonly2 ? readonly(res) : reactive(res);\n    }\n    return res;\n  }\n}\nclass MutableReactiveHandler extends BaseReactiveHandler {\n  constructor(isShallow2 = false) {\n    super(false, isShallow2);\n  }\n  set(target, key, value, receiver) {\n    let oldValue = target[key];\n    if (!this._isShallow) {\n      const isOldValueReadonly = isReadonly(oldValue);\n      if (!isShallow(value) && !isReadonly(value)) {\n        oldValue = toRaw(oldValue);\n        value = toRaw(value);\n      }\n      if (!shared.isArray(target) && isRef(oldValue) && !isRef(value)) {\n        if (isOldValueReadonly) {\n          return false;\n        } else {\n          oldValue.value = value;\n          return true;\n        }\n      }\n    }\n    const hadKey = shared.isArray(target) && shared.isIntegerKey(key) ? Number(key) < target.length : shared.hasOwn(target, key);\n    const result = Reflect.set(\n      target,\n      key,\n      value,\n      isRef(target) ? target : receiver\n    );\n    if (target === toRaw(receiver)) {\n      if (!hadKey) {\n        trigger(target, \"add\", key, value);\n      } else if (shared.hasChanged(value, oldValue)) {\n        trigger(target, \"set\", key, value);\n      }\n    }\n    return result;\n  }\n  deleteProperty(target, key) {\n    const hadKey = shared.hasOwn(target, key);\n    target[key];\n    const result = Reflect.deleteProperty(target, key);\n    if (result && hadKey) {\n      trigger(target, \"delete\", key, void 0);\n    }\n    return result;\n  }\n  has(target, key) {\n    const result = Reflect.has(target, key);\n    if (!shared.isSymbol(key) || !builtInSymbols.has(key)) {\n      track(target, \"has\", key);\n    }\n    return result;\n  }\n  ownKeys(target) {\n    track(\n      target,\n      \"iterate\",\n      shared.isArray(target) ? \"length\" : ITERATE_KEY\n    );\n    return Reflect.ownKeys(target);\n  }\n}\nclass ReadonlyReactiveHandler extends BaseReactiveHandler {\n  constructor(isShallow2 = false) {\n    super(true, isShallow2);\n  }\n  set(target, key) {\n    return true;\n  }\n  deleteProperty(target, key) {\n    return true;\n  }\n}\nconst mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler();\nconst readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler();\nconst shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler(true);\nconst shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(true);\n\nconst toShallow = (value) => value;\nconst getProto = (v) => Reflect.getPrototypeOf(v);\nfunction createIterableMethod(method, isReadonly2, isShallow2) {\n  return function(...args) {\n    const target = this[\"__v_raw\"];\n    const rawTarget = toRaw(target);\n    const targetIsMap = shared.isMap(rawTarget);\n    const isPair = method === \"entries\" || method === Symbol.iterator && targetIsMap;\n    const isKeyOnly = method === \"keys\" && targetIsMap;\n    const innerIterator = target[method](...args);\n    const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;\n    !isReadonly2 && track(\n      rawTarget,\n      \"iterate\",\n      isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY\n    );\n    return {\n      // iterator protocol\n      next() {\n        const { value, done } = innerIterator.next();\n        return done ? { value, done } : {\n          value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n          done\n        };\n      },\n      // iterable protocol\n      [Symbol.iterator]() {\n        return this;\n      }\n    };\n  };\n}\nfunction createReadonlyMethod(type) {\n  return function(...args) {\n    return type === \"delete\" ? false : type === \"clear\" ? void 0 : this;\n  };\n}\nfunction createInstrumentations(readonly, shallow) {\n  const instrumentations = {\n    get(key) {\n      const target = this[\"__v_raw\"];\n      const rawTarget = toRaw(target);\n      const rawKey = toRaw(key);\n      if (!readonly) {\n        if (shared.hasChanged(key, rawKey)) {\n          track(rawTarget, \"get\", key);\n        }\n        track(rawTarget, \"get\", rawKey);\n      }\n      const { has } = getProto(rawTarget);\n      const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive;\n      if (has.call(rawTarget, key)) {\n        return wrap(target.get(key));\n      } else if (has.call(rawTarget, rawKey)) {\n        return wrap(target.get(rawKey));\n      } else if (target !== rawTarget) {\n        target.get(key);\n      }\n    },\n    get size() {\n      const target = this[\"__v_raw\"];\n      !readonly && track(toRaw(target), \"iterate\", ITERATE_KEY);\n      return Reflect.get(target, \"size\", target);\n    },\n    has(key) {\n      const target = this[\"__v_raw\"];\n      const rawTarget = toRaw(target);\n      const rawKey = toRaw(key);\n      if (!readonly) {\n        if (shared.hasChanged(key, rawKey)) {\n          track(rawTarget, \"has\", key);\n        }\n        track(rawTarget, \"has\", rawKey);\n      }\n      return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);\n    },\n    forEach(callback, thisArg) {\n      const observed = this;\n      const target = observed[\"__v_raw\"];\n      const rawTarget = toRaw(target);\n      const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive;\n      !readonly && track(rawTarget, \"iterate\", ITERATE_KEY);\n      return target.forEach((value, key) => {\n        return callback.call(thisArg, wrap(value), wrap(key), observed);\n      });\n    }\n  };\n  shared.extend(\n    instrumentations,\n    readonly ? {\n      add: createReadonlyMethod(\"add\"),\n      set: createReadonlyMethod(\"set\"),\n      delete: createReadonlyMethod(\"delete\"),\n      clear: createReadonlyMethod(\"clear\")\n    } : {\n      add(value) {\n        if (!shallow && !isShallow(value) && !isReadonly(value)) {\n          value = toRaw(value);\n        }\n        const target = toRaw(this);\n        const proto = getProto(target);\n        const hadKey = proto.has.call(target, value);\n        if (!hadKey) {\n          target.add(value);\n          trigger(target, \"add\", value, value);\n        }\n        return this;\n      },\n      set(key, value) {\n        if (!shallow && !isShallow(value) && !isReadonly(value)) {\n          value = toRaw(value);\n        }\n        const target = toRaw(this);\n        const { has, get } = getProto(target);\n        let hadKey = has.call(target, key);\n        if (!hadKey) {\n          key = toRaw(key);\n          hadKey = has.call(target, key);\n        }\n        const oldValue = get.call(target, key);\n        target.set(key, value);\n        if (!hadKey) {\n          trigger(target, \"add\", key, value);\n        } else if (shared.hasChanged(value, oldValue)) {\n          trigger(target, \"set\", key, value);\n        }\n        return this;\n      },\n      delete(key) {\n        const target = toRaw(this);\n        const { has, get } = getProto(target);\n        let hadKey = has.call(target, key);\n        if (!hadKey) {\n          key = toRaw(key);\n          hadKey = has.call(target, key);\n        }\n        get ? get.call(target, key) : void 0;\n        const result = target.delete(key);\n        if (hadKey) {\n          trigger(target, \"delete\", key, void 0);\n        }\n        return result;\n      },\n      clear() {\n        const target = toRaw(this);\n        const hadItems = target.size !== 0;\n        const result = target.clear();\n        if (hadItems) {\n          trigger(\n            target,\n            \"clear\",\n            void 0,\n            void 0);\n        }\n        return result;\n      }\n    }\n  );\n  const iteratorMethods = [\n    \"keys\",\n    \"values\",\n    \"entries\",\n    Symbol.iterator\n  ];\n  iteratorMethods.forEach((method) => {\n    instrumentations[method] = createIterableMethod(method, readonly, shallow);\n  });\n  return instrumentations;\n}\nfunction createInstrumentationGetter(isReadonly2, shallow) {\n  const instrumentations = createInstrumentations(isReadonly2, shallow);\n  return (target, key, receiver) => {\n    if (key === \"__v_isReactive\") {\n      return !isReadonly2;\n    } else if (key === \"__v_isReadonly\") {\n      return isReadonly2;\n    } else if (key === \"__v_raw\") {\n      return target;\n    }\n    return Reflect.get(\n      shared.hasOwn(instrumentations, key) && key in target ? instrumentations : target,\n      key,\n      receiver\n    );\n  };\n}\nconst mutableCollectionHandlers = {\n  get: /* @__PURE__ */ createInstrumentationGetter(false, false)\n};\nconst shallowCollectionHandlers = {\n  get: /* @__PURE__ */ createInstrumentationGetter(false, true)\n};\nconst readonlyCollectionHandlers = {\n  get: /* @__PURE__ */ createInstrumentationGetter(true, false)\n};\nconst shallowReadonlyCollectionHandlers = {\n  get: /* @__PURE__ */ createInstrumentationGetter(true, true)\n};\n\nconst reactiveMap = /* @__PURE__ */ new WeakMap();\nconst shallowReactiveMap = /* @__PURE__ */ new WeakMap();\nconst readonlyMap = /* @__PURE__ */ new WeakMap();\nconst shallowReadonlyMap = /* @__PURE__ */ new WeakMap();\nfunction targetTypeMap(rawType) {\n  switch (rawType) {\n    case \"Object\":\n    case \"Array\":\n      return 1 /* COMMON */;\n    case \"Map\":\n    case \"Set\":\n    case \"WeakMap\":\n    case \"WeakSet\":\n      return 2 /* COLLECTION */;\n    default:\n      return 0 /* INVALID */;\n  }\n}\nfunction getTargetType(value) {\n  return value[\"__v_skip\"] || !Object.isExtensible(value) ? 0 /* INVALID */ : targetTypeMap(shared.toRawType(value));\n}\nfunction reactive(target) {\n  if (isReadonly(target)) {\n    return target;\n  }\n  return createReactiveObject(\n    target,\n    false,\n    mutableHandlers,\n    mutableCollectionHandlers,\n    reactiveMap\n  );\n}\nfunction shallowReactive(target) {\n  return createReactiveObject(\n    target,\n    false,\n    shallowReactiveHandlers,\n    shallowCollectionHandlers,\n    shallowReactiveMap\n  );\n}\nfunction readonly(target) {\n  return createReactiveObject(\n    target,\n    true,\n    readonlyHandlers,\n    readonlyCollectionHandlers,\n    readonlyMap\n  );\n}\nfunction shallowReadonly(target) {\n  return createReactiveObject(\n    target,\n    true,\n    shallowReadonlyHandlers,\n    shallowReadonlyCollectionHandlers,\n    shallowReadonlyMap\n  );\n}\nfunction createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) {\n  if (!shared.isObject(target)) {\n    return target;\n  }\n  if (target[\"__v_raw\"] && !(isReadonly2 && target[\"__v_isReactive\"])) {\n    return target;\n  }\n  const targetType = getTargetType(target);\n  if (targetType === 0 /* INVALID */) {\n    return target;\n  }\n  const existingProxy = proxyMap.get(target);\n  if (existingProxy) {\n    return existingProxy;\n  }\n  const proxy = new Proxy(\n    target,\n    targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers\n  );\n  proxyMap.set(target, proxy);\n  return proxy;\n}\nfunction isReactive(value) {\n  if (isReadonly(value)) {\n    return isReactive(value[\"__v_raw\"]);\n  }\n  return !!(value && value[\"__v_isReactive\"]);\n}\nfunction isReadonly(value) {\n  return !!(value && value[\"__v_isReadonly\"]);\n}\nfunction isShallow(value) {\n  return !!(value && value[\"__v_isShallow\"]);\n}\nfunction isProxy(value) {\n  return value ? !!value[\"__v_raw\"] : false;\n}\nfunction toRaw(observed) {\n  const raw = observed && observed[\"__v_raw\"];\n  return raw ? toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n  if (!shared.hasOwn(value, \"__v_skip\") && Object.isExtensible(value)) {\n    shared.def(value, \"__v_skip\", true);\n  }\n  return value;\n}\nconst toReactive = (value) => shared.isObject(value) ? reactive(value) : value;\nconst toReadonly = (value) => shared.isObject(value) ? readonly(value) : value;\n\nfunction isRef(r) {\n  return r ? r[\"__v_isRef\"] === true : false;\n}\nfunction ref(value) {\n  return createRef(value, false);\n}\nfunction shallowRef(value) {\n  return createRef(value, true);\n}\nfunction createRef(rawValue, shallow) {\n  if (isRef(rawValue)) {\n    return rawValue;\n  }\n  return new RefImpl(rawValue, shallow);\n}\nclass RefImpl {\n  constructor(value, isShallow2) {\n    this.dep = new Dep();\n    this[\"__v_isRef\"] = true;\n    this[\"__v_isShallow\"] = false;\n    this._rawValue = isShallow2 ? value : toRaw(value);\n    this._value = isShallow2 ? value : toReactive(value);\n    this[\"__v_isShallow\"] = isShallow2;\n  }\n  get value() {\n    {\n      this.dep.track();\n    }\n    return this._value;\n  }\n  set value(newValue) {\n    const oldValue = this._rawValue;\n    const useDirectValue = this[\"__v_isShallow\"] || isShallow(newValue) || isReadonly(newValue);\n    newValue = useDirectValue ? newValue : toRaw(newValue);\n    if (shared.hasChanged(newValue, oldValue)) {\n      this._rawValue = newValue;\n      this._value = useDirectValue ? newValue : toReactive(newValue);\n      {\n        this.dep.trigger();\n      }\n    }\n  }\n}\nfunction triggerRef(ref2) {\n  if (ref2.dep) {\n    {\n      ref2.dep.trigger();\n    }\n  }\n}\nfunction unref(ref2) {\n  return isRef(ref2) ? ref2.value : ref2;\n}\nfunction toValue(source) {\n  return shared.isFunction(source) ? source() : unref(source);\n}\nconst shallowUnwrapHandlers = {\n  get: (target, key, receiver) => key === \"__v_raw\" ? target : unref(Reflect.get(target, key, receiver)),\n  set: (target, key, value, receiver) => {\n    const oldValue = target[key];\n    if (isRef(oldValue) && !isRef(value)) {\n      oldValue.value = value;\n      return true;\n    } else {\n      return Reflect.set(target, key, value, receiver);\n    }\n  }\n};\nfunction proxyRefs(objectWithRefs) {\n  return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers);\n}\nclass CustomRefImpl {\n  constructor(factory) {\n    this[\"__v_isRef\"] = true;\n    this._value = void 0;\n    const dep = this.dep = new Dep();\n    const { get, set } = factory(dep.track.bind(dep), dep.trigger.bind(dep));\n    this._get = get;\n    this._set = set;\n  }\n  get value() {\n    return this._value = this._get();\n  }\n  set value(newVal) {\n    this._set(newVal);\n  }\n}\nfunction customRef(factory) {\n  return new CustomRefImpl(factory);\n}\nfunction toRefs(object) {\n  const ret = shared.isArray(object) ? new Array(object.length) : {};\n  for (const key in object) {\n    ret[key] = propertyToRef(object, key);\n  }\n  return ret;\n}\nclass ObjectRefImpl {\n  constructor(_object, _key, _defaultValue) {\n    this._object = _object;\n    this._key = _key;\n    this._defaultValue = _defaultValue;\n    this[\"__v_isRef\"] = true;\n    this._value = void 0;\n  }\n  get value() {\n    const val = this._object[this._key];\n    return this._value = val === void 0 ? this._defaultValue : val;\n  }\n  set value(newVal) {\n    this._object[this._key] = newVal;\n  }\n  get dep() {\n    return getDepFromReactive(toRaw(this._object), this._key);\n  }\n}\nclass GetterRefImpl {\n  constructor(_getter) {\n    this._getter = _getter;\n    this[\"__v_isRef\"] = true;\n    this[\"__v_isReadonly\"] = true;\n    this._value = void 0;\n  }\n  get value() {\n    return this._value = this._getter();\n  }\n}\nfunction toRef(source, key, defaultValue) {\n  if (isRef(source)) {\n    return source;\n  } else if (shared.isFunction(source)) {\n    return new GetterRefImpl(source);\n  } else if (shared.isObject(source) && arguments.length > 1) {\n    return propertyToRef(source, key, defaultValue);\n  } else {\n    return ref(source);\n  }\n}\nfunction propertyToRef(source, key, defaultValue) {\n  const val = source[key];\n  return isRef(val) ? val : new ObjectRefImpl(source, key, defaultValue);\n}\n\nclass ComputedRefImpl {\n  constructor(fn, setter, isSSR) {\n    this.fn = fn;\n    this.setter = setter;\n    /**\n     * @internal\n     */\n    this._value = void 0;\n    /**\n     * @internal\n     */\n    this.dep = new Dep(this);\n    /**\n     * @internal\n     */\n    this.__v_isRef = true;\n    // TODO isolatedDeclarations \"__v_isReadonly\"\n    // A computed is also a subscriber that tracks other deps\n    /**\n     * @internal\n     */\n    this.deps = void 0;\n    /**\n     * @internal\n     */\n    this.depsTail = void 0;\n    /**\n     * @internal\n     */\n    this.flags = 16;\n    /**\n     * @internal\n     */\n    this.globalVersion = globalVersion - 1;\n    /**\n     * @internal\n     */\n    this.next = void 0;\n    // for backwards compat\n    this.effect = this;\n    this[\"__v_isReadonly\"] = !setter;\n    this.isSSR = isSSR;\n  }\n  /**\n   * @internal\n   */\n  notify() {\n    this.flags |= 16;\n    if (!(this.flags & 8) && // avoid infinite self recursion\n    activeSub !== this) {\n      batch(this, true);\n      return true;\n    }\n  }\n  get value() {\n    const link = this.dep.track();\n    refreshComputed(this);\n    if (link) {\n      link.version = this.dep.version;\n    }\n    return this._value;\n  }\n  set value(newValue) {\n    if (this.setter) {\n      this.setter(newValue);\n    }\n  }\n}\nfunction computed(getterOrOptions, debugOptions, isSSR = false) {\n  let getter;\n  let setter;\n  if (shared.isFunction(getterOrOptions)) {\n    getter = getterOrOptions;\n  } else {\n    getter = getterOrOptions.get;\n    setter = getterOrOptions.set;\n  }\n  const cRef = new ComputedRefImpl(getter, setter, isSSR);\n  return cRef;\n}\n\nconst TrackOpTypes = {\n  \"GET\": \"get\",\n  \"HAS\": \"has\",\n  \"ITERATE\": \"iterate\"\n};\nconst TriggerOpTypes = {\n  \"SET\": \"set\",\n  \"ADD\": \"add\",\n  \"DELETE\": \"delete\",\n  \"CLEAR\": \"clear\"\n};\nconst ReactiveFlags = {\n  \"SKIP\": \"__v_skip\",\n  \"IS_REACTIVE\": \"__v_isReactive\",\n  \"IS_READONLY\": \"__v_isReadonly\",\n  \"IS_SHALLOW\": \"__v_isShallow\",\n  \"RAW\": \"__v_raw\",\n  \"IS_REF\": \"__v_isRef\"\n};\n\nconst WatchErrorCodes = {\n  \"WATCH_GETTER\": 2,\n  \"2\": \"WATCH_GETTER\",\n  \"WATCH_CALLBACK\": 3,\n  \"3\": \"WATCH_CALLBACK\",\n  \"WATCH_CLEANUP\": 4,\n  \"4\": \"WATCH_CLEANUP\"\n};\nconst INITIAL_WATCHER_VALUE = {};\nconst cleanupMap = /* @__PURE__ */ new WeakMap();\nlet activeWatcher = void 0;\nfunction getCurrentWatcher() {\n  return activeWatcher;\n}\nfunction onWatcherCleanup(cleanupFn, failSilently = false, owner = activeWatcher) {\n  if (owner) {\n    let cleanups = cleanupMap.get(owner);\n    if (!cleanups) cleanupMap.set(owner, cleanups = []);\n    cleanups.push(cleanupFn);\n  }\n}\nfunction watch(source, cb, options = shared.EMPTY_OBJ) {\n  const { immediate, deep, once, scheduler, augmentJob, call } = options;\n  const reactiveGetter = (source2) => {\n    if (deep) return source2;\n    if (isShallow(source2) || deep === false || deep === 0)\n      return traverse(source2, 1);\n    return traverse(source2);\n  };\n  let effect;\n  let getter;\n  let cleanup;\n  let boundCleanup;\n  let forceTrigger = false;\n  let isMultiSource = false;\n  if (isRef(source)) {\n    getter = () => source.value;\n    forceTrigger = isShallow(source);\n  } else if (isReactive(source)) {\n    getter = () => reactiveGetter(source);\n    forceTrigger = true;\n  } else if (shared.isArray(source)) {\n    isMultiSource = true;\n    forceTrigger = source.some((s) => isReactive(s) || isShallow(s));\n    getter = () => source.map((s) => {\n      if (isRef(s)) {\n        return s.value;\n      } else if (isReactive(s)) {\n        return reactiveGetter(s);\n      } else if (shared.isFunction(s)) {\n        return call ? call(s, 2) : s();\n      } else ;\n    });\n  } else if (shared.isFunction(source)) {\n    if (cb) {\n      getter = call ? () => call(source, 2) : source;\n    } else {\n      getter = () => {\n        if (cleanup) {\n          pauseTracking();\n          try {\n            cleanup();\n          } finally {\n            resetTracking();\n          }\n        }\n        const currentEffect = activeWatcher;\n        activeWatcher = effect;\n        try {\n          return call ? call(source, 3, [boundCleanup]) : source(boundCleanup);\n        } finally {\n          activeWatcher = currentEffect;\n        }\n      };\n    }\n  } else {\n    getter = shared.NOOP;\n  }\n  if (cb && deep) {\n    const baseGetter = getter;\n    const depth = deep === true ? Infinity : deep;\n    getter = () => traverse(baseGetter(), depth);\n  }\n  const scope = getCurrentScope();\n  const watchHandle = () => {\n    effect.stop();\n    if (scope && scope.active) {\n      shared.remove(scope.effects, effect);\n    }\n  };\n  if (once && cb) {\n    const _cb = cb;\n    cb = (...args) => {\n      _cb(...args);\n      watchHandle();\n    };\n  }\n  let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE;\n  const job = (immediateFirstRun) => {\n    if (!(effect.flags & 1) || !effect.dirty && !immediateFirstRun) {\n      return;\n    }\n    if (cb) {\n      const newValue = effect.run();\n      if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => shared.hasChanged(v, oldValue[i])) : shared.hasChanged(newValue, oldValue))) {\n        if (cleanup) {\n          cleanup();\n        }\n        const currentWatcher = activeWatcher;\n        activeWatcher = effect;\n        try {\n          const args = [\n            newValue,\n            // pass undefined as the old value when it's changed for the first time\n            oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue,\n            boundCleanup\n          ];\n          oldValue = newValue;\n          call ? call(cb, 3, args) : (\n            // @ts-expect-error\n            cb(...args)\n          );\n        } finally {\n          activeWatcher = currentWatcher;\n        }\n      }\n    } else {\n      effect.run();\n    }\n  };\n  if (augmentJob) {\n    augmentJob(job);\n  }\n  effect = new ReactiveEffect(getter);\n  effect.scheduler = scheduler ? () => scheduler(job, false) : job;\n  boundCleanup = (fn) => onWatcherCleanup(fn, false, effect);\n  cleanup = effect.onStop = () => {\n    const cleanups = cleanupMap.get(effect);\n    if (cleanups) {\n      if (call) {\n        call(cleanups, 4);\n      } else {\n        for (const cleanup2 of cleanups) cleanup2();\n      }\n      cleanupMap.delete(effect);\n    }\n  };\n  if (cb) {\n    if (immediate) {\n      job(true);\n    } else {\n      oldValue = effect.run();\n    }\n  } else if (scheduler) {\n    scheduler(job.bind(null, true), true);\n  } else {\n    effect.run();\n  }\n  watchHandle.pause = effect.pause.bind(effect);\n  watchHandle.resume = effect.resume.bind(effect);\n  watchHandle.stop = watchHandle;\n  return watchHandle;\n}\nfunction traverse(value, depth = Infinity, seen) {\n  if (depth <= 0 || !shared.isObject(value) || value[\"__v_skip\"]) {\n    return value;\n  }\n  seen = seen || /* @__PURE__ */ new Set();\n  if (seen.has(value)) {\n    return value;\n  }\n  seen.add(value);\n  depth--;\n  if (isRef(value)) {\n    traverse(value.value, depth, seen);\n  } else if (shared.isArray(value)) {\n    for (let i = 0; i < value.length; i++) {\n      traverse(value[i], depth, seen);\n    }\n  } else if (shared.isSet(value) || shared.isMap(value)) {\n    value.forEach((v) => {\n      traverse(v, depth, seen);\n    });\n  } else if (shared.isPlainObject(value)) {\n    for (const key in value) {\n      traverse(value[key], depth, seen);\n    }\n    for (const key of Object.getOwnPropertySymbols(value)) {\n      if (Object.prototype.propertyIsEnumerable.call(value, key)) {\n        traverse(value[key], depth, seen);\n      }\n    }\n  }\n  return value;\n}\n\nexports.ARRAY_ITERATE_KEY = ARRAY_ITERATE_KEY;\nexports.EffectFlags = EffectFlags;\nexports.EffectScope = EffectScope;\nexports.ITERATE_KEY = ITERATE_KEY;\nexports.MAP_KEY_ITERATE_KEY = MAP_KEY_ITERATE_KEY;\nexports.ReactiveEffect = ReactiveEffect;\nexports.ReactiveFlags = ReactiveFlags;\nexports.TrackOpTypes = TrackOpTypes;\nexports.TriggerOpTypes = TriggerOpTypes;\nexports.WatchErrorCodes = WatchErrorCodes;\nexports.computed = computed;\nexports.customRef = customRef;\nexports.effect = effect;\nexports.effectScope = effectScope;\nexports.enableTracking = enableTracking;\nexports.getCurrentScope = getCurrentScope;\nexports.getCurrentWatcher = getCurrentWatcher;\nexports.isProxy = isProxy;\nexports.isReactive = isReactive;\nexports.isReadonly = isReadonly;\nexports.isRef = isRef;\nexports.isShallow = isShallow;\nexports.markRaw = markRaw;\nexports.onEffectCleanup = onEffectCleanup;\nexports.onScopeDispose = onScopeDispose;\nexports.onWatcherCleanup = onWatcherCleanup;\nexports.pauseTracking = pauseTracking;\nexports.proxyRefs = proxyRefs;\nexports.reactive = reactive;\nexports.reactiveReadArray = reactiveReadArray;\nexports.readonly = readonly;\nexports.ref = ref;\nexports.resetTracking = resetTracking;\nexports.shallowReactive = shallowReactive;\nexports.shallowReadArray = shallowReadArray;\nexports.shallowReadonly = shallowReadonly;\nexports.shallowRef = shallowRef;\nexports.stop = stop;\nexports.toRaw = toRaw;\nexports.toReactive = toReactive;\nexports.toReadonly = toReadonly;\nexports.toRef = toRef;\nexports.toRefs = toRefs;\nexports.toValue = toValue;\nexports.track = track;\nexports.traverse = traverse;\nexports.trigger = trigger;\nexports.triggerRef = triggerRef;\nexports.unref = unref;\nexports.watch = watch;\n","'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./dist/reactivity.cjs.prod.js')\n} else {\n  module.exports = require('./dist/reactivity.cjs.js')\n}\n","/**\n* @vue/runtime-core v3.5.18\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar reactivity = require('@vue/reactivity');\nvar shared = require('@vue/shared');\n\nfunction pushWarningContext(vnode) {\n}\nfunction popWarningContext() {\n}\nfunction assertNumber(val, type) {\n  return;\n}\n\nconst ErrorCodes = {\n  \"SETUP_FUNCTION\": 0,\n  \"0\": \"SETUP_FUNCTION\",\n  \"RENDER_FUNCTION\": 1,\n  \"1\": \"RENDER_FUNCTION\",\n  \"NATIVE_EVENT_HANDLER\": 5,\n  \"5\": \"NATIVE_EVENT_HANDLER\",\n  \"COMPONENT_EVENT_HANDLER\": 6,\n  \"6\": \"COMPONENT_EVENT_HANDLER\",\n  \"VNODE_HOOK\": 7,\n  \"7\": \"VNODE_HOOK\",\n  \"DIRECTIVE_HOOK\": 8,\n  \"8\": \"DIRECTIVE_HOOK\",\n  \"TRANSITION_HOOK\": 9,\n  \"9\": \"TRANSITION_HOOK\",\n  \"APP_ERROR_HANDLER\": 10,\n  \"10\": \"APP_ERROR_HANDLER\",\n  \"APP_WARN_HANDLER\": 11,\n  \"11\": \"APP_WARN_HANDLER\",\n  \"FUNCTION_REF\": 12,\n  \"12\": \"FUNCTION_REF\",\n  \"ASYNC_COMPONENT_LOADER\": 13,\n  \"13\": \"ASYNC_COMPONENT_LOADER\",\n  \"SCHEDULER\": 14,\n  \"14\": \"SCHEDULER\",\n  \"COMPONENT_UPDATE\": 15,\n  \"15\": \"COMPONENT_UPDATE\",\n  \"APP_UNMOUNT_CLEANUP\": 16,\n  \"16\": \"APP_UNMOUNT_CLEANUP\"\n};\nconst ErrorTypeStrings$1 = {\n  [\"sp\"]: \"serverPrefetch hook\",\n  [\"bc\"]: \"beforeCreate hook\",\n  [\"c\"]: \"created hook\",\n  [\"bm\"]: \"beforeMount hook\",\n  [\"m\"]: \"mounted hook\",\n  [\"bu\"]: \"beforeUpdate hook\",\n  [\"u\"]: \"updated\",\n  [\"bum\"]: \"beforeUnmount hook\",\n  [\"um\"]: \"unmounted hook\",\n  [\"a\"]: \"activated hook\",\n  [\"da\"]: \"deactivated hook\",\n  [\"ec\"]: \"errorCaptured hook\",\n  [\"rtc\"]: \"renderTracked hook\",\n  [\"rtg\"]: \"renderTriggered hook\",\n  [0]: \"setup function\",\n  [1]: \"render function\",\n  [2]: \"watcher getter\",\n  [3]: \"watcher callback\",\n  [4]: \"watcher cleanup function\",\n  [5]: \"native event handler\",\n  [6]: \"component event handler\",\n  [7]: \"vnode hook\",\n  [8]: \"directive hook\",\n  [9]: \"transition hook\",\n  [10]: \"app errorHandler\",\n  [11]: \"app warnHandler\",\n  [12]: \"ref function\",\n  [13]: \"async component loader\",\n  [14]: \"scheduler flush\",\n  [15]: \"component update\",\n  [16]: \"app unmount cleanup function\"\n};\nfunction callWithErrorHandling(fn, instance, type, args) {\n  try {\n    return args ? fn(...args) : fn();\n  } catch (err) {\n    handleError(err, instance, type);\n  }\n}\nfunction callWithAsyncErrorHandling(fn, instance, type, args) {\n  if (shared.isFunction(fn)) {\n    const res = callWithErrorHandling(fn, instance, type, args);\n    if (res && shared.isPromise(res)) {\n      res.catch((err) => {\n        handleError(err, instance, type);\n      });\n    }\n    return res;\n  }\n  if (shared.isArray(fn)) {\n    const values = [];\n    for (let i = 0; i < fn.length; i++) {\n      values.push(callWithAsyncErrorHandling(fn[i], instance, type, args));\n    }\n    return values;\n  }\n}\nfunction handleError(err, instance, type, throwInDev = true) {\n  const contextVNode = instance ? instance.vnode : null;\n  const { errorHandler, throwUnhandledErrorInProduction } = instance && instance.appContext.config || shared.EMPTY_OBJ;\n  if (instance) {\n    let cur = instance.parent;\n    const exposedInstance = instance.proxy;\n    const errorInfo = `https://vuejs.org/error-reference/#runtime-${type}`;\n    while (cur) {\n      const errorCapturedHooks = cur.ec;\n      if (errorCapturedHooks) {\n        for (let i = 0; i < errorCapturedHooks.length; i++) {\n          if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {\n            return;\n          }\n        }\n      }\n      cur = cur.parent;\n    }\n    if (errorHandler) {\n      reactivity.pauseTracking();\n      callWithErrorHandling(errorHandler, null, 10, [\n        err,\n        exposedInstance,\n        errorInfo\n      ]);\n      reactivity.resetTracking();\n      return;\n    }\n  }\n  logError(err, type, contextVNode, throwInDev, throwUnhandledErrorInProduction);\n}\nfunction logError(err, type, contextVNode, throwInDev = true, throwInProd = false) {\n  if (throwInProd) {\n    throw err;\n  } else {\n    console.error(err);\n  }\n}\n\nconst queue = [];\nlet flushIndex = -1;\nconst pendingPostFlushCbs = [];\nlet activePostFlushCbs = null;\nlet postFlushIndex = 0;\nconst resolvedPromise = /* @__PURE__ */ Promise.resolve();\nlet currentFlushPromise = null;\nfunction nextTick(fn) {\n  const p = currentFlushPromise || resolvedPromise;\n  return fn ? p.then(this ? fn.bind(this) : fn) : p;\n}\nfunction findInsertionIndex(id) {\n  let start = flushIndex + 1;\n  let end = queue.length;\n  while (start < end) {\n    const middle = start + end >>> 1;\n    const middleJob = queue[middle];\n    const middleJobId = getId(middleJob);\n    if (middleJobId < id || middleJobId === id && middleJob.flags & 2) {\n      start = middle + 1;\n    } else {\n      end = middle;\n    }\n  }\n  return start;\n}\nfunction queueJob(job) {\n  if (!(job.flags & 1)) {\n    const jobId = getId(job);\n    const lastJob = queue[queue.length - 1];\n    if (!lastJob || // fast path when the job id is larger than the tail\n    !(job.flags & 2) && jobId >= getId(lastJob)) {\n      queue.push(job);\n    } else {\n      queue.splice(findInsertionIndex(jobId), 0, job);\n    }\n    job.flags |= 1;\n    queueFlush();\n  }\n}\nfunction queueFlush() {\n  if (!currentFlushPromise) {\n    currentFlushPromise = resolvedPromise.then(flushJobs);\n  }\n}\nfunction queuePostFlushCb(cb) {\n  if (!shared.isArray(cb)) {\n    if (activePostFlushCbs && cb.id === -1) {\n      activePostFlushCbs.splice(postFlushIndex + 1, 0, cb);\n    } else if (!(cb.flags & 1)) {\n      pendingPostFlushCbs.push(cb);\n      cb.flags |= 1;\n    }\n  } else {\n    pendingPostFlushCbs.push(...cb);\n  }\n  queueFlush();\n}\nfunction flushPreFlushCbs(instance, seen, i = flushIndex + 1) {\n  for (; i < queue.length; i++) {\n    const cb = queue[i];\n    if (cb && cb.flags & 2) {\n      if (instance && cb.id !== instance.uid) {\n        continue;\n      }\n      queue.splice(i, 1);\n      i--;\n      if (cb.flags & 4) {\n        cb.flags &= -2;\n      }\n      cb();\n      if (!(cb.flags & 4)) {\n        cb.flags &= -2;\n      }\n    }\n  }\n}\nfunction flushPostFlushCbs(seen) {\n  if (pendingPostFlushCbs.length) {\n    const deduped = [...new Set(pendingPostFlushCbs)].sort(\n      (a, b) => getId(a) - getId(b)\n    );\n    pendingPostFlushCbs.length = 0;\n    if (activePostFlushCbs) {\n      activePostFlushCbs.push(...deduped);\n      return;\n    }\n    activePostFlushCbs = deduped;\n    for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {\n      const cb = activePostFlushCbs[postFlushIndex];\n      if (cb.flags & 4) {\n        cb.flags &= -2;\n      }\n      if (!(cb.flags & 8)) cb();\n      cb.flags &= -2;\n    }\n    activePostFlushCbs = null;\n    postFlushIndex = 0;\n  }\n}\nconst getId = (job) => job.id == null ? job.flags & 2 ? -1 : Infinity : job.id;\nfunction flushJobs(seen) {\n  try {\n    for (flushIndex = 0; flushIndex < queue.length; flushIndex++) {\n      const job = queue[flushIndex];\n      if (job && !(job.flags & 8)) {\n        if (false) ;\n        if (job.flags & 4) {\n          job.flags &= ~1;\n        }\n        callWithErrorHandling(\n          job,\n          job.i,\n          job.i ? 15 : 14\n        );\n        if (!(job.flags & 4)) {\n          job.flags &= ~1;\n        }\n      }\n    }\n  } finally {\n    for (; flushIndex < queue.length; flushIndex++) {\n      const job = queue[flushIndex];\n      if (job) {\n        job.flags &= -2;\n      }\n    }\n    flushIndex = -1;\n    queue.length = 0;\n    flushPostFlushCbs();\n    currentFlushPromise = null;\n    if (queue.length || pendingPostFlushCbs.length) {\n      flushJobs();\n    }\n  }\n}\n\nlet currentRenderingInstance = null;\nlet currentScopeId = null;\nfunction setCurrentRenderingInstance(instance) {\n  const prev = currentRenderingInstance;\n  currentRenderingInstance = instance;\n  currentScopeId = instance && instance.type.__scopeId || null;\n  return prev;\n}\nfunction pushScopeId(id) {\n  currentScopeId = id;\n}\nfunction popScopeId() {\n  currentScopeId = null;\n}\nconst withScopeId = (_id) => withCtx;\nfunction withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) {\n  if (!ctx) return fn;\n  if (fn._n) {\n    return fn;\n  }\n  const renderFnWithContext = (...args) => {\n    if (renderFnWithContext._d) {\n      setBlockTracking(-1);\n    }\n    const prevInstance = setCurrentRenderingInstance(ctx);\n    let res;\n    try {\n      res = fn(...args);\n    } finally {\n      setCurrentRenderingInstance(prevInstance);\n      if (renderFnWithContext._d) {\n        setBlockTracking(1);\n      }\n    }\n    return res;\n  };\n  renderFnWithContext._n = true;\n  renderFnWithContext._c = true;\n  renderFnWithContext._d = true;\n  return renderFnWithContext;\n}\n\nfunction withDirectives(vnode, directives) {\n  if (currentRenderingInstance === null) {\n    return vnode;\n  }\n  const instance = getComponentPublicInstance(currentRenderingInstance);\n  const bindings = vnode.dirs || (vnode.dirs = []);\n  for (let i = 0; i < directives.length; i++) {\n    let [dir, value, arg, modifiers = shared.EMPTY_OBJ] = directives[i];\n    if (dir) {\n      if (shared.isFunction(dir)) {\n        dir = {\n          mounted: dir,\n          updated: dir\n        };\n      }\n      if (dir.deep) {\n        reactivity.traverse(value);\n      }\n      bindings.push({\n        dir,\n        instance,\n        value,\n        oldValue: void 0,\n        arg,\n        modifiers\n      });\n    }\n  }\n  return vnode;\n}\nfunction invokeDirectiveHook(vnode, prevVNode, instance, name) {\n  const bindings = vnode.dirs;\n  const oldBindings = prevVNode && prevVNode.dirs;\n  for (let i = 0; i < bindings.length; i++) {\n    const binding = bindings[i];\n    if (oldBindings) {\n      binding.oldValue = oldBindings[i].value;\n    }\n    let hook = binding.dir[name];\n    if (hook) {\n      reactivity.pauseTracking();\n      callWithAsyncErrorHandling(hook, instance, 8, [\n        vnode.el,\n        binding,\n        vnode,\n        prevVNode\n      ]);\n      reactivity.resetTracking();\n    }\n  }\n}\n\nconst TeleportEndKey = Symbol(\"_vte\");\nconst isTeleport = (type) => type.__isTeleport;\nconst isTeleportDisabled = (props) => props && (props.disabled || props.disabled === \"\");\nconst isTeleportDeferred = (props) => props && (props.defer || props.defer === \"\");\nconst isTargetSVG = (target) => typeof SVGElement !== \"undefined\" && target instanceof SVGElement;\nconst isTargetMathML = (target) => typeof MathMLElement === \"function\" && target instanceof MathMLElement;\nconst resolveTarget = (props, select) => {\n  const targetSelector = props && props.to;\n  if (shared.isString(targetSelector)) {\n    if (!select) {\n      return null;\n    } else {\n      const target = select(targetSelector);\n      return target;\n    }\n  } else {\n    return targetSelector;\n  }\n};\nconst TeleportImpl = {\n  name: \"Teleport\",\n  __isTeleport: true,\n  process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, internals) {\n    const {\n      mc: mountChildren,\n      pc: patchChildren,\n      pbc: patchBlockChildren,\n      o: { insert, querySelector, createText, createComment }\n    } = internals;\n    const disabled = isTeleportDisabled(n2.props);\n    let { shapeFlag, children, dynamicChildren } = n2;\n    if (n1 == null) {\n      const placeholder = n2.el = createText(\"\");\n      const mainAnchor = n2.anchor = createText(\"\");\n      insert(placeholder, container, anchor);\n      insert(mainAnchor, container, anchor);\n      const mount = (container2, anchor2) => {\n        if (shapeFlag & 16) {\n          if (parentComponent && parentComponent.isCE) {\n            parentComponent.ce._teleportTarget = container2;\n          }\n          mountChildren(\n            children,\n            container2,\n            anchor2,\n            parentComponent,\n            parentSuspense,\n            namespace,\n            slotScopeIds,\n            optimized\n          );\n        }\n      };\n      const mountToTarget = () => {\n        const target = n2.target = resolveTarget(n2.props, querySelector);\n        const targetAnchor = prepareAnchor(target, n2, createText, insert);\n        if (target) {\n          if (namespace !== \"svg\" && isTargetSVG(target)) {\n            namespace = \"svg\";\n          } else if (namespace !== \"mathml\" && isTargetMathML(target)) {\n            namespace = \"mathml\";\n          }\n          if (!disabled) {\n            mount(target, targetAnchor);\n            updateCssVars(n2, false);\n          }\n        }\n      };\n      if (disabled) {\n        mount(container, mainAnchor);\n        updateCssVars(n2, true);\n      }\n      if (isTeleportDeferred(n2.props)) {\n        n2.el.__isMounted = false;\n        queuePostRenderEffect(() => {\n          mountToTarget();\n          delete n2.el.__isMounted;\n        }, parentSuspense);\n      } else {\n        mountToTarget();\n      }\n    } else {\n      if (isTeleportDeferred(n2.props) && n1.el.__isMounted === false) {\n        queuePostRenderEffect(() => {\n          TeleportImpl.process(\n            n1,\n            n2,\n            container,\n            anchor,\n            parentComponent,\n            parentSuspense,\n            namespace,\n            slotScopeIds,\n            optimized,\n            internals\n          );\n        }, parentSuspense);\n        return;\n      }\n      n2.el = n1.el;\n      n2.targetStart = n1.targetStart;\n      const mainAnchor = n2.anchor = n1.anchor;\n      const target = n2.target = n1.target;\n      const targetAnchor = n2.targetAnchor = n1.targetAnchor;\n      const wasDisabled = isTeleportDisabled(n1.props);\n      const currentContainer = wasDisabled ? container : target;\n      const currentAnchor = wasDisabled ? mainAnchor : targetAnchor;\n      if (namespace === \"svg\" || isTargetSVG(target)) {\n        namespace = \"svg\";\n      } else if (namespace === \"mathml\" || isTargetMathML(target)) {\n        namespace = \"mathml\";\n      }\n      if (dynamicChildren) {\n        patchBlockChildren(\n          n1.dynamicChildren,\n          dynamicChildren,\n          currentContainer,\n          parentComponent,\n          parentSuspense,\n          namespace,\n          slotScopeIds\n        );\n        traverseStaticChildren(n1, n2, true);\n      } else if (!optimized) {\n        patchChildren(\n          n1,\n          n2,\n          currentContainer,\n          currentAnchor,\n          parentComponent,\n          parentSuspense,\n          namespace,\n          slotScopeIds,\n          false\n        );\n      }\n      if (disabled) {\n        if (!wasDisabled) {\n          moveTeleport(\n            n2,\n            container,\n            mainAnchor,\n            internals,\n            1\n          );\n        } else {\n          if (n2.props && n1.props && n2.props.to !== n1.props.to) {\n            n2.props.to = n1.props.to;\n          }\n        }\n      } else {\n        if ((n2.props && n2.props.to) !== (n1.props && n1.props.to)) {\n          const nextTarget = n2.target = resolveTarget(\n            n2.props,\n            querySelector\n          );\n          if (nextTarget) {\n            moveTeleport(\n              n2,\n              nextTarget,\n              null,\n              internals,\n              0\n            );\n          }\n        } else if (wasDisabled) {\n          moveTeleport(\n            n2,\n            target,\n            targetAnchor,\n            internals,\n            1\n          );\n        }\n      }\n      updateCssVars(n2, disabled);\n    }\n  },\n  remove(vnode, parentComponent, parentSuspense, { um: unmount, o: { remove: hostRemove } }, doRemove) {\n    const {\n      shapeFlag,\n      children,\n      anchor,\n      targetStart,\n      targetAnchor,\n      target,\n      props\n    } = vnode;\n    if (target) {\n      hostRemove(targetStart);\n      hostRemove(targetAnchor);\n    }\n    doRemove && hostRemove(anchor);\n    if (shapeFlag & 16) {\n      const shouldRemove = doRemove || !isTeleportDisabled(props);\n      for (let i = 0; i < children.length; i++) {\n        const child = children[i];\n        unmount(\n          child,\n          parentComponent,\n          parentSuspense,\n          shouldRemove,\n          !!child.dynamicChildren\n        );\n      }\n    }\n  },\n  move: moveTeleport,\n  hydrate: hydrateTeleport\n};\nfunction moveTeleport(vnode, container, parentAnchor, { o: { insert }, m: move }, moveType = 2) {\n  if (moveType === 0) {\n    insert(vnode.targetAnchor, container, parentAnchor);\n  }\n  const { el, anchor, shapeFlag, children, props } = vnode;\n  const isReorder = moveType === 2;\n  if (isReorder) {\n    insert(el, container, parentAnchor);\n  }\n  if (!isReorder || isTeleportDisabled(props)) {\n    if (shapeFlag & 16) {\n      for (let i = 0; i < children.length; i++) {\n        move(\n          children[i],\n          container,\n          parentAnchor,\n          2\n        );\n      }\n    }\n  }\n  if (isReorder) {\n    insert(anchor, container, parentAnchor);\n  }\n}\nfunction hydrateTeleport(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized, {\n  o: { nextSibling, parentNode, querySelector, insert, createText }\n}, hydrateChildren) {\n  const target = vnode.target = resolveTarget(\n    vnode.props,\n    querySelector\n  );\n  if (target) {\n    const disabled = isTeleportDisabled(vnode.props);\n    const targetNode = target._lpa || target.firstChild;\n    if (vnode.shapeFlag & 16) {\n      if (disabled) {\n        vnode.anchor = hydrateChildren(\n          nextSibling(node),\n          vnode,\n          parentNode(node),\n          parentComponent,\n          parentSuspense,\n          slotScopeIds,\n          optimized\n        );\n        vnode.targetStart = targetNode;\n        vnode.targetAnchor = targetNode && nextSibling(targetNode);\n      } else {\n        vnode.anchor = nextSibling(node);\n        let targetAnchor = targetNode;\n        while (targetAnchor) {\n          if (targetAnchor && targetAnchor.nodeType === 8) {\n            if (targetAnchor.data === \"teleport start anchor\") {\n              vnode.targetStart = targetAnchor;\n            } else if (targetAnchor.data === \"teleport anchor\") {\n              vnode.targetAnchor = targetAnchor;\n              target._lpa = vnode.targetAnchor && nextSibling(vnode.targetAnchor);\n              break;\n            }\n          }\n          targetAnchor = nextSibling(targetAnchor);\n        }\n        if (!vnode.targetAnchor) {\n          prepareAnchor(target, vnode, createText, insert);\n        }\n        hydrateChildren(\n          targetNode && nextSibling(targetNode),\n          vnode,\n          target,\n          parentComponent,\n          parentSuspense,\n          slotScopeIds,\n          optimized\n        );\n      }\n    }\n    updateCssVars(vnode, disabled);\n  }\n  return vnode.anchor && nextSibling(vnode.anchor);\n}\nconst Teleport = TeleportImpl;\nfunction updateCssVars(vnode, isDisabled) {\n  const ctx = vnode.ctx;\n  if (ctx && ctx.ut) {\n    let node, anchor;\n    if (isDisabled) {\n      node = vnode.el;\n      anchor = vnode.anchor;\n    } else {\n      node = vnode.targetStart;\n      anchor = vnode.targetAnchor;\n    }\n    while (node && node !== anchor) {\n      if (node.nodeType === 1) node.setAttribute(\"data-v-owner\", ctx.uid);\n      node = node.nextSibling;\n    }\n    ctx.ut();\n  }\n}\nfunction prepareAnchor(target, vnode, createText, insert) {\n  const targetStart = vnode.targetStart = createText(\"\");\n  const targetAnchor = vnode.targetAnchor = createText(\"\");\n  targetStart[TeleportEndKey] = targetAnchor;\n  if (target) {\n    insert(targetStart, target);\n    insert(targetAnchor, target);\n  }\n  return targetAnchor;\n}\n\nconst leaveCbKey = Symbol(\"_leaveCb\");\nconst enterCbKey = Symbol(\"_enterCb\");\nfunction useTransitionState() {\n  const state = {\n    isMounted: false,\n    isLeaving: false,\n    isUnmounting: false,\n    leavingVNodes: /* @__PURE__ */ new Map()\n  };\n  onMounted(() => {\n    state.isMounted = true;\n  });\n  onBeforeUnmount(() => {\n    state.isUnmounting = true;\n  });\n  return state;\n}\nconst TransitionHookValidator = [Function, Array];\nconst BaseTransitionPropsValidators = {\n  mode: String,\n  appear: Boolean,\n  persisted: Boolean,\n  // enter\n  onBeforeEnter: TransitionHookValidator,\n  onEnter: TransitionHookValidator,\n  onAfterEnter: TransitionHookValidator,\n  onEnterCancelled: TransitionHookValidator,\n  // leave\n  onBeforeLeave: TransitionHookValidator,\n  onLeave: TransitionHookValidator,\n  onAfterLeave: TransitionHookValidator,\n  onLeaveCancelled: TransitionHookValidator,\n  // appear\n  onBeforeAppear: TransitionHookValidator,\n  onAppear: TransitionHookValidator,\n  onAfterAppear: TransitionHookValidator,\n  onAppearCancelled: TransitionHookValidator\n};\nconst recursiveGetSubtree = (instance) => {\n  const subTree = instance.subTree;\n  return subTree.component ? recursiveGetSubtree(subTree.component) : subTree;\n};\nconst BaseTransitionImpl = {\n  name: `BaseTransition`,\n  props: BaseTransitionPropsValidators,\n  setup(props, { slots }) {\n    const instance = getCurrentInstance();\n    const state = useTransitionState();\n    return () => {\n      const children = slots.default && getTransitionRawChildren(slots.default(), true);\n      if (!children || !children.length) {\n        return;\n      }\n      const child = findNonCommentChild(children);\n      const rawProps = reactivity.toRaw(props);\n      const { mode } = rawProps;\n      if (state.isLeaving) {\n        return emptyPlaceholder(child);\n      }\n      const innerChild = getInnerChild$1(child);\n      if (!innerChild) {\n        return emptyPlaceholder(child);\n      }\n      let enterHooks = resolveTransitionHooks(\n        innerChild,\n        rawProps,\n        state,\n        instance,\n        // #11061, ensure enterHooks is fresh after clone\n        (hooks) => enterHooks = hooks\n      );\n      if (innerChild.type !== Comment) {\n        setTransitionHooks(innerChild, enterHooks);\n      }\n      let oldInnerChild = instance.subTree && getInnerChild$1(instance.subTree);\n      if (oldInnerChild && oldInnerChild.type !== Comment && !isSameVNodeType(innerChild, oldInnerChild) && recursiveGetSubtree(instance).type !== Comment) {\n        let leavingHooks = resolveTransitionHooks(\n          oldInnerChild,\n          rawProps,\n          state,\n          instance\n        );\n        setTransitionHooks(oldInnerChild, leavingHooks);\n        if (mode === \"out-in\" && innerChild.type !== Comment) {\n          state.isLeaving = true;\n          leavingHooks.afterLeave = () => {\n            state.isLeaving = false;\n            if (!(instance.job.flags & 8)) {\n              instance.update();\n            }\n            delete leavingHooks.afterLeave;\n            oldInnerChild = void 0;\n          };\n          return emptyPlaceholder(child);\n        } else if (mode === \"in-out\" && innerChild.type !== Comment) {\n          leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => {\n            const leavingVNodesCache = getLeavingNodesForType(\n              state,\n              oldInnerChild\n            );\n            leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild;\n            el[leaveCbKey] = () => {\n              earlyRemove();\n              el[leaveCbKey] = void 0;\n              delete enterHooks.delayedLeave;\n              oldInnerChild = void 0;\n            };\n            enterHooks.delayedLeave = () => {\n              delayedLeave();\n              delete enterHooks.delayedLeave;\n              oldInnerChild = void 0;\n            };\n          };\n        } else {\n          oldInnerChild = void 0;\n        }\n      } else if (oldInnerChild) {\n        oldInnerChild = void 0;\n      }\n      return child;\n    };\n  }\n};\nfunction findNonCommentChild(children) {\n  let child = children[0];\n  if (children.length > 1) {\n    for (const c of children) {\n      if (c.type !== Comment) {\n        child = c;\n        break;\n      }\n    }\n  }\n  return child;\n}\nconst BaseTransition = BaseTransitionImpl;\nfunction getLeavingNodesForType(state, vnode) {\n  const { leavingVNodes } = state;\n  let leavingVNodesCache = leavingVNodes.get(vnode.type);\n  if (!leavingVNodesCache) {\n    leavingVNodesCache = /* @__PURE__ */ Object.create(null);\n    leavingVNodes.set(vnode.type, leavingVNodesCache);\n  }\n  return leavingVNodesCache;\n}\nfunction resolveTransitionHooks(vnode, props, state, instance, postClone) {\n  const {\n    appear,\n    mode,\n    persisted = false,\n    onBeforeEnter,\n    onEnter,\n    onAfterEnter,\n    onEnterCancelled,\n    onBeforeLeave,\n    onLeave,\n    onAfterLeave,\n    onLeaveCancelled,\n    onBeforeAppear,\n    onAppear,\n    onAfterAppear,\n    onAppearCancelled\n  } = props;\n  const key = String(vnode.key);\n  const leavingVNodesCache = getLeavingNodesForType(state, vnode);\n  const callHook = (hook, args) => {\n    hook && callWithAsyncErrorHandling(\n      hook,\n      instance,\n      9,\n      args\n    );\n  };\n  const callAsyncHook = (hook, args) => {\n    const done = args[1];\n    callHook(hook, args);\n    if (shared.isArray(hook)) {\n      if (hook.every((hook2) => hook2.length <= 1)) done();\n    } else if (hook.length <= 1) {\n      done();\n    }\n  };\n  const hooks = {\n    mode,\n    persisted,\n    beforeEnter(el) {\n      let hook = onBeforeEnter;\n      if (!state.isMounted) {\n        if (appear) {\n          hook = onBeforeAppear || onBeforeEnter;\n        } else {\n          return;\n        }\n      }\n      if (el[leaveCbKey]) {\n        el[leaveCbKey](\n          true\n          /* cancelled */\n        );\n      }\n      const leavingVNode = leavingVNodesCache[key];\n      if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el[leaveCbKey]) {\n        leavingVNode.el[leaveCbKey]();\n      }\n      callHook(hook, [el]);\n    },\n    enter(el) {\n      let hook = onEnter;\n      let afterHook = onAfterEnter;\n      let cancelHook = onEnterCancelled;\n      if (!state.isMounted) {\n        if (appear) {\n          hook = onAppear || onEnter;\n          afterHook = onAfterAppear || onAfterEnter;\n          cancelHook = onAppearCancelled || onEnterCancelled;\n        } else {\n          return;\n        }\n      }\n      let called = false;\n      const done = el[enterCbKey] = (cancelled) => {\n        if (called) return;\n        called = true;\n        if (cancelled) {\n          callHook(cancelHook, [el]);\n        } else {\n          callHook(afterHook, [el]);\n        }\n        if (hooks.delayedLeave) {\n          hooks.delayedLeave();\n        }\n        el[enterCbKey] = void 0;\n      };\n      if (hook) {\n        callAsyncHook(hook, [el, done]);\n      } else {\n        done();\n      }\n    },\n    leave(el, remove) {\n      const key2 = String(vnode.key);\n      if (el[enterCbKey]) {\n        el[enterCbKey](\n          true\n          /* cancelled */\n        );\n      }\n      if (state.isUnmounting) {\n        return remove();\n      }\n      callHook(onBeforeLeave, [el]);\n      let called = false;\n      const done = el[leaveCbKey] = (cancelled) => {\n        if (called) return;\n        called = true;\n        remove();\n        if (cancelled) {\n          callHook(onLeaveCancelled, [el]);\n        } else {\n          callHook(onAfterLeave, [el]);\n        }\n        el[leaveCbKey] = void 0;\n        if (leavingVNodesCache[key2] === vnode) {\n          delete leavingVNodesCache[key2];\n        }\n      };\n      leavingVNodesCache[key2] = vnode;\n      if (onLeave) {\n        callAsyncHook(onLeave, [el, done]);\n      } else {\n        done();\n      }\n    },\n    clone(vnode2) {\n      const hooks2 = resolveTransitionHooks(\n        vnode2,\n        props,\n        state,\n        instance,\n        postClone\n      );\n      if (postClone) postClone(hooks2);\n      return hooks2;\n    }\n  };\n  return hooks;\n}\nfunction emptyPlaceholder(vnode) {\n  if (isKeepAlive(vnode)) {\n    vnode = cloneVNode(vnode);\n    vnode.children = null;\n    return vnode;\n  }\n}\nfunction getInnerChild$1(vnode) {\n  if (!isKeepAlive(vnode)) {\n    if (isTeleport(vnode.type) && vnode.children) {\n      return findNonCommentChild(vnode.children);\n    }\n    return vnode;\n  }\n  if (vnode.component) {\n    return vnode.component.subTree;\n  }\n  const { shapeFlag, children } = vnode;\n  if (children) {\n    if (shapeFlag & 16) {\n      return children[0];\n    }\n    if (shapeFlag & 32 && shared.isFunction(children.default)) {\n      return children.default();\n    }\n  }\n}\nfunction setTransitionHooks(vnode, hooks) {\n  if (vnode.shapeFlag & 6 && vnode.component) {\n    vnode.transition = hooks;\n    setTransitionHooks(vnode.component.subTree, hooks);\n  } else if (vnode.shapeFlag & 128) {\n    vnode.ssContent.transition = hooks.clone(vnode.ssContent);\n    vnode.ssFallback.transition = hooks.clone(vnode.ssFallback);\n  } else {\n    vnode.transition = hooks;\n  }\n}\nfunction getTransitionRawChildren(children, keepComment = false, parentKey) {\n  let ret = [];\n  let keyedFragmentCount = 0;\n  for (let i = 0; i < children.length; i++) {\n    let child = children[i];\n    const key = parentKey == null ? child.key : String(parentKey) + String(child.key != null ? child.key : i);\n    if (child.type === Fragment) {\n      if (child.patchFlag & 128) keyedFragmentCount++;\n      ret = ret.concat(\n        getTransitionRawChildren(child.children, keepComment, key)\n      );\n    } else if (keepComment || child.type !== Comment) {\n      ret.push(key != null ? cloneVNode(child, { key }) : child);\n    }\n  }\n  if (keyedFragmentCount > 1) {\n    for (let i = 0; i < ret.length; i++) {\n      ret[i].patchFlag = -2;\n    }\n  }\n  return ret;\n}\n\n/*! #__NO_SIDE_EFFECTS__ */\n// @__NO_SIDE_EFFECTS__\nfunction defineComponent(options, extraOptions) {\n  return shared.isFunction(options) ? (\n    // #8236: extend call and options.name access are considered side-effects\n    // by Rollup, so we have to wrap it in a pure-annotated IIFE.\n    /* @__PURE__ */ (() => shared.extend({ name: options.name }, extraOptions, { setup: options }))()\n  ) : options;\n}\n\nfunction useId() {\n  const i = getCurrentInstance();\n  if (i) {\n    return (i.appContext.config.idPrefix || \"v\") + \"-\" + i.ids[0] + i.ids[1]++;\n  }\n  return \"\";\n}\nfunction markAsyncBoundary(instance) {\n  instance.ids = [instance.ids[0] + instance.ids[2]++ + \"-\", 0, 0];\n}\n\nfunction useTemplateRef(key) {\n  const i = getCurrentInstance();\n  const r = reactivity.shallowRef(null);\n  if (i) {\n    const refs = i.refs === shared.EMPTY_OBJ ? i.refs = {} : i.refs;\n    {\n      Object.defineProperty(refs, key, {\n        enumerable: true,\n        get: () => r.value,\n        set: (val) => r.value = val\n      });\n    }\n  }\n  const ret = r;\n  return ret;\n}\n\nfunction setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) {\n  if (shared.isArray(rawRef)) {\n    rawRef.forEach(\n      (r, i) => setRef(\n        r,\n        oldRawRef && (shared.isArray(oldRawRef) ? oldRawRef[i] : oldRawRef),\n        parentSuspense,\n        vnode,\n        isUnmount\n      )\n    );\n    return;\n  }\n  if (isAsyncWrapper(vnode) && !isUnmount) {\n    if (vnode.shapeFlag & 512 && vnode.type.__asyncResolved && vnode.component.subTree.component) {\n      setRef(rawRef, oldRawRef, parentSuspense, vnode.component.subTree);\n    }\n    return;\n  }\n  const refValue = vnode.shapeFlag & 4 ? getComponentPublicInstance(vnode.component) : vnode.el;\n  const value = isUnmount ? null : refValue;\n  const { i: owner, r: ref } = rawRef;\n  const oldRef = oldRawRef && oldRawRef.r;\n  const refs = owner.refs === shared.EMPTY_OBJ ? owner.refs = {} : owner.refs;\n  const setupState = owner.setupState;\n  const rawSetupState = reactivity.toRaw(setupState);\n  const canSetSetupRef = setupState === shared.EMPTY_OBJ ? () => false : (key) => {\n    return shared.hasOwn(rawSetupState, key);\n  };\n  if (oldRef != null && oldRef !== ref) {\n    if (shared.isString(oldRef)) {\n      refs[oldRef] = null;\n      if (canSetSetupRef(oldRef)) {\n        setupState[oldRef] = null;\n      }\n    } else if (reactivity.isRef(oldRef)) {\n      oldRef.value = null;\n    }\n  }\n  if (shared.isFunction(ref)) {\n    callWithErrorHandling(ref, owner, 12, [value, refs]);\n  } else {\n    const _isString = shared.isString(ref);\n    const _isRef = reactivity.isRef(ref);\n    if (_isString || _isRef) {\n      const doSet = () => {\n        if (rawRef.f) {\n          const existing = _isString ? canSetSetupRef(ref) ? setupState[ref] : refs[ref] : ref.value;\n          if (isUnmount) {\n            shared.isArray(existing) && shared.remove(existing, refValue);\n          } else {\n            if (!shared.isArray(existing)) {\n              if (_isString) {\n                refs[ref] = [refValue];\n                if (canSetSetupRef(ref)) {\n                  setupState[ref] = refs[ref];\n                }\n              } else {\n                ref.value = [refValue];\n                if (rawRef.k) refs[rawRef.k] = ref.value;\n              }\n            } else if (!existing.includes(refValue)) {\n              existing.push(refValue);\n            }\n          }\n        } else if (_isString) {\n          refs[ref] = value;\n          if (canSetSetupRef(ref)) {\n            setupState[ref] = value;\n          }\n        } else if (_isRef) {\n          ref.value = value;\n          if (rawRef.k) refs[rawRef.k] = value;\n        } else ;\n      };\n      if (value) {\n        doSet.id = -1;\n        queuePostRenderEffect(doSet, parentSuspense);\n      } else {\n        doSet();\n      }\n    }\n  }\n}\n\nlet hasLoggedMismatchError = false;\nconst logMismatchError = () => {\n  if (hasLoggedMismatchError) {\n    return;\n  }\n  console.error(\"Hydration completed but contains mismatches.\");\n  hasLoggedMismatchError = true;\n};\nconst isSVGContainer = (container) => container.namespaceURI.includes(\"svg\") && container.tagName !== \"foreignObject\";\nconst isMathMLContainer = (container) => container.namespaceURI.includes(\"MathML\");\nconst getContainerType = (container) => {\n  if (container.nodeType !== 1) return void 0;\n  if (isSVGContainer(container)) return \"svg\";\n  if (isMathMLContainer(container)) return \"mathml\";\n  return void 0;\n};\nconst isComment = (node) => node.nodeType === 8;\nfunction createHydrationFunctions(rendererInternals) {\n  const {\n    mt: mountComponent,\n    p: patch,\n    o: {\n      patchProp,\n      createText,\n      nextSibling,\n      parentNode,\n      remove,\n      insert,\n      createComment\n    }\n  } = rendererInternals;\n  const hydrate = (vnode, container) => {\n    if (!container.hasChildNodes()) {\n      patch(null, vnode, container);\n      flushPostFlushCbs();\n      container._vnode = vnode;\n      return;\n    }\n    hydrateNode(container.firstChild, vnode, null, null, null);\n    flushPostFlushCbs();\n    container._vnode = vnode;\n  };\n  const hydrateNode = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized = false) => {\n    optimized = optimized || !!vnode.dynamicChildren;\n    const isFragmentStart = isComment(node) && node.data === \"[\";\n    const onMismatch = () => handleMismatch(\n      node,\n      vnode,\n      parentComponent,\n      parentSuspense,\n      slotScopeIds,\n      isFragmentStart\n    );\n    const { type, ref, shapeFlag, patchFlag } = vnode;\n    let domType = node.nodeType;\n    vnode.el = node;\n    if (patchFlag === -2) {\n      optimized = false;\n      vnode.dynamicChildren = null;\n    }\n    let nextNode = null;\n    switch (type) {\n      case Text:\n        if (domType !== 3) {\n          if (vnode.children === \"\") {\n            insert(vnode.el = createText(\"\"), parentNode(node), node);\n            nextNode = node;\n          } else {\n            nextNode = onMismatch();\n          }\n        } else {\n          if (node.data !== vnode.children) {\n            logMismatchError();\n            node.data = vnode.children;\n          }\n          nextNode = nextSibling(node);\n        }\n        break;\n      case Comment:\n        if (isTemplateNode(node)) {\n          nextNode = nextSibling(node);\n          replaceNode(\n            vnode.el = node.content.firstChild,\n            node,\n            parentComponent\n          );\n        } else if (domType !== 8 || isFragmentStart) {\n          nextNode = onMismatch();\n        } else {\n          nextNode = nextSibling(node);\n        }\n        break;\n      case Static:\n        if (isFragmentStart) {\n          node = nextSibling(node);\n          domType = node.nodeType;\n        }\n        if (domType === 1 || domType === 3) {\n          nextNode = node;\n          const needToAdoptContent = !vnode.children.length;\n          for (let i = 0; i < vnode.staticCount; i++) {\n            if (needToAdoptContent)\n              vnode.children += nextNode.nodeType === 1 ? nextNode.outerHTML : nextNode.data;\n            if (i === vnode.staticCount - 1) {\n              vnode.anchor = nextNode;\n            }\n            nextNode = nextSibling(nextNode);\n          }\n          return isFragmentStart ? nextSibling(nextNode) : nextNode;\n        } else {\n          onMismatch();\n        }\n        break;\n      case Fragment:\n        if (!isFragmentStart) {\n          nextNode = onMismatch();\n        } else {\n          nextNode = hydrateFragment(\n            node,\n            vnode,\n            parentComponent,\n            parentSuspense,\n            slotScopeIds,\n            optimized\n          );\n        }\n        break;\n      default:\n        if (shapeFlag & 1) {\n          if ((domType !== 1 || vnode.type.toLowerCase() !== node.tagName.toLowerCase()) && !isTemplateNode(node)) {\n            nextNode = onMismatch();\n          } else {\n            nextNode = hydrateElement(\n              node,\n              vnode,\n              parentComponent,\n              parentSuspense,\n              slotScopeIds,\n              optimized\n            );\n          }\n        } else if (shapeFlag & 6) {\n          vnode.slotScopeIds = slotScopeIds;\n          const container = parentNode(node);\n          if (isFragmentStart) {\n            nextNode = locateClosingAnchor(node);\n          } else if (isComment(node) && node.data === \"teleport start\") {\n            nextNode = locateClosingAnchor(node, node.data, \"teleport end\");\n          } else {\n            nextNode = nextSibling(node);\n          }\n          mountComponent(\n            vnode,\n            container,\n            null,\n            parentComponent,\n            parentSuspense,\n            getContainerType(container),\n            optimized\n          );\n          if (isAsyncWrapper(vnode) && !vnode.type.__asyncResolved) {\n            let subTree;\n            if (isFragmentStart) {\n              subTree = createVNode(Fragment);\n              subTree.anchor = nextNode ? nextNode.previousSibling : container.lastChild;\n            } else {\n              subTree = node.nodeType === 3 ? createTextVNode(\"\") : createVNode(\"div\");\n            }\n            subTree.el = node;\n            vnode.component.subTree = subTree;\n          }\n        } else if (shapeFlag & 64) {\n          if (domType !== 8) {\n            nextNode = onMismatch();\n          } else {\n            nextNode = vnode.type.hydrate(\n              node,\n              vnode,\n              parentComponent,\n              parentSuspense,\n              slotScopeIds,\n              optimized,\n              rendererInternals,\n              hydrateChildren\n            );\n          }\n        } else if (shapeFlag & 128) {\n          nextNode = vnode.type.hydrate(\n            node,\n            vnode,\n            parentComponent,\n            parentSuspense,\n            getContainerType(parentNode(node)),\n            slotScopeIds,\n            optimized,\n            rendererInternals,\n            hydrateNode\n          );\n        } else ;\n    }\n    if (ref != null) {\n      setRef(ref, null, parentSuspense, vnode);\n    }\n    return nextNode;\n  };\n  const hydrateElement = (el, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n    optimized = optimized || !!vnode.dynamicChildren;\n    const { type, props, patchFlag, shapeFlag, dirs, transition } = vnode;\n    const forcePatch = type === \"input\" || type === \"option\";\n    if (forcePatch || patchFlag !== -1) {\n      if (dirs) {\n        invokeDirectiveHook(vnode, null, parentComponent, \"created\");\n      }\n      let needCallTransitionHooks = false;\n      if (isTemplateNode(el)) {\n        needCallTransitionHooks = needTransition(\n          null,\n          // no need check parentSuspense in hydration\n          transition\n        ) && parentComponent && parentComponent.vnode.props && parentComponent.vnode.props.appear;\n        const content = el.content.firstChild;\n        if (needCallTransitionHooks) {\n          const cls = content.getAttribute(\"class\");\n          if (cls) content.$cls = cls;\n          transition.beforeEnter(content);\n        }\n        replaceNode(content, el, parentComponent);\n        vnode.el = el = content;\n      }\n      if (shapeFlag & 16 && // skip if element has innerHTML / textContent\n      !(props && (props.innerHTML || props.textContent))) {\n        let next = hydrateChildren(\n          el.firstChild,\n          vnode,\n          el,\n          parentComponent,\n          parentSuspense,\n          slotScopeIds,\n          optimized\n        );\n        while (next) {\n          if (!isMismatchAllowed(el, 1 /* CHILDREN */)) {\n            logMismatchError();\n          }\n          const cur = next;\n          next = next.nextSibling;\n          remove(cur);\n        }\n      } else if (shapeFlag & 8) {\n        let clientText = vnode.children;\n        if (clientText[0] === \"\\n\" && (el.tagName === \"PRE\" || el.tagName === \"TEXTAREA\")) {\n          clientText = clientText.slice(1);\n        }\n        if (el.textContent !== clientText) {\n          if (!isMismatchAllowed(el, 0 /* TEXT */)) {\n            logMismatchError();\n          }\n          el.textContent = vnode.children;\n        }\n      }\n      if (props) {\n        if (forcePatch || !optimized || patchFlag & (16 | 32)) {\n          const isCustomElement = el.tagName.includes(\"-\");\n          for (const key in props) {\n            if (forcePatch && (key.endsWith(\"value\") || key === \"indeterminate\") || shared.isOn(key) && !shared.isReservedProp(key) || // force hydrate v-bind with .prop modifiers\n            key[0] === \".\" || isCustomElement) {\n              patchProp(el, key, null, props[key], void 0, parentComponent);\n            }\n          }\n        } else if (props.onClick) {\n          patchProp(\n            el,\n            \"onClick\",\n            null,\n            props.onClick,\n            void 0,\n            parentComponent\n          );\n        } else if (patchFlag & 4 && reactivity.isReactive(props.style)) {\n          for (const key in props.style) props.style[key];\n        }\n      }\n      let vnodeHooks;\n      if (vnodeHooks = props && props.onVnodeBeforeMount) {\n        invokeVNodeHook(vnodeHooks, parentComponent, vnode);\n      }\n      if (dirs) {\n        invokeDirectiveHook(vnode, null, parentComponent, \"beforeMount\");\n      }\n      if ((vnodeHooks = props && props.onVnodeMounted) || dirs || needCallTransitionHooks) {\n        queueEffectWithSuspense(() => {\n          vnodeHooks && invokeVNodeHook(vnodeHooks, parentComponent, vnode);\n          needCallTransitionHooks && transition.enter(el);\n          dirs && invokeDirectiveHook(vnode, null, parentComponent, \"mounted\");\n        }, parentSuspense);\n      }\n    }\n    return el.nextSibling;\n  };\n  const hydrateChildren = (node, parentVNode, container, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n    optimized = optimized || !!parentVNode.dynamicChildren;\n    const children = parentVNode.children;\n    const l = children.length;\n    for (let i = 0; i < l; i++) {\n      const vnode = optimized ? children[i] : children[i] = normalizeVNode(children[i]);\n      const isText = vnode.type === Text;\n      if (node) {\n        if (isText && !optimized) {\n          if (i + 1 < l && normalizeVNode(children[i + 1]).type === Text) {\n            insert(\n              createText(\n                node.data.slice(vnode.children.length)\n              ),\n              container,\n              nextSibling(node)\n            );\n            node.data = vnode.children;\n          }\n        }\n        node = hydrateNode(\n          node,\n          vnode,\n          parentComponent,\n          parentSuspense,\n          slotScopeIds,\n          optimized\n        );\n      } else if (isText && !vnode.children) {\n        insert(vnode.el = createText(\"\"), container);\n      } else {\n        if (!isMismatchAllowed(container, 1 /* CHILDREN */)) {\n          logMismatchError();\n        }\n        patch(\n          null,\n          vnode,\n          container,\n          null,\n          parentComponent,\n          parentSuspense,\n          getContainerType(container),\n          slotScopeIds\n        );\n      }\n    }\n    return node;\n  };\n  const hydrateFragment = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n    const { slotScopeIds: fragmentSlotScopeIds } = vnode;\n    if (fragmentSlotScopeIds) {\n      slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds;\n    }\n    const container = parentNode(node);\n    const next = hydrateChildren(\n      nextSibling(node),\n      vnode,\n      container,\n      parentComponent,\n      parentSuspense,\n      slotScopeIds,\n      optimized\n    );\n    if (next && isComment(next) && next.data === \"]\") {\n      return nextSibling(vnode.anchor = next);\n    } else {\n      logMismatchError();\n      insert(vnode.anchor = createComment(`]`), container, next);\n      return next;\n    }\n  };\n  const handleMismatch = (node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragment) => {\n    if (!isMismatchAllowed(node.parentElement, 1 /* CHILDREN */)) {\n      logMismatchError();\n    }\n    vnode.el = null;\n    if (isFragment) {\n      const end = locateClosingAnchor(node);\n      while (true) {\n        const next2 = nextSibling(node);\n        if (next2 && next2 !== end) {\n          remove(next2);\n        } else {\n          break;\n        }\n      }\n    }\n    const next = nextSibling(node);\n    const container = parentNode(node);\n    remove(node);\n    patch(\n      null,\n      vnode,\n      container,\n      next,\n      parentComponent,\n      parentSuspense,\n      getContainerType(container),\n      slotScopeIds\n    );\n    if (parentComponent) {\n      parentComponent.vnode.el = vnode.el;\n      updateHOCHostEl(parentComponent, vnode.el);\n    }\n    return next;\n  };\n  const locateClosingAnchor = (node, open = \"[\", close = \"]\") => {\n    let match = 0;\n    while (node) {\n      node = nextSibling(node);\n      if (node && isComment(node)) {\n        if (node.data === open) match++;\n        if (node.data === close) {\n          if (match === 0) {\n            return nextSibling(node);\n          } else {\n            match--;\n          }\n        }\n      }\n    }\n    return node;\n  };\n  const replaceNode = (newNode, oldNode, parentComponent) => {\n    const parentNode2 = oldNode.parentNode;\n    if (parentNode2) {\n      parentNode2.replaceChild(newNode, oldNode);\n    }\n    let parent = parentComponent;\n    while (parent) {\n      if (parent.vnode.el === oldNode) {\n        parent.vnode.el = parent.subTree.el = newNode;\n      }\n      parent = parent.parent;\n    }\n  };\n  const isTemplateNode = (node) => {\n    return node.nodeType === 1 && node.tagName === \"TEMPLATE\";\n  };\n  return [hydrate, hydrateNode];\n}\nconst allowMismatchAttr = \"data-allow-mismatch\";\nconst MismatchTypeString = {\n  [0 /* TEXT */]: \"text\",\n  [1 /* CHILDREN */]: \"children\",\n  [2 /* CLASS */]: \"class\",\n  [3 /* STYLE */]: \"style\",\n  [4 /* ATTRIBUTE */]: \"attribute\"\n};\nfunction isMismatchAllowed(el, allowedType) {\n  if (allowedType === 0 /* TEXT */ || allowedType === 1 /* CHILDREN */) {\n    while (el && !el.hasAttribute(allowMismatchAttr)) {\n      el = el.parentElement;\n    }\n  }\n  const allowedAttr = el && el.getAttribute(allowMismatchAttr);\n  if (allowedAttr == null) {\n    return false;\n  } else if (allowedAttr === \"\") {\n    return true;\n  } else {\n    const list = allowedAttr.split(\",\");\n    if (allowedType === 0 /* TEXT */ && list.includes(\"children\")) {\n      return true;\n    }\n    return list.includes(MismatchTypeString[allowedType]);\n  }\n}\n\nconst requestIdleCallback = shared.getGlobalThis().requestIdleCallback || ((cb) => setTimeout(cb, 1));\nconst cancelIdleCallback = shared.getGlobalThis().cancelIdleCallback || ((id) => clearTimeout(id));\nconst hydrateOnIdle = (timeout = 1e4) => (hydrate) => {\n  const id = requestIdleCallback(hydrate, { timeout });\n  return () => cancelIdleCallback(id);\n};\nfunction elementIsVisibleInViewport(el) {\n  const { top, left, bottom, right } = el.getBoundingClientRect();\n  const { innerHeight, innerWidth } = window;\n  return (top > 0 && top < innerHeight || bottom > 0 && bottom < innerHeight) && (left > 0 && left < innerWidth || right > 0 && right < innerWidth);\n}\nconst hydrateOnVisible = (opts) => (hydrate, forEach) => {\n  const ob = new IntersectionObserver((entries) => {\n    for (const e of entries) {\n      if (!e.isIntersecting) continue;\n      ob.disconnect();\n      hydrate();\n      break;\n    }\n  }, opts);\n  forEach((el) => {\n    if (!(el instanceof Element)) return;\n    if (elementIsVisibleInViewport(el)) {\n      hydrate();\n      ob.disconnect();\n      return false;\n    }\n    ob.observe(el);\n  });\n  return () => ob.disconnect();\n};\nconst hydrateOnMediaQuery = (query) => (hydrate) => {\n  if (query) {\n    const mql = matchMedia(query);\n    if (mql.matches) {\n      hydrate();\n    } else {\n      mql.addEventListener(\"change\", hydrate, { once: true });\n      return () => mql.removeEventListener(\"change\", hydrate);\n    }\n  }\n};\nconst hydrateOnInteraction = (interactions = []) => (hydrate, forEach) => {\n  if (shared.isString(interactions)) interactions = [interactions];\n  let hasHydrated = false;\n  const doHydrate = (e) => {\n    if (!hasHydrated) {\n      hasHydrated = true;\n      teardown();\n      hydrate();\n      e.target.dispatchEvent(new e.constructor(e.type, e));\n    }\n  };\n  const teardown = () => {\n    forEach((el) => {\n      for (const i of interactions) {\n        el.removeEventListener(i, doHydrate);\n      }\n    });\n  };\n  forEach((el) => {\n    for (const i of interactions) {\n      el.addEventListener(i, doHydrate, { once: true });\n    }\n  });\n  return teardown;\n};\nfunction forEachElement(node, cb) {\n  if (isComment(node) && node.data === \"[\") {\n    let depth = 1;\n    let next = node.nextSibling;\n    while (next) {\n      if (next.nodeType === 1) {\n        const result = cb(next);\n        if (result === false) {\n          break;\n        }\n      } else if (isComment(next)) {\n        if (next.data === \"]\") {\n          if (--depth === 0) break;\n        } else if (next.data === \"[\") {\n          depth++;\n        }\n      }\n      next = next.nextSibling;\n    }\n  } else {\n    cb(node);\n  }\n}\n\nconst isAsyncWrapper = (i) => !!i.type.__asyncLoader;\n/*! #__NO_SIDE_EFFECTS__ */\n// @__NO_SIDE_EFFECTS__\nfunction defineAsyncComponent(source) {\n  if (shared.isFunction(source)) {\n    source = { loader: source };\n  }\n  const {\n    loader,\n    loadingComponent,\n    errorComponent,\n    delay = 200,\n    hydrate: hydrateStrategy,\n    timeout,\n    // undefined = never times out\n    suspensible = true,\n    onError: userOnError\n  } = source;\n  let pendingRequest = null;\n  let resolvedComp;\n  let retries = 0;\n  const retry = () => {\n    retries++;\n    pendingRequest = null;\n    return load();\n  };\n  const load = () => {\n    let thisRequest;\n    return pendingRequest || (thisRequest = pendingRequest = loader().catch((err) => {\n      err = err instanceof Error ? err : new Error(String(err));\n      if (userOnError) {\n        return new Promise((resolve, reject) => {\n          const userRetry = () => resolve(retry());\n          const userFail = () => reject(err);\n          userOnError(err, userRetry, userFail, retries + 1);\n        });\n      } else {\n        throw err;\n      }\n    }).then((comp) => {\n      if (thisRequest !== pendingRequest && pendingRequest) {\n        return pendingRequest;\n      }\n      if (comp && (comp.__esModule || comp[Symbol.toStringTag] === \"Module\")) {\n        comp = comp.default;\n      }\n      resolvedComp = comp;\n      return comp;\n    }));\n  };\n  return defineComponent({\n    name: \"AsyncComponentWrapper\",\n    __asyncLoader: load,\n    __asyncHydrate(el, instance, hydrate) {\n      let patched = false;\n      (instance.bu || (instance.bu = [])).push(() => patched = true);\n      const performHydrate = () => {\n        if (patched) {\n          return;\n        }\n        hydrate();\n      };\n      const doHydrate = hydrateStrategy ? () => {\n        const teardown = hydrateStrategy(\n          performHydrate,\n          (cb) => forEachElement(el, cb)\n        );\n        if (teardown) {\n          (instance.bum || (instance.bum = [])).push(teardown);\n        }\n      } : performHydrate;\n      if (resolvedComp) {\n        doHydrate();\n      } else {\n        load().then(() => !instance.isUnmounted && doHydrate());\n      }\n    },\n    get __asyncResolved() {\n      return resolvedComp;\n    },\n    setup() {\n      const instance = currentInstance;\n      markAsyncBoundary(instance);\n      if (resolvedComp) {\n        return () => createInnerComp(resolvedComp, instance);\n      }\n      const onError = (err) => {\n        pendingRequest = null;\n        handleError(\n          err,\n          instance,\n          13,\n          !errorComponent\n        );\n      };\n      if (suspensible && instance.suspense || isInSSRComponentSetup) {\n        return load().then((comp) => {\n          return () => createInnerComp(comp, instance);\n        }).catch((err) => {\n          onError(err);\n          return () => errorComponent ? createVNode(errorComponent, {\n            error: err\n          }) : null;\n        });\n      }\n      const loaded = reactivity.ref(false);\n      const error = reactivity.ref();\n      const delayed = reactivity.ref(!!delay);\n      if (delay) {\n        setTimeout(() => {\n          delayed.value = false;\n        }, delay);\n      }\n      if (timeout != null) {\n        setTimeout(() => {\n          if (!loaded.value && !error.value) {\n            const err = new Error(\n              `Async component timed out after ${timeout}ms.`\n            );\n            onError(err);\n            error.value = err;\n          }\n        }, timeout);\n      }\n      load().then(() => {\n        loaded.value = true;\n        if (instance.parent && isKeepAlive(instance.parent.vnode)) {\n          instance.parent.update();\n        }\n      }).catch((err) => {\n        onError(err);\n        error.value = err;\n      });\n      return () => {\n        if (loaded.value && resolvedComp) {\n          return createInnerComp(resolvedComp, instance);\n        } else if (error.value && errorComponent) {\n          return createVNode(errorComponent, {\n            error: error.value\n          });\n        } else if (loadingComponent && !delayed.value) {\n          return createVNode(loadingComponent);\n        }\n      };\n    }\n  });\n}\nfunction createInnerComp(comp, parent) {\n  const { ref: ref2, props, children, ce } = parent.vnode;\n  const vnode = createVNode(comp, props, children);\n  vnode.ref = ref2;\n  vnode.ce = ce;\n  delete parent.vnode.ce;\n  return vnode;\n}\n\nconst isKeepAlive = (vnode) => vnode.type.__isKeepAlive;\nconst KeepAliveImpl = {\n  name: `KeepAlive`,\n  // Marker for special handling inside the renderer. We are not using a ===\n  // check directly on KeepAlive in the renderer, because importing it directly\n  // would prevent it from being tree-shaken.\n  __isKeepAlive: true,\n  props: {\n    include: [String, RegExp, Array],\n    exclude: [String, RegExp, Array],\n    max: [String, Number]\n  },\n  setup(props, { slots }) {\n    const instance = getCurrentInstance();\n    const sharedContext = instance.ctx;\n    if (!sharedContext.renderer) {\n      return () => {\n        const children = slots.default && slots.default();\n        return children && children.length === 1 ? children[0] : children;\n      };\n    }\n    const cache = /* @__PURE__ */ new Map();\n    const keys = /* @__PURE__ */ new Set();\n    let current = null;\n    const parentSuspense = instance.suspense;\n    const {\n      renderer: {\n        p: patch,\n        m: move,\n        um: _unmount,\n        o: { createElement }\n      }\n    } = sharedContext;\n    const storageContainer = createElement(\"div\");\n    sharedContext.activate = (vnode, container, anchor, namespace, optimized) => {\n      const instance2 = vnode.component;\n      move(vnode, container, anchor, 0, parentSuspense);\n      patch(\n        instance2.vnode,\n        vnode,\n        container,\n        anchor,\n        instance2,\n        parentSuspense,\n        namespace,\n        vnode.slotScopeIds,\n        optimized\n      );\n      queuePostRenderEffect(() => {\n        instance2.isDeactivated = false;\n        if (instance2.a) {\n          shared.invokeArrayFns(instance2.a);\n        }\n        const vnodeHook = vnode.props && vnode.props.onVnodeMounted;\n        if (vnodeHook) {\n          invokeVNodeHook(vnodeHook, instance2.parent, vnode);\n        }\n      }, parentSuspense);\n    };\n    sharedContext.deactivate = (vnode) => {\n      const instance2 = vnode.component;\n      invalidateMount(instance2.m);\n      invalidateMount(instance2.a);\n      move(vnode, storageContainer, null, 1, parentSuspense);\n      queuePostRenderEffect(() => {\n        if (instance2.da) {\n          shared.invokeArrayFns(instance2.da);\n        }\n        const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted;\n        if (vnodeHook) {\n          invokeVNodeHook(vnodeHook, instance2.parent, vnode);\n        }\n        instance2.isDeactivated = true;\n      }, parentSuspense);\n    };\n    function unmount(vnode) {\n      resetShapeFlag(vnode);\n      _unmount(vnode, instance, parentSuspense, true);\n    }\n    function pruneCache(filter) {\n      cache.forEach((vnode, key) => {\n        const name = getComponentName(vnode.type);\n        if (name && !filter(name)) {\n          pruneCacheEntry(key);\n        }\n      });\n    }\n    function pruneCacheEntry(key) {\n      const cached = cache.get(key);\n      if (cached && (!current || !isSameVNodeType(cached, current))) {\n        unmount(cached);\n      } else if (current) {\n        resetShapeFlag(current);\n      }\n      cache.delete(key);\n      keys.delete(key);\n    }\n    watch(\n      () => [props.include, props.exclude],\n      ([include, exclude]) => {\n        include && pruneCache((name) => matches(include, name));\n        exclude && pruneCache((name) => !matches(exclude, name));\n      },\n      // prune post-render after `current` has been updated\n      { flush: \"post\", deep: true }\n    );\n    let pendingCacheKey = null;\n    const cacheSubtree = () => {\n      if (pendingCacheKey != null) {\n        if (isSuspense(instance.subTree.type)) {\n          queuePostRenderEffect(() => {\n            cache.set(pendingCacheKey, getInnerChild(instance.subTree));\n          }, instance.subTree.suspense);\n        } else {\n          cache.set(pendingCacheKey, getInnerChild(instance.subTree));\n        }\n      }\n    };\n    onMounted(cacheSubtree);\n    onUpdated(cacheSubtree);\n    onBeforeUnmount(() => {\n      cache.forEach((cached) => {\n        const { subTree, suspense } = instance;\n        const vnode = getInnerChild(subTree);\n        if (cached.type === vnode.type && cached.key === vnode.key) {\n          resetShapeFlag(vnode);\n          const da = vnode.component.da;\n          da && queuePostRenderEffect(da, suspense);\n          return;\n        }\n        unmount(cached);\n      });\n    });\n    return () => {\n      pendingCacheKey = null;\n      if (!slots.default) {\n        return current = null;\n      }\n      const children = slots.default();\n      const rawVNode = children[0];\n      if (children.length > 1) {\n        current = null;\n        return children;\n      } else if (!isVNode(rawVNode) || !(rawVNode.shapeFlag & 4) && !(rawVNode.shapeFlag & 128)) {\n        current = null;\n        return rawVNode;\n      }\n      let vnode = getInnerChild(rawVNode);\n      if (vnode.type === Comment) {\n        current = null;\n        return vnode;\n      }\n      const comp = vnode.type;\n      const name = getComponentName(\n        isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : comp\n      );\n      const { include, exclude, max } = props;\n      if (include && (!name || !matches(include, name)) || exclude && name && matches(exclude, name)) {\n        vnode.shapeFlag &= -257;\n        current = vnode;\n        return rawVNode;\n      }\n      const key = vnode.key == null ? comp : vnode.key;\n      const cachedVNode = cache.get(key);\n      if (vnode.el) {\n        vnode = cloneVNode(vnode);\n        if (rawVNode.shapeFlag & 128) {\n          rawVNode.ssContent = vnode;\n        }\n      }\n      pendingCacheKey = key;\n      if (cachedVNode) {\n        vnode.el = cachedVNode.el;\n        vnode.component = cachedVNode.component;\n        if (vnode.transition) {\n          setTransitionHooks(vnode, vnode.transition);\n        }\n        vnode.shapeFlag |= 512;\n        keys.delete(key);\n        keys.add(key);\n      } else {\n        keys.add(key);\n        if (max && keys.size > parseInt(max, 10)) {\n          pruneCacheEntry(keys.values().next().value);\n        }\n      }\n      vnode.shapeFlag |= 256;\n      current = vnode;\n      return isSuspense(rawVNode.type) ? rawVNode : vnode;\n    };\n  }\n};\nconst KeepAlive = KeepAliveImpl;\nfunction matches(pattern, name) {\n  if (shared.isArray(pattern)) {\n    return pattern.some((p) => matches(p, name));\n  } else if (shared.isString(pattern)) {\n    return pattern.split(\",\").includes(name);\n  } else if (shared.isRegExp(pattern)) {\n    pattern.lastIndex = 0;\n    return pattern.test(name);\n  }\n  return false;\n}\nfunction onActivated(hook, target) {\n  registerKeepAliveHook(hook, \"a\", target);\n}\nfunction onDeactivated(hook, target) {\n  registerKeepAliveHook(hook, \"da\", target);\n}\nfunction registerKeepAliveHook(hook, type, target = currentInstance) {\n  const wrappedHook = hook.__wdc || (hook.__wdc = () => {\n    let current = target;\n    while (current) {\n      if (current.isDeactivated) {\n        return;\n      }\n      current = current.parent;\n    }\n    return hook();\n  });\n  injectHook(type, wrappedHook, target);\n  if (target) {\n    let current = target.parent;\n    while (current && current.parent) {\n      if (isKeepAlive(current.parent.vnode)) {\n        injectToKeepAliveRoot(wrappedHook, type, target, current);\n      }\n      current = current.parent;\n    }\n  }\n}\nfunction injectToKeepAliveRoot(hook, type, target, keepAliveRoot) {\n  const injected = injectHook(\n    type,\n    hook,\n    keepAliveRoot,\n    true\n    /* prepend */\n  );\n  onUnmounted(() => {\n    shared.remove(keepAliveRoot[type], injected);\n  }, target);\n}\nfunction resetShapeFlag(vnode) {\n  vnode.shapeFlag &= -257;\n  vnode.shapeFlag &= -513;\n}\nfunction getInnerChild(vnode) {\n  return vnode.shapeFlag & 128 ? vnode.ssContent : vnode;\n}\n\nfunction injectHook(type, hook, target = currentInstance, prepend = false) {\n  if (target) {\n    const hooks = target[type] || (target[type] = []);\n    const wrappedHook = hook.__weh || (hook.__weh = (...args) => {\n      reactivity.pauseTracking();\n      const reset = setCurrentInstance(target);\n      const res = callWithAsyncErrorHandling(hook, target, type, args);\n      reset();\n      reactivity.resetTracking();\n      return res;\n    });\n    if (prepend) {\n      hooks.unshift(wrappedHook);\n    } else {\n      hooks.push(wrappedHook);\n    }\n    return wrappedHook;\n  }\n}\nconst createHook = (lifecycle) => (hook, target = currentInstance) => {\n  if (!isInSSRComponentSetup || lifecycle === \"sp\") {\n    injectHook(lifecycle, (...args) => hook(...args), target);\n  }\n};\nconst onBeforeMount = createHook(\"bm\");\nconst onMounted = createHook(\"m\");\nconst onBeforeUpdate = createHook(\n  \"bu\"\n);\nconst onUpdated = createHook(\"u\");\nconst onBeforeUnmount = createHook(\n  \"bum\"\n);\nconst onUnmounted = createHook(\"um\");\nconst onServerPrefetch = createHook(\n  \"sp\"\n);\nconst onRenderTriggered = createHook(\"rtg\");\nconst onRenderTracked = createHook(\"rtc\");\nfunction onErrorCaptured(hook, target = currentInstance) {\n  injectHook(\"ec\", hook, target);\n}\n\nconst COMPONENTS = \"components\";\nconst DIRECTIVES = \"directives\";\nfunction resolveComponent(name, maybeSelfReference) {\n  return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name;\n}\nconst NULL_DYNAMIC_COMPONENT = Symbol.for(\"v-ndc\");\nfunction resolveDynamicComponent(component) {\n  if (shared.isString(component)) {\n    return resolveAsset(COMPONENTS, component, false) || component;\n  } else {\n    return component || NULL_DYNAMIC_COMPONENT;\n  }\n}\nfunction resolveDirective(name) {\n  return resolveAsset(DIRECTIVES, name);\n}\nfunction resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) {\n  const instance = currentRenderingInstance || currentInstance;\n  if (instance) {\n    const Component = instance.type;\n    if (type === COMPONENTS) {\n      const selfName = getComponentName(\n        Component,\n        false\n      );\n      if (selfName && (selfName === name || selfName === shared.camelize(name) || selfName === shared.capitalize(shared.camelize(name)))) {\n        return Component;\n      }\n    }\n    const res = (\n      // local registration\n      // check instance[type] first which is resolved for options API\n      resolve(instance[type] || Component[type], name) || // global registration\n      resolve(instance.appContext[type], name)\n    );\n    if (!res && maybeSelfReference) {\n      return Component;\n    }\n    return res;\n  }\n}\nfunction resolve(registry, name) {\n  return registry && (registry[name] || registry[shared.camelize(name)] || registry[shared.capitalize(shared.camelize(name))]);\n}\n\nfunction renderList(source, renderItem, cache, index) {\n  let ret;\n  const cached = cache && cache[index];\n  const sourceIsArray = shared.isArray(source);\n  if (sourceIsArray || shared.isString(source)) {\n    const sourceIsReactiveArray = sourceIsArray && reactivity.isReactive(source);\n    let needsWrap = false;\n    let isReadonlySource = false;\n    if (sourceIsReactiveArray) {\n      needsWrap = !reactivity.isShallow(source);\n      isReadonlySource = reactivity.isReadonly(source);\n      source = reactivity.shallowReadArray(source);\n    }\n    ret = new Array(source.length);\n    for (let i = 0, l = source.length; i < l; i++) {\n      ret[i] = renderItem(\n        needsWrap ? isReadonlySource ? reactivity.toReadonly(reactivity.toReactive(source[i])) : reactivity.toReactive(source[i]) : source[i],\n        i,\n        void 0,\n        cached && cached[i]\n      );\n    }\n  } else if (typeof source === \"number\") {\n    ret = new Array(source);\n    for (let i = 0; i < source; i++) {\n      ret[i] = renderItem(i + 1, i, void 0, cached && cached[i]);\n    }\n  } else if (shared.isObject(source)) {\n    if (source[Symbol.iterator]) {\n      ret = Array.from(\n        source,\n        (item, i) => renderItem(item, i, void 0, cached && cached[i])\n      );\n    } else {\n      const keys = Object.keys(source);\n      ret = new Array(keys.length);\n      for (let i = 0, l = keys.length; i < l; i++) {\n        const key = keys[i];\n        ret[i] = renderItem(source[key], key, i, cached && cached[i]);\n      }\n    }\n  } else {\n    ret = [];\n  }\n  if (cache) {\n    cache[index] = ret;\n  }\n  return ret;\n}\n\nfunction createSlots(slots, dynamicSlots) {\n  for (let i = 0; i < dynamicSlots.length; i++) {\n    const slot = dynamicSlots[i];\n    if (shared.isArray(slot)) {\n      for (let j = 0; j < slot.length; j++) {\n        slots[slot[j].name] = slot[j].fn;\n      }\n    } else if (slot) {\n      slots[slot.name] = slot.key ? (...args) => {\n        const res = slot.fn(...args);\n        if (res) res.key = slot.key;\n        return res;\n      } : slot.fn;\n    }\n  }\n  return slots;\n}\n\nfunction renderSlot(slots, name, props = {}, fallback, noSlotted) {\n  if (currentRenderingInstance.ce || currentRenderingInstance.parent && isAsyncWrapper(currentRenderingInstance.parent) && currentRenderingInstance.parent.ce) {\n    if (name !== \"default\") props.name = name;\n    return openBlock(), createBlock(\n      Fragment,\n      null,\n      [createVNode(\"slot\", props, fallback && fallback())],\n      64\n    );\n  }\n  let slot = slots[name];\n  if (slot && slot._c) {\n    slot._d = false;\n  }\n  openBlock();\n  const validSlotContent = slot && ensureValidVNode(slot(props));\n  const slotKey = props.key || // slot content array of a dynamic conditional slot may have a branch\n  // key attached in the `createSlots` helper, respect that\n  validSlotContent && validSlotContent.key;\n  const rendered = createBlock(\n    Fragment,\n    {\n      key: (slotKey && !shared.isSymbol(slotKey) ? slotKey : `_${name}`) + // #7256 force differentiate fallback content from actual content\n      (!validSlotContent && fallback ? \"_fb\" : \"\")\n    },\n    validSlotContent || (fallback ? fallback() : []),\n    validSlotContent && slots._ === 1 ? 64 : -2\n  );\n  if (!noSlotted && rendered.scopeId) {\n    rendered.slotScopeIds = [rendered.scopeId + \"-s\"];\n  }\n  if (slot && slot._c) {\n    slot._d = true;\n  }\n  return rendered;\n}\nfunction ensureValidVNode(vnodes) {\n  return vnodes.some((child) => {\n    if (!isVNode(child)) return true;\n    if (child.type === Comment) return false;\n    if (child.type === Fragment && !ensureValidVNode(child.children))\n      return false;\n    return true;\n  }) ? vnodes : null;\n}\n\nfunction toHandlers(obj, preserveCaseIfNecessary) {\n  const ret = {};\n  for (const key in obj) {\n    ret[preserveCaseIfNecessary && /[A-Z]/.test(key) ? `on:${key}` : shared.toHandlerKey(key)] = obj[key];\n  }\n  return ret;\n}\n\nconst getPublicInstance = (i) => {\n  if (!i) return null;\n  if (isStatefulComponent(i)) return getComponentPublicInstance(i);\n  return getPublicInstance(i.parent);\n};\nconst publicPropertiesMap = (\n  // Move PURE marker to new line to workaround compiler discarding it\n  // due to type annotation\n  /* @__PURE__ */ shared.extend(/* @__PURE__ */ Object.create(null), {\n    $: (i) => i,\n    $el: (i) => i.vnode.el,\n    $data: (i) => i.data,\n    $props: (i) => i.props,\n    $attrs: (i) => i.attrs,\n    $slots: (i) => i.slots,\n    $refs: (i) => i.refs,\n    $parent: (i) => getPublicInstance(i.parent),\n    $root: (i) => getPublicInstance(i.root),\n    $host: (i) => i.ce,\n    $emit: (i) => i.emit,\n    $options: (i) => resolveMergedOptions(i) ,\n    $forceUpdate: (i) => i.f || (i.f = () => {\n      queueJob(i.update);\n    }),\n    $nextTick: (i) => i.n || (i.n = nextTick.bind(i.proxy)),\n    $watch: (i) => instanceWatch.bind(i) \n  })\n);\nconst hasSetupBinding = (state, key) => state !== shared.EMPTY_OBJ && !state.__isScriptSetup && shared.hasOwn(state, key);\nconst PublicInstanceProxyHandlers = {\n  get({ _: instance }, key) {\n    if (key === \"__v_skip\") {\n      return true;\n    }\n    const { ctx, setupState, data, props, accessCache, type, appContext } = instance;\n    let normalizedProps;\n    if (key[0] !== \"$\") {\n      const n = accessCache[key];\n      if (n !== void 0) {\n        switch (n) {\n          case 1 /* SETUP */:\n            return setupState[key];\n          case 2 /* DATA */:\n            return data[key];\n          case 4 /* CONTEXT */:\n            return ctx[key];\n          case 3 /* PROPS */:\n            return props[key];\n        }\n      } else if (hasSetupBinding(setupState, key)) {\n        accessCache[key] = 1 /* SETUP */;\n        return setupState[key];\n      } else if (data !== shared.EMPTY_OBJ && shared.hasOwn(data, key)) {\n        accessCache[key] = 2 /* DATA */;\n        return data[key];\n      } else if (\n        // only cache other properties when instance has declared (thus stable)\n        // props\n        (normalizedProps = instance.propsOptions[0]) && shared.hasOwn(normalizedProps, key)\n      ) {\n        accessCache[key] = 3 /* PROPS */;\n        return props[key];\n      } else if (ctx !== shared.EMPTY_OBJ && shared.hasOwn(ctx, key)) {\n        accessCache[key] = 4 /* CONTEXT */;\n        return ctx[key];\n      } else if (shouldCacheAccess) {\n        accessCache[key] = 0 /* OTHER */;\n      }\n    }\n    const publicGetter = publicPropertiesMap[key];\n    let cssModule, globalProperties;\n    if (publicGetter) {\n      if (key === \"$attrs\") {\n        reactivity.track(instance.attrs, \"get\", \"\");\n      }\n      return publicGetter(instance);\n    } else if (\n      // css module (injected by vue-loader)\n      (cssModule = type.__cssModules) && (cssModule = cssModule[key])\n    ) {\n      return cssModule;\n    } else if (ctx !== shared.EMPTY_OBJ && shared.hasOwn(ctx, key)) {\n      accessCache[key] = 4 /* CONTEXT */;\n      return ctx[key];\n    } else if (\n      // global properties\n      globalProperties = appContext.config.globalProperties, shared.hasOwn(globalProperties, key)\n    ) {\n      {\n        return globalProperties[key];\n      }\n    } else ;\n  },\n  set({ _: instance }, key, value) {\n    const { data, setupState, ctx } = instance;\n    if (hasSetupBinding(setupState, key)) {\n      setupState[key] = value;\n      return true;\n    } else if (data !== shared.EMPTY_OBJ && shared.hasOwn(data, key)) {\n      data[key] = value;\n      return true;\n    } else if (shared.hasOwn(instance.props, key)) {\n      return false;\n    }\n    if (key[0] === \"$\" && key.slice(1) in instance) {\n      return false;\n    } else {\n      {\n        ctx[key] = value;\n      }\n    }\n    return true;\n  },\n  has({\n    _: { data, setupState, accessCache, ctx, appContext, propsOptions }\n  }, key) {\n    let normalizedProps;\n    return !!accessCache[key] || data !== shared.EMPTY_OBJ && shared.hasOwn(data, key) || hasSetupBinding(setupState, key) || (normalizedProps = propsOptions[0]) && shared.hasOwn(normalizedProps, key) || shared.hasOwn(ctx, key) || shared.hasOwn(publicPropertiesMap, key) || shared.hasOwn(appContext.config.globalProperties, key);\n  },\n  defineProperty(target, key, descriptor) {\n    if (descriptor.get != null) {\n      target._.accessCache[key] = 0;\n    } else if (shared.hasOwn(descriptor, \"value\")) {\n      this.set(target, key, descriptor.value, null);\n    }\n    return Reflect.defineProperty(target, key, descriptor);\n  }\n};\nconst RuntimeCompiledPublicInstanceProxyHandlers = /* @__PURE__ */ shared.extend({}, PublicInstanceProxyHandlers, {\n  get(target, key) {\n    if (key === Symbol.unscopables) {\n      return;\n    }\n    return PublicInstanceProxyHandlers.get(target, key, target);\n  },\n  has(_, key) {\n    const has = key[0] !== \"_\" && !shared.isGloballyAllowed(key);\n    return has;\n  }\n});\n\nfunction defineProps() {\n  return null;\n}\nfunction defineEmits() {\n  return null;\n}\nfunction defineExpose(exposed) {\n}\nfunction defineOptions(options) {\n}\nfunction defineSlots() {\n  return null;\n}\nfunction defineModel() {\n}\nfunction withDefaults(props, defaults) {\n  return null;\n}\nfunction useSlots() {\n  return getContext().slots;\n}\nfunction useAttrs() {\n  return getContext().attrs;\n}\nfunction getContext(calledFunctionName) {\n  const i = getCurrentInstance();\n  return i.setupContext || (i.setupContext = createSetupContext(i));\n}\nfunction normalizePropsOrEmits(props) {\n  return shared.isArray(props) ? props.reduce(\n    (normalized, p) => (normalized[p] = null, normalized),\n    {}\n  ) : props;\n}\nfunction mergeDefaults(raw, defaults) {\n  const props = normalizePropsOrEmits(raw);\n  for (const key in defaults) {\n    if (key.startsWith(\"__skip\")) continue;\n    let opt = props[key];\n    if (opt) {\n      if (shared.isArray(opt) || shared.isFunction(opt)) {\n        opt = props[key] = { type: opt, default: defaults[key] };\n      } else {\n        opt.default = defaults[key];\n      }\n    } else if (opt === null) {\n      opt = props[key] = { default: defaults[key] };\n    } else ;\n    if (opt && defaults[`__skip_${key}`]) {\n      opt.skipFactory = true;\n    }\n  }\n  return props;\n}\nfunction mergeModels(a, b) {\n  if (!a || !b) return a || b;\n  if (shared.isArray(a) && shared.isArray(b)) return a.concat(b);\n  return shared.extend({}, normalizePropsOrEmits(a), normalizePropsOrEmits(b));\n}\nfunction createPropsRestProxy(props, excludedKeys) {\n  const ret = {};\n  for (const key in props) {\n    if (!excludedKeys.includes(key)) {\n      Object.defineProperty(ret, key, {\n        enumerable: true,\n        get: () => props[key]\n      });\n    }\n  }\n  return ret;\n}\nfunction withAsyncContext(getAwaitable) {\n  const ctx = getCurrentInstance();\n  let awaitable = getAwaitable();\n  unsetCurrentInstance();\n  if (shared.isPromise(awaitable)) {\n    awaitable = awaitable.catch((e) => {\n      setCurrentInstance(ctx);\n      throw e;\n    });\n  }\n  return [awaitable, () => setCurrentInstance(ctx)];\n}\n\nlet shouldCacheAccess = true;\nfunction applyOptions(instance) {\n  const options = resolveMergedOptions(instance);\n  const publicThis = instance.proxy;\n  const ctx = instance.ctx;\n  shouldCacheAccess = false;\n  if (options.beforeCreate) {\n    callHook(options.beforeCreate, instance, \"bc\");\n  }\n  const {\n    // state\n    data: dataOptions,\n    computed: computedOptions,\n    methods,\n    watch: watchOptions,\n    provide: provideOptions,\n    inject: injectOptions,\n    // lifecycle\n    created,\n    beforeMount,\n    mounted,\n    beforeUpdate,\n    updated,\n    activated,\n    deactivated,\n    beforeDestroy,\n    beforeUnmount,\n    destroyed,\n    unmounted,\n    render,\n    renderTracked,\n    renderTriggered,\n    errorCaptured,\n    serverPrefetch,\n    // public API\n    expose,\n    inheritAttrs,\n    // assets\n    components,\n    directives,\n    filters\n  } = options;\n  const checkDuplicateProperties = null;\n  if (injectOptions) {\n    resolveInjections(injectOptions, ctx, checkDuplicateProperties);\n  }\n  if (methods) {\n    for (const key in methods) {\n      const methodHandler = methods[key];\n      if (shared.isFunction(methodHandler)) {\n        {\n          ctx[key] = methodHandler.bind(publicThis);\n        }\n      }\n    }\n  }\n  if (dataOptions) {\n    const data = dataOptions.call(publicThis, publicThis);\n    if (!shared.isObject(data)) ; else {\n      instance.data = reactivity.reactive(data);\n    }\n  }\n  shouldCacheAccess = true;\n  if (computedOptions) {\n    for (const key in computedOptions) {\n      const opt = computedOptions[key];\n      const get = shared.isFunction(opt) ? opt.bind(publicThis, publicThis) : shared.isFunction(opt.get) ? opt.get.bind(publicThis, publicThis) : shared.NOOP;\n      const set = !shared.isFunction(opt) && shared.isFunction(opt.set) ? opt.set.bind(publicThis) : shared.NOOP;\n      const c = computed({\n        get,\n        set\n      });\n      Object.defineProperty(ctx, key, {\n        enumerable: true,\n        configurable: true,\n        get: () => c.value,\n        set: (v) => c.value = v\n      });\n    }\n  }\n  if (watchOptions) {\n    for (const key in watchOptions) {\n      createWatcher(watchOptions[key], ctx, publicThis, key);\n    }\n  }\n  if (provideOptions) {\n    const provides = shared.isFunction(provideOptions) ? provideOptions.call(publicThis) : provideOptions;\n    Reflect.ownKeys(provides).forEach((key) => {\n      provide(key, provides[key]);\n    });\n  }\n  if (created) {\n    callHook(created, instance, \"c\");\n  }\n  function registerLifecycleHook(register, hook) {\n    if (shared.isArray(hook)) {\n      hook.forEach((_hook) => register(_hook.bind(publicThis)));\n    } else if (hook) {\n      register(hook.bind(publicThis));\n    }\n  }\n  registerLifecycleHook(onBeforeMount, beforeMount);\n  registerLifecycleHook(onMounted, mounted);\n  registerLifecycleHook(onBeforeUpdate, beforeUpdate);\n  registerLifecycleHook(onUpdated, updated);\n  registerLifecycleHook(onActivated, activated);\n  registerLifecycleHook(onDeactivated, deactivated);\n  registerLifecycleHook(onErrorCaptured, errorCaptured);\n  registerLifecycleHook(onRenderTracked, renderTracked);\n  registerLifecycleHook(onRenderTriggered, renderTriggered);\n  registerLifecycleHook(onBeforeUnmount, beforeUnmount);\n  registerLifecycleHook(onUnmounted, unmounted);\n  registerLifecycleHook(onServerPrefetch, serverPrefetch);\n  if (shared.isArray(expose)) {\n    if (expose.length) {\n      const exposed = instance.exposed || (instance.exposed = {});\n      expose.forEach((key) => {\n        Object.defineProperty(exposed, key, {\n          get: () => publicThis[key],\n          set: (val) => publicThis[key] = val,\n          enumerable: true\n        });\n      });\n    } else if (!instance.exposed) {\n      instance.exposed = {};\n    }\n  }\n  if (render && instance.render === shared.NOOP) {\n    instance.render = render;\n  }\n  if (inheritAttrs != null) {\n    instance.inheritAttrs = inheritAttrs;\n  }\n  if (components) instance.components = components;\n  if (directives) instance.directives = directives;\n  if (serverPrefetch) {\n    markAsyncBoundary(instance);\n  }\n}\nfunction resolveInjections(injectOptions, ctx, checkDuplicateProperties = shared.NOOP) {\n  if (shared.isArray(injectOptions)) {\n    injectOptions = normalizeInject(injectOptions);\n  }\n  for (const key in injectOptions) {\n    const opt = injectOptions[key];\n    let injected;\n    if (shared.isObject(opt)) {\n      if (\"default\" in opt) {\n        injected = inject(\n          opt.from || key,\n          opt.default,\n          true\n        );\n      } else {\n        injected = inject(opt.from || key);\n      }\n    } else {\n      injected = inject(opt);\n    }\n    if (reactivity.isRef(injected)) {\n      Object.defineProperty(ctx, key, {\n        enumerable: true,\n        configurable: true,\n        get: () => injected.value,\n        set: (v) => injected.value = v\n      });\n    } else {\n      ctx[key] = injected;\n    }\n  }\n}\nfunction callHook(hook, instance, type) {\n  callWithAsyncErrorHandling(\n    shared.isArray(hook) ? hook.map((h) => h.bind(instance.proxy)) : hook.bind(instance.proxy),\n    instance,\n    type\n  );\n}\nfunction createWatcher(raw, ctx, publicThis, key) {\n  let getter = key.includes(\".\") ? createPathGetter(publicThis, key) : () => publicThis[key];\n  if (shared.isString(raw)) {\n    const handler = ctx[raw];\n    if (shared.isFunction(handler)) {\n      {\n        watch(getter, handler);\n      }\n    }\n  } else if (shared.isFunction(raw)) {\n    {\n      watch(getter, raw.bind(publicThis));\n    }\n  } else if (shared.isObject(raw)) {\n    if (shared.isArray(raw)) {\n      raw.forEach((r) => createWatcher(r, ctx, publicThis, key));\n    } else {\n      const handler = shared.isFunction(raw.handler) ? raw.handler.bind(publicThis) : ctx[raw.handler];\n      if (shared.isFunction(handler)) {\n        watch(getter, handler, raw);\n      }\n    }\n  } else ;\n}\nfunction resolveMergedOptions(instance) {\n  const base = instance.type;\n  const { mixins, extends: extendsOptions } = base;\n  const {\n    mixins: globalMixins,\n    optionsCache: cache,\n    config: { optionMergeStrategies }\n  } = instance.appContext;\n  const cached = cache.get(base);\n  let resolved;\n  if (cached) {\n    resolved = cached;\n  } else if (!globalMixins.length && !mixins && !extendsOptions) {\n    {\n      resolved = base;\n    }\n  } else {\n    resolved = {};\n    if (globalMixins.length) {\n      globalMixins.forEach(\n        (m) => mergeOptions(resolved, m, optionMergeStrategies, true)\n      );\n    }\n    mergeOptions(resolved, base, optionMergeStrategies);\n  }\n  if (shared.isObject(base)) {\n    cache.set(base, resolved);\n  }\n  return resolved;\n}\nfunction mergeOptions(to, from, strats, asMixin = false) {\n  const { mixins, extends: extendsOptions } = from;\n  if (extendsOptions) {\n    mergeOptions(to, extendsOptions, strats, true);\n  }\n  if (mixins) {\n    mixins.forEach(\n      (m) => mergeOptions(to, m, strats, true)\n    );\n  }\n  for (const key in from) {\n    if (asMixin && key === \"expose\") ; else {\n      const strat = internalOptionMergeStrats[key] || strats && strats[key];\n      to[key] = strat ? strat(to[key], from[key]) : from[key];\n    }\n  }\n  return to;\n}\nconst internalOptionMergeStrats = {\n  data: mergeDataFn,\n  props: mergeEmitsOrPropsOptions,\n  emits: mergeEmitsOrPropsOptions,\n  // objects\n  methods: mergeObjectOptions,\n  computed: mergeObjectOptions,\n  // lifecycle\n  beforeCreate: mergeAsArray,\n  created: mergeAsArray,\n  beforeMount: mergeAsArray,\n  mounted: mergeAsArray,\n  beforeUpdate: mergeAsArray,\n  updated: mergeAsArray,\n  beforeDestroy: mergeAsArray,\n  beforeUnmount: mergeAsArray,\n  destroyed: mergeAsArray,\n  unmounted: mergeAsArray,\n  activated: mergeAsArray,\n  deactivated: mergeAsArray,\n  errorCaptured: mergeAsArray,\n  serverPrefetch: mergeAsArray,\n  // assets\n  components: mergeObjectOptions,\n  directives: mergeObjectOptions,\n  // watch\n  watch: mergeWatchOptions,\n  // provide / inject\n  provide: mergeDataFn,\n  inject: mergeInject\n};\nfunction mergeDataFn(to, from) {\n  if (!from) {\n    return to;\n  }\n  if (!to) {\n    return from;\n  }\n  return function mergedDataFn() {\n    return (shared.extend)(\n      shared.isFunction(to) ? to.call(this, this) : to,\n      shared.isFunction(from) ? from.call(this, this) : from\n    );\n  };\n}\nfunction mergeInject(to, from) {\n  return mergeObjectOptions(normalizeInject(to), normalizeInject(from));\n}\nfunction normalizeInject(raw) {\n  if (shared.isArray(raw)) {\n    const res = {};\n    for (let i = 0; i < raw.length; i++) {\n      res[raw[i]] = raw[i];\n    }\n    return res;\n  }\n  return raw;\n}\nfunction mergeAsArray(to, from) {\n  return to ? [...new Set([].concat(to, from))] : from;\n}\nfunction mergeObjectOptions(to, from) {\n  return to ? shared.extend(/* @__PURE__ */ Object.create(null), to, from) : from;\n}\nfunction mergeEmitsOrPropsOptions(to, from) {\n  if (to) {\n    if (shared.isArray(to) && shared.isArray(from)) {\n      return [.../* @__PURE__ */ new Set([...to, ...from])];\n    }\n    return shared.extend(\n      /* @__PURE__ */ Object.create(null),\n      normalizePropsOrEmits(to),\n      normalizePropsOrEmits(from != null ? from : {})\n    );\n  } else {\n    return from;\n  }\n}\nfunction mergeWatchOptions(to, from) {\n  if (!to) return from;\n  if (!from) return to;\n  const merged = shared.extend(/* @__PURE__ */ Object.create(null), to);\n  for (const key in from) {\n    merged[key] = mergeAsArray(to[key], from[key]);\n  }\n  return merged;\n}\n\nfunction createAppContext() {\n  return {\n    app: null,\n    config: {\n      isNativeTag: shared.NO,\n      performance: false,\n      globalProperties: {},\n      optionMergeStrategies: {},\n      errorHandler: void 0,\n      warnHandler: void 0,\n      compilerOptions: {}\n    },\n    mixins: [],\n    components: {},\n    directives: {},\n    provides: /* @__PURE__ */ Object.create(null),\n    optionsCache: /* @__PURE__ */ new WeakMap(),\n    propsCache: /* @__PURE__ */ new WeakMap(),\n    emitsCache: /* @__PURE__ */ new WeakMap()\n  };\n}\nlet uid$1 = 0;\nfunction createAppAPI(render, hydrate) {\n  return function createApp(rootComponent, rootProps = null) {\n    if (!shared.isFunction(rootComponent)) {\n      rootComponent = shared.extend({}, rootComponent);\n    }\n    if (rootProps != null && !shared.isObject(rootProps)) {\n      rootProps = null;\n    }\n    const context = createAppContext();\n    const installedPlugins = /* @__PURE__ */ new WeakSet();\n    const pluginCleanupFns = [];\n    let isMounted = false;\n    const app = context.app = {\n      _uid: uid$1++,\n      _component: rootComponent,\n      _props: rootProps,\n      _container: null,\n      _context: context,\n      _instance: null,\n      version,\n      get config() {\n        return context.config;\n      },\n      set config(v) {\n      },\n      use(plugin, ...options) {\n        if (installedPlugins.has(plugin)) ; else if (plugin && shared.isFunction(plugin.install)) {\n          installedPlugins.add(plugin);\n          plugin.install(app, ...options);\n        } else if (shared.isFunction(plugin)) {\n          installedPlugins.add(plugin);\n          plugin(app, ...options);\n        } else ;\n        return app;\n      },\n      mixin(mixin) {\n        {\n          if (!context.mixins.includes(mixin)) {\n            context.mixins.push(mixin);\n          }\n        }\n        return app;\n      },\n      component(name, component) {\n        if (!component) {\n          return context.components[name];\n        }\n        context.components[name] = component;\n        return app;\n      },\n      directive(name, directive) {\n        if (!directive) {\n          return context.directives[name];\n        }\n        context.directives[name] = directive;\n        return app;\n      },\n      mount(rootContainer, isHydrate, namespace) {\n        if (!isMounted) {\n          const vnode = app._ceVNode || createVNode(rootComponent, rootProps);\n          vnode.appContext = context;\n          if (namespace === true) {\n            namespace = \"svg\";\n          } else if (namespace === false) {\n            namespace = void 0;\n          }\n          if (isHydrate && hydrate) {\n            hydrate(vnode, rootContainer);\n          } else {\n            render(vnode, rootContainer, namespace);\n          }\n          isMounted = true;\n          app._container = rootContainer;\n          rootContainer.__vue_app__ = app;\n          return getComponentPublicInstance(vnode.component);\n        }\n      },\n      onUnmount(cleanupFn) {\n        pluginCleanupFns.push(cleanupFn);\n      },\n      unmount() {\n        if (isMounted) {\n          callWithAsyncErrorHandling(\n            pluginCleanupFns,\n            app._instance,\n            16\n          );\n          render(null, app._container);\n          delete app._container.__vue_app__;\n        }\n      },\n      provide(key, value) {\n        context.provides[key] = value;\n        return app;\n      },\n      runWithContext(fn) {\n        const lastApp = currentApp;\n        currentApp = app;\n        try {\n          return fn();\n        } finally {\n          currentApp = lastApp;\n        }\n      }\n    };\n    return app;\n  };\n}\nlet currentApp = null;\n\nfunction provide(key, value) {\n  if (!currentInstance) ; else {\n    let provides = currentInstance.provides;\n    const parentProvides = currentInstance.parent && currentInstance.parent.provides;\n    if (parentProvides === provides) {\n      provides = currentInstance.provides = Object.create(parentProvides);\n    }\n    provides[key] = value;\n  }\n}\nfunction inject(key, defaultValue, treatDefaultAsFactory = false) {\n  const instance = getCurrentInstance();\n  if (instance || currentApp) {\n    let provides = currentApp ? currentApp._context.provides : instance ? instance.parent == null || instance.ce ? instance.vnode.appContext && instance.vnode.appContext.provides : instance.parent.provides : void 0;\n    if (provides && key in provides) {\n      return provides[key];\n    } else if (arguments.length > 1) {\n      return treatDefaultAsFactory && shared.isFunction(defaultValue) ? defaultValue.call(instance && instance.proxy) : defaultValue;\n    } else ;\n  }\n}\nfunction hasInjectionContext() {\n  return !!(getCurrentInstance() || currentApp);\n}\n\nconst internalObjectProto = {};\nconst createInternalObject = () => Object.create(internalObjectProto);\nconst isInternalObject = (obj) => Object.getPrototypeOf(obj) === internalObjectProto;\n\nfunction initProps(instance, rawProps, isStateful, isSSR = false) {\n  const props = {};\n  const attrs = createInternalObject();\n  instance.propsDefaults = /* @__PURE__ */ Object.create(null);\n  setFullProps(instance, rawProps, props, attrs);\n  for (const key in instance.propsOptions[0]) {\n    if (!(key in props)) {\n      props[key] = void 0;\n    }\n  }\n  if (isStateful) {\n    instance.props = isSSR ? props : reactivity.shallowReactive(props);\n  } else {\n    if (!instance.type.props) {\n      instance.props = attrs;\n    } else {\n      instance.props = props;\n    }\n  }\n  instance.attrs = attrs;\n}\nfunction updateProps(instance, rawProps, rawPrevProps, optimized) {\n  const {\n    props,\n    attrs,\n    vnode: { patchFlag }\n  } = instance;\n  const rawCurrentProps = reactivity.toRaw(props);\n  const [options] = instance.propsOptions;\n  let hasAttrsChanged = false;\n  if (\n    // always force full diff in dev\n    // - #1942 if hmr is enabled with sfc component\n    // - vite#872 non-sfc component used by sfc component\n    (optimized || patchFlag > 0) && !(patchFlag & 16)\n  ) {\n    if (patchFlag & 8) {\n      const propsToUpdate = instance.vnode.dynamicProps;\n      for (let i = 0; i < propsToUpdate.length; i++) {\n        let key = propsToUpdate[i];\n        if (isEmitListener(instance.emitsOptions, key)) {\n          continue;\n        }\n        const value = rawProps[key];\n        if (options) {\n          if (shared.hasOwn(attrs, key)) {\n            if (value !== attrs[key]) {\n              attrs[key] = value;\n              hasAttrsChanged = true;\n            }\n          } else {\n            const camelizedKey = shared.camelize(key);\n            props[camelizedKey] = resolvePropValue(\n              options,\n              rawCurrentProps,\n              camelizedKey,\n              value,\n              instance,\n              false\n            );\n          }\n        } else {\n          if (value !== attrs[key]) {\n            attrs[key] = value;\n            hasAttrsChanged = true;\n          }\n        }\n      }\n    }\n  } else {\n    if (setFullProps(instance, rawProps, props, attrs)) {\n      hasAttrsChanged = true;\n    }\n    let kebabKey;\n    for (const key in rawCurrentProps) {\n      if (!rawProps || // for camelCase\n      !shared.hasOwn(rawProps, key) && // it's possible the original props was passed in as kebab-case\n      // and converted to camelCase (#955)\n      ((kebabKey = shared.hyphenate(key)) === key || !shared.hasOwn(rawProps, kebabKey))) {\n        if (options) {\n          if (rawPrevProps && // for camelCase\n          (rawPrevProps[key] !== void 0 || // for kebab-case\n          rawPrevProps[kebabKey] !== void 0)) {\n            props[key] = resolvePropValue(\n              options,\n              rawCurrentProps,\n              key,\n              void 0,\n              instance,\n              true\n            );\n          }\n        } else {\n          delete props[key];\n        }\n      }\n    }\n    if (attrs !== rawCurrentProps) {\n      for (const key in attrs) {\n        if (!rawProps || !shared.hasOwn(rawProps, key) && true) {\n          delete attrs[key];\n          hasAttrsChanged = true;\n        }\n      }\n    }\n  }\n  if (hasAttrsChanged) {\n    reactivity.trigger(instance.attrs, \"set\", \"\");\n  }\n}\nfunction setFullProps(instance, rawProps, props, attrs) {\n  const [options, needCastKeys] = instance.propsOptions;\n  let hasAttrsChanged = false;\n  let rawCastValues;\n  if (rawProps) {\n    for (let key in rawProps) {\n      if (shared.isReservedProp(key)) {\n        continue;\n      }\n      const value = rawProps[key];\n      let camelKey;\n      if (options && shared.hasOwn(options, camelKey = shared.camelize(key))) {\n        if (!needCastKeys || !needCastKeys.includes(camelKey)) {\n          props[camelKey] = value;\n        } else {\n          (rawCastValues || (rawCastValues = {}))[camelKey] = value;\n        }\n      } else if (!isEmitListener(instance.emitsOptions, key)) {\n        if (!(key in attrs) || value !== attrs[key]) {\n          attrs[key] = value;\n          hasAttrsChanged = true;\n        }\n      }\n    }\n  }\n  if (needCastKeys) {\n    const rawCurrentProps = reactivity.toRaw(props);\n    const castValues = rawCastValues || shared.EMPTY_OBJ;\n    for (let i = 0; i < needCastKeys.length; i++) {\n      const key = needCastKeys[i];\n      props[key] = resolvePropValue(\n        options,\n        rawCurrentProps,\n        key,\n        castValues[key],\n        instance,\n        !shared.hasOwn(castValues, key)\n      );\n    }\n  }\n  return hasAttrsChanged;\n}\nfunction resolvePropValue(options, props, key, value, instance, isAbsent) {\n  const opt = options[key];\n  if (opt != null) {\n    const hasDefault = shared.hasOwn(opt, \"default\");\n    if (hasDefault && value === void 0) {\n      const defaultValue = opt.default;\n      if (opt.type !== Function && !opt.skipFactory && shared.isFunction(defaultValue)) {\n        const { propsDefaults } = instance;\n        if (key in propsDefaults) {\n          value = propsDefaults[key];\n        } else {\n          const reset = setCurrentInstance(instance);\n          value = propsDefaults[key] = defaultValue.call(\n            null,\n            props\n          );\n          reset();\n        }\n      } else {\n        value = defaultValue;\n      }\n      if (instance.ce) {\n        instance.ce._setProp(key, value);\n      }\n    }\n    if (opt[0 /* shouldCast */]) {\n      if (isAbsent && !hasDefault) {\n        value = false;\n      } else if (opt[1 /* shouldCastTrue */] && (value === \"\" || value === shared.hyphenate(key))) {\n        value = true;\n      }\n    }\n  }\n  return value;\n}\nconst mixinPropsCache = /* @__PURE__ */ new WeakMap();\nfunction normalizePropsOptions(comp, appContext, asMixin = false) {\n  const cache = asMixin ? mixinPropsCache : appContext.propsCache;\n  const cached = cache.get(comp);\n  if (cached) {\n    return cached;\n  }\n  const raw = comp.props;\n  const normalized = {};\n  const needCastKeys = [];\n  let hasExtends = false;\n  if (!shared.isFunction(comp)) {\n    const extendProps = (raw2) => {\n      hasExtends = true;\n      const [props, keys] = normalizePropsOptions(raw2, appContext, true);\n      shared.extend(normalized, props);\n      if (keys) needCastKeys.push(...keys);\n    };\n    if (!asMixin && appContext.mixins.length) {\n      appContext.mixins.forEach(extendProps);\n    }\n    if (comp.extends) {\n      extendProps(comp.extends);\n    }\n    if (comp.mixins) {\n      comp.mixins.forEach(extendProps);\n    }\n  }\n  if (!raw && !hasExtends) {\n    if (shared.isObject(comp)) {\n      cache.set(comp, shared.EMPTY_ARR);\n    }\n    return shared.EMPTY_ARR;\n  }\n  if (shared.isArray(raw)) {\n    for (let i = 0; i < raw.length; i++) {\n      const normalizedKey = shared.camelize(raw[i]);\n      if (validatePropName(normalizedKey)) {\n        normalized[normalizedKey] = shared.EMPTY_OBJ;\n      }\n    }\n  } else if (raw) {\n    for (const key in raw) {\n      const normalizedKey = shared.camelize(key);\n      if (validatePropName(normalizedKey)) {\n        const opt = raw[key];\n        const prop = normalized[normalizedKey] = shared.isArray(opt) || shared.isFunction(opt) ? { type: opt } : shared.extend({}, opt);\n        const propType = prop.type;\n        let shouldCast = false;\n        let shouldCastTrue = true;\n        if (shared.isArray(propType)) {\n          for (let index = 0; index < propType.length; ++index) {\n            const type = propType[index];\n            const typeName = shared.isFunction(type) && type.name;\n            if (typeName === \"Boolean\") {\n              shouldCast = true;\n              break;\n            } else if (typeName === \"String\") {\n              shouldCastTrue = false;\n            }\n          }\n        } else {\n          shouldCast = shared.isFunction(propType) && propType.name === \"Boolean\";\n        }\n        prop[0 /* shouldCast */] = shouldCast;\n        prop[1 /* shouldCastTrue */] = shouldCastTrue;\n        if (shouldCast || shared.hasOwn(prop, \"default\")) {\n          needCastKeys.push(normalizedKey);\n        }\n      }\n    }\n  }\n  const res = [normalized, needCastKeys];\n  if (shared.isObject(comp)) {\n    cache.set(comp, res);\n  }\n  return res;\n}\nfunction validatePropName(key) {\n  if (key[0] !== \"$\" && !shared.isReservedProp(key)) {\n    return true;\n  }\n  return false;\n}\n\nconst isInternalKey = (key) => key === \"_\" || key === \"__\" || key === \"_ctx\" || key === \"$stable\";\nconst normalizeSlotValue = (value) => shared.isArray(value) ? value.map(normalizeVNode) : [normalizeVNode(value)];\nconst normalizeSlot = (key, rawSlot, ctx) => {\n  if (rawSlot._n) {\n    return rawSlot;\n  }\n  const normalized = withCtx((...args) => {\n    if (false) ;\n    return normalizeSlotValue(rawSlot(...args));\n  }, ctx);\n  normalized._c = false;\n  return normalized;\n};\nconst normalizeObjectSlots = (rawSlots, slots, instance) => {\n  const ctx = rawSlots._ctx;\n  for (const key in rawSlots) {\n    if (isInternalKey(key)) continue;\n    const value = rawSlots[key];\n    if (shared.isFunction(value)) {\n      slots[key] = normalizeSlot(key, value, ctx);\n    } else if (value != null) {\n      const normalized = normalizeSlotValue(value);\n      slots[key] = () => normalized;\n    }\n  }\n};\nconst normalizeVNodeSlots = (instance, children) => {\n  const normalized = normalizeSlotValue(children);\n  instance.slots.default = () => normalized;\n};\nconst assignSlots = (slots, children, optimized) => {\n  for (const key in children) {\n    if (optimized || !isInternalKey(key)) {\n      slots[key] = children[key];\n    }\n  }\n};\nconst initSlots = (instance, children, optimized) => {\n  const slots = instance.slots = createInternalObject();\n  if (instance.vnode.shapeFlag & 32) {\n    const cacheIndexes = children.__;\n    if (cacheIndexes) shared.def(slots, \"__\", cacheIndexes, true);\n    const type = children._;\n    if (type) {\n      assignSlots(slots, children, optimized);\n      if (optimized) {\n        shared.def(slots, \"_\", type, true);\n      }\n    } else {\n      normalizeObjectSlots(children, slots);\n    }\n  } else if (children) {\n    normalizeVNodeSlots(instance, children);\n  }\n};\nconst updateSlots = (instance, children, optimized) => {\n  const { vnode, slots } = instance;\n  let needDeletionCheck = true;\n  let deletionComparisonTarget = shared.EMPTY_OBJ;\n  if (vnode.shapeFlag & 32) {\n    const type = children._;\n    if (type) {\n      if (optimized && type === 1) {\n        needDeletionCheck = false;\n      } else {\n        assignSlots(slots, children, optimized);\n      }\n    } else {\n      needDeletionCheck = !children.$stable;\n      normalizeObjectSlots(children, slots);\n    }\n    deletionComparisonTarget = children;\n  } else if (children) {\n    normalizeVNodeSlots(instance, children);\n    deletionComparisonTarget = { default: 1 };\n  }\n  if (needDeletionCheck) {\n    for (const key in slots) {\n      if (!isInternalKey(key) && deletionComparisonTarget[key] == null) {\n        delete slots[key];\n      }\n    }\n  }\n};\n\nconst queuePostRenderEffect = queueEffectWithSuspense ;\nfunction createRenderer(options) {\n  return baseCreateRenderer(options);\n}\nfunction createHydrationRenderer(options) {\n  return baseCreateRenderer(options, createHydrationFunctions);\n}\nfunction baseCreateRenderer(options, createHydrationFns) {\n  const target = shared.getGlobalThis();\n  target.__VUE__ = true;\n  const {\n    insert: hostInsert,\n    remove: hostRemove,\n    patchProp: hostPatchProp,\n    createElement: hostCreateElement,\n    createText: hostCreateText,\n    createComment: hostCreateComment,\n    setText: hostSetText,\n    setElementText: hostSetElementText,\n    parentNode: hostParentNode,\n    nextSibling: hostNextSibling,\n    setScopeId: hostSetScopeId = shared.NOOP,\n    insertStaticContent: hostInsertStaticContent\n  } = options;\n  const patch = (n1, n2, container, anchor = null, parentComponent = null, parentSuspense = null, namespace = void 0, slotScopeIds = null, optimized = !!n2.dynamicChildren) => {\n    if (n1 === n2) {\n      return;\n    }\n    if (n1 && !isSameVNodeType(n1, n2)) {\n      anchor = getNextHostNode(n1);\n      unmount(n1, parentComponent, parentSuspense, true);\n      n1 = null;\n    }\n    if (n2.patchFlag === -2) {\n      optimized = false;\n      n2.dynamicChildren = null;\n    }\n    const { type, ref, shapeFlag } = n2;\n    switch (type) {\n      case Text:\n        processText(n1, n2, container, anchor);\n        break;\n      case Comment:\n        processCommentNode(n1, n2, container, anchor);\n        break;\n      case Static:\n        if (n1 == null) {\n          mountStaticNode(n2, container, anchor, namespace);\n        }\n        break;\n      case Fragment:\n        processFragment(\n          n1,\n          n2,\n          container,\n          anchor,\n          parentComponent,\n          parentSuspense,\n          namespace,\n          slotScopeIds,\n          optimized\n        );\n        break;\n      default:\n        if (shapeFlag & 1) {\n          processElement(\n            n1,\n            n2,\n            container,\n            anchor,\n            parentComponent,\n            parentSuspense,\n            namespace,\n            slotScopeIds,\n            optimized\n          );\n        } else if (shapeFlag & 6) {\n          processComponent(\n            n1,\n            n2,\n            container,\n            anchor,\n            parentComponent,\n            parentSuspense,\n            namespace,\n            slotScopeIds,\n            optimized\n          );\n        } else if (shapeFlag & 64) {\n          type.process(\n            n1,\n            n2,\n            container,\n            anchor,\n            parentComponent,\n            parentSuspense,\n            namespace,\n            slotScopeIds,\n            optimized,\n            internals\n          );\n        } else if (shapeFlag & 128) {\n          type.process(\n            n1,\n            n2,\n            container,\n            anchor,\n            parentComponent,\n            parentSuspense,\n            namespace,\n            slotScopeIds,\n            optimized,\n            internals\n          );\n        } else ;\n    }\n    if (ref != null && parentComponent) {\n      setRef(ref, n1 && n1.ref, parentSuspense, n2 || n1, !n2);\n    } else if (ref == null && n1 && n1.ref != null) {\n      setRef(n1.ref, null, parentSuspense, n1, true);\n    }\n  };\n  const processText = (n1, n2, container, anchor) => {\n    if (n1 == null) {\n      hostInsert(\n        n2.el = hostCreateText(n2.children),\n        container,\n        anchor\n      );\n    } else {\n      const el = n2.el = n1.el;\n      if (n2.children !== n1.children) {\n        hostSetText(el, n2.children);\n      }\n    }\n  };\n  const processCommentNode = (n1, n2, container, anchor) => {\n    if (n1 == null) {\n      hostInsert(\n        n2.el = hostCreateComment(n2.children || \"\"),\n        container,\n        anchor\n      );\n    } else {\n      n2.el = n1.el;\n    }\n  };\n  const mountStaticNode = (n2, container, anchor, namespace) => {\n    [n2.el, n2.anchor] = hostInsertStaticContent(\n      n2.children,\n      container,\n      anchor,\n      namespace,\n      n2.el,\n      n2.anchor\n    );\n  };\n  const moveStaticNode = ({ el, anchor }, container, nextSibling) => {\n    let next;\n    while (el && el !== anchor) {\n      next = hostNextSibling(el);\n      hostInsert(el, container, nextSibling);\n      el = next;\n    }\n    hostInsert(anchor, container, nextSibling);\n  };\n  const removeStaticNode = ({ el, anchor }) => {\n    let next;\n    while (el && el !== anchor) {\n      next = hostNextSibling(el);\n      hostRemove(el);\n      el = next;\n    }\n    hostRemove(anchor);\n  };\n  const processElement = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n    if (n2.type === \"svg\") {\n      namespace = \"svg\";\n    } else if (n2.type === \"math\") {\n      namespace = \"mathml\";\n    }\n    if (n1 == null) {\n      mountElement(\n        n2,\n        container,\n        anchor,\n        parentComponent,\n        parentSuspense,\n        namespace,\n        slotScopeIds,\n        optimized\n      );\n    } else {\n      patchElement(\n        n1,\n        n2,\n        parentComponent,\n        parentSuspense,\n        namespace,\n        slotScopeIds,\n        optimized\n      );\n    }\n  };\n  const mountElement = (vnode, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n    let el;\n    let vnodeHook;\n    const { props, shapeFlag, transition, dirs } = vnode;\n    el = vnode.el = hostCreateElement(\n      vnode.type,\n      namespace,\n      props && props.is,\n      props\n    );\n    if (shapeFlag & 8) {\n      hostSetElementText(el, vnode.children);\n    } else if (shapeFlag & 16) {\n      mountChildren(\n        vnode.children,\n        el,\n        null,\n        parentComponent,\n        parentSuspense,\n        resolveChildrenNamespace(vnode, namespace),\n        slotScopeIds,\n        optimized\n      );\n    }\n    if (dirs) {\n      invokeDirectiveHook(vnode, null, parentComponent, \"created\");\n    }\n    setScopeId(el, vnode, vnode.scopeId, slotScopeIds, parentComponent);\n    if (props) {\n      for (const key in props) {\n        if (key !== \"value\" && !shared.isReservedProp(key)) {\n          hostPatchProp(el, key, null, props[key], namespace, parentComponent);\n        }\n      }\n      if (\"value\" in props) {\n        hostPatchProp(el, \"value\", null, props.value, namespace);\n      }\n      if (vnodeHook = props.onVnodeBeforeMount) {\n        invokeVNodeHook(vnodeHook, parentComponent, vnode);\n      }\n    }\n    if (dirs) {\n      invokeDirectiveHook(vnode, null, parentComponent, \"beforeMount\");\n    }\n    const needCallTransitionHooks = needTransition(parentSuspense, transition);\n    if (needCallTransitionHooks) {\n      transition.beforeEnter(el);\n    }\n    hostInsert(el, container, anchor);\n    if ((vnodeHook = props && props.onVnodeMounted) || needCallTransitionHooks || dirs) {\n      queuePostRenderEffect(() => {\n        vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);\n        needCallTransitionHooks && transition.enter(el);\n        dirs && invokeDirectiveHook(vnode, null, parentComponent, \"mounted\");\n      }, parentSuspense);\n    }\n  };\n  const setScopeId = (el, vnode, scopeId, slotScopeIds, parentComponent) => {\n    if (scopeId) {\n      hostSetScopeId(el, scopeId);\n    }\n    if (slotScopeIds) {\n      for (let i = 0; i < slotScopeIds.length; i++) {\n        hostSetScopeId(el, slotScopeIds[i]);\n      }\n    }\n    if (parentComponent) {\n      let subTree = parentComponent.subTree;\n      if (vnode === subTree || isSuspense(subTree.type) && (subTree.ssContent === vnode || subTree.ssFallback === vnode)) {\n        const parentVNode = parentComponent.vnode;\n        setScopeId(\n          el,\n          parentVNode,\n          parentVNode.scopeId,\n          parentVNode.slotScopeIds,\n          parentComponent.parent\n        );\n      }\n    }\n  };\n  const mountChildren = (children, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, start = 0) => {\n    for (let i = start; i < children.length; i++) {\n      const child = children[i] = optimized ? cloneIfMounted(children[i]) : normalizeVNode(children[i]);\n      patch(\n        null,\n        child,\n        container,\n        anchor,\n        parentComponent,\n        parentSuspense,\n        namespace,\n        slotScopeIds,\n        optimized\n      );\n    }\n  };\n  const patchElement = (n1, n2, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n    const el = n2.el = n1.el;\n    let { patchFlag, dynamicChildren, dirs } = n2;\n    patchFlag |= n1.patchFlag & 16;\n    const oldProps = n1.props || shared.EMPTY_OBJ;\n    const newProps = n2.props || shared.EMPTY_OBJ;\n    let vnodeHook;\n    parentComponent && toggleRecurse(parentComponent, false);\n    if (vnodeHook = newProps.onVnodeBeforeUpdate) {\n      invokeVNodeHook(vnodeHook, parentComponent, n2, n1);\n    }\n    if (dirs) {\n      invokeDirectiveHook(n2, n1, parentComponent, \"beforeUpdate\");\n    }\n    parentComponent && toggleRecurse(parentComponent, true);\n    if (oldProps.innerHTML && newProps.innerHTML == null || oldProps.textContent && newProps.textContent == null) {\n      hostSetElementText(el, \"\");\n    }\n    if (dynamicChildren) {\n      patchBlockChildren(\n        n1.dynamicChildren,\n        dynamicChildren,\n        el,\n        parentComponent,\n        parentSuspense,\n        resolveChildrenNamespace(n2, namespace),\n        slotScopeIds\n      );\n    } else if (!optimized) {\n      patchChildren(\n        n1,\n        n2,\n        el,\n        null,\n        parentComponent,\n        parentSuspense,\n        resolveChildrenNamespace(n2, namespace),\n        slotScopeIds,\n        false\n      );\n    }\n    if (patchFlag > 0) {\n      if (patchFlag & 16) {\n        patchProps(el, oldProps, newProps, parentComponent, namespace);\n      } else {\n        if (patchFlag & 2) {\n          if (oldProps.class !== newProps.class) {\n            hostPatchProp(el, \"class\", null, newProps.class, namespace);\n          }\n        }\n        if (patchFlag & 4) {\n          hostPatchProp(el, \"style\", oldProps.style, newProps.style, namespace);\n        }\n        if (patchFlag & 8) {\n          const propsToUpdate = n2.dynamicProps;\n          for (let i = 0; i < propsToUpdate.length; i++) {\n            const key = propsToUpdate[i];\n            const prev = oldProps[key];\n            const next = newProps[key];\n            if (next !== prev || key === \"value\") {\n              hostPatchProp(el, key, prev, next, namespace, parentComponent);\n            }\n          }\n        }\n      }\n      if (patchFlag & 1) {\n        if (n1.children !== n2.children) {\n          hostSetElementText(el, n2.children);\n        }\n      }\n    } else if (!optimized && dynamicChildren == null) {\n      patchProps(el, oldProps, newProps, parentComponent, namespace);\n    }\n    if ((vnodeHook = newProps.onVnodeUpdated) || dirs) {\n      queuePostRenderEffect(() => {\n        vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, n2, n1);\n        dirs && invokeDirectiveHook(n2, n1, parentComponent, \"updated\");\n      }, parentSuspense);\n    }\n  };\n  const patchBlockChildren = (oldChildren, newChildren, fallbackContainer, parentComponent, parentSuspense, namespace, slotScopeIds) => {\n    for (let i = 0; i < newChildren.length; i++) {\n      const oldVNode = oldChildren[i];\n      const newVNode = newChildren[i];\n      const container = (\n        // oldVNode may be an errored async setup() component inside Suspense\n        // which will not have a mounted element\n        oldVNode.el && // - In the case of a Fragment, we need to provide the actual parent\n        // of the Fragment itself so it can move its children.\n        (oldVNode.type === Fragment || // - In the case of different nodes, there is going to be a replacement\n        // which also requires the correct parent container\n        !isSameVNodeType(oldVNode, newVNode) || // - In the case of a component, it could contain anything.\n        oldVNode.shapeFlag & (6 | 64 | 128)) ? hostParentNode(oldVNode.el) : (\n          // In other cases, the parent container is not actually used so we\n          // just pass the block element here to avoid a DOM parentNode call.\n          fallbackContainer\n        )\n      );\n      patch(\n        oldVNode,\n        newVNode,\n        container,\n        null,\n        parentComponent,\n        parentSuspense,\n        namespace,\n        slotScopeIds,\n        true\n      );\n    }\n  };\n  const patchProps = (el, oldProps, newProps, parentComponent, namespace) => {\n    if (oldProps !== newProps) {\n      if (oldProps !== shared.EMPTY_OBJ) {\n        for (const key in oldProps) {\n          if (!shared.isReservedProp(key) && !(key in newProps)) {\n            hostPatchProp(\n              el,\n              key,\n              oldProps[key],\n              null,\n              namespace,\n              parentComponent\n            );\n          }\n        }\n      }\n      for (const key in newProps) {\n        if (shared.isReservedProp(key)) continue;\n        const next = newProps[key];\n        const prev = oldProps[key];\n        if (next !== prev && key !== \"value\") {\n          hostPatchProp(el, key, prev, next, namespace, parentComponent);\n        }\n      }\n      if (\"value\" in newProps) {\n        hostPatchProp(el, \"value\", oldProps.value, newProps.value, namespace);\n      }\n    }\n  };\n  const processFragment = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n    const fragmentStartAnchor = n2.el = n1 ? n1.el : hostCreateText(\"\");\n    const fragmentEndAnchor = n2.anchor = n1 ? n1.anchor : hostCreateText(\"\");\n    let { patchFlag, dynamicChildren, slotScopeIds: fragmentSlotScopeIds } = n2;\n    if (fragmentSlotScopeIds) {\n      slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds;\n    }\n    if (n1 == null) {\n      hostInsert(fragmentStartAnchor, container, anchor);\n      hostInsert(fragmentEndAnchor, container, anchor);\n      mountChildren(\n        // #10007\n        // such fragment like `<></>` will be compiled into\n        // a fragment which doesn't have a children.\n        // In this case fallback to an empty array\n        n2.children || [],\n        container,\n        fragmentEndAnchor,\n        parentComponent,\n        parentSuspense,\n        namespace,\n        slotScopeIds,\n        optimized\n      );\n    } else {\n      if (patchFlag > 0 && patchFlag & 64 && dynamicChildren && // #2715 the previous fragment could've been a BAILed one as a result\n      // of renderSlot() with no valid children\n      n1.dynamicChildren) {\n        patchBlockChildren(\n          n1.dynamicChildren,\n          dynamicChildren,\n          container,\n          parentComponent,\n          parentSuspense,\n          namespace,\n          slotScopeIds\n        );\n        if (\n          // #2080 if the stable fragment has a key, it's a <template v-for> that may\n          //  get moved around. Make sure all root level vnodes inherit el.\n          // #2134 or if it's a component root, it may also get moved around\n          // as the component is being moved.\n          n2.key != null || parentComponent && n2 === parentComponent.subTree\n        ) {\n          traverseStaticChildren(\n            n1,\n            n2,\n            true\n            /* shallow */\n          );\n        }\n      } else {\n        patchChildren(\n          n1,\n          n2,\n          container,\n          fragmentEndAnchor,\n          parentComponent,\n          parentSuspense,\n          namespace,\n          slotScopeIds,\n          optimized\n        );\n      }\n    }\n  };\n  const processComponent = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n    n2.slotScopeIds = slotScopeIds;\n    if (n1 == null) {\n      if (n2.shapeFlag & 512) {\n        parentComponent.ctx.activate(\n          n2,\n          container,\n          anchor,\n          namespace,\n          optimized\n        );\n      } else {\n        mountComponent(\n          n2,\n          container,\n          anchor,\n          parentComponent,\n          parentSuspense,\n          namespace,\n          optimized\n        );\n      }\n    } else {\n      updateComponent(n1, n2, optimized);\n    }\n  };\n  const mountComponent = (initialVNode, container, anchor, parentComponent, parentSuspense, namespace, optimized) => {\n    const instance = (initialVNode.component = createComponentInstance(\n      initialVNode,\n      parentComponent,\n      parentSuspense\n    ));\n    if (isKeepAlive(initialVNode)) {\n      instance.ctx.renderer = internals;\n    }\n    {\n      setupComponent(instance, false, optimized);\n    }\n    if (instance.asyncDep) {\n      parentSuspense && parentSuspense.registerDep(instance, setupRenderEffect, optimized);\n      if (!initialVNode.el) {\n        const placeholder = instance.subTree = createVNode(Comment);\n        processCommentNode(null, placeholder, container, anchor);\n        initialVNode.placeholder = placeholder.el;\n      }\n    } else {\n      setupRenderEffect(\n        instance,\n        initialVNode,\n        container,\n        anchor,\n        parentSuspense,\n        namespace,\n        optimized\n      );\n    }\n  };\n  const updateComponent = (n1, n2, optimized) => {\n    const instance = n2.component = n1.component;\n    if (shouldUpdateComponent(n1, n2, optimized)) {\n      if (instance.asyncDep && !instance.asyncResolved) {\n        updateComponentPreRender(instance, n2, optimized);\n        return;\n      } else {\n        instance.next = n2;\n        instance.update();\n      }\n    } else {\n      n2.el = n1.el;\n      instance.vnode = n2;\n    }\n  };\n  const setupRenderEffect = (instance, initialVNode, container, anchor, parentSuspense, namespace, optimized) => {\n    const componentUpdateFn = () => {\n      if (!instance.isMounted) {\n        let vnodeHook;\n        const { el, props } = initialVNode;\n        const { bm, m, parent, root, type } = instance;\n        const isAsyncWrapperVNode = isAsyncWrapper(initialVNode);\n        toggleRecurse(instance, false);\n        if (bm) {\n          shared.invokeArrayFns(bm);\n        }\n        if (!isAsyncWrapperVNode && (vnodeHook = props && props.onVnodeBeforeMount)) {\n          invokeVNodeHook(vnodeHook, parent, initialVNode);\n        }\n        toggleRecurse(instance, true);\n        if (el && hydrateNode) {\n          const hydrateSubTree = () => {\n            instance.subTree = renderComponentRoot(instance);\n            hydrateNode(\n              el,\n              instance.subTree,\n              instance,\n              parentSuspense,\n              null\n            );\n          };\n          if (isAsyncWrapperVNode && type.__asyncHydrate) {\n            type.__asyncHydrate(\n              el,\n              instance,\n              hydrateSubTree\n            );\n          } else {\n            hydrateSubTree();\n          }\n        } else {\n          if (root.ce && // @ts-expect-error _def is private\n          root.ce._def.shadowRoot !== false) {\n            root.ce._injectChildStyle(type);\n          }\n          const subTree = instance.subTree = renderComponentRoot(instance);\n          patch(\n            null,\n            subTree,\n            container,\n            anchor,\n            instance,\n            parentSuspense,\n            namespace\n          );\n          initialVNode.el = subTree.el;\n        }\n        if (m) {\n          queuePostRenderEffect(m, parentSuspense);\n        }\n        if (!isAsyncWrapperVNode && (vnodeHook = props && props.onVnodeMounted)) {\n          const scopedInitialVNode = initialVNode;\n          queuePostRenderEffect(\n            () => invokeVNodeHook(vnodeHook, parent, scopedInitialVNode),\n            parentSuspense\n          );\n        }\n        if (initialVNode.shapeFlag & 256 || parent && isAsyncWrapper(parent.vnode) && parent.vnode.shapeFlag & 256) {\n          instance.a && queuePostRenderEffect(instance.a, parentSuspense);\n        }\n        instance.isMounted = true;\n        initialVNode = container = anchor = null;\n      } else {\n        let { next, bu, u, parent, vnode } = instance;\n        {\n          const nonHydratedAsyncRoot = locateNonHydratedAsyncRoot(instance);\n          if (nonHydratedAsyncRoot) {\n            if (next) {\n              next.el = vnode.el;\n              updateComponentPreRender(instance, next, optimized);\n            }\n            nonHydratedAsyncRoot.asyncDep.then(() => {\n              if (!instance.isUnmounted) {\n                componentUpdateFn();\n              }\n            });\n            return;\n          }\n        }\n        let originNext = next;\n        let vnodeHook;\n        toggleRecurse(instance, false);\n        if (next) {\n          next.el = vnode.el;\n          updateComponentPreRender(instance, next, optimized);\n        } else {\n          next = vnode;\n        }\n        if (bu) {\n          shared.invokeArrayFns(bu);\n        }\n        if (vnodeHook = next.props && next.props.onVnodeBeforeUpdate) {\n          invokeVNodeHook(vnodeHook, parent, next, vnode);\n        }\n        toggleRecurse(instance, true);\n        const nextTree = renderComponentRoot(instance);\n        const prevTree = instance.subTree;\n        instance.subTree = nextTree;\n        patch(\n          prevTree,\n          nextTree,\n          // parent may have changed if it's in a teleport\n          hostParentNode(prevTree.el),\n          // anchor may have changed if it's in a fragment\n          getNextHostNode(prevTree),\n          instance,\n          parentSuspense,\n          namespace\n        );\n        next.el = nextTree.el;\n        if (originNext === null) {\n          updateHOCHostEl(instance, nextTree.el);\n        }\n        if (u) {\n          queuePostRenderEffect(u, parentSuspense);\n        }\n        if (vnodeHook = next.props && next.props.onVnodeUpdated) {\n          queuePostRenderEffect(\n            () => invokeVNodeHook(vnodeHook, parent, next, vnode),\n            parentSuspense\n          );\n        }\n      }\n    };\n    instance.scope.on();\n    const effect = instance.effect = new reactivity.ReactiveEffect(componentUpdateFn);\n    instance.scope.off();\n    const update = instance.update = effect.run.bind(effect);\n    const job = instance.job = effect.runIfDirty.bind(effect);\n    job.i = instance;\n    job.id = instance.uid;\n    effect.scheduler = () => queueJob(job);\n    toggleRecurse(instance, true);\n    update();\n  };\n  const updateComponentPreRender = (instance, nextVNode, optimized) => {\n    nextVNode.component = instance;\n    const prevProps = instance.vnode.props;\n    instance.vnode = nextVNode;\n    instance.next = null;\n    updateProps(instance, nextVNode.props, prevProps, optimized);\n    updateSlots(instance, nextVNode.children, optimized);\n    reactivity.pauseTracking();\n    flushPreFlushCbs(instance);\n    reactivity.resetTracking();\n  };\n  const patchChildren = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized = false) => {\n    const c1 = n1 && n1.children;\n    const prevShapeFlag = n1 ? n1.shapeFlag : 0;\n    const c2 = n2.children;\n    const { patchFlag, shapeFlag } = n2;\n    if (patchFlag > 0) {\n      if (patchFlag & 128) {\n        patchKeyedChildren(\n          c1,\n          c2,\n          container,\n          anchor,\n          parentComponent,\n          parentSuspense,\n          namespace,\n          slotScopeIds,\n          optimized\n        );\n        return;\n      } else if (patchFlag & 256) {\n        patchUnkeyedChildren(\n          c1,\n          c2,\n          container,\n          anchor,\n          parentComponent,\n          parentSuspense,\n          namespace,\n          slotScopeIds,\n          optimized\n        );\n        return;\n      }\n    }\n    if (shapeFlag & 8) {\n      if (prevShapeFlag & 16) {\n        unmountChildren(c1, parentComponent, parentSuspense);\n      }\n      if (c2 !== c1) {\n        hostSetElementText(container, c2);\n      }\n    } else {\n      if (prevShapeFlag & 16) {\n        if (shapeFlag & 16) {\n          patchKeyedChildren(\n            c1,\n            c2,\n            container,\n            anchor,\n            parentComponent,\n            parentSuspense,\n            namespace,\n            slotScopeIds,\n            optimized\n          );\n        } else {\n          unmountChildren(c1, parentComponent, parentSuspense, true);\n        }\n      } else {\n        if (prevShapeFlag & 8) {\n          hostSetElementText(container, \"\");\n        }\n        if (shapeFlag & 16) {\n          mountChildren(\n            c2,\n            container,\n            anchor,\n            parentComponent,\n            parentSuspense,\n            namespace,\n            slotScopeIds,\n            optimized\n          );\n        }\n      }\n    }\n  };\n  const patchUnkeyedChildren = (c1, c2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n    c1 = c1 || shared.EMPTY_ARR;\n    c2 = c2 || shared.EMPTY_ARR;\n    const oldLength = c1.length;\n    const newLength = c2.length;\n    const commonLength = Math.min(oldLength, newLength);\n    let i;\n    for (i = 0; i < commonLength; i++) {\n      const nextChild = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);\n      patch(\n        c1[i],\n        nextChild,\n        container,\n        null,\n        parentComponent,\n        parentSuspense,\n        namespace,\n        slotScopeIds,\n        optimized\n      );\n    }\n    if (oldLength > newLength) {\n      unmountChildren(\n        c1,\n        parentComponent,\n        parentSuspense,\n        true,\n        false,\n        commonLength\n      );\n    } else {\n      mountChildren(\n        c2,\n        container,\n        anchor,\n        parentComponent,\n        parentSuspense,\n        namespace,\n        slotScopeIds,\n        optimized,\n        commonLength\n      );\n    }\n  };\n  const patchKeyedChildren = (c1, c2, container, parentAnchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n    let i = 0;\n    const l2 = c2.length;\n    let e1 = c1.length - 1;\n    let e2 = l2 - 1;\n    while (i <= e1 && i <= e2) {\n      const n1 = c1[i];\n      const n2 = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);\n      if (isSameVNodeType(n1, n2)) {\n        patch(\n          n1,\n          n2,\n          container,\n          null,\n          parentComponent,\n          parentSuspense,\n          namespace,\n          slotScopeIds,\n          optimized\n        );\n      } else {\n        break;\n      }\n      i++;\n    }\n    while (i <= e1 && i <= e2) {\n      const n1 = c1[e1];\n      const n2 = c2[e2] = optimized ? cloneIfMounted(c2[e2]) : normalizeVNode(c2[e2]);\n      if (isSameVNodeType(n1, n2)) {\n        patch(\n          n1,\n          n2,\n          container,\n          null,\n          parentComponent,\n          parentSuspense,\n          namespace,\n          slotScopeIds,\n          optimized\n        );\n      } else {\n        break;\n      }\n      e1--;\n      e2--;\n    }\n    if (i > e1) {\n      if (i <= e2) {\n        const nextPos = e2 + 1;\n        const anchor = nextPos < l2 ? c2[nextPos].el : parentAnchor;\n        while (i <= e2) {\n          patch(\n            null,\n            c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]),\n            container,\n            anchor,\n            parentComponent,\n            parentSuspense,\n            namespace,\n            slotScopeIds,\n            optimized\n          );\n          i++;\n        }\n      }\n    } else if (i > e2) {\n      while (i <= e1) {\n        unmount(c1[i], parentComponent, parentSuspense, true);\n        i++;\n      }\n    } else {\n      const s1 = i;\n      const s2 = i;\n      const keyToNewIndexMap = /* @__PURE__ */ new Map();\n      for (i = s2; i <= e2; i++) {\n        const nextChild = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);\n        if (nextChild.key != null) {\n          keyToNewIndexMap.set(nextChild.key, i);\n        }\n      }\n      let j;\n      let patched = 0;\n      const toBePatched = e2 - s2 + 1;\n      let moved = false;\n      let maxNewIndexSoFar = 0;\n      const newIndexToOldIndexMap = new Array(toBePatched);\n      for (i = 0; i < toBePatched; i++) newIndexToOldIndexMap[i] = 0;\n      for (i = s1; i <= e1; i++) {\n        const prevChild = c1[i];\n        if (patched >= toBePatched) {\n          unmount(prevChild, parentComponent, parentSuspense, true);\n          continue;\n        }\n        let newIndex;\n        if (prevChild.key != null) {\n          newIndex = keyToNewIndexMap.get(prevChild.key);\n        } else {\n          for (j = s2; j <= e2; j++) {\n            if (newIndexToOldIndexMap[j - s2] === 0 && isSameVNodeType(prevChild, c2[j])) {\n              newIndex = j;\n              break;\n            }\n          }\n        }\n        if (newIndex === void 0) {\n          unmount(prevChild, parentComponent, parentSuspense, true);\n        } else {\n          newIndexToOldIndexMap[newIndex - s2] = i + 1;\n          if (newIndex >= maxNewIndexSoFar) {\n            maxNewIndexSoFar = newIndex;\n          } else {\n            moved = true;\n          }\n          patch(\n            prevChild,\n            c2[newIndex],\n            container,\n            null,\n            parentComponent,\n            parentSuspense,\n            namespace,\n            slotScopeIds,\n            optimized\n          );\n          patched++;\n        }\n      }\n      const increasingNewIndexSequence = moved ? getSequence(newIndexToOldIndexMap) : shared.EMPTY_ARR;\n      j = increasingNewIndexSequence.length - 1;\n      for (i = toBePatched - 1; i >= 0; i--) {\n        const nextIndex = s2 + i;\n        const nextChild = c2[nextIndex];\n        const anchorVNode = c2[nextIndex + 1];\n        const anchor = nextIndex + 1 < l2 ? (\n          // #13559, fallback to el placeholder for unresolved async component\n          anchorVNode.el || anchorVNode.placeholder\n        ) : parentAnchor;\n        if (newIndexToOldIndexMap[i] === 0) {\n          patch(\n            null,\n            nextChild,\n            container,\n            anchor,\n            parentComponent,\n            parentSuspense,\n            namespace,\n            slotScopeIds,\n            optimized\n          );\n        } else if (moved) {\n          if (j < 0 || i !== increasingNewIndexSequence[j]) {\n            move(nextChild, container, anchor, 2);\n          } else {\n            j--;\n          }\n        }\n      }\n    }\n  };\n  const move = (vnode, container, anchor, moveType, parentSuspense = null) => {\n    const { el, type, transition, children, shapeFlag } = vnode;\n    if (shapeFlag & 6) {\n      move(vnode.component.subTree, container, anchor, moveType);\n      return;\n    }\n    if (shapeFlag & 128) {\n      vnode.suspense.move(container, anchor, moveType);\n      return;\n    }\n    if (shapeFlag & 64) {\n      type.move(vnode, container, anchor, internals);\n      return;\n    }\n    if (type === Fragment) {\n      hostInsert(el, container, anchor);\n      for (let i = 0; i < children.length; i++) {\n        move(children[i], container, anchor, moveType);\n      }\n      hostInsert(vnode.anchor, container, anchor);\n      return;\n    }\n    if (type === Static) {\n      moveStaticNode(vnode, container, anchor);\n      return;\n    }\n    const needTransition2 = moveType !== 2 && shapeFlag & 1 && transition;\n    if (needTransition2) {\n      if (moveType === 0) {\n        transition.beforeEnter(el);\n        hostInsert(el, container, anchor);\n        queuePostRenderEffect(() => transition.enter(el), parentSuspense);\n      } else {\n        const { leave, delayLeave, afterLeave } = transition;\n        const remove2 = () => {\n          if (vnode.ctx.isUnmounted) {\n            hostRemove(el);\n          } else {\n            hostInsert(el, container, anchor);\n          }\n        };\n        const performLeave = () => {\n          leave(el, () => {\n            remove2();\n            afterLeave && afterLeave();\n          });\n        };\n        if (delayLeave) {\n          delayLeave(el, remove2, performLeave);\n        } else {\n          performLeave();\n        }\n      }\n    } else {\n      hostInsert(el, container, anchor);\n    }\n  };\n  const unmount = (vnode, parentComponent, parentSuspense, doRemove = false, optimized = false) => {\n    const {\n      type,\n      props,\n      ref,\n      children,\n      dynamicChildren,\n      shapeFlag,\n      patchFlag,\n      dirs,\n      cacheIndex\n    } = vnode;\n    if (patchFlag === -2) {\n      optimized = false;\n    }\n    if (ref != null) {\n      reactivity.pauseTracking();\n      setRef(ref, null, parentSuspense, vnode, true);\n      reactivity.resetTracking();\n    }\n    if (cacheIndex != null) {\n      parentComponent.renderCache[cacheIndex] = void 0;\n    }\n    if (shapeFlag & 256) {\n      parentComponent.ctx.deactivate(vnode);\n      return;\n    }\n    const shouldInvokeDirs = shapeFlag & 1 && dirs;\n    const shouldInvokeVnodeHook = !isAsyncWrapper(vnode);\n    let vnodeHook;\n    if (shouldInvokeVnodeHook && (vnodeHook = props && props.onVnodeBeforeUnmount)) {\n      invokeVNodeHook(vnodeHook, parentComponent, vnode);\n    }\n    if (shapeFlag & 6) {\n      unmountComponent(vnode.component, parentSuspense, doRemove);\n    } else {\n      if (shapeFlag & 128) {\n        vnode.suspense.unmount(parentSuspense, doRemove);\n        return;\n      }\n      if (shouldInvokeDirs) {\n        invokeDirectiveHook(vnode, null, parentComponent, \"beforeUnmount\");\n      }\n      if (shapeFlag & 64) {\n        vnode.type.remove(\n          vnode,\n          parentComponent,\n          parentSuspense,\n          internals,\n          doRemove\n        );\n      } else if (dynamicChildren && // #5154\n      // when v-once is used inside a block, setBlockTracking(-1) marks the\n      // parent block with hasOnce: true\n      // so that it doesn't take the fast path during unmount - otherwise\n      // components nested in v-once are never unmounted.\n      !dynamicChildren.hasOnce && // #1153: fast path should not be taken for non-stable (v-for) fragments\n      (type !== Fragment || patchFlag > 0 && patchFlag & 64)) {\n        unmountChildren(\n          dynamicChildren,\n          parentComponent,\n          parentSuspense,\n          false,\n          true\n        );\n      } else if (type === Fragment && patchFlag & (128 | 256) || !optimized && shapeFlag & 16) {\n        unmountChildren(children, parentComponent, parentSuspense);\n      }\n      if (doRemove) {\n        remove(vnode);\n      }\n    }\n    if (shouldInvokeVnodeHook && (vnodeHook = props && props.onVnodeUnmounted) || shouldInvokeDirs) {\n      queuePostRenderEffect(() => {\n        vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);\n        shouldInvokeDirs && invokeDirectiveHook(vnode, null, parentComponent, \"unmounted\");\n      }, parentSuspense);\n    }\n  };\n  const remove = (vnode) => {\n    const { type, el, anchor, transition } = vnode;\n    if (type === Fragment) {\n      {\n        removeFragment(el, anchor);\n      }\n      return;\n    }\n    if (type === Static) {\n      removeStaticNode(vnode);\n      return;\n    }\n    const performRemove = () => {\n      hostRemove(el);\n      if (transition && !transition.persisted && transition.afterLeave) {\n        transition.afterLeave();\n      }\n    };\n    if (vnode.shapeFlag & 1 && transition && !transition.persisted) {\n      const { leave, delayLeave } = transition;\n      const performLeave = () => leave(el, performRemove);\n      if (delayLeave) {\n        delayLeave(vnode.el, performRemove, performLeave);\n      } else {\n        performLeave();\n      }\n    } else {\n      performRemove();\n    }\n  };\n  const removeFragment = (cur, end) => {\n    let next;\n    while (cur !== end) {\n      next = hostNextSibling(cur);\n      hostRemove(cur);\n      cur = next;\n    }\n    hostRemove(end);\n  };\n  const unmountComponent = (instance, parentSuspense, doRemove) => {\n    const {\n      bum,\n      scope,\n      job,\n      subTree,\n      um,\n      m,\n      a,\n      parent,\n      slots: { __: slotCacheKeys }\n    } = instance;\n    invalidateMount(m);\n    invalidateMount(a);\n    if (bum) {\n      shared.invokeArrayFns(bum);\n    }\n    if (parent && shared.isArray(slotCacheKeys)) {\n      slotCacheKeys.forEach((v) => {\n        parent.renderCache[v] = void 0;\n      });\n    }\n    scope.stop();\n    if (job) {\n      job.flags |= 8;\n      unmount(subTree, instance, parentSuspense, doRemove);\n    }\n    if (um) {\n      queuePostRenderEffect(um, parentSuspense);\n    }\n    queuePostRenderEffect(() => {\n      instance.isUnmounted = true;\n    }, parentSuspense);\n    if (parentSuspense && parentSuspense.pendingBranch && !parentSuspense.isUnmounted && instance.asyncDep && !instance.asyncResolved && instance.suspenseId === parentSuspense.pendingId) {\n      parentSuspense.deps--;\n      if (parentSuspense.deps === 0) {\n        parentSuspense.resolve();\n      }\n    }\n  };\n  const unmountChildren = (children, parentComponent, parentSuspense, doRemove = false, optimized = false, start = 0) => {\n    for (let i = start; i < children.length; i++) {\n      unmount(children[i], parentComponent, parentSuspense, doRemove, optimized);\n    }\n  };\n  const getNextHostNode = (vnode) => {\n    if (vnode.shapeFlag & 6) {\n      return getNextHostNode(vnode.component.subTree);\n    }\n    if (vnode.shapeFlag & 128) {\n      return vnode.suspense.next();\n    }\n    const el = hostNextSibling(vnode.anchor || vnode.el);\n    const teleportEnd = el && el[TeleportEndKey];\n    return teleportEnd ? hostNextSibling(teleportEnd) : el;\n  };\n  let isFlushing = false;\n  const render = (vnode, container, namespace) => {\n    if (vnode == null) {\n      if (container._vnode) {\n        unmount(container._vnode, null, null, true);\n      }\n    } else {\n      patch(\n        container._vnode || null,\n        vnode,\n        container,\n        null,\n        null,\n        null,\n        namespace\n      );\n    }\n    container._vnode = vnode;\n    if (!isFlushing) {\n      isFlushing = true;\n      flushPreFlushCbs();\n      flushPostFlushCbs();\n      isFlushing = false;\n    }\n  };\n  const internals = {\n    p: patch,\n    um: unmount,\n    m: move,\n    r: remove,\n    mt: mountComponent,\n    mc: mountChildren,\n    pc: patchChildren,\n    pbc: patchBlockChildren,\n    n: getNextHostNode,\n    o: options\n  };\n  let hydrate;\n  let hydrateNode;\n  if (createHydrationFns) {\n    [hydrate, hydrateNode] = createHydrationFns(\n      internals\n    );\n  }\n  return {\n    render,\n    hydrate,\n    createApp: createAppAPI(render, hydrate)\n  };\n}\nfunction resolveChildrenNamespace({ type, props }, currentNamespace) {\n  return currentNamespace === \"svg\" && type === \"foreignObject\" || currentNamespace === \"mathml\" && type === \"annotation-xml\" && props && props.encoding && props.encoding.includes(\"html\") ? void 0 : currentNamespace;\n}\nfunction toggleRecurse({ effect, job }, allowed) {\n  if (allowed) {\n    effect.flags |= 32;\n    job.flags |= 4;\n  } else {\n    effect.flags &= -33;\n    job.flags &= -5;\n  }\n}\nfunction needTransition(parentSuspense, transition) {\n  return (!parentSuspense || parentSuspense && !parentSuspense.pendingBranch) && transition && !transition.persisted;\n}\nfunction traverseStaticChildren(n1, n2, shallow = false) {\n  const ch1 = n1.children;\n  const ch2 = n2.children;\n  if (shared.isArray(ch1) && shared.isArray(ch2)) {\n    for (let i = 0; i < ch1.length; i++) {\n      const c1 = ch1[i];\n      let c2 = ch2[i];\n      if (c2.shapeFlag & 1 && !c2.dynamicChildren) {\n        if (c2.patchFlag <= 0 || c2.patchFlag === 32) {\n          c2 = ch2[i] = cloneIfMounted(ch2[i]);\n          c2.el = c1.el;\n        }\n        if (!shallow && c2.patchFlag !== -2)\n          traverseStaticChildren(c1, c2);\n      }\n      if (c2.type === Text) {\n        c2.el = c1.el;\n      }\n      if (c2.type === Comment && !c2.el) {\n        c2.el = c1.el;\n      }\n    }\n  }\n}\nfunction getSequence(arr) {\n  const p = arr.slice();\n  const result = [0];\n  let i, j, u, v, c;\n  const len = arr.length;\n  for (i = 0; i < len; i++) {\n    const arrI = arr[i];\n    if (arrI !== 0) {\n      j = result[result.length - 1];\n      if (arr[j] < arrI) {\n        p[i] = j;\n        result.push(i);\n        continue;\n      }\n      u = 0;\n      v = result.length - 1;\n      while (u < v) {\n        c = u + v >> 1;\n        if (arr[result[c]] < arrI) {\n          u = c + 1;\n        } else {\n          v = c;\n        }\n      }\n      if (arrI < arr[result[u]]) {\n        if (u > 0) {\n          p[i] = result[u - 1];\n        }\n        result[u] = i;\n      }\n    }\n  }\n  u = result.length;\n  v = result[u - 1];\n  while (u-- > 0) {\n    result[u] = v;\n    v = p[v];\n  }\n  return result;\n}\nfunction locateNonHydratedAsyncRoot(instance) {\n  const subComponent = instance.subTree.component;\n  if (subComponent) {\n    if (subComponent.asyncDep && !subComponent.asyncResolved) {\n      return subComponent;\n    } else {\n      return locateNonHydratedAsyncRoot(subComponent);\n    }\n  }\n}\nfunction invalidateMount(hooks) {\n  if (hooks) {\n    for (let i = 0; i < hooks.length; i++)\n      hooks[i].flags |= 8;\n  }\n}\n\nconst ssrContextKey = Symbol.for(\"v-scx\");\nconst useSSRContext = () => {\n  {\n    const ctx = inject(ssrContextKey);\n    return ctx;\n  }\n};\n\nfunction watchEffect(effect, options) {\n  return doWatch(effect, null, options);\n}\nfunction watchPostEffect(effect, options) {\n  return doWatch(\n    effect,\n    null,\n    { flush: \"post\" }\n  );\n}\nfunction watchSyncEffect(effect, options) {\n  return doWatch(\n    effect,\n    null,\n    { flush: \"sync\" }\n  );\n}\nfunction watch(source, cb, options) {\n  return doWatch(source, cb, options);\n}\nfunction doWatch(source, cb, options = shared.EMPTY_OBJ) {\n  const { immediate, deep, flush, once } = options;\n  const baseWatchOptions = shared.extend({}, options);\n  const runsImmediately = cb && immediate || !cb && flush !== \"post\";\n  let ssrCleanup;\n  if (isInSSRComponentSetup) {\n    if (flush === \"sync\") {\n      const ctx = useSSRContext();\n      ssrCleanup = ctx.__watcherHandles || (ctx.__watcherHandles = []);\n    } else if (!runsImmediately) {\n      const watchStopHandle = () => {\n      };\n      watchStopHandle.stop = shared.NOOP;\n      watchStopHandle.resume = shared.NOOP;\n      watchStopHandle.pause = shared.NOOP;\n      return watchStopHandle;\n    }\n  }\n  const instance = currentInstance;\n  baseWatchOptions.call = (fn, type, args) => callWithAsyncErrorHandling(fn, instance, type, args);\n  let isPre = false;\n  if (flush === \"post\") {\n    baseWatchOptions.scheduler = (job) => {\n      queuePostRenderEffect(job, instance && instance.suspense);\n    };\n  } else if (flush !== \"sync\") {\n    isPre = true;\n    baseWatchOptions.scheduler = (job, isFirstRun) => {\n      if (isFirstRun) {\n        job();\n      } else {\n        queueJob(job);\n      }\n    };\n  }\n  baseWatchOptions.augmentJob = (job) => {\n    if (cb) {\n      job.flags |= 4;\n    }\n    if (isPre) {\n      job.flags |= 2;\n      if (instance) {\n        job.id = instance.uid;\n        job.i = instance;\n      }\n    }\n  };\n  const watchHandle = reactivity.watch(source, cb, baseWatchOptions);\n  if (isInSSRComponentSetup) {\n    if (ssrCleanup) {\n      ssrCleanup.push(watchHandle);\n    } else if (runsImmediately) {\n      watchHandle();\n    }\n  }\n  return watchHandle;\n}\nfunction instanceWatch(source, value, options) {\n  const publicThis = this.proxy;\n  const getter = shared.isString(source) ? source.includes(\".\") ? createPathGetter(publicThis, source) : () => publicThis[source] : source.bind(publicThis, publicThis);\n  let cb;\n  if (shared.isFunction(value)) {\n    cb = value;\n  } else {\n    cb = value.handler;\n    options = value;\n  }\n  const reset = setCurrentInstance(this);\n  const res = doWatch(getter, cb.bind(publicThis), options);\n  reset();\n  return res;\n}\nfunction createPathGetter(ctx, path) {\n  const segments = path.split(\".\");\n  return () => {\n    let cur = ctx;\n    for (let i = 0; i < segments.length && cur; i++) {\n      cur = cur[segments[i]];\n    }\n    return cur;\n  };\n}\n\nfunction useModel(props, name, options = shared.EMPTY_OBJ) {\n  const i = getCurrentInstance();\n  const camelizedName = shared.camelize(name);\n  const hyphenatedName = shared.hyphenate(name);\n  const modifiers = getModelModifiers(props, camelizedName);\n  const res = reactivity.customRef((track, trigger) => {\n    let localValue;\n    let prevSetValue = shared.EMPTY_OBJ;\n    let prevEmittedValue;\n    watchSyncEffect(() => {\n      const propValue = props[camelizedName];\n      if (shared.hasChanged(localValue, propValue)) {\n        localValue = propValue;\n        trigger();\n      }\n    });\n    return {\n      get() {\n        track();\n        return options.get ? options.get(localValue) : localValue;\n      },\n      set(value) {\n        const emittedValue = options.set ? options.set(value) : value;\n        if (!shared.hasChanged(emittedValue, localValue) && !(prevSetValue !== shared.EMPTY_OBJ && shared.hasChanged(value, prevSetValue))) {\n          return;\n        }\n        const rawProps = i.vnode.props;\n        if (!(rawProps && // check if parent has passed v-model\n        (name in rawProps || camelizedName in rawProps || hyphenatedName in rawProps) && (`onUpdate:${name}` in rawProps || `onUpdate:${camelizedName}` in rawProps || `onUpdate:${hyphenatedName}` in rawProps))) {\n          localValue = value;\n          trigger();\n        }\n        i.emit(`update:${name}`, emittedValue);\n        if (shared.hasChanged(value, emittedValue) && shared.hasChanged(value, prevSetValue) && !shared.hasChanged(emittedValue, prevEmittedValue)) {\n          trigger();\n        }\n        prevSetValue = value;\n        prevEmittedValue = emittedValue;\n      }\n    };\n  });\n  res[Symbol.iterator] = () => {\n    let i2 = 0;\n    return {\n      next() {\n        if (i2 < 2) {\n          return { value: i2++ ? modifiers || shared.EMPTY_OBJ : res, done: false };\n        } else {\n          return { done: true };\n        }\n      }\n    };\n  };\n  return res;\n}\nconst getModelModifiers = (props, modelName) => {\n  return modelName === \"modelValue\" || modelName === \"model-value\" ? props.modelModifiers : props[`${modelName}Modifiers`] || props[`${shared.camelize(modelName)}Modifiers`] || props[`${shared.hyphenate(modelName)}Modifiers`];\n};\n\nfunction emit(instance, event, ...rawArgs) {\n  if (instance.isUnmounted) return;\n  const props = instance.vnode.props || shared.EMPTY_OBJ;\n  let args = rawArgs;\n  const isModelListener = event.startsWith(\"update:\");\n  const modifiers = isModelListener && getModelModifiers(props, event.slice(7));\n  if (modifiers) {\n    if (modifiers.trim) {\n      args = rawArgs.map((a) => shared.isString(a) ? a.trim() : a);\n    }\n    if (modifiers.number) {\n      args = rawArgs.map(shared.looseToNumber);\n    }\n  }\n  let handlerName;\n  let handler = props[handlerName = shared.toHandlerKey(event)] || // also try camelCase event handler (#2249)\n  props[handlerName = shared.toHandlerKey(shared.camelize(event))];\n  if (!handler && isModelListener) {\n    handler = props[handlerName = shared.toHandlerKey(shared.hyphenate(event))];\n  }\n  if (handler) {\n    callWithAsyncErrorHandling(\n      handler,\n      instance,\n      6,\n      args\n    );\n  }\n  const onceHandler = props[handlerName + `Once`];\n  if (onceHandler) {\n    if (!instance.emitted) {\n      instance.emitted = {};\n    } else if (instance.emitted[handlerName]) {\n      return;\n    }\n    instance.emitted[handlerName] = true;\n    callWithAsyncErrorHandling(\n      onceHandler,\n      instance,\n      6,\n      args\n    );\n  }\n}\nfunction normalizeEmitsOptions(comp, appContext, asMixin = false) {\n  const cache = appContext.emitsCache;\n  const cached = cache.get(comp);\n  if (cached !== void 0) {\n    return cached;\n  }\n  const raw = comp.emits;\n  let normalized = {};\n  let hasExtends = false;\n  if (!shared.isFunction(comp)) {\n    const extendEmits = (raw2) => {\n      const normalizedFromExtend = normalizeEmitsOptions(raw2, appContext, true);\n      if (normalizedFromExtend) {\n        hasExtends = true;\n        shared.extend(normalized, normalizedFromExtend);\n      }\n    };\n    if (!asMixin && appContext.mixins.length) {\n      appContext.mixins.forEach(extendEmits);\n    }\n    if (comp.extends) {\n      extendEmits(comp.extends);\n    }\n    if (comp.mixins) {\n      comp.mixins.forEach(extendEmits);\n    }\n  }\n  if (!raw && !hasExtends) {\n    if (shared.isObject(comp)) {\n      cache.set(comp, null);\n    }\n    return null;\n  }\n  if (shared.isArray(raw)) {\n    raw.forEach((key) => normalized[key] = null);\n  } else {\n    shared.extend(normalized, raw);\n  }\n  if (shared.isObject(comp)) {\n    cache.set(comp, normalized);\n  }\n  return normalized;\n}\nfunction isEmitListener(options, key) {\n  if (!options || !shared.isOn(key)) {\n    return false;\n  }\n  key = key.slice(2).replace(/Once$/, \"\");\n  return shared.hasOwn(options, key[0].toLowerCase() + key.slice(1)) || shared.hasOwn(options, shared.hyphenate(key)) || shared.hasOwn(options, key);\n}\n\nfunction markAttrsAccessed() {\n}\nfunction renderComponentRoot(instance) {\n  const {\n    type: Component,\n    vnode,\n    proxy,\n    withProxy,\n    propsOptions: [propsOptions],\n    slots,\n    attrs,\n    emit,\n    render,\n    renderCache,\n    props,\n    data,\n    setupState,\n    ctx,\n    inheritAttrs\n  } = instance;\n  const prev = setCurrentRenderingInstance(instance);\n  let result;\n  let fallthroughAttrs;\n  try {\n    if (vnode.shapeFlag & 4) {\n      const proxyToUse = withProxy || proxy;\n      const thisProxy = false ? new Proxy(proxyToUse, {\n        get(target, key, receiver) {\n          warn(\n            `Property '${String(\n              key\n            )}' was accessed via 'this'. Avoid using 'this' in templates.`\n          );\n          return Reflect.get(target, key, receiver);\n        }\n      }) : proxyToUse;\n      result = normalizeVNode(\n        render.call(\n          thisProxy,\n          proxyToUse,\n          renderCache,\n          false ? shallowReadonly(props) : props,\n          setupState,\n          data,\n          ctx\n        )\n      );\n      fallthroughAttrs = attrs;\n    } else {\n      const render2 = Component;\n      if (false) ;\n      result = normalizeVNode(\n        render2.length > 1 ? render2(\n          false ? shallowReadonly(props) : props,\n          false ? {\n            get attrs() {\n              markAttrsAccessed();\n              return shallowReadonly(attrs);\n            },\n            slots,\n            emit\n          } : { attrs, slots, emit }\n        ) : render2(\n          false ? shallowReadonly(props) : props,\n          null\n        )\n      );\n      fallthroughAttrs = Component.props ? attrs : getFunctionalFallthrough(attrs);\n    }\n  } catch (err) {\n    blockStack.length = 0;\n    handleError(err, instance, 1);\n    result = createVNode(Comment);\n  }\n  let root = result;\n  if (fallthroughAttrs && inheritAttrs !== false) {\n    const keys = Object.keys(fallthroughAttrs);\n    const { shapeFlag } = root;\n    if (keys.length) {\n      if (shapeFlag & (1 | 6)) {\n        if (propsOptions && keys.some(shared.isModelListener)) {\n          fallthroughAttrs = filterModelListeners(\n            fallthroughAttrs,\n            propsOptions\n          );\n        }\n        root = cloneVNode(root, fallthroughAttrs, false, true);\n      }\n    }\n  }\n  if (vnode.dirs) {\n    root = cloneVNode(root, null, false, true);\n    root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs;\n  }\n  if (vnode.transition) {\n    setTransitionHooks(root, vnode.transition);\n  }\n  {\n    result = root;\n  }\n  setCurrentRenderingInstance(prev);\n  return result;\n}\nfunction filterSingleRoot(children, recurse = true) {\n  let singleRoot;\n  for (let i = 0; i < children.length; i++) {\n    const child = children[i];\n    if (isVNode(child)) {\n      if (child.type !== Comment || child.children === \"v-if\") {\n        if (singleRoot) {\n          return;\n        } else {\n          singleRoot = child;\n        }\n      }\n    } else {\n      return;\n    }\n  }\n  return singleRoot;\n}\nconst getFunctionalFallthrough = (attrs) => {\n  let res;\n  for (const key in attrs) {\n    if (key === \"class\" || key === \"style\" || shared.isOn(key)) {\n      (res || (res = {}))[key] = attrs[key];\n    }\n  }\n  return res;\n};\nconst filterModelListeners = (attrs, props) => {\n  const res = {};\n  for (const key in attrs) {\n    if (!shared.isModelListener(key) || !(key.slice(9) in props)) {\n      res[key] = attrs[key];\n    }\n  }\n  return res;\n};\nfunction shouldUpdateComponent(prevVNode, nextVNode, optimized) {\n  const { props: prevProps, children: prevChildren, component } = prevVNode;\n  const { props: nextProps, children: nextChildren, patchFlag } = nextVNode;\n  const emits = component.emitsOptions;\n  if (nextVNode.dirs || nextVNode.transition) {\n    return true;\n  }\n  if (optimized && patchFlag >= 0) {\n    if (patchFlag & 1024) {\n      return true;\n    }\n    if (patchFlag & 16) {\n      if (!prevProps) {\n        return !!nextProps;\n      }\n      return hasPropsChanged(prevProps, nextProps, emits);\n    } else if (patchFlag & 8) {\n      const dynamicProps = nextVNode.dynamicProps;\n      for (let i = 0; i < dynamicProps.length; i++) {\n        const key = dynamicProps[i];\n        if (nextProps[key] !== prevProps[key] && !isEmitListener(emits, key)) {\n          return true;\n        }\n      }\n    }\n  } else {\n    if (prevChildren || nextChildren) {\n      if (!nextChildren || !nextChildren.$stable) {\n        return true;\n      }\n    }\n    if (prevProps === nextProps) {\n      return false;\n    }\n    if (!prevProps) {\n      return !!nextProps;\n    }\n    if (!nextProps) {\n      return true;\n    }\n    return hasPropsChanged(prevProps, nextProps, emits);\n  }\n  return false;\n}\nfunction hasPropsChanged(prevProps, nextProps, emitsOptions) {\n  const nextKeys = Object.keys(nextProps);\n  if (nextKeys.length !== Object.keys(prevProps).length) {\n    return true;\n  }\n  for (let i = 0; i < nextKeys.length; i++) {\n    const key = nextKeys[i];\n    if (nextProps[key] !== prevProps[key] && !isEmitListener(emitsOptions, key)) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction updateHOCHostEl({ vnode, parent }, el) {\n  while (parent) {\n    const root = parent.subTree;\n    if (root.suspense && root.suspense.activeBranch === vnode) {\n      root.el = vnode.el;\n    }\n    if (root === vnode) {\n      (vnode = parent.vnode).el = el;\n      parent = parent.parent;\n    } else {\n      break;\n    }\n  }\n}\n\nconst isSuspense = (type) => type.__isSuspense;\nlet suspenseId = 0;\nconst SuspenseImpl = {\n  name: \"Suspense\",\n  // In order to make Suspense tree-shakable, we need to avoid importing it\n  // directly in the renderer. The renderer checks for the __isSuspense flag\n  // on a vnode's type and calls the `process` method, passing in renderer\n  // internals.\n  __isSuspense: true,\n  process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals) {\n    if (n1 == null) {\n      mountSuspense(\n        n2,\n        container,\n        anchor,\n        parentComponent,\n        parentSuspense,\n        namespace,\n        slotScopeIds,\n        optimized,\n        rendererInternals\n      );\n    } else {\n      if (parentSuspense && parentSuspense.deps > 0 && !n1.suspense.isInFallback) {\n        n2.suspense = n1.suspense;\n        n2.suspense.vnode = n2;\n        n2.el = n1.el;\n        return;\n      }\n      patchSuspense(\n        n1,\n        n2,\n        container,\n        anchor,\n        parentComponent,\n        namespace,\n        slotScopeIds,\n        optimized,\n        rendererInternals\n      );\n    }\n  },\n  hydrate: hydrateSuspense,\n  normalize: normalizeSuspenseChildren\n};\nconst Suspense = SuspenseImpl ;\nfunction triggerEvent(vnode, name) {\n  const eventListener = vnode.props && vnode.props[name];\n  if (shared.isFunction(eventListener)) {\n    eventListener();\n  }\n}\nfunction mountSuspense(vnode, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals) {\n  const {\n    p: patch,\n    o: { createElement }\n  } = rendererInternals;\n  const hiddenContainer = createElement(\"div\");\n  const suspense = vnode.suspense = createSuspenseBoundary(\n    vnode,\n    parentSuspense,\n    parentComponent,\n    container,\n    hiddenContainer,\n    anchor,\n    namespace,\n    slotScopeIds,\n    optimized,\n    rendererInternals\n  );\n  patch(\n    null,\n    suspense.pendingBranch = vnode.ssContent,\n    hiddenContainer,\n    null,\n    parentComponent,\n    suspense,\n    namespace,\n    slotScopeIds\n  );\n  if (suspense.deps > 0) {\n    triggerEvent(vnode, \"onPending\");\n    triggerEvent(vnode, \"onFallback\");\n    patch(\n      null,\n      vnode.ssFallback,\n      container,\n      anchor,\n      parentComponent,\n      null,\n      // fallback tree will not have suspense context\n      namespace,\n      slotScopeIds\n    );\n    setActiveBranch(suspense, vnode.ssFallback);\n  } else {\n    suspense.resolve(false, true);\n  }\n}\nfunction patchSuspense(n1, n2, container, anchor, parentComponent, namespace, slotScopeIds, optimized, { p: patch, um: unmount, o: { createElement } }) {\n  const suspense = n2.suspense = n1.suspense;\n  suspense.vnode = n2;\n  n2.el = n1.el;\n  const newBranch = n2.ssContent;\n  const newFallback = n2.ssFallback;\n  const { activeBranch, pendingBranch, isInFallback, isHydrating } = suspense;\n  if (pendingBranch) {\n    suspense.pendingBranch = newBranch;\n    if (isSameVNodeType(newBranch, pendingBranch)) {\n      patch(\n        pendingBranch,\n        newBranch,\n        suspense.hiddenContainer,\n        null,\n        parentComponent,\n        suspense,\n        namespace,\n        slotScopeIds,\n        optimized\n      );\n      if (suspense.deps <= 0) {\n        suspense.resolve();\n      } else if (isInFallback) {\n        if (!isHydrating) {\n          patch(\n            activeBranch,\n            newFallback,\n            container,\n            anchor,\n            parentComponent,\n            null,\n            // fallback tree will not have suspense context\n            namespace,\n            slotScopeIds,\n            optimized\n          );\n          setActiveBranch(suspense, newFallback);\n        }\n      }\n    } else {\n      suspense.pendingId = suspenseId++;\n      if (isHydrating) {\n        suspense.isHydrating = false;\n        suspense.activeBranch = pendingBranch;\n      } else {\n        unmount(pendingBranch, parentComponent, suspense);\n      }\n      suspense.deps = 0;\n      suspense.effects.length = 0;\n      suspense.hiddenContainer = createElement(\"div\");\n      if (isInFallback) {\n        patch(\n          null,\n          newBranch,\n          suspense.hiddenContainer,\n          null,\n          parentComponent,\n          suspense,\n          namespace,\n          slotScopeIds,\n          optimized\n        );\n        if (suspense.deps <= 0) {\n          suspense.resolve();\n        } else {\n          patch(\n            activeBranch,\n            newFallback,\n            container,\n            anchor,\n            parentComponent,\n            null,\n            // fallback tree will not have suspense context\n            namespace,\n            slotScopeIds,\n            optimized\n          );\n          setActiveBranch(suspense, newFallback);\n        }\n      } else if (activeBranch && isSameVNodeType(newBranch, activeBranch)) {\n        patch(\n          activeBranch,\n          newBranch,\n          container,\n          anchor,\n          parentComponent,\n          suspense,\n          namespace,\n          slotScopeIds,\n          optimized\n        );\n        suspense.resolve(true);\n      } else {\n        patch(\n          null,\n          newBranch,\n          suspense.hiddenContainer,\n          null,\n          parentComponent,\n          suspense,\n          namespace,\n          slotScopeIds,\n          optimized\n        );\n        if (suspense.deps <= 0) {\n          suspense.resolve();\n        }\n      }\n    }\n  } else {\n    if (activeBranch && isSameVNodeType(newBranch, activeBranch)) {\n      patch(\n        activeBranch,\n        newBranch,\n        container,\n        anchor,\n        parentComponent,\n        suspense,\n        namespace,\n        slotScopeIds,\n        optimized\n      );\n      setActiveBranch(suspense, newBranch);\n    } else {\n      triggerEvent(n2, \"onPending\");\n      suspense.pendingBranch = newBranch;\n      if (newBranch.shapeFlag & 512) {\n        suspense.pendingId = newBranch.component.suspenseId;\n      } else {\n        suspense.pendingId = suspenseId++;\n      }\n      patch(\n        null,\n        newBranch,\n        suspense.hiddenContainer,\n        null,\n        parentComponent,\n        suspense,\n        namespace,\n        slotScopeIds,\n        optimized\n      );\n      if (suspense.deps <= 0) {\n        suspense.resolve();\n      } else {\n        const { timeout, pendingId } = suspense;\n        if (timeout > 0) {\n          setTimeout(() => {\n            if (suspense.pendingId === pendingId) {\n              suspense.fallback(newFallback);\n            }\n          }, timeout);\n        } else if (timeout === 0) {\n          suspense.fallback(newFallback);\n        }\n      }\n    }\n  }\n}\nfunction createSuspenseBoundary(vnode, parentSuspense, parentComponent, container, hiddenContainer, anchor, namespace, slotScopeIds, optimized, rendererInternals, isHydrating = false) {\n  const {\n    p: patch,\n    m: move,\n    um: unmount,\n    n: next,\n    o: { parentNode, remove }\n  } = rendererInternals;\n  let parentSuspenseId;\n  const isSuspensible = isVNodeSuspensible(vnode);\n  if (isSuspensible) {\n    if (parentSuspense && parentSuspense.pendingBranch) {\n      parentSuspenseId = parentSuspense.pendingId;\n      parentSuspense.deps++;\n    }\n  }\n  const timeout = vnode.props ? shared.toNumber(vnode.props.timeout) : void 0;\n  const initialAnchor = anchor;\n  const suspense = {\n    vnode,\n    parent: parentSuspense,\n    parentComponent,\n    namespace,\n    container,\n    hiddenContainer,\n    deps: 0,\n    pendingId: suspenseId++,\n    timeout: typeof timeout === \"number\" ? timeout : -1,\n    activeBranch: null,\n    pendingBranch: null,\n    isInFallback: !isHydrating,\n    isHydrating,\n    isUnmounted: false,\n    effects: [],\n    resolve(resume = false, sync = false) {\n      const {\n        vnode: vnode2,\n        activeBranch,\n        pendingBranch,\n        pendingId,\n        effects,\n        parentComponent: parentComponent2,\n        container: container2\n      } = suspense;\n      let delayEnter = false;\n      if (suspense.isHydrating) {\n        suspense.isHydrating = false;\n      } else if (!resume) {\n        delayEnter = activeBranch && pendingBranch.transition && pendingBranch.transition.mode === \"out-in\";\n        if (delayEnter) {\n          activeBranch.transition.afterLeave = () => {\n            if (pendingId === suspense.pendingId) {\n              move(\n                pendingBranch,\n                container2,\n                anchor === initialAnchor ? next(activeBranch) : anchor,\n                0\n              );\n              queuePostFlushCb(effects);\n            }\n          };\n        }\n        if (activeBranch) {\n          if (parentNode(activeBranch.el) === container2) {\n            anchor = next(activeBranch);\n          }\n          unmount(activeBranch, parentComponent2, suspense, true);\n        }\n        if (!delayEnter) {\n          move(pendingBranch, container2, anchor, 0);\n        }\n      }\n      setActiveBranch(suspense, pendingBranch);\n      suspense.pendingBranch = null;\n      suspense.isInFallback = false;\n      let parent = suspense.parent;\n      let hasUnresolvedAncestor = false;\n      while (parent) {\n        if (parent.pendingBranch) {\n          parent.effects.push(...effects);\n          hasUnresolvedAncestor = true;\n          break;\n        }\n        parent = parent.parent;\n      }\n      if (!hasUnresolvedAncestor && !delayEnter) {\n        queuePostFlushCb(effects);\n      }\n      suspense.effects = [];\n      if (isSuspensible) {\n        if (parentSuspense && parentSuspense.pendingBranch && parentSuspenseId === parentSuspense.pendingId) {\n          parentSuspense.deps--;\n          if (parentSuspense.deps === 0 && !sync) {\n            parentSuspense.resolve();\n          }\n        }\n      }\n      triggerEvent(vnode2, \"onResolve\");\n    },\n    fallback(fallbackVNode) {\n      if (!suspense.pendingBranch) {\n        return;\n      }\n      const { vnode: vnode2, activeBranch, parentComponent: parentComponent2, container: container2, namespace: namespace2 } = suspense;\n      triggerEvent(vnode2, \"onFallback\");\n      const anchor2 = next(activeBranch);\n      const mountFallback = () => {\n        if (!suspense.isInFallback) {\n          return;\n        }\n        patch(\n          null,\n          fallbackVNode,\n          container2,\n          anchor2,\n          parentComponent2,\n          null,\n          // fallback tree will not have suspense context\n          namespace2,\n          slotScopeIds,\n          optimized\n        );\n        setActiveBranch(suspense, fallbackVNode);\n      };\n      const delayEnter = fallbackVNode.transition && fallbackVNode.transition.mode === \"out-in\";\n      if (delayEnter) {\n        activeBranch.transition.afterLeave = mountFallback;\n      }\n      suspense.isInFallback = true;\n      unmount(\n        activeBranch,\n        parentComponent2,\n        null,\n        // no suspense so unmount hooks fire now\n        true\n        // shouldRemove\n      );\n      if (!delayEnter) {\n        mountFallback();\n      }\n    },\n    move(container2, anchor2, type) {\n      suspense.activeBranch && move(suspense.activeBranch, container2, anchor2, type);\n      suspense.container = container2;\n    },\n    next() {\n      return suspense.activeBranch && next(suspense.activeBranch);\n    },\n    registerDep(instance, setupRenderEffect, optimized2) {\n      const isInPendingSuspense = !!suspense.pendingBranch;\n      if (isInPendingSuspense) {\n        suspense.deps++;\n      }\n      const hydratedEl = instance.vnode.el;\n      instance.asyncDep.catch((err) => {\n        handleError(err, instance, 0);\n      }).then((asyncSetupResult) => {\n        if (instance.isUnmounted || suspense.isUnmounted || suspense.pendingId !== instance.suspenseId) {\n          return;\n        }\n        instance.asyncResolved = true;\n        const { vnode: vnode2 } = instance;\n        handleSetupResult(instance, asyncSetupResult, false);\n        if (hydratedEl) {\n          vnode2.el = hydratedEl;\n        }\n        const placeholder = !hydratedEl && instance.subTree.el;\n        setupRenderEffect(\n          instance,\n          vnode2,\n          // component may have been moved before resolve.\n          // if this is not a hydration, instance.subTree will be the comment\n          // placeholder.\n          parentNode(hydratedEl || instance.subTree.el),\n          // anchor will not be used if this is hydration, so only need to\n          // consider the comment placeholder case.\n          hydratedEl ? null : next(instance.subTree),\n          suspense,\n          namespace,\n          optimized2\n        );\n        if (placeholder) {\n          remove(placeholder);\n        }\n        updateHOCHostEl(instance, vnode2.el);\n        if (isInPendingSuspense && --suspense.deps === 0) {\n          suspense.resolve();\n        }\n      });\n    },\n    unmount(parentSuspense2, doRemove) {\n      suspense.isUnmounted = true;\n      if (suspense.activeBranch) {\n        unmount(\n          suspense.activeBranch,\n          parentComponent,\n          parentSuspense2,\n          doRemove\n        );\n      }\n      if (suspense.pendingBranch) {\n        unmount(\n          suspense.pendingBranch,\n          parentComponent,\n          parentSuspense2,\n          doRemove\n        );\n      }\n    }\n  };\n  return suspense;\n}\nfunction hydrateSuspense(node, vnode, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals, hydrateNode) {\n  const suspense = vnode.suspense = createSuspenseBoundary(\n    vnode,\n    parentSuspense,\n    parentComponent,\n    node.parentNode,\n    // eslint-disable-next-line no-restricted-globals\n    document.createElement(\"div\"),\n    null,\n    namespace,\n    slotScopeIds,\n    optimized,\n    rendererInternals,\n    true\n  );\n  const result = hydrateNode(\n    node,\n    suspense.pendingBranch = vnode.ssContent,\n    parentComponent,\n    suspense,\n    slotScopeIds,\n    optimized\n  );\n  if (suspense.deps === 0) {\n    suspense.resolve(false, true);\n  }\n  return result;\n}\nfunction normalizeSuspenseChildren(vnode) {\n  const { shapeFlag, children } = vnode;\n  const isSlotChildren = shapeFlag & 32;\n  vnode.ssContent = normalizeSuspenseSlot(\n    isSlotChildren ? children.default : children\n  );\n  vnode.ssFallback = isSlotChildren ? normalizeSuspenseSlot(children.fallback) : createVNode(Comment);\n}\nfunction normalizeSuspenseSlot(s) {\n  let block;\n  if (shared.isFunction(s)) {\n    const trackBlock = isBlockTreeEnabled && s._c;\n    if (trackBlock) {\n      s._d = false;\n      openBlock();\n    }\n    s = s();\n    if (trackBlock) {\n      s._d = true;\n      block = currentBlock;\n      closeBlock();\n    }\n  }\n  if (shared.isArray(s)) {\n    const singleChild = filterSingleRoot(s);\n    s = singleChild;\n  }\n  s = normalizeVNode(s);\n  if (block && !s.dynamicChildren) {\n    s.dynamicChildren = block.filter((c) => c !== s);\n  }\n  return s;\n}\nfunction queueEffectWithSuspense(fn, suspense) {\n  if (suspense && suspense.pendingBranch) {\n    if (shared.isArray(fn)) {\n      suspense.effects.push(...fn);\n    } else {\n      suspense.effects.push(fn);\n    }\n  } else {\n    queuePostFlushCb(fn);\n  }\n}\nfunction setActiveBranch(suspense, branch) {\n  suspense.activeBranch = branch;\n  const { vnode, parentComponent } = suspense;\n  let el = branch.el;\n  while (!el && branch.component) {\n    branch = branch.component.subTree;\n    el = branch.el;\n  }\n  vnode.el = el;\n  if (parentComponent && parentComponent.subTree === vnode) {\n    parentComponent.vnode.el = el;\n    updateHOCHostEl(parentComponent, el);\n  }\n}\nfunction isVNodeSuspensible(vnode) {\n  const suspensible = vnode.props && vnode.props.suspensible;\n  return suspensible != null && suspensible !== false;\n}\n\nconst Fragment = Symbol.for(\"v-fgt\");\nconst Text = Symbol.for(\"v-txt\");\nconst Comment = Symbol.for(\"v-cmt\");\nconst Static = Symbol.for(\"v-stc\");\nconst blockStack = [];\nlet currentBlock = null;\nfunction openBlock(disableTracking = false) {\n  blockStack.push(currentBlock = disableTracking ? null : []);\n}\nfunction closeBlock() {\n  blockStack.pop();\n  currentBlock = blockStack[blockStack.length - 1] || null;\n}\nlet isBlockTreeEnabled = 1;\nfunction setBlockTracking(value, inVOnce = false) {\n  isBlockTreeEnabled += value;\n  if (value < 0 && currentBlock && inVOnce) {\n    currentBlock.hasOnce = true;\n  }\n}\nfunction setupBlock(vnode) {\n  vnode.dynamicChildren = isBlockTreeEnabled > 0 ? currentBlock || shared.EMPTY_ARR : null;\n  closeBlock();\n  if (isBlockTreeEnabled > 0 && currentBlock) {\n    currentBlock.push(vnode);\n  }\n  return vnode;\n}\nfunction createElementBlock(type, props, children, patchFlag, dynamicProps, shapeFlag) {\n  return setupBlock(\n    createBaseVNode(\n      type,\n      props,\n      children,\n      patchFlag,\n      dynamicProps,\n      shapeFlag,\n      true\n    )\n  );\n}\nfunction createBlock(type, props, children, patchFlag, dynamicProps) {\n  return setupBlock(\n    createVNode(\n      type,\n      props,\n      children,\n      patchFlag,\n      dynamicProps,\n      true\n    )\n  );\n}\nfunction isVNode(value) {\n  return value ? value.__v_isVNode === true : false;\n}\nfunction isSameVNodeType(n1, n2) {\n  return n1.type === n2.type && n1.key === n2.key;\n}\nfunction transformVNodeArgs(transformer) {\n}\nconst normalizeKey = ({ key }) => key != null ? key : null;\nconst normalizeRef = ({\n  ref,\n  ref_key,\n  ref_for\n}) => {\n  if (typeof ref === \"number\") {\n    ref = \"\" + ref;\n  }\n  return ref != null ? shared.isString(ref) || reactivity.isRef(ref) || shared.isFunction(ref) ? { i: currentRenderingInstance, r: ref, k: ref_key, f: !!ref_for } : ref : null;\n};\nfunction createBaseVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, shapeFlag = type === Fragment ? 0 : 1, isBlockNode = false, needFullChildrenNormalization = false) {\n  const vnode = {\n    __v_isVNode: true,\n    __v_skip: true,\n    type,\n    props,\n    key: props && normalizeKey(props),\n    ref: props && normalizeRef(props),\n    scopeId: currentScopeId,\n    slotScopeIds: null,\n    children,\n    component: null,\n    suspense: null,\n    ssContent: null,\n    ssFallback: null,\n    dirs: null,\n    transition: null,\n    el: null,\n    anchor: null,\n    target: null,\n    targetStart: null,\n    targetAnchor: null,\n    staticCount: 0,\n    shapeFlag,\n    patchFlag,\n    dynamicProps,\n    dynamicChildren: null,\n    appContext: null,\n    ctx: currentRenderingInstance\n  };\n  if (needFullChildrenNormalization) {\n    normalizeChildren(vnode, children);\n    if (shapeFlag & 128) {\n      type.normalize(vnode);\n    }\n  } else if (children) {\n    vnode.shapeFlag |= shared.isString(children) ? 8 : 16;\n  }\n  if (isBlockTreeEnabled > 0 && // avoid a block node from tracking itself\n  !isBlockNode && // has current parent block\n  currentBlock && // presence of a patch flag indicates this node needs patching on updates.\n  // component nodes also should always be patched, because even if the\n  // component doesn't need to update, it needs to persist the instance on to\n  // the next vnode so that it can be properly unmounted later.\n  (vnode.patchFlag > 0 || shapeFlag & 6) && // the EVENTS flag is only for hydration and if it is the only flag, the\n  // vnode should not be considered dynamic due to handler caching.\n  vnode.patchFlag !== 32) {\n    currentBlock.push(vnode);\n  }\n  return vnode;\n}\nconst createVNode = _createVNode;\nfunction _createVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, isBlockNode = false) {\n  if (!type || type === NULL_DYNAMIC_COMPONENT) {\n    type = Comment;\n  }\n  if (isVNode(type)) {\n    const cloned = cloneVNode(\n      type,\n      props,\n      true\n      /* mergeRef: true */\n    );\n    if (children) {\n      normalizeChildren(cloned, children);\n    }\n    if (isBlockTreeEnabled > 0 && !isBlockNode && currentBlock) {\n      if (cloned.shapeFlag & 6) {\n        currentBlock[currentBlock.indexOf(type)] = cloned;\n      } else {\n        currentBlock.push(cloned);\n      }\n    }\n    cloned.patchFlag = -2;\n    return cloned;\n  }\n  if (isClassComponent(type)) {\n    type = type.__vccOpts;\n  }\n  if (props) {\n    props = guardReactiveProps(props);\n    let { class: klass, style } = props;\n    if (klass && !shared.isString(klass)) {\n      props.class = shared.normalizeClass(klass);\n    }\n    if (shared.isObject(style)) {\n      if (reactivity.isProxy(style) && !shared.isArray(style)) {\n        style = shared.extend({}, style);\n      }\n      props.style = shared.normalizeStyle(style);\n    }\n  }\n  const shapeFlag = shared.isString(type) ? 1 : isSuspense(type) ? 128 : isTeleport(type) ? 64 : shared.isObject(type) ? 4 : shared.isFunction(type) ? 2 : 0;\n  return createBaseVNode(\n    type,\n    props,\n    children,\n    patchFlag,\n    dynamicProps,\n    shapeFlag,\n    isBlockNode,\n    true\n  );\n}\nfunction guardReactiveProps(props) {\n  if (!props) return null;\n  return reactivity.isProxy(props) || isInternalObject(props) ? shared.extend({}, props) : props;\n}\nfunction cloneVNode(vnode, extraProps, mergeRef = false, cloneTransition = false) {\n  const { props, ref, patchFlag, children, transition } = vnode;\n  const mergedProps = extraProps ? mergeProps(props || {}, extraProps) : props;\n  const cloned = {\n    __v_isVNode: true,\n    __v_skip: true,\n    type: vnode.type,\n    props: mergedProps,\n    key: mergedProps && normalizeKey(mergedProps),\n    ref: extraProps && extraProps.ref ? (\n      // #2078 in the case of <component :is=\"vnode\" ref=\"extra\"/>\n      // if the vnode itself already has a ref, cloneVNode will need to merge\n      // the refs so the single vnode can be set on multiple refs\n      mergeRef && ref ? shared.isArray(ref) ? ref.concat(normalizeRef(extraProps)) : [ref, normalizeRef(extraProps)] : normalizeRef(extraProps)\n    ) : ref,\n    scopeId: vnode.scopeId,\n    slotScopeIds: vnode.slotScopeIds,\n    children: children,\n    target: vnode.target,\n    targetStart: vnode.targetStart,\n    targetAnchor: vnode.targetAnchor,\n    staticCount: vnode.staticCount,\n    shapeFlag: vnode.shapeFlag,\n    // if the vnode is cloned with extra props, we can no longer assume its\n    // existing patch flag to be reliable and need to add the FULL_PROPS flag.\n    // note: preserve flag for fragments since they use the flag for children\n    // fast paths only.\n    patchFlag: extraProps && vnode.type !== Fragment ? patchFlag === -1 ? 16 : patchFlag | 16 : patchFlag,\n    dynamicProps: vnode.dynamicProps,\n    dynamicChildren: vnode.dynamicChildren,\n    appContext: vnode.appContext,\n    dirs: vnode.dirs,\n    transition,\n    // These should technically only be non-null on mounted VNodes. However,\n    // they *should* be copied for kept-alive vnodes. So we just always copy\n    // them since them being non-null during a mount doesn't affect the logic as\n    // they will simply be overwritten.\n    component: vnode.component,\n    suspense: vnode.suspense,\n    ssContent: vnode.ssContent && cloneVNode(vnode.ssContent),\n    ssFallback: vnode.ssFallback && cloneVNode(vnode.ssFallback),\n    placeholder: vnode.placeholder,\n    el: vnode.el,\n    anchor: vnode.anchor,\n    ctx: vnode.ctx,\n    ce: vnode.ce\n  };\n  if (transition && cloneTransition) {\n    setTransitionHooks(\n      cloned,\n      transition.clone(cloned)\n    );\n  }\n  return cloned;\n}\nfunction createTextVNode(text = \" \", flag = 0) {\n  return createVNode(Text, null, text, flag);\n}\nfunction createStaticVNode(content, numberOfNodes) {\n  const vnode = createVNode(Static, null, content);\n  vnode.staticCount = numberOfNodes;\n  return vnode;\n}\nfunction createCommentVNode(text = \"\", asBlock = false) {\n  return asBlock ? (openBlock(), createBlock(Comment, null, text)) : createVNode(Comment, null, text);\n}\nfunction normalizeVNode(child) {\n  if (child == null || typeof child === \"boolean\") {\n    return createVNode(Comment);\n  } else if (shared.isArray(child)) {\n    return createVNode(\n      Fragment,\n      null,\n      // #3666, avoid reference pollution when reusing vnode\n      child.slice()\n    );\n  } else if (isVNode(child)) {\n    return cloneIfMounted(child);\n  } else {\n    return createVNode(Text, null, String(child));\n  }\n}\nfunction cloneIfMounted(child) {\n  return child.el === null && child.patchFlag !== -1 || child.memo ? child : cloneVNode(child);\n}\nfunction normalizeChildren(vnode, children) {\n  let type = 0;\n  const { shapeFlag } = vnode;\n  if (children == null) {\n    children = null;\n  } else if (shared.isArray(children)) {\n    type = 16;\n  } else if (typeof children === \"object\") {\n    if (shapeFlag & (1 | 64)) {\n      const slot = children.default;\n      if (slot) {\n        slot._c && (slot._d = false);\n        normalizeChildren(vnode, slot());\n        slot._c && (slot._d = true);\n      }\n      return;\n    } else {\n      type = 32;\n      const slotFlag = children._;\n      if (!slotFlag && !isInternalObject(children)) {\n        children._ctx = currentRenderingInstance;\n      } else if (slotFlag === 3 && currentRenderingInstance) {\n        if (currentRenderingInstance.slots._ === 1) {\n          children._ = 1;\n        } else {\n          children._ = 2;\n          vnode.patchFlag |= 1024;\n        }\n      }\n    }\n  } else if (shared.isFunction(children)) {\n    children = { default: children, _ctx: currentRenderingInstance };\n    type = 32;\n  } else {\n    children = String(children);\n    if (shapeFlag & 64) {\n      type = 16;\n      children = [createTextVNode(children)];\n    } else {\n      type = 8;\n    }\n  }\n  vnode.children = children;\n  vnode.shapeFlag |= type;\n}\nfunction mergeProps(...args) {\n  const ret = {};\n  for (let i = 0; i < args.length; i++) {\n    const toMerge = args[i];\n    for (const key in toMerge) {\n      if (key === \"class\") {\n        if (ret.class !== toMerge.class) {\n          ret.class = shared.normalizeClass([ret.class, toMerge.class]);\n        }\n      } else if (key === \"style\") {\n        ret.style = shared.normalizeStyle([ret.style, toMerge.style]);\n      } else if (shared.isOn(key)) {\n        const existing = ret[key];\n        const incoming = toMerge[key];\n        if (incoming && existing !== incoming && !(shared.isArray(existing) && existing.includes(incoming))) {\n          ret[key] = existing ? [].concat(existing, incoming) : incoming;\n        }\n      } else if (key !== \"\") {\n        ret[key] = toMerge[key];\n      }\n    }\n  }\n  return ret;\n}\nfunction invokeVNodeHook(hook, instance, vnode, prevVNode = null) {\n  callWithAsyncErrorHandling(hook, instance, 7, [\n    vnode,\n    prevVNode\n  ]);\n}\n\nconst emptyAppContext = createAppContext();\nlet uid = 0;\nfunction createComponentInstance(vnode, parent, suspense) {\n  const type = vnode.type;\n  const appContext = (parent ? parent.appContext : vnode.appContext) || emptyAppContext;\n  const instance = {\n    uid: uid++,\n    vnode,\n    type,\n    parent,\n    appContext,\n    root: null,\n    // to be immediately set\n    next: null,\n    subTree: null,\n    // will be set synchronously right after creation\n    effect: null,\n    update: null,\n    // will be set synchronously right after creation\n    job: null,\n    scope: new reactivity.EffectScope(\n      true\n      /* detached */\n    ),\n    render: null,\n    proxy: null,\n    exposed: null,\n    exposeProxy: null,\n    withProxy: null,\n    provides: parent ? parent.provides : Object.create(appContext.provides),\n    ids: parent ? parent.ids : [\"\", 0, 0],\n    accessCache: null,\n    renderCache: [],\n    // local resolved assets\n    components: null,\n    directives: null,\n    // resolved props and emits options\n    propsOptions: normalizePropsOptions(type, appContext),\n    emitsOptions: normalizeEmitsOptions(type, appContext),\n    // emit\n    emit: null,\n    // to be set immediately\n    emitted: null,\n    // props default value\n    propsDefaults: shared.EMPTY_OBJ,\n    // inheritAttrs\n    inheritAttrs: type.inheritAttrs,\n    // state\n    ctx: shared.EMPTY_OBJ,\n    data: shared.EMPTY_OBJ,\n    props: shared.EMPTY_OBJ,\n    attrs: shared.EMPTY_OBJ,\n    slots: shared.EMPTY_OBJ,\n    refs: shared.EMPTY_OBJ,\n    setupState: shared.EMPTY_OBJ,\n    setupContext: null,\n    // suspense related\n    suspense,\n    suspenseId: suspense ? suspense.pendingId : 0,\n    asyncDep: null,\n    asyncResolved: false,\n    // lifecycle hooks\n    // not using enums here because it results in computed properties\n    isMounted: false,\n    isUnmounted: false,\n    isDeactivated: false,\n    bc: null,\n    c: null,\n    bm: null,\n    m: null,\n    bu: null,\n    u: null,\n    um: null,\n    bum: null,\n    da: null,\n    a: null,\n    rtg: null,\n    rtc: null,\n    ec: null,\n    sp: null\n  };\n  {\n    instance.ctx = { _: instance };\n  }\n  instance.root = parent ? parent.root : instance;\n  instance.emit = emit.bind(null, instance);\n  if (vnode.ce) {\n    vnode.ce(instance);\n  }\n  return instance;\n}\nlet currentInstance = null;\nconst getCurrentInstance = () => currentInstance || currentRenderingInstance;\nlet internalSetCurrentInstance;\nlet setInSSRSetupState;\n{\n  const g = shared.getGlobalThis();\n  const registerGlobalSetter = (key, setter) => {\n    let setters;\n    if (!(setters = g[key])) setters = g[key] = [];\n    setters.push(setter);\n    return (v) => {\n      if (setters.length > 1) setters.forEach((set) => set(v));\n      else setters[0](v);\n    };\n  };\n  internalSetCurrentInstance = registerGlobalSetter(\n    `__VUE_INSTANCE_SETTERS__`,\n    (v) => currentInstance = v\n  );\n  setInSSRSetupState = registerGlobalSetter(\n    `__VUE_SSR_SETTERS__`,\n    (v) => isInSSRComponentSetup = v\n  );\n}\nconst setCurrentInstance = (instance) => {\n  const prev = currentInstance;\n  internalSetCurrentInstance(instance);\n  instance.scope.on();\n  return () => {\n    instance.scope.off();\n    internalSetCurrentInstance(prev);\n  };\n};\nconst unsetCurrentInstance = () => {\n  currentInstance && currentInstance.scope.off();\n  internalSetCurrentInstance(null);\n};\nfunction isStatefulComponent(instance) {\n  return instance.vnode.shapeFlag & 4;\n}\nlet isInSSRComponentSetup = false;\nfunction setupComponent(instance, isSSR = false, optimized = false) {\n  isSSR && setInSSRSetupState(isSSR);\n  const { props, children } = instance.vnode;\n  const isStateful = isStatefulComponent(instance);\n  initProps(instance, props, isStateful, isSSR);\n  initSlots(instance, children, optimized || isSSR);\n  const setupResult = isStateful ? setupStatefulComponent(instance, isSSR) : void 0;\n  isSSR && setInSSRSetupState(false);\n  return setupResult;\n}\nfunction setupStatefulComponent(instance, isSSR) {\n  const Component = instance.type;\n  instance.accessCache = /* @__PURE__ */ Object.create(null);\n  instance.proxy = new Proxy(instance.ctx, PublicInstanceProxyHandlers);\n  const { setup } = Component;\n  if (setup) {\n    reactivity.pauseTracking();\n    const setupContext = instance.setupContext = setup.length > 1 ? createSetupContext(instance) : null;\n    const reset = setCurrentInstance(instance);\n    const setupResult = callWithErrorHandling(\n      setup,\n      instance,\n      0,\n      [\n        instance.props,\n        setupContext\n      ]\n    );\n    const isAsyncSetup = shared.isPromise(setupResult);\n    reactivity.resetTracking();\n    reset();\n    if ((isAsyncSetup || instance.sp) && !isAsyncWrapper(instance)) {\n      markAsyncBoundary(instance);\n    }\n    if (isAsyncSetup) {\n      setupResult.then(unsetCurrentInstance, unsetCurrentInstance);\n      if (isSSR) {\n        return setupResult.then((resolvedResult) => {\n          handleSetupResult(instance, resolvedResult, isSSR);\n        }).catch((e) => {\n          handleError(e, instance, 0);\n        });\n      } else {\n        instance.asyncDep = setupResult;\n      }\n    } else {\n      handleSetupResult(instance, setupResult, isSSR);\n    }\n  } else {\n    finishComponentSetup(instance, isSSR);\n  }\n}\nfunction handleSetupResult(instance, setupResult, isSSR) {\n  if (shared.isFunction(setupResult)) {\n    if (instance.type.__ssrInlineRender) {\n      instance.ssrRender = setupResult;\n    } else {\n      instance.render = setupResult;\n    }\n  } else if (shared.isObject(setupResult)) {\n    instance.setupState = reactivity.proxyRefs(setupResult);\n  } else ;\n  finishComponentSetup(instance, isSSR);\n}\nlet compile;\nlet installWithProxy;\nfunction registerRuntimeCompiler(_compile) {\n  compile = _compile;\n  installWithProxy = (i) => {\n    if (i.render._rc) {\n      i.withProxy = new Proxy(i.ctx, RuntimeCompiledPublicInstanceProxyHandlers);\n    }\n  };\n}\nconst isRuntimeOnly = () => !compile;\nfunction finishComponentSetup(instance, isSSR, skipOptions) {\n  const Component = instance.type;\n  if (!instance.render) {\n    if (!isSSR && compile && !Component.render) {\n      const template = Component.template || resolveMergedOptions(instance).template;\n      if (template) {\n        const { isCustomElement, compilerOptions } = instance.appContext.config;\n        const { delimiters, compilerOptions: componentCompilerOptions } = Component;\n        const finalCompilerOptions = shared.extend(\n          shared.extend(\n            {\n              isCustomElement,\n              delimiters\n            },\n            compilerOptions\n          ),\n          componentCompilerOptions\n        );\n        Component.render = compile(template, finalCompilerOptions);\n      }\n    }\n    instance.render = Component.render || shared.NOOP;\n    if (installWithProxy) {\n      installWithProxy(instance);\n    }\n  }\n  {\n    const reset = setCurrentInstance(instance);\n    reactivity.pauseTracking();\n    try {\n      applyOptions(instance);\n    } finally {\n      reactivity.resetTracking();\n      reset();\n    }\n  }\n}\nconst attrsProxyHandlers = {\n  get(target, key) {\n    reactivity.track(target, \"get\", \"\");\n    return target[key];\n  }\n};\nfunction createSetupContext(instance) {\n  const expose = (exposed) => {\n    instance.exposed = exposed || {};\n  };\n  {\n    return {\n      attrs: new Proxy(instance.attrs, attrsProxyHandlers),\n      slots: instance.slots,\n      emit: instance.emit,\n      expose\n    };\n  }\n}\nfunction getComponentPublicInstance(instance) {\n  if (instance.exposed) {\n    return instance.exposeProxy || (instance.exposeProxy = new Proxy(reactivity.proxyRefs(reactivity.markRaw(instance.exposed)), {\n      get(target, key) {\n        if (key in target) {\n          return target[key];\n        } else if (key in publicPropertiesMap) {\n          return publicPropertiesMap[key](instance);\n        }\n      },\n      has(target, key) {\n        return key in target || key in publicPropertiesMap;\n      }\n    }));\n  } else {\n    return instance.proxy;\n  }\n}\nfunction getComponentName(Component, includeInferred = true) {\n  return shared.isFunction(Component) ? Component.displayName || Component.name : Component.name || includeInferred && Component.__name;\n}\nfunction isClassComponent(value) {\n  return shared.isFunction(value) && \"__vccOpts\" in value;\n}\n\nconst computed = (getterOrOptions, debugOptions) => {\n  const c = reactivity.computed(getterOrOptions, debugOptions, isInSSRComponentSetup);\n  return c;\n};\n\nfunction h(type, propsOrChildren, children) {\n  const l = arguments.length;\n  if (l === 2) {\n    if (shared.isObject(propsOrChildren) && !shared.isArray(propsOrChildren)) {\n      if (isVNode(propsOrChildren)) {\n        return createVNode(type, null, [propsOrChildren]);\n      }\n      return createVNode(type, propsOrChildren);\n    } else {\n      return createVNode(type, null, propsOrChildren);\n    }\n  } else {\n    if (l > 3) {\n      children = Array.prototype.slice.call(arguments, 2);\n    } else if (l === 3 && isVNode(children)) {\n      children = [children];\n    }\n    return createVNode(type, propsOrChildren, children);\n  }\n}\n\nfunction initCustomFormatter() {\n  {\n    return;\n  }\n}\n\nfunction withMemo(memo, render, cache, index) {\n  const cached = cache[index];\n  if (cached && isMemoSame(cached, memo)) {\n    return cached;\n  }\n  const ret = render();\n  ret.memo = memo.slice();\n  ret.cacheIndex = index;\n  return cache[index] = ret;\n}\nfunction isMemoSame(cached, memo) {\n  const prev = cached.memo;\n  if (prev.length != memo.length) {\n    return false;\n  }\n  for (let i = 0; i < prev.length; i++) {\n    if (shared.hasChanged(prev[i], memo[i])) {\n      return false;\n    }\n  }\n  if (isBlockTreeEnabled > 0 && currentBlock) {\n    currentBlock.push(cached);\n  }\n  return true;\n}\n\nconst version = \"3.5.18\";\nconst warn$1 = shared.NOOP;\nconst ErrorTypeStrings = ErrorTypeStrings$1 ;\nconst devtools = void 0;\nconst setDevtoolsHook = shared.NOOP;\nconst _ssrUtils = {\n  createComponentInstance,\n  setupComponent,\n  renderComponentRoot,\n  setCurrentRenderingInstance,\n  isVNode: isVNode,\n  normalizeVNode,\n  getComponentPublicInstance,\n  ensureValidVNode,\n  pushWarningContext,\n  popWarningContext\n};\nconst ssrUtils = _ssrUtils ;\nconst resolveFilter = null;\nconst compatUtils = null;\nconst DeprecationTypes = null;\n\nexports.EffectScope = reactivity.EffectScope;\nexports.ReactiveEffect = reactivity.ReactiveEffect;\nexports.TrackOpTypes = reactivity.TrackOpTypes;\nexports.TriggerOpTypes = reactivity.TriggerOpTypes;\nexports.customRef = reactivity.customRef;\nexports.effect = reactivity.effect;\nexports.effectScope = reactivity.effectScope;\nexports.getCurrentScope = reactivity.getCurrentScope;\nexports.getCurrentWatcher = reactivity.getCurrentWatcher;\nexports.isProxy = reactivity.isProxy;\nexports.isReactive = reactivity.isReactive;\nexports.isReadonly = reactivity.isReadonly;\nexports.isRef = reactivity.isRef;\nexports.isShallow = reactivity.isShallow;\nexports.markRaw = reactivity.markRaw;\nexports.onScopeDispose = reactivity.onScopeDispose;\nexports.onWatcherCleanup = reactivity.onWatcherCleanup;\nexports.proxyRefs = reactivity.proxyRefs;\nexports.reactive = reactivity.reactive;\nexports.readonly = reactivity.readonly;\nexports.ref = reactivity.ref;\nexports.shallowReactive = reactivity.shallowReactive;\nexports.shallowReadonly = reactivity.shallowReadonly;\nexports.shallowRef = reactivity.shallowRef;\nexports.stop = reactivity.stop;\nexports.toRaw = reactivity.toRaw;\nexports.toRef = reactivity.toRef;\nexports.toRefs = reactivity.toRefs;\nexports.toValue = reactivity.toValue;\nexports.triggerRef = reactivity.triggerRef;\nexports.unref = reactivity.unref;\nexports.camelize = shared.camelize;\nexports.capitalize = shared.capitalize;\nexports.normalizeClass = shared.normalizeClass;\nexports.normalizeProps = shared.normalizeProps;\nexports.normalizeStyle = shared.normalizeStyle;\nexports.toDisplayString = shared.toDisplayString;\nexports.toHandlerKey = shared.toHandlerKey;\nexports.BaseTransition = BaseTransition;\nexports.BaseTransitionPropsValidators = BaseTransitionPropsValidators;\nexports.Comment = Comment;\nexports.DeprecationTypes = DeprecationTypes;\nexports.ErrorCodes = ErrorCodes;\nexports.ErrorTypeStrings = ErrorTypeStrings;\nexports.Fragment = Fragment;\nexports.KeepAlive = KeepAlive;\nexports.Static = Static;\nexports.Suspense = Suspense;\nexports.Teleport = Teleport;\nexports.Text = Text;\nexports.assertNumber = assertNumber;\nexports.callWithAsyncErrorHandling = callWithAsyncErrorHandling;\nexports.callWithErrorHandling = callWithErrorHandling;\nexports.cloneVNode = cloneVNode;\nexports.compatUtils = compatUtils;\nexports.computed = computed;\nexports.createBlock = createBlock;\nexports.createCommentVNode = createCommentVNode;\nexports.createElementBlock = createElementBlock;\nexports.createElementVNode = createBaseVNode;\nexports.createHydrationRenderer = createHydrationRenderer;\nexports.createPropsRestProxy = createPropsRestProxy;\nexports.createRenderer = createRenderer;\nexports.createSlots = createSlots;\nexports.createStaticVNode = createStaticVNode;\nexports.createTextVNode = createTextVNode;\nexports.createVNode = createVNode;\nexports.defineAsyncComponent = defineAsyncComponent;\nexports.defineComponent = defineComponent;\nexports.defineEmits = defineEmits;\nexports.defineExpose = defineExpose;\nexports.defineModel = defineModel;\nexports.defineOptions = defineOptions;\nexports.defineProps = defineProps;\nexports.defineSlots = defineSlots;\nexports.devtools = devtools;\nexports.getCurrentInstance = getCurrentInstance;\nexports.getTransitionRawChildren = getTransitionRawChildren;\nexports.guardReactiveProps = guardReactiveProps;\nexports.h = h;\nexports.handleError = handleError;\nexports.hasInjectionContext = hasInjectionContext;\nexports.hydrateOnIdle = hydrateOnIdle;\nexports.hydrateOnInteraction = hydrateOnInteraction;\nexports.hydrateOnMediaQuery = hydrateOnMediaQuery;\nexports.hydrateOnVisible = hydrateOnVisible;\nexports.initCustomFormatter = initCustomFormatter;\nexports.inject = inject;\nexports.isMemoSame = isMemoSame;\nexports.isRuntimeOnly = isRuntimeOnly;\nexports.isVNode = isVNode;\nexports.mergeDefaults = mergeDefaults;\nexports.mergeModels = mergeModels;\nexports.mergeProps = mergeProps;\nexports.nextTick = nextTick;\nexports.onActivated = onActivated;\nexports.onBeforeMount = onBeforeMount;\nexports.onBeforeUnmount = onBeforeUnmount;\nexports.onBeforeUpdate = onBeforeUpdate;\nexports.onDeactivated = onDeactivated;\nexports.onErrorCaptured = onErrorCaptured;\nexports.onMounted = onMounted;\nexports.onRenderTracked = onRenderTracked;\nexports.onRenderTriggered = onRenderTriggered;\nexports.onServerPrefetch = onServerPrefetch;\nexports.onUnmounted = onUnmounted;\nexports.onUpdated = onUpdated;\nexports.openBlock = openBlock;\nexports.popScopeId = popScopeId;\nexports.provide = provide;\nexports.pushScopeId = pushScopeId;\nexports.queuePostFlushCb = queuePostFlushCb;\nexports.registerRuntimeCompiler = registerRuntimeCompiler;\nexports.renderList = renderList;\nexports.renderSlot = renderSlot;\nexports.resolveComponent = resolveComponent;\nexports.resolveDirective = resolveDirective;\nexports.resolveDynamicComponent = resolveDynamicComponent;\nexports.resolveFilter = resolveFilter;\nexports.resolveTransitionHooks = resolveTransitionHooks;\nexports.setBlockTracking = setBlockTracking;\nexports.setDevtoolsHook = setDevtoolsHook;\nexports.setTransitionHooks = setTransitionHooks;\nexports.ssrContextKey = ssrContextKey;\nexports.ssrUtils = ssrUtils;\nexports.toHandlers = toHandlers;\nexports.transformVNodeArgs = transformVNodeArgs;\nexports.useAttrs = useAttrs;\nexports.useId = useId;\nexports.useModel = useModel;\nexports.useSSRContext = useSSRContext;\nexports.useSlots = useSlots;\nexports.useTemplateRef = useTemplateRef;\nexports.useTransitionState = useTransitionState;\nexports.version = version;\nexports.warn = warn$1;\nexports.watch = watch;\nexports.watchEffect = watchEffect;\nexports.watchPostEffect = watchPostEffect;\nexports.watchSyncEffect = watchSyncEffect;\nexports.withAsyncContext = withAsyncContext;\nexports.withCtx = withCtx;\nexports.withDefaults = withDefaults;\nexports.withDirectives = withDirectives;\nexports.withMemo = withMemo;\nexports.withScopeId = withScopeId;\n","'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./dist/runtime-core.cjs.prod.js')\n} else {\n  module.exports = require('./dist/runtime-core.cjs.js')\n}\n","/**\n* @vue/runtime-dom v3.5.18\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar runtimeCore = require('@vue/runtime-core');\nvar shared = require('@vue/shared');\n\nlet policy = void 0;\nconst tt = typeof window !== \"undefined\" && window.trustedTypes;\nif (tt) {\n  try {\n    policy = /* @__PURE__ */ tt.createPolicy(\"vue\", {\n      createHTML: (val) => val\n    });\n  } catch (e) {\n  }\n}\nconst unsafeToTrustedHTML = policy ? (val) => policy.createHTML(val) : (val) => val;\nconst svgNS = \"http://www.w3.org/2000/svg\";\nconst mathmlNS = \"http://www.w3.org/1998/Math/MathML\";\nconst doc = typeof document !== \"undefined\" ? document : null;\nconst templateContainer = doc && /* @__PURE__ */ doc.createElement(\"template\");\nconst nodeOps = {\n  insert: (child, parent, anchor) => {\n    parent.insertBefore(child, anchor || null);\n  },\n  remove: (child) => {\n    const parent = child.parentNode;\n    if (parent) {\n      parent.removeChild(child);\n    }\n  },\n  createElement: (tag, namespace, is, props) => {\n    const el = namespace === \"svg\" ? doc.createElementNS(svgNS, tag) : namespace === \"mathml\" ? doc.createElementNS(mathmlNS, tag) : is ? doc.createElement(tag, { is }) : doc.createElement(tag);\n    if (tag === \"select\" && props && props.multiple != null) {\n      el.setAttribute(\"multiple\", props.multiple);\n    }\n    return el;\n  },\n  createText: (text) => doc.createTextNode(text),\n  createComment: (text) => doc.createComment(text),\n  setText: (node, text) => {\n    node.nodeValue = text;\n  },\n  setElementText: (el, text) => {\n    el.textContent = text;\n  },\n  parentNode: (node) => node.parentNode,\n  nextSibling: (node) => node.nextSibling,\n  querySelector: (selector) => doc.querySelector(selector),\n  setScopeId(el, id) {\n    el.setAttribute(id, \"\");\n  },\n  // __UNSAFE__\n  // Reason: innerHTML.\n  // Static content here can only come from compiled templates.\n  // As long as the user only uses trusted templates, this is safe.\n  insertStaticContent(content, parent, anchor, namespace, start, end) {\n    const before = anchor ? anchor.previousSibling : parent.lastChild;\n    if (start && (start === end || start.nextSibling)) {\n      while (true) {\n        parent.insertBefore(start.cloneNode(true), anchor);\n        if (start === end || !(start = start.nextSibling)) break;\n      }\n    } else {\n      templateContainer.innerHTML = unsafeToTrustedHTML(\n        namespace === \"svg\" ? `<svg>${content}</svg>` : namespace === \"mathml\" ? `<math>${content}</math>` : content\n      );\n      const template = templateContainer.content;\n      if (namespace === \"svg\" || namespace === \"mathml\") {\n        const wrapper = template.firstChild;\n        while (wrapper.firstChild) {\n          template.appendChild(wrapper.firstChild);\n        }\n        template.removeChild(wrapper);\n      }\n      parent.insertBefore(template, anchor);\n    }\n    return [\n      // first\n      before ? before.nextSibling : parent.firstChild,\n      // last\n      anchor ? anchor.previousSibling : parent.lastChild\n    ];\n  }\n};\n\nconst TRANSITION = \"transition\";\nconst ANIMATION = \"animation\";\nconst vtcKey = Symbol(\"_vtc\");\nconst DOMTransitionPropsValidators = {\n  name: String,\n  type: String,\n  css: {\n    type: Boolean,\n    default: true\n  },\n  duration: [String, Number, Object],\n  enterFromClass: String,\n  enterActiveClass: String,\n  enterToClass: String,\n  appearFromClass: String,\n  appearActiveClass: String,\n  appearToClass: String,\n  leaveFromClass: String,\n  leaveActiveClass: String,\n  leaveToClass: String\n};\nconst TransitionPropsValidators = /* @__PURE__ */ shared.extend(\n  {},\n  runtimeCore.BaseTransitionPropsValidators,\n  DOMTransitionPropsValidators\n);\nconst decorate$1 = (t) => {\n  t.displayName = \"Transition\";\n  t.props = TransitionPropsValidators;\n  return t;\n};\nconst Transition = /* @__PURE__ */ decorate$1(\n  (props, { slots }) => runtimeCore.h(runtimeCore.BaseTransition, resolveTransitionProps(props), slots)\n);\nconst callHook = (hook, args = []) => {\n  if (shared.isArray(hook)) {\n    hook.forEach((h2) => h2(...args));\n  } else if (hook) {\n    hook(...args);\n  }\n};\nconst hasExplicitCallback = (hook) => {\n  return hook ? shared.isArray(hook) ? hook.some((h2) => h2.length > 1) : hook.length > 1 : false;\n};\nfunction resolveTransitionProps(rawProps) {\n  const baseProps = {};\n  for (const key in rawProps) {\n    if (!(key in DOMTransitionPropsValidators)) {\n      baseProps[key] = rawProps[key];\n    }\n  }\n  if (rawProps.css === false) {\n    return baseProps;\n  }\n  const {\n    name = \"v\",\n    type,\n    duration,\n    enterFromClass = `${name}-enter-from`,\n    enterActiveClass = `${name}-enter-active`,\n    enterToClass = `${name}-enter-to`,\n    appearFromClass = enterFromClass,\n    appearActiveClass = enterActiveClass,\n    appearToClass = enterToClass,\n    leaveFromClass = `${name}-leave-from`,\n    leaveActiveClass = `${name}-leave-active`,\n    leaveToClass = `${name}-leave-to`\n  } = rawProps;\n  const durations = normalizeDuration(duration);\n  const enterDuration = durations && durations[0];\n  const leaveDuration = durations && durations[1];\n  const {\n    onBeforeEnter,\n    onEnter,\n    onEnterCancelled,\n    onLeave,\n    onLeaveCancelled,\n    onBeforeAppear = onBeforeEnter,\n    onAppear = onEnter,\n    onAppearCancelled = onEnterCancelled\n  } = baseProps;\n  const finishEnter = (el, isAppear, done, isCancelled) => {\n    el._enterCancelled = isCancelled;\n    removeTransitionClass(el, isAppear ? appearToClass : enterToClass);\n    removeTransitionClass(el, isAppear ? appearActiveClass : enterActiveClass);\n    done && done();\n  };\n  const finishLeave = (el, done) => {\n    el._isLeaving = false;\n    removeTransitionClass(el, leaveFromClass);\n    removeTransitionClass(el, leaveToClass);\n    removeTransitionClass(el, leaveActiveClass);\n    done && done();\n  };\n  const makeEnterHook = (isAppear) => {\n    return (el, done) => {\n      const hook = isAppear ? onAppear : onEnter;\n      const resolve = () => finishEnter(el, isAppear, done);\n      callHook(hook, [el, resolve]);\n      nextFrame(() => {\n        removeTransitionClass(el, isAppear ? appearFromClass : enterFromClass);\n        addTransitionClass(el, isAppear ? appearToClass : enterToClass);\n        if (!hasExplicitCallback(hook)) {\n          whenTransitionEnds(el, type, enterDuration, resolve);\n        }\n      });\n    };\n  };\n  return shared.extend(baseProps, {\n    onBeforeEnter(el) {\n      callHook(onBeforeEnter, [el]);\n      addTransitionClass(el, enterFromClass);\n      addTransitionClass(el, enterActiveClass);\n    },\n    onBeforeAppear(el) {\n      callHook(onBeforeAppear, [el]);\n      addTransitionClass(el, appearFromClass);\n      addTransitionClass(el, appearActiveClass);\n    },\n    onEnter: makeEnterHook(false),\n    onAppear: makeEnterHook(true),\n    onLeave(el, done) {\n      el._isLeaving = true;\n      const resolve = () => finishLeave(el, done);\n      addTransitionClass(el, leaveFromClass);\n      if (!el._enterCancelled) {\n        forceReflow();\n        addTransitionClass(el, leaveActiveClass);\n      } else {\n        addTransitionClass(el, leaveActiveClass);\n        forceReflow();\n      }\n      nextFrame(() => {\n        if (!el._isLeaving) {\n          return;\n        }\n        removeTransitionClass(el, leaveFromClass);\n        addTransitionClass(el, leaveToClass);\n        if (!hasExplicitCallback(onLeave)) {\n          whenTransitionEnds(el, type, leaveDuration, resolve);\n        }\n      });\n      callHook(onLeave, [el, resolve]);\n    },\n    onEnterCancelled(el) {\n      finishEnter(el, false, void 0, true);\n      callHook(onEnterCancelled, [el]);\n    },\n    onAppearCancelled(el) {\n      finishEnter(el, true, void 0, true);\n      callHook(onAppearCancelled, [el]);\n    },\n    onLeaveCancelled(el) {\n      finishLeave(el);\n      callHook(onLeaveCancelled, [el]);\n    }\n  });\n}\nfunction normalizeDuration(duration) {\n  if (duration == null) {\n    return null;\n  } else if (shared.isObject(duration)) {\n    return [NumberOf(duration.enter), NumberOf(duration.leave)];\n  } else {\n    const n = NumberOf(duration);\n    return [n, n];\n  }\n}\nfunction NumberOf(val) {\n  const res = shared.toNumber(val);\n  return res;\n}\nfunction addTransitionClass(el, cls) {\n  cls.split(/\\s+/).forEach((c) => c && el.classList.add(c));\n  (el[vtcKey] || (el[vtcKey] = /* @__PURE__ */ new Set())).add(cls);\n}\nfunction removeTransitionClass(el, cls) {\n  cls.split(/\\s+/).forEach((c) => c && el.classList.remove(c));\n  const _vtc = el[vtcKey];\n  if (_vtc) {\n    _vtc.delete(cls);\n    if (!_vtc.size) {\n      el[vtcKey] = void 0;\n    }\n  }\n}\nfunction nextFrame(cb) {\n  requestAnimationFrame(() => {\n    requestAnimationFrame(cb);\n  });\n}\nlet endId = 0;\nfunction whenTransitionEnds(el, expectedType, explicitTimeout, resolve) {\n  const id = el._endId = ++endId;\n  const resolveIfNotStale = () => {\n    if (id === el._endId) {\n      resolve();\n    }\n  };\n  if (explicitTimeout != null) {\n    return setTimeout(resolveIfNotStale, explicitTimeout);\n  }\n  const { type, timeout, propCount } = getTransitionInfo(el, expectedType);\n  if (!type) {\n    return resolve();\n  }\n  const endEvent = type + \"end\";\n  let ended = 0;\n  const end = () => {\n    el.removeEventListener(endEvent, onEnd);\n    resolveIfNotStale();\n  };\n  const onEnd = (e) => {\n    if (e.target === el && ++ended >= propCount) {\n      end();\n    }\n  };\n  setTimeout(() => {\n    if (ended < propCount) {\n      end();\n    }\n  }, timeout + 1);\n  el.addEventListener(endEvent, onEnd);\n}\nfunction getTransitionInfo(el, expectedType) {\n  const styles = window.getComputedStyle(el);\n  const getStyleProperties = (key) => (styles[key] || \"\").split(\", \");\n  const transitionDelays = getStyleProperties(`${TRANSITION}Delay`);\n  const transitionDurations = getStyleProperties(`${TRANSITION}Duration`);\n  const transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n  const animationDelays = getStyleProperties(`${ANIMATION}Delay`);\n  const animationDurations = getStyleProperties(`${ANIMATION}Duration`);\n  const animationTimeout = getTimeout(animationDelays, animationDurations);\n  let type = null;\n  let timeout = 0;\n  let propCount = 0;\n  if (expectedType === TRANSITION) {\n    if (transitionTimeout > 0) {\n      type = TRANSITION;\n      timeout = transitionTimeout;\n      propCount = transitionDurations.length;\n    }\n  } else if (expectedType === ANIMATION) {\n    if (animationTimeout > 0) {\n      type = ANIMATION;\n      timeout = animationTimeout;\n      propCount = animationDurations.length;\n    }\n  } else {\n    timeout = Math.max(transitionTimeout, animationTimeout);\n    type = timeout > 0 ? transitionTimeout > animationTimeout ? TRANSITION : ANIMATION : null;\n    propCount = type ? type === TRANSITION ? transitionDurations.length : animationDurations.length : 0;\n  }\n  const hasTransform = type === TRANSITION && /\\b(transform|all)(,|$)/.test(\n    getStyleProperties(`${TRANSITION}Property`).toString()\n  );\n  return {\n    type,\n    timeout,\n    propCount,\n    hasTransform\n  };\n}\nfunction getTimeout(delays, durations) {\n  while (delays.length < durations.length) {\n    delays = delays.concat(delays);\n  }\n  return Math.max(...durations.map((d, i) => toMs(d) + toMs(delays[i])));\n}\nfunction toMs(s) {\n  if (s === \"auto\") return 0;\n  return Number(s.slice(0, -1).replace(\",\", \".\")) * 1e3;\n}\nfunction forceReflow() {\n  return document.body.offsetHeight;\n}\n\nfunction patchClass(el, value, isSVG) {\n  const transitionClasses = el[vtcKey];\n  if (transitionClasses) {\n    value = (value ? [value, ...transitionClasses] : [...transitionClasses]).join(\" \");\n  }\n  if (value == null) {\n    el.removeAttribute(\"class\");\n  } else if (isSVG) {\n    el.setAttribute(\"class\", value);\n  } else {\n    el.className = value;\n  }\n}\n\nconst vShowOriginalDisplay = Symbol(\"_vod\");\nconst vShowHidden = Symbol(\"_vsh\");\nconst vShow = {\n  beforeMount(el, { value }, { transition }) {\n    el[vShowOriginalDisplay] = el.style.display === \"none\" ? \"\" : el.style.display;\n    if (transition && value) {\n      transition.beforeEnter(el);\n    } else {\n      setDisplay(el, value);\n    }\n  },\n  mounted(el, { value }, { transition }) {\n    if (transition && value) {\n      transition.enter(el);\n    }\n  },\n  updated(el, { value, oldValue }, { transition }) {\n    if (!value === !oldValue) return;\n    if (transition) {\n      if (value) {\n        transition.beforeEnter(el);\n        setDisplay(el, true);\n        transition.enter(el);\n      } else {\n        transition.leave(el, () => {\n          setDisplay(el, false);\n        });\n      }\n    } else {\n      setDisplay(el, value);\n    }\n  },\n  beforeUnmount(el, { value }) {\n    setDisplay(el, value);\n  }\n};\nfunction setDisplay(el, value) {\n  el.style.display = value ? el[vShowOriginalDisplay] : \"none\";\n  el[vShowHidden] = !value;\n}\nfunction initVShowForSSR() {\n  vShow.getSSRProps = ({ value }) => {\n    if (!value) {\n      return { style: { display: \"none\" } };\n    }\n  };\n}\n\nconst CSS_VAR_TEXT = Symbol(\"\");\nfunction useCssVars(getter) {\n  return;\n}\n\nconst displayRE = /(^|;)\\s*display\\s*:/;\nfunction patchStyle(el, prev, next) {\n  const style = el.style;\n  const isCssString = shared.isString(next);\n  let hasControlledDisplay = false;\n  if (next && !isCssString) {\n    if (prev) {\n      if (!shared.isString(prev)) {\n        for (const key in prev) {\n          if (next[key] == null) {\n            setStyle(style, key, \"\");\n          }\n        }\n      } else {\n        for (const prevStyle of prev.split(\";\")) {\n          const key = prevStyle.slice(0, prevStyle.indexOf(\":\")).trim();\n          if (next[key] == null) {\n            setStyle(style, key, \"\");\n          }\n        }\n      }\n    }\n    for (const key in next) {\n      if (key === \"display\") {\n        hasControlledDisplay = true;\n      }\n      setStyle(style, key, next[key]);\n    }\n  } else {\n    if (isCssString) {\n      if (prev !== next) {\n        const cssVarText = style[CSS_VAR_TEXT];\n        if (cssVarText) {\n          next += \";\" + cssVarText;\n        }\n        style.cssText = next;\n        hasControlledDisplay = displayRE.test(next);\n      }\n    } else if (prev) {\n      el.removeAttribute(\"style\");\n    }\n  }\n  if (vShowOriginalDisplay in el) {\n    el[vShowOriginalDisplay] = hasControlledDisplay ? style.display : \"\";\n    if (el[vShowHidden]) {\n      style.display = \"none\";\n    }\n  }\n}\nconst importantRE = /\\s*!important$/;\nfunction setStyle(style, name, val) {\n  if (shared.isArray(val)) {\n    val.forEach((v) => setStyle(style, name, v));\n  } else {\n    if (val == null) val = \"\";\n    if (name.startsWith(\"--\")) {\n      style.setProperty(name, val);\n    } else {\n      const prefixed = autoPrefix(style, name);\n      if (importantRE.test(val)) {\n        style.setProperty(\n          shared.hyphenate(prefixed),\n          val.replace(importantRE, \"\"),\n          \"important\"\n        );\n      } else {\n        style[prefixed] = val;\n      }\n    }\n  }\n}\nconst prefixes = [\"Webkit\", \"Moz\", \"ms\"];\nconst prefixCache = {};\nfunction autoPrefix(style, rawName) {\n  const cached = prefixCache[rawName];\n  if (cached) {\n    return cached;\n  }\n  let name = runtimeCore.camelize(rawName);\n  if (name !== \"filter\" && name in style) {\n    return prefixCache[rawName] = name;\n  }\n  name = shared.capitalize(name);\n  for (let i = 0; i < prefixes.length; i++) {\n    const prefixed = prefixes[i] + name;\n    if (prefixed in style) {\n      return prefixCache[rawName] = prefixed;\n    }\n  }\n  return rawName;\n}\n\nconst xlinkNS = \"http://www.w3.org/1999/xlink\";\nfunction patchAttr(el, key, value, isSVG, instance, isBoolean = shared.isSpecialBooleanAttr(key)) {\n  if (isSVG && key.startsWith(\"xlink:\")) {\n    if (value == null) {\n      el.removeAttributeNS(xlinkNS, key.slice(6, key.length));\n    } else {\n      el.setAttributeNS(xlinkNS, key, value);\n    }\n  } else {\n    if (value == null || isBoolean && !shared.includeBooleanAttr(value)) {\n      el.removeAttribute(key);\n    } else {\n      el.setAttribute(\n        key,\n        isBoolean ? \"\" : shared.isSymbol(value) ? String(value) : value\n      );\n    }\n  }\n}\n\nfunction patchDOMProp(el, key, value, parentComponent, attrName) {\n  if (key === \"innerHTML\" || key === \"textContent\") {\n    if (value != null) {\n      el[key] = key === \"innerHTML\" ? unsafeToTrustedHTML(value) : value;\n    }\n    return;\n  }\n  const tag = el.tagName;\n  if (key === \"value\" && tag !== \"PROGRESS\" && // custom elements may use _value internally\n  !tag.includes(\"-\")) {\n    const oldValue = tag === \"OPTION\" ? el.getAttribute(\"value\") || \"\" : el.value;\n    const newValue = value == null ? (\n      // #11647: value should be set as empty string for null and undefined,\n      // but <input type=\"checkbox\"> should be set as 'on'.\n      el.type === \"checkbox\" ? \"on\" : \"\"\n    ) : String(value);\n    if (oldValue !== newValue || !(\"_value\" in el)) {\n      el.value = newValue;\n    }\n    if (value == null) {\n      el.removeAttribute(key);\n    }\n    el._value = value;\n    return;\n  }\n  let needRemove = false;\n  if (value === \"\" || value == null) {\n    const type = typeof el[key];\n    if (type === \"boolean\") {\n      value = shared.includeBooleanAttr(value);\n    } else if (value == null && type === \"string\") {\n      value = \"\";\n      needRemove = true;\n    } else if (type === \"number\") {\n      value = 0;\n      needRemove = true;\n    }\n  }\n  try {\n    el[key] = value;\n  } catch (e) {\n  }\n  needRemove && el.removeAttribute(attrName || key);\n}\n\nfunction addEventListener(el, event, handler, options) {\n  el.addEventListener(event, handler, options);\n}\nfunction removeEventListener(el, event, handler, options) {\n  el.removeEventListener(event, handler, options);\n}\nconst veiKey = Symbol(\"_vei\");\nfunction patchEvent(el, rawName, prevValue, nextValue, instance = null) {\n  const invokers = el[veiKey] || (el[veiKey] = {});\n  const existingInvoker = invokers[rawName];\n  if (nextValue && existingInvoker) {\n    existingInvoker.value = nextValue;\n  } else {\n    const [name, options] = parseName(rawName);\n    if (nextValue) {\n      const invoker = invokers[rawName] = createInvoker(\n        nextValue,\n        instance\n      );\n      addEventListener(el, name, invoker, options);\n    } else if (existingInvoker) {\n      removeEventListener(el, name, existingInvoker, options);\n      invokers[rawName] = void 0;\n    }\n  }\n}\nconst optionsModifierRE = /(?:Once|Passive|Capture)$/;\nfunction parseName(name) {\n  let options;\n  if (optionsModifierRE.test(name)) {\n    options = {};\n    let m;\n    while (m = name.match(optionsModifierRE)) {\n      name = name.slice(0, name.length - m[0].length);\n      options[m[0].toLowerCase()] = true;\n    }\n  }\n  const event = name[2] === \":\" ? name.slice(3) : shared.hyphenate(name.slice(2));\n  return [event, options];\n}\nlet cachedNow = 0;\nconst p = /* @__PURE__ */ Promise.resolve();\nconst getNow = () => cachedNow || (p.then(() => cachedNow = 0), cachedNow = Date.now());\nfunction createInvoker(initialValue, instance) {\n  const invoker = (e) => {\n    if (!e._vts) {\n      e._vts = Date.now();\n    } else if (e._vts <= invoker.attached) {\n      return;\n    }\n    runtimeCore.callWithAsyncErrorHandling(\n      patchStopImmediatePropagation(e, invoker.value),\n      instance,\n      5,\n      [e]\n    );\n  };\n  invoker.value = initialValue;\n  invoker.attached = getNow();\n  return invoker;\n}\nfunction patchStopImmediatePropagation(e, value) {\n  if (shared.isArray(value)) {\n    const originalStop = e.stopImmediatePropagation;\n    e.stopImmediatePropagation = () => {\n      originalStop.call(e);\n      e._stopped = true;\n    };\n    return value.map(\n      (fn) => (e2) => !e2._stopped && fn && fn(e2)\n    );\n  } else {\n    return value;\n  }\n}\n\nconst isNativeOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // lowercase letter\nkey.charCodeAt(2) > 96 && key.charCodeAt(2) < 123;\nconst patchProp = (el, key, prevValue, nextValue, namespace, parentComponent) => {\n  const isSVG = namespace === \"svg\";\n  if (key === \"class\") {\n    patchClass(el, nextValue, isSVG);\n  } else if (key === \"style\") {\n    patchStyle(el, prevValue, nextValue);\n  } else if (shared.isOn(key)) {\n    if (!shared.isModelListener(key)) {\n      patchEvent(el, key, prevValue, nextValue, parentComponent);\n    }\n  } else if (key[0] === \".\" ? (key = key.slice(1), true) : key[0] === \"^\" ? (key = key.slice(1), false) : shouldSetAsProp(el, key, nextValue, isSVG)) {\n    patchDOMProp(el, key, nextValue);\n    if (!el.tagName.includes(\"-\") && (key === \"value\" || key === \"checked\" || key === \"selected\")) {\n      patchAttr(el, key, nextValue, isSVG, parentComponent, key !== \"value\");\n    }\n  } else if (\n    // #11081 force set props for possible async custom element\n    el._isVueCE && (/[A-Z]/.test(key) || !shared.isString(nextValue))\n  ) {\n    patchDOMProp(el, shared.camelize(key), nextValue, parentComponent, key);\n  } else {\n    if (key === \"true-value\") {\n      el._trueValue = nextValue;\n    } else if (key === \"false-value\") {\n      el._falseValue = nextValue;\n    }\n    patchAttr(el, key, nextValue, isSVG);\n  }\n};\nfunction shouldSetAsProp(el, key, value, isSVG) {\n  if (isSVG) {\n    if (key === \"innerHTML\" || key === \"textContent\") {\n      return true;\n    }\n    if (key in el && isNativeOn(key) && shared.isFunction(value)) {\n      return true;\n    }\n    return false;\n  }\n  if (key === \"spellcheck\" || key === \"draggable\" || key === \"translate\" || key === \"autocorrect\") {\n    return false;\n  }\n  if (key === \"form\") {\n    return false;\n  }\n  if (key === \"list\" && el.tagName === \"INPUT\") {\n    return false;\n  }\n  if (key === \"type\" && el.tagName === \"TEXTAREA\") {\n    return false;\n  }\n  if (key === \"width\" || key === \"height\") {\n    const tag = el.tagName;\n    if (tag === \"IMG\" || tag === \"VIDEO\" || tag === \"CANVAS\" || tag === \"SOURCE\") {\n      return false;\n    }\n  }\n  if (isNativeOn(key) && shared.isString(value)) {\n    return false;\n  }\n  return key in el;\n}\n\nconst REMOVAL = {};\n/*! #__NO_SIDE_EFFECTS__ */\n// @__NO_SIDE_EFFECTS__\nfunction defineCustomElement(options, extraOptions, _createApp) {\n  const Comp = runtimeCore.defineComponent(options, extraOptions);\n  if (shared.isPlainObject(Comp)) shared.extend(Comp, extraOptions);\n  class VueCustomElement extends VueElement {\n    constructor(initialProps) {\n      super(Comp, initialProps, _createApp);\n    }\n  }\n  VueCustomElement.def = Comp;\n  return VueCustomElement;\n}\n/*! #__NO_SIDE_EFFECTS__ */\nconst defineSSRCustomElement = /* @__NO_SIDE_EFFECTS__ */ (options, extraOptions) => {\n  return /* @__PURE__ */ defineCustomElement(options, extraOptions, createSSRApp);\n};\nconst BaseClass = typeof HTMLElement !== \"undefined\" ? HTMLElement : class {\n};\nclass VueElement extends BaseClass {\n  constructor(_def, _props = {}, _createApp = createApp) {\n    super();\n    this._def = _def;\n    this._props = _props;\n    this._createApp = _createApp;\n    this._isVueCE = true;\n    /**\n     * @internal\n     */\n    this._instance = null;\n    /**\n     * @internal\n     */\n    this._app = null;\n    /**\n     * @internal\n     */\n    this._nonce = this._def.nonce;\n    this._connected = false;\n    this._resolved = false;\n    this._numberProps = null;\n    this._styleChildren = /* @__PURE__ */ new WeakSet();\n    this._ob = null;\n    if (this.shadowRoot && _createApp !== createApp) {\n      this._root = this.shadowRoot;\n    } else {\n      if (_def.shadowRoot !== false) {\n        this.attachShadow({ mode: \"open\" });\n        this._root = this.shadowRoot;\n      } else {\n        this._root = this;\n      }\n    }\n  }\n  connectedCallback() {\n    if (!this.isConnected) return;\n    if (!this.shadowRoot && !this._resolved) {\n      this._parseSlots();\n    }\n    this._connected = true;\n    let parent = this;\n    while (parent = parent && (parent.parentNode || parent.host)) {\n      if (parent instanceof VueElement) {\n        this._parent = parent;\n        break;\n      }\n    }\n    if (!this._instance) {\n      if (this._resolved) {\n        this._mount(this._def);\n      } else {\n        if (parent && parent._pendingResolve) {\n          this._pendingResolve = parent._pendingResolve.then(() => {\n            this._pendingResolve = void 0;\n            this._resolveDef();\n          });\n        } else {\n          this._resolveDef();\n        }\n      }\n    }\n  }\n  _setParent(parent = this._parent) {\n    if (parent) {\n      this._instance.parent = parent._instance;\n      this._inheritParentContext(parent);\n    }\n  }\n  _inheritParentContext(parent = this._parent) {\n    if (parent && this._app) {\n      Object.setPrototypeOf(\n        this._app._context.provides,\n        parent._instance.provides\n      );\n    }\n  }\n  disconnectedCallback() {\n    this._connected = false;\n    runtimeCore.nextTick(() => {\n      if (!this._connected) {\n        if (this._ob) {\n          this._ob.disconnect();\n          this._ob = null;\n        }\n        this._app && this._app.unmount();\n        if (this._instance) this._instance.ce = void 0;\n        this._app = this._instance = null;\n      }\n    });\n  }\n  /**\n   * resolve inner component definition (handle possible async component)\n   */\n  _resolveDef() {\n    if (this._pendingResolve) {\n      return;\n    }\n    for (let i = 0; i < this.attributes.length; i++) {\n      this._setAttr(this.attributes[i].name);\n    }\n    this._ob = new MutationObserver((mutations) => {\n      for (const m of mutations) {\n        this._setAttr(m.attributeName);\n      }\n    });\n    this._ob.observe(this, { attributes: true });\n    const resolve = (def, isAsync = false) => {\n      this._resolved = true;\n      this._pendingResolve = void 0;\n      const { props, styles } = def;\n      let numberProps;\n      if (props && !shared.isArray(props)) {\n        for (const key in props) {\n          const opt = props[key];\n          if (opt === Number || opt && opt.type === Number) {\n            if (key in this._props) {\n              this._props[key] = shared.toNumber(this._props[key]);\n            }\n            (numberProps || (numberProps = /* @__PURE__ */ Object.create(null)))[shared.camelize(key)] = true;\n          }\n        }\n      }\n      this._numberProps = numberProps;\n      this._resolveProps(def);\n      if (this.shadowRoot) {\n        this._applyStyles(styles);\n      }\n      this._mount(def);\n    };\n    const asyncDef = this._def.__asyncLoader;\n    if (asyncDef) {\n      this._pendingResolve = asyncDef().then((def) => {\n        def.configureApp = this._def.configureApp;\n        resolve(this._def = def, true);\n      });\n    } else {\n      resolve(this._def);\n    }\n  }\n  _mount(def) {\n    this._app = this._createApp(def);\n    this._inheritParentContext();\n    if (def.configureApp) {\n      def.configureApp(this._app);\n    }\n    this._app._ceVNode = this._createVNode();\n    this._app.mount(this._root);\n    const exposed = this._instance && this._instance.exposed;\n    if (!exposed) return;\n    for (const key in exposed) {\n      if (!shared.hasOwn(this, key)) {\n        Object.defineProperty(this, key, {\n          // unwrap ref to be consistent with public instance behavior\n          get: () => runtimeCore.unref(exposed[key])\n        });\n      }\n    }\n  }\n  _resolveProps(def) {\n    const { props } = def;\n    const declaredPropKeys = shared.isArray(props) ? props : Object.keys(props || {});\n    for (const key of Object.keys(this)) {\n      if (key[0] !== \"_\" && declaredPropKeys.includes(key)) {\n        this._setProp(key, this[key]);\n      }\n    }\n    for (const key of declaredPropKeys.map(shared.camelize)) {\n      Object.defineProperty(this, key, {\n        get() {\n          return this._getProp(key);\n        },\n        set(val) {\n          this._setProp(key, val, true, true);\n        }\n      });\n    }\n  }\n  _setAttr(key) {\n    if (key.startsWith(\"data-v-\")) return;\n    const has = this.hasAttribute(key);\n    let value = has ? this.getAttribute(key) : REMOVAL;\n    const camelKey = shared.camelize(key);\n    if (has && this._numberProps && this._numberProps[camelKey]) {\n      value = shared.toNumber(value);\n    }\n    this._setProp(camelKey, value, false, true);\n  }\n  /**\n   * @internal\n   */\n  _getProp(key) {\n    return this._props[key];\n  }\n  /**\n   * @internal\n   */\n  _setProp(key, val, shouldReflect = true, shouldUpdate = false) {\n    if (val !== this._props[key]) {\n      if (val === REMOVAL) {\n        delete this._props[key];\n      } else {\n        this._props[key] = val;\n        if (key === \"key\" && this._app) {\n          this._app._ceVNode.key = val;\n        }\n      }\n      if (shouldUpdate && this._instance) {\n        this._update();\n      }\n      if (shouldReflect) {\n        const ob = this._ob;\n        ob && ob.disconnect();\n        if (val === true) {\n          this.setAttribute(shared.hyphenate(key), \"\");\n        } else if (typeof val === \"string\" || typeof val === \"number\") {\n          this.setAttribute(shared.hyphenate(key), val + \"\");\n        } else if (!val) {\n          this.removeAttribute(shared.hyphenate(key));\n        }\n        ob && ob.observe(this, { attributes: true });\n      }\n    }\n  }\n  _update() {\n    const vnode = this._createVNode();\n    if (this._app) vnode.appContext = this._app._context;\n    render(vnode, this._root);\n  }\n  _createVNode() {\n    const baseProps = {};\n    if (!this.shadowRoot) {\n      baseProps.onVnodeMounted = baseProps.onVnodeUpdated = this._renderSlots.bind(this);\n    }\n    const vnode = runtimeCore.createVNode(this._def, shared.extend(baseProps, this._props));\n    if (!this._instance) {\n      vnode.ce = (instance) => {\n        this._instance = instance;\n        instance.ce = this;\n        instance.isCE = true;\n        const dispatch = (event, args) => {\n          this.dispatchEvent(\n            new CustomEvent(\n              event,\n              shared.isPlainObject(args[0]) ? shared.extend({ detail: args }, args[0]) : { detail: args }\n            )\n          );\n        };\n        instance.emit = (event, ...args) => {\n          dispatch(event, args);\n          if (shared.hyphenate(event) !== event) {\n            dispatch(shared.hyphenate(event), args);\n          }\n        };\n        this._setParent();\n      };\n    }\n    return vnode;\n  }\n  _applyStyles(styles, owner) {\n    if (!styles) return;\n    if (owner) {\n      if (owner === this._def || this._styleChildren.has(owner)) {\n        return;\n      }\n      this._styleChildren.add(owner);\n    }\n    const nonce = this._nonce;\n    for (let i = styles.length - 1; i >= 0; i--) {\n      const s = document.createElement(\"style\");\n      if (nonce) s.setAttribute(\"nonce\", nonce);\n      s.textContent = styles[i];\n      this.shadowRoot.prepend(s);\n    }\n  }\n  /**\n   * Only called when shadowRoot is false\n   */\n  _parseSlots() {\n    const slots = this._slots = {};\n    let n;\n    while (n = this.firstChild) {\n      const slotName = n.nodeType === 1 && n.getAttribute(\"slot\") || \"default\";\n      (slots[slotName] || (slots[slotName] = [])).push(n);\n      this.removeChild(n);\n    }\n  }\n  /**\n   * Only called when shadowRoot is false\n   */\n  _renderSlots() {\n    const outlets = (this._teleportTarget || this).querySelectorAll(\"slot\");\n    const scopeId = this._instance.type.__scopeId;\n    for (let i = 0; i < outlets.length; i++) {\n      const o = outlets[i];\n      const slotName = o.getAttribute(\"name\") || \"default\";\n      const content = this._slots[slotName];\n      const parent = o.parentNode;\n      if (content) {\n        for (const n of content) {\n          if (scopeId && n.nodeType === 1) {\n            const id = scopeId + \"-s\";\n            const walker = document.createTreeWalker(n, 1);\n            n.setAttribute(id, \"\");\n            let child;\n            while (child = walker.nextNode()) {\n              child.setAttribute(id, \"\");\n            }\n          }\n          parent.insertBefore(n, o);\n        }\n      } else {\n        while (o.firstChild) parent.insertBefore(o.firstChild, o);\n      }\n      parent.removeChild(o);\n    }\n  }\n  /**\n   * @internal\n   */\n  _injectChildStyle(comp) {\n    this._applyStyles(comp.styles, comp);\n  }\n  /**\n   * @internal\n   */\n  _removeChildStyle(comp) {\n  }\n}\nfunction useHost(caller) {\n  const instance = runtimeCore.getCurrentInstance();\n  const el = instance && instance.ce;\n  if (el) {\n    return el;\n  }\n  return null;\n}\nfunction useShadowRoot() {\n  const el = useHost();\n  return el && el.shadowRoot;\n}\n\nfunction useCssModule(name = \"$style\") {\n  {\n    const instance = runtimeCore.getCurrentInstance();\n    if (!instance) {\n      return shared.EMPTY_OBJ;\n    }\n    const modules = instance.type.__cssModules;\n    if (!modules) {\n      return shared.EMPTY_OBJ;\n    }\n    const mod = modules[name];\n    if (!mod) {\n      return shared.EMPTY_OBJ;\n    }\n    return mod;\n  }\n}\n\nconst positionMap = /* @__PURE__ */ new WeakMap();\nconst newPositionMap = /* @__PURE__ */ new WeakMap();\nconst moveCbKey = Symbol(\"_moveCb\");\nconst enterCbKey = Symbol(\"_enterCb\");\nconst decorate = (t) => {\n  delete t.props.mode;\n  return t;\n};\nconst TransitionGroupImpl = /* @__PURE__ */ decorate({\n  name: \"TransitionGroup\",\n  props: /* @__PURE__ */ shared.extend({}, TransitionPropsValidators, {\n    tag: String,\n    moveClass: String\n  }),\n  setup(props, { slots }) {\n    const instance = runtimeCore.getCurrentInstance();\n    const state = runtimeCore.useTransitionState();\n    let prevChildren;\n    let children;\n    runtimeCore.onUpdated(() => {\n      if (!prevChildren.length) {\n        return;\n      }\n      const moveClass = props.moveClass || `${props.name || \"v\"}-move`;\n      if (!hasCSSTransform(\n        prevChildren[0].el,\n        instance.vnode.el,\n        moveClass\n      )) {\n        prevChildren = [];\n        return;\n      }\n      prevChildren.forEach(callPendingCbs);\n      prevChildren.forEach(recordPosition);\n      const movedChildren = prevChildren.filter(applyTranslation);\n      forceReflow();\n      movedChildren.forEach((c) => {\n        const el = c.el;\n        const style = el.style;\n        addTransitionClass(el, moveClass);\n        style.transform = style.webkitTransform = style.transitionDuration = \"\";\n        const cb = el[moveCbKey] = (e) => {\n          if (e && e.target !== el) {\n            return;\n          }\n          if (!e || /transform$/.test(e.propertyName)) {\n            el.removeEventListener(\"transitionend\", cb);\n            el[moveCbKey] = null;\n            removeTransitionClass(el, moveClass);\n          }\n        };\n        el.addEventListener(\"transitionend\", cb);\n      });\n      prevChildren = [];\n    });\n    return () => {\n      const rawProps = runtimeCore.toRaw(props);\n      const cssTransitionProps = resolveTransitionProps(rawProps);\n      let tag = rawProps.tag || runtimeCore.Fragment;\n      prevChildren = [];\n      if (children) {\n        for (let i = 0; i < children.length; i++) {\n          const child = children[i];\n          if (child.el && child.el instanceof Element) {\n            prevChildren.push(child);\n            runtimeCore.setTransitionHooks(\n              child,\n              runtimeCore.resolveTransitionHooks(\n                child,\n                cssTransitionProps,\n                state,\n                instance\n              )\n            );\n            positionMap.set(\n              child,\n              child.el.getBoundingClientRect()\n            );\n          }\n        }\n      }\n      children = slots.default ? runtimeCore.getTransitionRawChildren(slots.default()) : [];\n      for (let i = 0; i < children.length; i++) {\n        const child = children[i];\n        if (child.key != null) {\n          runtimeCore.setTransitionHooks(\n            child,\n            runtimeCore.resolveTransitionHooks(child, cssTransitionProps, state, instance)\n          );\n        }\n      }\n      return runtimeCore.createVNode(tag, null, children);\n    };\n  }\n});\nconst TransitionGroup = TransitionGroupImpl;\nfunction callPendingCbs(c) {\n  const el = c.el;\n  if (el[moveCbKey]) {\n    el[moveCbKey]();\n  }\n  if (el[enterCbKey]) {\n    el[enterCbKey]();\n  }\n}\nfunction recordPosition(c) {\n  newPositionMap.set(c, c.el.getBoundingClientRect());\n}\nfunction applyTranslation(c) {\n  const oldPos = positionMap.get(c);\n  const newPos = newPositionMap.get(c);\n  const dx = oldPos.left - newPos.left;\n  const dy = oldPos.top - newPos.top;\n  if (dx || dy) {\n    const s = c.el.style;\n    s.transform = s.webkitTransform = `translate(${dx}px,${dy}px)`;\n    s.transitionDuration = \"0s\";\n    return c;\n  }\n}\nfunction hasCSSTransform(el, root, moveClass) {\n  const clone = el.cloneNode();\n  const _vtc = el[vtcKey];\n  if (_vtc) {\n    _vtc.forEach((cls) => {\n      cls.split(/\\s+/).forEach((c) => c && clone.classList.remove(c));\n    });\n  }\n  moveClass.split(/\\s+/).forEach((c) => c && clone.classList.add(c));\n  clone.style.display = \"none\";\n  const container = root.nodeType === 1 ? root : root.parentNode;\n  container.appendChild(clone);\n  const { hasTransform } = getTransitionInfo(clone);\n  container.removeChild(clone);\n  return hasTransform;\n}\n\nconst getModelAssigner = (vnode) => {\n  const fn = vnode.props[\"onUpdate:modelValue\"] || false;\n  return shared.isArray(fn) ? (value) => shared.invokeArrayFns(fn, value) : fn;\n};\nfunction onCompositionStart(e) {\n  e.target.composing = true;\n}\nfunction onCompositionEnd(e) {\n  const target = e.target;\n  if (target.composing) {\n    target.composing = false;\n    target.dispatchEvent(new Event(\"input\"));\n  }\n}\nconst assignKey = Symbol(\"_assign\");\nconst vModelText = {\n  created(el, { modifiers: { lazy, trim, number } }, vnode) {\n    el[assignKey] = getModelAssigner(vnode);\n    const castToNumber = number || vnode.props && vnode.props.type === \"number\";\n    addEventListener(el, lazy ? \"change\" : \"input\", (e) => {\n      if (e.target.composing) return;\n      let domValue = el.value;\n      if (trim) {\n        domValue = domValue.trim();\n      }\n      if (castToNumber) {\n        domValue = shared.looseToNumber(domValue);\n      }\n      el[assignKey](domValue);\n    });\n    if (trim) {\n      addEventListener(el, \"change\", () => {\n        el.value = el.value.trim();\n      });\n    }\n    if (!lazy) {\n      addEventListener(el, \"compositionstart\", onCompositionStart);\n      addEventListener(el, \"compositionend\", onCompositionEnd);\n      addEventListener(el, \"change\", onCompositionEnd);\n    }\n  },\n  // set value on mounted so it's after min/max for type=\"range\"\n  mounted(el, { value }) {\n    el.value = value == null ? \"\" : value;\n  },\n  beforeUpdate(el, { value, oldValue, modifiers: { lazy, trim, number } }, vnode) {\n    el[assignKey] = getModelAssigner(vnode);\n    if (el.composing) return;\n    const elValue = (number || el.type === \"number\") && !/^0\\d/.test(el.value) ? shared.looseToNumber(el.value) : el.value;\n    const newValue = value == null ? \"\" : value;\n    if (elValue === newValue) {\n      return;\n    }\n    if (document.activeElement === el && el.type !== \"range\") {\n      if (lazy && value === oldValue) {\n        return;\n      }\n      if (trim && el.value.trim() === newValue) {\n        return;\n      }\n    }\n    el.value = newValue;\n  }\n};\nconst vModelCheckbox = {\n  // #4096 array checkboxes need to be deep traversed\n  deep: true,\n  created(el, _, vnode) {\n    el[assignKey] = getModelAssigner(vnode);\n    addEventListener(el, \"change\", () => {\n      const modelValue = el._modelValue;\n      const elementValue = getValue(el);\n      const checked = el.checked;\n      const assign = el[assignKey];\n      if (shared.isArray(modelValue)) {\n        const index = shared.looseIndexOf(modelValue, elementValue);\n        const found = index !== -1;\n        if (checked && !found) {\n          assign(modelValue.concat(elementValue));\n        } else if (!checked && found) {\n          const filtered = [...modelValue];\n          filtered.splice(index, 1);\n          assign(filtered);\n        }\n      } else if (shared.isSet(modelValue)) {\n        const cloned = new Set(modelValue);\n        if (checked) {\n          cloned.add(elementValue);\n        } else {\n          cloned.delete(elementValue);\n        }\n        assign(cloned);\n      } else {\n        assign(getCheckboxValue(el, checked));\n      }\n    });\n  },\n  // set initial checked on mount to wait for true-value/false-value\n  mounted: setChecked,\n  beforeUpdate(el, binding, vnode) {\n    el[assignKey] = getModelAssigner(vnode);\n    setChecked(el, binding, vnode);\n  }\n};\nfunction setChecked(el, { value, oldValue }, vnode) {\n  el._modelValue = value;\n  let checked;\n  if (shared.isArray(value)) {\n    checked = shared.looseIndexOf(value, vnode.props.value) > -1;\n  } else if (shared.isSet(value)) {\n    checked = value.has(vnode.props.value);\n  } else {\n    if (value === oldValue) return;\n    checked = shared.looseEqual(value, getCheckboxValue(el, true));\n  }\n  if (el.checked !== checked) {\n    el.checked = checked;\n  }\n}\nconst vModelRadio = {\n  created(el, { value }, vnode) {\n    el.checked = shared.looseEqual(value, vnode.props.value);\n    el[assignKey] = getModelAssigner(vnode);\n    addEventListener(el, \"change\", () => {\n      el[assignKey](getValue(el));\n    });\n  },\n  beforeUpdate(el, { value, oldValue }, vnode) {\n    el[assignKey] = getModelAssigner(vnode);\n    if (value !== oldValue) {\n      el.checked = shared.looseEqual(value, vnode.props.value);\n    }\n  }\n};\nconst vModelSelect = {\n  // <select multiple> value need to be deep traversed\n  deep: true,\n  created(el, { value, modifiers: { number } }, vnode) {\n    const isSetModel = shared.isSet(value);\n    addEventListener(el, \"change\", () => {\n      const selectedVal = Array.prototype.filter.call(el.options, (o) => o.selected).map(\n        (o) => number ? shared.looseToNumber(getValue(o)) : getValue(o)\n      );\n      el[assignKey](\n        el.multiple ? isSetModel ? new Set(selectedVal) : selectedVal : selectedVal[0]\n      );\n      el._assigning = true;\n      runtimeCore.nextTick(() => {\n        el._assigning = false;\n      });\n    });\n    el[assignKey] = getModelAssigner(vnode);\n  },\n  // set value in mounted & updated because <select> relies on its children\n  // <option>s.\n  mounted(el, { value }) {\n    setSelected(el, value);\n  },\n  beforeUpdate(el, _binding, vnode) {\n    el[assignKey] = getModelAssigner(vnode);\n  },\n  updated(el, { value }) {\n    if (!el._assigning) {\n      setSelected(el, value);\n    }\n  }\n};\nfunction setSelected(el, value) {\n  const isMultiple = el.multiple;\n  const isArrayValue = shared.isArray(value);\n  if (isMultiple && !isArrayValue && !shared.isSet(value)) {\n    return;\n  }\n  for (let i = 0, l = el.options.length; i < l; i++) {\n    const option = el.options[i];\n    const optionValue = getValue(option);\n    if (isMultiple) {\n      if (isArrayValue) {\n        const optionType = typeof optionValue;\n        if (optionType === \"string\" || optionType === \"number\") {\n          option.selected = value.some((v) => String(v) === String(optionValue));\n        } else {\n          option.selected = shared.looseIndexOf(value, optionValue) > -1;\n        }\n      } else {\n        option.selected = value.has(optionValue);\n      }\n    } else if (shared.looseEqual(getValue(option), value)) {\n      if (el.selectedIndex !== i) el.selectedIndex = i;\n      return;\n    }\n  }\n  if (!isMultiple && el.selectedIndex !== -1) {\n    el.selectedIndex = -1;\n  }\n}\nfunction getValue(el) {\n  return \"_value\" in el ? el._value : el.value;\n}\nfunction getCheckboxValue(el, checked) {\n  const key = checked ? \"_trueValue\" : \"_falseValue\";\n  return key in el ? el[key] : checked;\n}\nconst vModelDynamic = {\n  created(el, binding, vnode) {\n    callModelHook(el, binding, vnode, null, \"created\");\n  },\n  mounted(el, binding, vnode) {\n    callModelHook(el, binding, vnode, null, \"mounted\");\n  },\n  beforeUpdate(el, binding, vnode, prevVNode) {\n    callModelHook(el, binding, vnode, prevVNode, \"beforeUpdate\");\n  },\n  updated(el, binding, vnode, prevVNode) {\n    callModelHook(el, binding, vnode, prevVNode, \"updated\");\n  }\n};\nfunction resolveDynamicModel(tagName, type) {\n  switch (tagName) {\n    case \"SELECT\":\n      return vModelSelect;\n    case \"TEXTAREA\":\n      return vModelText;\n    default:\n      switch (type) {\n        case \"checkbox\":\n          return vModelCheckbox;\n        case \"radio\":\n          return vModelRadio;\n        default:\n          return vModelText;\n      }\n  }\n}\nfunction callModelHook(el, binding, vnode, prevVNode, hook) {\n  const modelToUse = resolveDynamicModel(\n    el.tagName,\n    vnode.props && vnode.props.type\n  );\n  const fn = modelToUse[hook];\n  fn && fn(el, binding, vnode, prevVNode);\n}\nfunction initVModelForSSR() {\n  vModelText.getSSRProps = ({ value }) => ({ value });\n  vModelRadio.getSSRProps = ({ value }, vnode) => {\n    if (vnode.props && shared.looseEqual(vnode.props.value, value)) {\n      return { checked: true };\n    }\n  };\n  vModelCheckbox.getSSRProps = ({ value }, vnode) => {\n    if (shared.isArray(value)) {\n      if (vnode.props && shared.looseIndexOf(value, vnode.props.value) > -1) {\n        return { checked: true };\n      }\n    } else if (shared.isSet(value)) {\n      if (vnode.props && value.has(vnode.props.value)) {\n        return { checked: true };\n      }\n    } else if (value) {\n      return { checked: true };\n    }\n  };\n  vModelDynamic.getSSRProps = (binding, vnode) => {\n    if (typeof vnode.type !== \"string\") {\n      return;\n    }\n    const modelToUse = resolveDynamicModel(\n      // resolveDynamicModel expects an uppercase tag name, but vnode.type is lowercase\n      vnode.type.toUpperCase(),\n      vnode.props && vnode.props.type\n    );\n    if (modelToUse.getSSRProps) {\n      return modelToUse.getSSRProps(binding, vnode);\n    }\n  };\n}\n\nconst systemModifiers = [\"ctrl\", \"shift\", \"alt\", \"meta\"];\nconst modifierGuards = {\n  stop: (e) => e.stopPropagation(),\n  prevent: (e) => e.preventDefault(),\n  self: (e) => e.target !== e.currentTarget,\n  ctrl: (e) => !e.ctrlKey,\n  shift: (e) => !e.shiftKey,\n  alt: (e) => !e.altKey,\n  meta: (e) => !e.metaKey,\n  left: (e) => \"button\" in e && e.button !== 0,\n  middle: (e) => \"button\" in e && e.button !== 1,\n  right: (e) => \"button\" in e && e.button !== 2,\n  exact: (e, modifiers) => systemModifiers.some((m) => e[`${m}Key`] && !modifiers.includes(m))\n};\nconst withModifiers = (fn, modifiers) => {\n  const cache = fn._withMods || (fn._withMods = {});\n  const cacheKey = modifiers.join(\".\");\n  return cache[cacheKey] || (cache[cacheKey] = (event, ...args) => {\n    for (let i = 0; i < modifiers.length; i++) {\n      const guard = modifierGuards[modifiers[i]];\n      if (guard && guard(event, modifiers)) return;\n    }\n    return fn(event, ...args);\n  });\n};\nconst keyNames = {\n  esc: \"escape\",\n  space: \" \",\n  up: \"arrow-up\",\n  left: \"arrow-left\",\n  right: \"arrow-right\",\n  down: \"arrow-down\",\n  delete: \"backspace\"\n};\nconst withKeys = (fn, modifiers) => {\n  const cache = fn._withKeys || (fn._withKeys = {});\n  const cacheKey = modifiers.join(\".\");\n  return cache[cacheKey] || (cache[cacheKey] = (event) => {\n    if (!(\"key\" in event)) {\n      return;\n    }\n    const eventKey = shared.hyphenate(event.key);\n    if (modifiers.some(\n      (k) => k === eventKey || keyNames[k] === eventKey\n    )) {\n      return fn(event);\n    }\n  });\n};\n\nconst rendererOptions = /* @__PURE__ */ shared.extend({ patchProp }, nodeOps);\nlet renderer;\nlet enabledHydration = false;\nfunction ensureRenderer() {\n  return renderer || (renderer = runtimeCore.createRenderer(rendererOptions));\n}\nfunction ensureHydrationRenderer() {\n  renderer = enabledHydration ? renderer : runtimeCore.createHydrationRenderer(rendererOptions);\n  enabledHydration = true;\n  return renderer;\n}\nconst render = (...args) => {\n  ensureRenderer().render(...args);\n};\nconst hydrate = (...args) => {\n  ensureHydrationRenderer().hydrate(...args);\n};\nconst createApp = (...args) => {\n  const app = ensureRenderer().createApp(...args);\n  const { mount } = app;\n  app.mount = (containerOrSelector) => {\n    const container = normalizeContainer(containerOrSelector);\n    if (!container) return;\n    const component = app._component;\n    if (!shared.isFunction(component) && !component.render && !component.template) {\n      component.template = container.innerHTML;\n    }\n    if (container.nodeType === 1) {\n      container.textContent = \"\";\n    }\n    const proxy = mount(container, false, resolveRootNamespace(container));\n    if (container instanceof Element) {\n      container.removeAttribute(\"v-cloak\");\n      container.setAttribute(\"data-v-app\", \"\");\n    }\n    return proxy;\n  };\n  return app;\n};\nconst createSSRApp = (...args) => {\n  const app = ensureHydrationRenderer().createApp(...args);\n  const { mount } = app;\n  app.mount = (containerOrSelector) => {\n    const container = normalizeContainer(containerOrSelector);\n    if (container) {\n      return mount(container, true, resolveRootNamespace(container));\n    }\n  };\n  return app;\n};\nfunction resolveRootNamespace(container) {\n  if (container instanceof SVGElement) {\n    return \"svg\";\n  }\n  if (typeof MathMLElement === \"function\" && container instanceof MathMLElement) {\n    return \"mathml\";\n  }\n}\nfunction normalizeContainer(container) {\n  if (shared.isString(container)) {\n    const res = document.querySelector(container);\n    return res;\n  }\n  return container;\n}\nlet ssrDirectiveInitialized = false;\nconst initDirectivesForSSR = () => {\n  if (!ssrDirectiveInitialized) {\n    ssrDirectiveInitialized = true;\n    initVModelForSSR();\n    initVShowForSSR();\n  }\n} ;\n\nexports.Transition = Transition;\nexports.TransitionGroup = TransitionGroup;\nexports.VueElement = VueElement;\nexports.createApp = createApp;\nexports.createSSRApp = createSSRApp;\nexports.defineCustomElement = defineCustomElement;\nexports.defineSSRCustomElement = defineSSRCustomElement;\nexports.hydrate = hydrate;\nexports.initDirectivesForSSR = initDirectivesForSSR;\nexports.render = render;\nexports.useCssModule = useCssModule;\nexports.useCssVars = useCssVars;\nexports.useHost = useHost;\nexports.useShadowRoot = useShadowRoot;\nexports.vModelCheckbox = vModelCheckbox;\nexports.vModelDynamic = vModelDynamic;\nexports.vModelRadio = vModelRadio;\nexports.vModelSelect = vModelSelect;\nexports.vModelText = vModelText;\nexports.vShow = vShow;\nexports.withKeys = withKeys;\nexports.withModifiers = withModifiers;\nObject.keys(runtimeCore).forEach(function (k) {\n  if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) exports[k] = runtimeCore[k];\n});\n","'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./dist/runtime-dom.cjs.prod.js')\n} else {\n  module.exports = require('./dist/runtime-dom.cjs.js')\n}\n","/**\n* vue v3.5.18\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar compilerDom = require('@vue/compiler-dom');\nvar runtimeDom = require('@vue/runtime-dom');\nvar shared = require('@vue/shared');\n\nfunction _interopNamespaceDefault(e) {\n  var n = Object.create(null);\n  if (e) {\n    for (var k in e) {\n      n[k] = e[k];\n    }\n  }\n  n.default = e;\n  return Object.freeze(n);\n}\n\nvar runtimeDom__namespace = /*#__PURE__*/_interopNamespaceDefault(runtimeDom);\n\nconst compileCache = /* @__PURE__ */ Object.create(null);\nfunction compileToFunction(template, options) {\n  if (!shared.isString(template)) {\n    if (template.nodeType) {\n      template = template.innerHTML;\n    } else {\n      return shared.NOOP;\n    }\n  }\n  const key = shared.genCacheKey(template, options);\n  const cached = compileCache[key];\n  if (cached) {\n    return cached;\n  }\n  if (template[0] === \"#\") {\n    const el = document.querySelector(template);\n    template = el ? el.innerHTML : ``;\n  }\n  const opts = shared.extend(\n    {\n      hoistStatic: true,\n      onError: void 0,\n      onWarn: shared.NOOP\n    },\n    options\n  );\n  if (!opts.isCustomElement && typeof customElements !== \"undefined\") {\n    opts.isCustomElement = (tag) => !!customElements.get(tag);\n  }\n  const { code } = compilerDom.compile(template, opts);\n  const render = new Function(\"Vue\", code)(runtimeDom__namespace);\n  render._rc = true;\n  return compileCache[key] = render;\n}\nruntimeDom.registerRuntimeCompiler(compileToFunction);\n\nexports.compile = compileToFunction;\nObject.keys(runtimeDom).forEach(function (k) {\n  if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) exports[k] = runtimeDom[k];\n});\n","'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./dist/vue.cjs.prod.js')\n} else {\n  module.exports = require('./dist/vue.cjs.js')\n}\n","/*!\n  * vue-router v4.5.1\n  * (c) 2025 Eduardo San Martin Morote\n  * @license MIT\n  */\n'use strict';\n\nvar vue = require('vue');\n\nconst isBrowser = typeof document !== 'undefined';\n\n/**\n * Allows differentiating lazy components from functional components and vue-class-component\n * @internal\n *\n * @param component\n */\nfunction isRouteComponent(component) {\n    return (typeof component === 'object' ||\n        'displayName' in component ||\n        'props' in component ||\n        '__vccOpts' in component);\n}\nfunction isESModule(obj) {\n    return (obj.__esModule ||\n        obj[Symbol.toStringTag] === 'Module' ||\n        // support CF with dynamic imports that do not\n        // add the Module string tag\n        (obj.default && isRouteComponent(obj.default)));\n}\nconst assign = Object.assign;\nfunction applyToParams(fn, params) {\n    const newParams = {};\n    for (const key in params) {\n        const value = params[key];\n        newParams[key] = isArray(value)\n            ? value.map(fn)\n            : fn(value);\n    }\n    return newParams;\n}\nconst noop = () => { };\n/**\n * Typesafe alternative to Array.isArray\n * https://github.com/microsoft/TypeScript/pull/48228\n */\nconst isArray = Array.isArray;\n\n/**\n * Encoding Rules (␣ = Space)\n * - Path: ␣ \" < > # ? { }\n * - Query: ␣ \" < > # & =\n * - Hash: ␣ \" < > `\n *\n * On top of that, the RFC3986 (https://tools.ietf.org/html/rfc3986#section-2.2)\n * defines some extra characters to be encoded. Most browsers do not encode them\n * in encodeURI https://github.com/whatwg/url/issues/369, so it may be safer to\n * also encode `!'()*`. Leaving un-encoded only ASCII alphanumeric(`a-zA-Z0-9`)\n * plus `-._~`. This extra safety should be applied to query by patching the\n * string returned by encodeURIComponent encodeURI also encodes `[\\]^`. `\\`\n * should be encoded to avoid ambiguity. Browsers (IE, FF, C) transform a `\\`\n * into a `/` if directly typed in. The _backtick_ (`````) should also be\n * encoded everywhere because some browsers like FF encode it when directly\n * written while others don't. Safari and IE don't encode ``\"<>{}``` in hash.\n */\n// const EXTRA_RESERVED_RE = /[!'()*]/g\n// const encodeReservedReplacer = (c: string) => '%' + c.charCodeAt(0).toString(16)\nconst HASH_RE = /#/g; // %23\nconst AMPERSAND_RE = /&/g; // %26\nconst SLASH_RE = /\\//g; // %2F\nconst EQUAL_RE = /=/g; // %3D\nconst IM_RE = /\\?/g; // %3F\nconst PLUS_RE = /\\+/g; // %2B\n/**\n * NOTE: It's not clear to me if we should encode the + symbol in queries, it\n * seems to be less flexible than not doing so and I can't find out the legacy\n * systems requiring this for regular requests like text/html. In the standard,\n * the encoding of the plus character is only mentioned for\n * application/x-www-form-urlencoded\n * (https://url.spec.whatwg.org/#urlencoded-parsing) and most browsers seems lo\n * leave the plus character as is in queries. To be more flexible, we allow the\n * plus character on the query, but it can also be manually encoded by the user.\n *\n * Resources:\n * - https://url.spec.whatwg.org/#urlencoded-parsing\n * - https://stackoverflow.com/questions/1634271/url-encoding-the-space-character-or-20\n */\nconst ENC_BRACKET_OPEN_RE = /%5B/g; // [\nconst ENC_BRACKET_CLOSE_RE = /%5D/g; // ]\nconst ENC_CARET_RE = /%5E/g; // ^\nconst ENC_BACKTICK_RE = /%60/g; // `\nconst ENC_CURLY_OPEN_RE = /%7B/g; // {\nconst ENC_PIPE_RE = /%7C/g; // |\nconst ENC_CURLY_CLOSE_RE = /%7D/g; // }\nconst ENC_SPACE_RE = /%20/g; // }\n/**\n * Encode characters that need to be encoded on the path, search and hash\n * sections of the URL.\n *\n * @internal\n * @param text - string to encode\n * @returns encoded string\n */\nfunction commonEncode(text) {\n    return encodeURI('' + text)\n        .replace(ENC_PIPE_RE, '|')\n        .replace(ENC_BRACKET_OPEN_RE, '[')\n        .replace(ENC_BRACKET_CLOSE_RE, ']');\n}\n/**\n * Encode characters that need to be encoded on the hash section of the URL.\n *\n * @param text - string to encode\n * @returns encoded string\n */\nfunction encodeHash(text) {\n    return commonEncode(text)\n        .replace(ENC_CURLY_OPEN_RE, '{')\n        .replace(ENC_CURLY_CLOSE_RE, '}')\n        .replace(ENC_CARET_RE, '^');\n}\n/**\n * Encode characters that need to be encoded query values on the query\n * section of the URL.\n *\n * @param text - string to encode\n * @returns encoded string\n */\nfunction encodeQueryValue(text) {\n    return (commonEncode(text)\n        // Encode the space as +, encode the + to differentiate it from the space\n        .replace(PLUS_RE, '%2B')\n        .replace(ENC_SPACE_RE, '+')\n        .replace(HASH_RE, '%23')\n        .replace(AMPERSAND_RE, '%26')\n        .replace(ENC_BACKTICK_RE, '`')\n        .replace(ENC_CURLY_OPEN_RE, '{')\n        .replace(ENC_CURLY_CLOSE_RE, '}')\n        .replace(ENC_CARET_RE, '^'));\n}\n/**\n * Like `encodeQueryValue` but also encodes the `=` character.\n *\n * @param text - string to encode\n */\nfunction encodeQueryKey(text) {\n    return encodeQueryValue(text).replace(EQUAL_RE, '%3D');\n}\n/**\n * Encode characters that need to be encoded on the path section of the URL.\n *\n * @param text - string to encode\n * @returns encoded string\n */\nfunction encodePath(text) {\n    return commonEncode(text).replace(HASH_RE, '%23').replace(IM_RE, '%3F');\n}\n/**\n * Encode characters that need to be encoded on the path section of the URL as a\n * param. This function encodes everything {@link encodePath} does plus the\n * slash (`/`) character. If `text` is `null` or `undefined`, returns an empty\n * string instead.\n *\n * @param text - string to encode\n * @returns encoded string\n */\nfunction encodeParam(text) {\n    return text == null ? '' : encodePath(text).replace(SLASH_RE, '%2F');\n}\n/**\n * Decode text using `decodeURIComponent`. Returns the original text if it\n * fails.\n *\n * @param text - string to decode\n * @returns decoded string\n */\nfunction decode(text) {\n    try {\n        return decodeURIComponent('' + text);\n    }\n    catch (err) {\n    }\n    return '' + text;\n}\n\nconst TRAILING_SLASH_RE = /\\/$/;\nconst removeTrailingSlash = (path) => path.replace(TRAILING_SLASH_RE, '');\n/**\n * Transforms a URI into a normalized history location\n *\n * @param parseQuery\n * @param location - URI to normalize\n * @param currentLocation - current absolute location. Allows resolving relative\n * paths. Must start with `/`. Defaults to `/`\n * @returns a normalized history location\n */\nfunction parseURL(parseQuery, location, currentLocation = '/') {\n    let path, query = {}, searchString = '', hash = '';\n    // Could use URL and URLSearchParams but IE 11 doesn't support it\n    // TODO: move to new URL()\n    const hashPos = location.indexOf('#');\n    let searchPos = location.indexOf('?');\n    // the hash appears before the search, so it's not part of the search string\n    if (hashPos < searchPos && hashPos >= 0) {\n        searchPos = -1;\n    }\n    if (searchPos > -1) {\n        path = location.slice(0, searchPos);\n        searchString = location.slice(searchPos + 1, hashPos > -1 ? hashPos : location.length);\n        query = parseQuery(searchString);\n    }\n    if (hashPos > -1) {\n        path = path || location.slice(0, hashPos);\n        // keep the # character\n        hash = location.slice(hashPos, location.length);\n    }\n    // no search and no query\n    path = resolveRelativePath(path != null ? path : location, currentLocation);\n    // empty path means a relative query or hash `?foo=f`, `#thing`\n    return {\n        fullPath: path + (searchString && '?') + searchString + hash,\n        path,\n        query,\n        hash: decode(hash),\n    };\n}\n/**\n * Stringifies a URL object\n *\n * @param stringifyQuery\n * @param location\n */\nfunction stringifyURL(stringifyQuery, location) {\n    const query = location.query ? stringifyQuery(location.query) : '';\n    return location.path + (query && '?') + query + (location.hash || '');\n}\n/**\n * Strips off the base from the beginning of a location.pathname in a non-case-sensitive way.\n *\n * @param pathname - location.pathname\n * @param base - base to strip off\n */\nfunction stripBase(pathname, base) {\n    // no base or base is not found at the beginning\n    if (!base || !pathname.toLowerCase().startsWith(base.toLowerCase()))\n        return pathname;\n    return pathname.slice(base.length) || '/';\n}\n/**\n * Checks if two RouteLocation are equal. This means that both locations are\n * pointing towards the same {@link RouteRecord} and that all `params`, `query`\n * parameters and `hash` are the same\n *\n * @param stringifyQuery - A function that takes a query object of type LocationQueryRaw and returns a string representation of it.\n * @param a - first {@link RouteLocation}\n * @param b - second {@link RouteLocation}\n */\nfunction isSameRouteLocation(stringifyQuery, a, b) {\n    const aLastIndex = a.matched.length - 1;\n    const bLastIndex = b.matched.length - 1;\n    return (aLastIndex > -1 &&\n        aLastIndex === bLastIndex &&\n        isSameRouteRecord(a.matched[aLastIndex], b.matched[bLastIndex]) &&\n        isSameRouteLocationParams(a.params, b.params) &&\n        stringifyQuery(a.query) === stringifyQuery(b.query) &&\n        a.hash === b.hash);\n}\n/**\n * Check if two `RouteRecords` are equal. Takes into account aliases: they are\n * considered equal to the `RouteRecord` they are aliasing.\n *\n * @param a - first {@link RouteRecord}\n * @param b - second {@link RouteRecord}\n */\nfunction isSameRouteRecord(a, b) {\n    // since the original record has an undefined value for aliasOf\n    // but all aliases point to the original record, this will always compare\n    // the original record\n    return (a.aliasOf || a) === (b.aliasOf || b);\n}\nfunction isSameRouteLocationParams(a, b) {\n    if (Object.keys(a).length !== Object.keys(b).length)\n        return false;\n    for (const key in a) {\n        if (!isSameRouteLocationParamsValue(a[key], b[key]))\n            return false;\n    }\n    return true;\n}\nfunction isSameRouteLocationParamsValue(a, b) {\n    return isArray(a)\n        ? isEquivalentArray(a, b)\n        : isArray(b)\n            ? isEquivalentArray(b, a)\n            : a === b;\n}\n/**\n * Check if two arrays are the same or if an array with one single entry is the\n * same as another primitive value. Used to check query and parameters\n *\n * @param a - array of values\n * @param b - array of values or a single value\n */\nfunction isEquivalentArray(a, b) {\n    return isArray(b)\n        ? a.length === b.length && a.every((value, i) => value === b[i])\n        : a.length === 1 && a[0] === b;\n}\n/**\n * Resolves a relative path that starts with `.`.\n *\n * @param to - path location we are resolving\n * @param from - currentLocation.path, should start with `/`\n */\nfunction resolveRelativePath(to, from) {\n    if (to.startsWith('/'))\n        return to;\n    if (!to)\n        return from;\n    const fromSegments = from.split('/');\n    const toSegments = to.split('/');\n    const lastToSegment = toSegments[toSegments.length - 1];\n    // make . and ./ the same (../ === .., ../../ === ../..)\n    // this is the same behavior as new URL()\n    if (lastToSegment === '..' || lastToSegment === '.') {\n        toSegments.push('');\n    }\n    let position = fromSegments.length - 1;\n    let toPosition;\n    let segment;\n    for (toPosition = 0; toPosition < toSegments.length; toPosition++) {\n        segment = toSegments[toPosition];\n        // we stay on the same position\n        if (segment === '.')\n            continue;\n        // go up in the from array\n        if (segment === '..') {\n            // we can't go below zero, but we still need to increment toPosition\n            if (position > 1)\n                position--;\n            // continue\n        }\n        // we reached a non-relative path, we stop here\n        else\n            break;\n    }\n    return (fromSegments.slice(0, position).join('/') +\n        '/' +\n        toSegments.slice(toPosition).join('/'));\n}\n/**\n * Initial route location where the router is. Can be used in navigation guards\n * to differentiate the initial navigation.\n *\n * @example\n * ```js\n * import { START_LOCATION } from 'vue-router'\n *\n * router.beforeEach((to, from) => {\n *   if (from === START_LOCATION) {\n *     // initial navigation\n *   }\n * })\n * ```\n */\nconst START_LOCATION_NORMALIZED = {\n    path: '/',\n    // TODO: could we use a symbol in the future?\n    name: undefined,\n    params: {},\n    query: {},\n    hash: '',\n    fullPath: '/',\n    matched: [],\n    meta: {},\n    redirectedFrom: undefined,\n};\n\nvar NavigationType;\n(function (NavigationType) {\n    NavigationType[\"pop\"] = \"pop\";\n    NavigationType[\"push\"] = \"push\";\n})(NavigationType || (NavigationType = {}));\nvar NavigationDirection;\n(function (NavigationDirection) {\n    NavigationDirection[\"back\"] = \"back\";\n    NavigationDirection[\"forward\"] = \"forward\";\n    NavigationDirection[\"unknown\"] = \"\";\n})(NavigationDirection || (NavigationDirection = {}));\n/**\n * Starting location for Histories\n */\nconst START = '';\n// Generic utils\n/**\n * Normalizes a base by removing any trailing slash and reading the base tag if\n * present.\n *\n * @param base - base to normalize\n */\nfunction normalizeBase(base) {\n    if (!base) {\n        if (isBrowser) {\n            // respect <base> tag\n            const baseEl = document.querySelector('base');\n            base = (baseEl && baseEl.getAttribute('href')) || '/';\n            // strip full URL origin\n            base = base.replace(/^\\w+:\\/\\/[^\\/]+/, '');\n        }\n        else {\n            base = '/';\n        }\n    }\n    // ensure leading slash when it was removed by the regex above avoid leading\n    // slash with hash because the file could be read from the disk like file://\n    // and the leading slash would cause problems\n    if (base[0] !== '/' && base[0] !== '#')\n        base = '/' + base;\n    // remove the trailing slash so all other method can just do `base + fullPath`\n    // to build an href\n    return removeTrailingSlash(base);\n}\n// remove any character before the hash\nconst BEFORE_HASH_RE = /^[^#]+#/;\nfunction createHref(base, location) {\n    return base.replace(BEFORE_HASH_RE, '#') + location;\n}\n\nfunction getElementPosition(el, offset) {\n    const docRect = document.documentElement.getBoundingClientRect();\n    const elRect = el.getBoundingClientRect();\n    return {\n        behavior: offset.behavior,\n        left: elRect.left - docRect.left - (offset.left || 0),\n        top: elRect.top - docRect.top - (offset.top || 0),\n    };\n}\nconst computeScrollPosition = () => ({\n    left: window.scrollX,\n    top: window.scrollY,\n});\nfunction scrollToPosition(position) {\n    let scrollToOptions;\n    if ('el' in position) {\n        const positionEl = position.el;\n        const isIdSelector = typeof positionEl === 'string' && positionEl.startsWith('#');\n        const el = typeof positionEl === 'string'\n            ? isIdSelector\n                ? document.getElementById(positionEl.slice(1))\n                : document.querySelector(positionEl)\n            : positionEl;\n        if (!el) {\n            return;\n        }\n        scrollToOptions = getElementPosition(el, position);\n    }\n    else {\n        scrollToOptions = position;\n    }\n    if ('scrollBehavior' in document.documentElement.style)\n        window.scrollTo(scrollToOptions);\n    else {\n        window.scrollTo(scrollToOptions.left != null ? scrollToOptions.left : window.scrollX, scrollToOptions.top != null ? scrollToOptions.top : window.scrollY);\n    }\n}\nfunction getScrollKey(path, delta) {\n    const position = history.state ? history.state.position - delta : -1;\n    return position + path;\n}\nconst scrollPositions = new Map();\nfunction saveScrollPosition(key, scrollPosition) {\n    scrollPositions.set(key, scrollPosition);\n}\nfunction getSavedScrollPosition(key) {\n    const scroll = scrollPositions.get(key);\n    // consume it so it's not used again\n    scrollPositions.delete(key);\n    return scroll;\n}\n// TODO: RFC about how to save scroll position\n/**\n * ScrollBehavior instance used by the router to compute and restore the scroll\n * position when navigating.\n */\n// export interface ScrollHandler<ScrollPositionEntry extends HistoryStateValue, ScrollPosition extends ScrollPositionEntry> {\n//   // returns a scroll position that can be saved in history\n//   compute(): ScrollPositionEntry\n//   // can take an extended ScrollPositionEntry\n//   scroll(position: ScrollPosition): void\n// }\n// export const scrollHandler: ScrollHandler<ScrollPosition> = {\n//   compute: computeScroll,\n//   scroll: scrollToPosition,\n// }\n\nlet createBaseLocation = () => location.protocol + '//' + location.host;\n/**\n * Creates a normalized history location from a window.location object\n * @param base - The base path\n * @param location - The window.location object\n */\nfunction createCurrentLocation(base, location) {\n    const { pathname, search, hash } = location;\n    // allows hash bases like #, /#, #/, #!, #!/, /#!/, or even /folder#end\n    const hashPos = base.indexOf('#');\n    if (hashPos > -1) {\n        let slicePos = hash.includes(base.slice(hashPos))\n            ? base.slice(hashPos).length\n            : 1;\n        let pathFromHash = hash.slice(slicePos);\n        // prepend the starting slash to hash so the url starts with /#\n        if (pathFromHash[0] !== '/')\n            pathFromHash = '/' + pathFromHash;\n        return stripBase(pathFromHash, '');\n    }\n    const path = stripBase(pathname, base);\n    return path + search + hash;\n}\nfunction useHistoryListeners(base, historyState, currentLocation, replace) {\n    let listeners = [];\n    let teardowns = [];\n    // TODO: should it be a stack? a Dict. Check if the popstate listener\n    // can trigger twice\n    let pauseState = null;\n    const popStateHandler = ({ state, }) => {\n        const to = createCurrentLocation(base, location);\n        const from = currentLocation.value;\n        const fromState = historyState.value;\n        let delta = 0;\n        if (state) {\n            currentLocation.value = to;\n            historyState.value = state;\n            // ignore the popstate and reset the pauseState\n            if (pauseState && pauseState === from) {\n                pauseState = null;\n                return;\n            }\n            delta = fromState ? state.position - fromState.position : 0;\n        }\n        else {\n            replace(to);\n        }\n        // Here we could also revert the navigation by calling history.go(-delta)\n        // this listener will have to be adapted to not trigger again and to wait for the url\n        // to be updated before triggering the listeners. Some kind of validation function would also\n        // need to be passed to the listeners so the navigation can be accepted\n        // call all listeners\n        listeners.forEach(listener => {\n            listener(currentLocation.value, from, {\n                delta,\n                type: NavigationType.pop,\n                direction: delta\n                    ? delta > 0\n                        ? NavigationDirection.forward\n                        : NavigationDirection.back\n                    : NavigationDirection.unknown,\n            });\n        });\n    };\n    function pauseListeners() {\n        pauseState = currentLocation.value;\n    }\n    function listen(callback) {\n        // set up the listener and prepare teardown callbacks\n        listeners.push(callback);\n        const teardown = () => {\n            const index = listeners.indexOf(callback);\n            if (index > -1)\n                listeners.splice(index, 1);\n        };\n        teardowns.push(teardown);\n        return teardown;\n    }\n    function beforeUnloadListener() {\n        const { history } = window;\n        if (!history.state)\n            return;\n        history.replaceState(assign({}, history.state, { scroll: computeScrollPosition() }), '');\n    }\n    function destroy() {\n        for (const teardown of teardowns)\n            teardown();\n        teardowns = [];\n        window.removeEventListener('popstate', popStateHandler);\n        window.removeEventListener('beforeunload', beforeUnloadListener);\n    }\n    // set up the listeners and prepare teardown callbacks\n    window.addEventListener('popstate', popStateHandler);\n    // TODO: could we use 'pagehide' or 'visibilitychange' instead?\n    // https://developer.chrome.com/blog/page-lifecycle-api/\n    window.addEventListener('beforeunload', beforeUnloadListener, {\n        passive: true,\n    });\n    return {\n        pauseListeners,\n        listen,\n        destroy,\n    };\n}\n/**\n * Creates a state object\n */\nfunction buildState(back, current, forward, replaced = false, computeScroll = false) {\n    return {\n        back,\n        current,\n        forward,\n        replaced,\n        position: window.history.length,\n        scroll: computeScroll ? computeScrollPosition() : null,\n    };\n}\nfunction useHistoryStateNavigation(base) {\n    const { history, location } = window;\n    // private variables\n    const currentLocation = {\n        value: createCurrentLocation(base, location),\n    };\n    const historyState = { value: history.state };\n    // build current history entry as this is a fresh navigation\n    if (!historyState.value) {\n        changeLocation(currentLocation.value, {\n            back: null,\n            current: currentLocation.value,\n            forward: null,\n            // the length is off by one, we need to decrease it\n            position: history.length - 1,\n            replaced: true,\n            // don't add a scroll as the user may have an anchor, and we want\n            // scrollBehavior to be triggered without a saved position\n            scroll: null,\n        }, true);\n    }\n    function changeLocation(to, state, replace) {\n        /**\n         * if a base tag is provided, and we are on a normal domain, we have to\n         * respect the provided `base` attribute because pushState() will use it and\n         * potentially erase anything before the `#` like at\n         * https://github.com/vuejs/router/issues/685 where a base of\n         * `/folder/#` but a base of `/` would erase the `/folder/` section. If\n         * there is no host, the `<base>` tag makes no sense and if there isn't a\n         * base tag we can just use everything after the `#`.\n         */\n        const hashIndex = base.indexOf('#');\n        const url = hashIndex > -1\n            ? (location.host && document.querySelector('base')\n                ? base\n                : base.slice(hashIndex)) + to\n            : createBaseLocation() + base + to;\n        try {\n            // BROWSER QUIRK\n            // NOTE: Safari throws a SecurityError when calling this function 100 times in 30 seconds\n            history[replace ? 'replaceState' : 'pushState'](state, '', url);\n            historyState.value = state;\n        }\n        catch (err) {\n            {\n                console.error(err);\n            }\n            // Force the navigation, this also resets the call count\n            location[replace ? 'replace' : 'assign'](url);\n        }\n    }\n    function replace(to, data) {\n        const state = assign({}, history.state, buildState(historyState.value.back, \n        // keep back and forward entries but override current position\n        to, historyState.value.forward, true), data, { position: historyState.value.position });\n        changeLocation(to, state, true);\n        currentLocation.value = to;\n    }\n    function push(to, data) {\n        // Add to current entry the information of where we are going\n        // as well as saving the current position\n        const currentState = assign({}, \n        // use current history state to gracefully handle a wrong call to\n        // history.replaceState\n        // https://github.com/vuejs/router/issues/366\n        historyState.value, history.state, {\n            forward: to,\n            scroll: computeScrollPosition(),\n        });\n        changeLocation(currentState.current, currentState, true);\n        const state = assign({}, buildState(currentLocation.value, to, null), { position: currentState.position + 1 }, data);\n        changeLocation(to, state, false);\n        currentLocation.value = to;\n    }\n    return {\n        location: currentLocation,\n        state: historyState,\n        push,\n        replace,\n    };\n}\n/**\n * Creates an HTML5 history. Most common history for single page applications.\n *\n * @param base -\n */\nfunction createWebHistory(base) {\n    base = normalizeBase(base);\n    const historyNavigation = useHistoryStateNavigation(base);\n    const historyListeners = useHistoryListeners(base, historyNavigation.state, historyNavigation.location, historyNavigation.replace);\n    function go(delta, triggerListeners = true) {\n        if (!triggerListeners)\n            historyListeners.pauseListeners();\n        history.go(delta);\n    }\n    const routerHistory = assign({\n        // it's overridden right after\n        location: '',\n        base,\n        go,\n        createHref: createHref.bind(null, base),\n    }, historyNavigation, historyListeners);\n    Object.defineProperty(routerHistory, 'location', {\n        enumerable: true,\n        get: () => historyNavigation.location.value,\n    });\n    Object.defineProperty(routerHistory, 'state', {\n        enumerable: true,\n        get: () => historyNavigation.state.value,\n    });\n    return routerHistory;\n}\n\n/**\n * Creates an in-memory based history. The main purpose of this history is to handle SSR. It starts in a special location that is nowhere.\n * It's up to the user to replace that location with the starter location by either calling `router.push` or `router.replace`.\n *\n * @param base - Base applied to all urls, defaults to '/'\n * @returns a history object that can be passed to the router constructor\n */\nfunction createMemoryHistory(base = '') {\n    let listeners = [];\n    let queue = [[START, {}]];\n    let position = 0;\n    base = normalizeBase(base);\n    function setLocation(location, state = {}) {\n        position++;\n        if (position !== queue.length) {\n            // we are in the middle, we remove everything from here in the queue\n            queue.splice(position);\n        }\n        queue.push([location, state]);\n    }\n    function triggerListeners(to, from, { direction, delta }) {\n        const info = {\n            direction,\n            delta,\n            type: NavigationType.pop,\n        };\n        for (const callback of listeners) {\n            callback(to, from, info);\n        }\n    }\n    const routerHistory = {\n        // rewritten by Object.defineProperty\n        location: START,\n        // rewritten by Object.defineProperty\n        state: {},\n        base,\n        createHref: createHref.bind(null, base),\n        replace(to, state) {\n            // remove current entry and decrement position\n            queue.splice(position--, 1);\n            setLocation(to, state);\n        },\n        push(to, state) {\n            setLocation(to, state);\n        },\n        listen(callback) {\n            listeners.push(callback);\n            return () => {\n                const index = listeners.indexOf(callback);\n                if (index > -1)\n                    listeners.splice(index, 1);\n            };\n        },\n        destroy() {\n            listeners = [];\n            queue = [[START, {}]];\n            position = 0;\n        },\n        go(delta, shouldTrigger = true) {\n            const from = this.location;\n            const direction = \n            // we are considering delta === 0 going forward, but in abstract mode\n            // using 0 for the delta doesn't make sense like it does in html5 where\n            // it reloads the page\n            delta < 0 ? NavigationDirection.back : NavigationDirection.forward;\n            position = Math.max(0, Math.min(position + delta, queue.length - 1));\n            if (shouldTrigger) {\n                triggerListeners(this.location, from, {\n                    direction,\n                    delta,\n                });\n            }\n        },\n    };\n    Object.defineProperty(routerHistory, 'location', {\n        enumerable: true,\n        get: () => queue[position][0],\n    });\n    Object.defineProperty(routerHistory, 'state', {\n        enumerable: true,\n        get: () => queue[position][1],\n    });\n    return routerHistory;\n}\n\n/**\n * Creates a hash history. Useful for web applications with no host (e.g. `file://`) or when configuring a server to\n * handle any URL is not possible.\n *\n * @param base - optional base to provide. Defaults to `location.pathname + location.search` If there is a `<base>` tag\n * in the `head`, its value will be ignored in favor of this parameter **but note it affects all the history.pushState()\n * calls**, meaning that if you use a `<base>` tag, it's `href` value **has to match this parameter** (ignoring anything\n * after the `#`).\n *\n * @example\n * ```js\n * // at https://example.com/folder\n * createWebHashHistory() // gives a url of `https://example.com/folder#`\n * createWebHashHistory('/folder/') // gives a url of `https://example.com/folder/#`\n * // if the `#` is provided in the base, it won't be added by `createWebHashHistory`\n * createWebHashHistory('/folder/#/app/') // gives a url of `https://example.com/folder/#/app/`\n * // you should avoid doing this because it changes the original url and breaks copying urls\n * createWebHashHistory('/other-folder/') // gives a url of `https://example.com/other-folder/#`\n *\n * // at file:///usr/etc/folder/index.html\n * // for locations with no `host`, the base is ignored\n * createWebHashHistory('/iAmIgnored') // gives a url of `file:///usr/etc/folder/index.html#`\n * ```\n */\nfunction createWebHashHistory(base) {\n    // Make sure this implementation is fine in terms of encoding, specially for IE11\n    // for `file://`, directly use the pathname and ignore the base\n    // location.pathname contains an initial `/` even at the root: `https://example.com`\n    base = location.host ? base || location.pathname + location.search : '';\n    // allow the user to provide a `#` in the middle: `/base/#/app`\n    if (!base.includes('#'))\n        base += '#';\n    return createWebHistory(base);\n}\n\nfunction isRouteLocation(route) {\n    return typeof route === 'string' || (route && typeof route === 'object');\n}\nfunction isRouteName(name) {\n    return typeof name === 'string' || typeof name === 'symbol';\n}\n\nconst NavigationFailureSymbol = Symbol('');\n/**\n * Enumeration with all possible types for navigation failures. Can be passed to\n * {@link isNavigationFailure} to check for specific failures.\n */\nexports.NavigationFailureType = void 0;\n(function (NavigationFailureType) {\n    /**\n     * An aborted navigation is a navigation that failed because a navigation\n     * guard returned `false` or called `next(false)`\n     */\n    NavigationFailureType[NavigationFailureType[\"aborted\"] = 4] = \"aborted\";\n    /**\n     * A cancelled navigation is a navigation that failed because a more recent\n     * navigation finished started (not necessarily finished).\n     */\n    NavigationFailureType[NavigationFailureType[\"cancelled\"] = 8] = \"cancelled\";\n    /**\n     * A duplicated navigation is a navigation that failed because it was\n     * initiated while already being at the exact same location.\n     */\n    NavigationFailureType[NavigationFailureType[\"duplicated\"] = 16] = \"duplicated\";\n})(exports.NavigationFailureType || (exports.NavigationFailureType = {}));\n// DEV only debug messages\nconst ErrorTypeMessages = {\n    [1 /* ErrorTypes.MATCHER_NOT_FOUND */]({ location, currentLocation }) {\n        return `No match for\\n ${JSON.stringify(location)}${currentLocation\n            ? '\\nwhile being at\\n' + JSON.stringify(currentLocation)\n            : ''}`;\n    },\n    [2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */]({ from, to, }) {\n        return `Redirected from \"${from.fullPath}\" to \"${stringifyRoute(to)}\" via a navigation guard.`;\n    },\n    [4 /* ErrorTypes.NAVIGATION_ABORTED */]({ from, to }) {\n        return `Navigation aborted from \"${from.fullPath}\" to \"${to.fullPath}\" via a navigation guard.`;\n    },\n    [8 /* ErrorTypes.NAVIGATION_CANCELLED */]({ from, to }) {\n        return `Navigation cancelled from \"${from.fullPath}\" to \"${to.fullPath}\" with a new navigation.`;\n    },\n    [16 /* ErrorTypes.NAVIGATION_DUPLICATED */]({ from, to }) {\n        return `Avoided redundant navigation to current location: \"${from.fullPath}\".`;\n    },\n};\n/**\n * Creates a typed NavigationFailure object.\n * @internal\n * @param type - NavigationFailureType\n * @param params - { from, to }\n */\nfunction createRouterError(type, params) {\n    // keep full error messages in cjs versions\n    {\n        return assign(new Error(ErrorTypeMessages[type](params)), {\n            type,\n            [NavigationFailureSymbol]: true,\n        }, params);\n    }\n}\nfunction isNavigationFailure(error, type) {\n    return (error instanceof Error &&\n        NavigationFailureSymbol in error &&\n        (type == null || !!(error.type & type)));\n}\nconst propertiesToLog = ['params', 'query', 'hash'];\nfunction stringifyRoute(to) {\n    if (typeof to === 'string')\n        return to;\n    if (to.path != null)\n        return to.path;\n    const location = {};\n    for (const key of propertiesToLog) {\n        if (key in to)\n            location[key] = to[key];\n    }\n    return JSON.stringify(location, null, 2);\n}\n\n// default pattern for a param: non-greedy everything but /\nconst BASE_PARAM_PATTERN = '[^/]+?';\nconst BASE_PATH_PARSER_OPTIONS = {\n    sensitive: false,\n    strict: false,\n    start: true,\n    end: true,\n};\n// Special Regex characters that must be escaped in static tokens\nconst REGEX_CHARS_RE = /[.+*?^${}()[\\]/\\\\]/g;\n/**\n * Creates a path parser from an array of Segments (a segment is an array of Tokens)\n *\n * @param segments - array of segments returned by tokenizePath\n * @param extraOptions - optional options for the regexp\n * @returns a PathParser\n */\nfunction tokensToParser(segments, extraOptions) {\n    const options = assign({}, BASE_PATH_PARSER_OPTIONS, extraOptions);\n    // the amount of scores is the same as the length of segments except for the root segment \"/\"\n    const score = [];\n    // the regexp as a string\n    let pattern = options.start ? '^' : '';\n    // extracted keys\n    const keys = [];\n    for (const segment of segments) {\n        // the root segment needs special treatment\n        const segmentScores = segment.length ? [] : [90 /* PathScore.Root */];\n        // allow trailing slash\n        if (options.strict && !segment.length)\n            pattern += '/';\n        for (let tokenIndex = 0; tokenIndex < segment.length; tokenIndex++) {\n            const token = segment[tokenIndex];\n            // resets the score if we are inside a sub-segment /:a-other-:b\n            let subSegmentScore = 40 /* PathScore.Segment */ +\n                (options.sensitive ? 0.25 /* PathScore.BonusCaseSensitive */ : 0);\n            if (token.type === 0 /* TokenType.Static */) {\n                // prepend the slash if we are starting a new segment\n                if (!tokenIndex)\n                    pattern += '/';\n                pattern += token.value.replace(REGEX_CHARS_RE, '\\\\$&');\n                subSegmentScore += 40 /* PathScore.Static */;\n            }\n            else if (token.type === 1 /* TokenType.Param */) {\n                const { value, repeatable, optional, regexp } = token;\n                keys.push({\n                    name: value,\n                    repeatable,\n                    optional,\n                });\n                const re = regexp ? regexp : BASE_PARAM_PATTERN;\n                // the user provided a custom regexp /:id(\\\\d+)\n                if (re !== BASE_PARAM_PATTERN) {\n                    subSegmentScore += 10 /* PathScore.BonusCustomRegExp */;\n                    // make sure the regexp is valid before using it\n                    try {\n                        new RegExp(`(${re})`);\n                    }\n                    catch (err) {\n                        throw new Error(`Invalid custom RegExp for param \"${value}\" (${re}): ` +\n                            err.message);\n                    }\n                }\n                // when we repeat we must take care of the repeating leading slash\n                let subPattern = repeatable ? `((?:${re})(?:/(?:${re}))*)` : `(${re})`;\n                // prepend the slash if we are starting a new segment\n                if (!tokenIndex)\n                    subPattern =\n                        // avoid an optional / if there are more segments e.g. /:p?-static\n                        // or /:p?-:p2\n                        optional && segment.length < 2\n                            ? `(?:/${subPattern})`\n                            : '/' + subPattern;\n                if (optional)\n                    subPattern += '?';\n                pattern += subPattern;\n                subSegmentScore += 20 /* PathScore.Dynamic */;\n                if (optional)\n                    subSegmentScore += -8 /* PathScore.BonusOptional */;\n                if (repeatable)\n                    subSegmentScore += -20 /* PathScore.BonusRepeatable */;\n                if (re === '.*')\n                    subSegmentScore += -50 /* PathScore.BonusWildcard */;\n            }\n            segmentScores.push(subSegmentScore);\n        }\n        // an empty array like /home/ -> [[{home}], []]\n        // if (!segment.length) pattern += '/'\n        score.push(segmentScores);\n    }\n    // only apply the strict bonus to the last score\n    if (options.strict && options.end) {\n        const i = score.length - 1;\n        score[i][score[i].length - 1] += 0.7000000000000001 /* PathScore.BonusStrict */;\n    }\n    // TODO: dev only warn double trailing slash\n    if (!options.strict)\n        pattern += '/?';\n    if (options.end)\n        pattern += '$';\n    // allow paths like /dynamic to only match dynamic or dynamic/... but not dynamic_something_else\n    else if (options.strict && !pattern.endsWith('/'))\n        pattern += '(?:/|$)';\n    const re = new RegExp(pattern, options.sensitive ? '' : 'i');\n    function parse(path) {\n        const match = path.match(re);\n        const params = {};\n        if (!match)\n            return null;\n        for (let i = 1; i < match.length; i++) {\n            const value = match[i] || '';\n            const key = keys[i - 1];\n            params[key.name] = value && key.repeatable ? value.split('/') : value;\n        }\n        return params;\n    }\n    function stringify(params) {\n        let path = '';\n        // for optional parameters to allow to be empty\n        let avoidDuplicatedSlash = false;\n        for (const segment of segments) {\n            if (!avoidDuplicatedSlash || !path.endsWith('/'))\n                path += '/';\n            avoidDuplicatedSlash = false;\n            for (const token of segment) {\n                if (token.type === 0 /* TokenType.Static */) {\n                    path += token.value;\n                }\n                else if (token.type === 1 /* TokenType.Param */) {\n                    const { value, repeatable, optional } = token;\n                    const param = value in params ? params[value] : '';\n                    if (isArray(param) && !repeatable) {\n                        throw new Error(`Provided param \"${value}\" is an array but it is not repeatable (* or + modifiers)`);\n                    }\n                    const text = isArray(param)\n                        ? param.join('/')\n                        : param;\n                    if (!text) {\n                        if (optional) {\n                            // if we have more than one optional param like /:a?-static we don't need to care about the optional param\n                            if (segment.length < 2) {\n                                // remove the last slash as we could be at the end\n                                if (path.endsWith('/'))\n                                    path = path.slice(0, -1);\n                                // do not append a slash on the next iteration\n                                else\n                                    avoidDuplicatedSlash = true;\n                            }\n                        }\n                        else\n                            throw new Error(`Missing required param \"${value}\"`);\n                    }\n                    path += text;\n                }\n            }\n        }\n        // avoid empty path when we have multiple optional params\n        return path || '/';\n    }\n    return {\n        re,\n        score,\n        keys,\n        parse,\n        stringify,\n    };\n}\n/**\n * Compares an array of numbers as used in PathParser.score and returns a\n * number. This function can be used to `sort` an array\n *\n * @param a - first array of numbers\n * @param b - second array of numbers\n * @returns 0 if both are equal, < 0 if a should be sorted first, > 0 if b\n * should be sorted first\n */\nfunction compareScoreArray(a, b) {\n    let i = 0;\n    while (i < a.length && i < b.length) {\n        const diff = b[i] - a[i];\n        // only keep going if diff === 0\n        if (diff)\n            return diff;\n        i++;\n    }\n    // if the last subsegment was Static, the shorter segments should be sorted first\n    // otherwise sort the longest segment first\n    if (a.length < b.length) {\n        return a.length === 1 && a[0] === 40 /* PathScore.Static */ + 40 /* PathScore.Segment */\n            ? -1\n            : 1;\n    }\n    else if (a.length > b.length) {\n        return b.length === 1 && b[0] === 40 /* PathScore.Static */ + 40 /* PathScore.Segment */\n            ? 1\n            : -1;\n    }\n    return 0;\n}\n/**\n * Compare function that can be used with `sort` to sort an array of PathParser\n *\n * @param a - first PathParser\n * @param b - second PathParser\n * @returns 0 if both are equal, < 0 if a should be sorted first, > 0 if b\n */\nfunction comparePathParserScore(a, b) {\n    let i = 0;\n    const aScore = a.score;\n    const bScore = b.score;\n    while (i < aScore.length && i < bScore.length) {\n        const comp = compareScoreArray(aScore[i], bScore[i]);\n        // do not return if both are equal\n        if (comp)\n            return comp;\n        i++;\n    }\n    if (Math.abs(bScore.length - aScore.length) === 1) {\n        if (isLastScoreNegative(aScore))\n            return 1;\n        if (isLastScoreNegative(bScore))\n            return -1;\n    }\n    // if a and b share the same score entries but b has more, sort b first\n    return bScore.length - aScore.length;\n    // this is the ternary version\n    // return aScore.length < bScore.length\n    //   ? 1\n    //   : aScore.length > bScore.length\n    //   ? -1\n    //   : 0\n}\n/**\n * This allows detecting splats at the end of a path: /home/:id(.*)*\n *\n * @param score - score to check\n * @returns true if the last entry is negative\n */\nfunction isLastScoreNegative(score) {\n    const last = score[score.length - 1];\n    return score.length > 0 && last[last.length - 1] < 0;\n}\n\nconst ROOT_TOKEN = {\n    type: 0 /* TokenType.Static */,\n    value: '',\n};\nconst VALID_PARAM_RE = /[a-zA-Z0-9_]/;\n// After some profiling, the cache seems to be unnecessary because tokenizePath\n// (the slowest part of adding a route) is very fast\n// const tokenCache = new Map<string, Token[][]>()\nfunction tokenizePath(path) {\n    if (!path)\n        return [[]];\n    if (path === '/')\n        return [[ROOT_TOKEN]];\n    if (!path.startsWith('/')) {\n        throw new Error(`Invalid path \"${path}\"`);\n    }\n    // if (tokenCache.has(path)) return tokenCache.get(path)!\n    function crash(message) {\n        throw new Error(`ERR (${state})/\"${buffer}\": ${message}`);\n    }\n    let state = 0 /* TokenizerState.Static */;\n    let previousState = state;\n    const tokens = [];\n    // the segment will always be valid because we get into the initial state\n    // with the leading /\n    let segment;\n    function finalizeSegment() {\n        if (segment)\n            tokens.push(segment);\n        segment = [];\n    }\n    // index on the path\n    let i = 0;\n    // char at index\n    let char;\n    // buffer of the value read\n    let buffer = '';\n    // custom regexp for a param\n    let customRe = '';\n    function consumeBuffer() {\n        if (!buffer)\n            return;\n        if (state === 0 /* TokenizerState.Static */) {\n            segment.push({\n                type: 0 /* TokenType.Static */,\n                value: buffer,\n            });\n        }\n        else if (state === 1 /* TokenizerState.Param */ ||\n            state === 2 /* TokenizerState.ParamRegExp */ ||\n            state === 3 /* TokenizerState.ParamRegExpEnd */) {\n            if (segment.length > 1 && (char === '*' || char === '+'))\n                crash(`A repeatable param (${buffer}) must be alone in its segment. eg: '/:ids+.`);\n            segment.push({\n                type: 1 /* TokenType.Param */,\n                value: buffer,\n                regexp: customRe,\n                repeatable: char === '*' || char === '+',\n                optional: char === '*' || char === '?',\n            });\n        }\n        else {\n            crash('Invalid state to consume buffer');\n        }\n        buffer = '';\n    }\n    function addCharToBuffer() {\n        buffer += char;\n    }\n    while (i < path.length) {\n        char = path[i++];\n        if (char === '\\\\' && state !== 2 /* TokenizerState.ParamRegExp */) {\n            previousState = state;\n            state = 4 /* TokenizerState.EscapeNext */;\n            continue;\n        }\n        switch (state) {\n            case 0 /* TokenizerState.Static */:\n                if (char === '/') {\n                    if (buffer) {\n                        consumeBuffer();\n                    }\n                    finalizeSegment();\n                }\n                else if (char === ':') {\n                    consumeBuffer();\n                    state = 1 /* TokenizerState.Param */;\n                }\n                else {\n                    addCharToBuffer();\n                }\n                break;\n            case 4 /* TokenizerState.EscapeNext */:\n                addCharToBuffer();\n                state = previousState;\n                break;\n            case 1 /* TokenizerState.Param */:\n                if (char === '(') {\n                    state = 2 /* TokenizerState.ParamRegExp */;\n                }\n                else if (VALID_PARAM_RE.test(char)) {\n                    addCharToBuffer();\n                }\n                else {\n                    consumeBuffer();\n                    state = 0 /* TokenizerState.Static */;\n                    // go back one character if we were not modifying\n                    if (char !== '*' && char !== '?' && char !== '+')\n                        i--;\n                }\n                break;\n            case 2 /* TokenizerState.ParamRegExp */:\n                // TODO: is it worth handling nested regexp? like :p(?:prefix_([^/]+)_suffix)\n                // it already works by escaping the closing )\n                // https://paths.esm.dev/?p=AAMeJbiAwQEcDKbAoAAkP60PG2R6QAvgNaA6AFACM2ABuQBB#\n                // is this really something people need since you can also write\n                // /prefix_:p()_suffix\n                if (char === ')') {\n                    // handle the escaped )\n                    if (customRe[customRe.length - 1] == '\\\\')\n                        customRe = customRe.slice(0, -1) + char;\n                    else\n                        state = 3 /* TokenizerState.ParamRegExpEnd */;\n                }\n                else {\n                    customRe += char;\n                }\n                break;\n            case 3 /* TokenizerState.ParamRegExpEnd */:\n                // same as finalizing a param\n                consumeBuffer();\n                state = 0 /* TokenizerState.Static */;\n                // go back one character if we were not modifying\n                if (char !== '*' && char !== '?' && char !== '+')\n                    i--;\n                customRe = '';\n                break;\n            default:\n                crash('Unknown state');\n                break;\n        }\n    }\n    if (state === 2 /* TokenizerState.ParamRegExp */)\n        crash(`Unfinished custom RegExp for param \"${buffer}\"`);\n    consumeBuffer();\n    finalizeSegment();\n    // tokenCache.set(path, tokens)\n    return tokens;\n}\n\nfunction createRouteRecordMatcher(record, parent, options) {\n    const parser = tokensToParser(tokenizePath(record.path), options);\n    const matcher = assign(parser, {\n        record,\n        parent,\n        // these needs to be populated by the parent\n        children: [],\n        alias: [],\n    });\n    if (parent) {\n        // both are aliases or both are not aliases\n        // we don't want to mix them because the order is used when\n        // passing originalRecord in Matcher.addRoute\n        if (!matcher.record.aliasOf === !parent.record.aliasOf)\n            parent.children.push(matcher);\n    }\n    return matcher;\n}\n\n/**\n * Creates a Router Matcher.\n *\n * @internal\n * @param routes - array of initial routes\n * @param globalOptions - global route options\n */\nfunction createRouterMatcher(routes, globalOptions) {\n    // normalized ordered array of matchers\n    const matchers = [];\n    const matcherMap = new Map();\n    globalOptions = mergeOptions({ strict: false, end: true, sensitive: false }, globalOptions);\n    function getRecordMatcher(name) {\n        return matcherMap.get(name);\n    }\n    function addRoute(record, parent, originalRecord) {\n        // used later on to remove by name\n        const isRootAdd = !originalRecord;\n        const mainNormalizedRecord = normalizeRouteRecord(record);\n        // we might be the child of an alias\n        mainNormalizedRecord.aliasOf = originalRecord && originalRecord.record;\n        const options = mergeOptions(globalOptions, record);\n        // generate an array of records to correctly handle aliases\n        const normalizedRecords = [mainNormalizedRecord];\n        if ('alias' in record) {\n            const aliases = typeof record.alias === 'string' ? [record.alias] : record.alias;\n            for (const alias of aliases) {\n                normalizedRecords.push(\n                // we need to normalize again to ensure the `mods` property\n                // being non enumerable\n                normalizeRouteRecord(assign({}, mainNormalizedRecord, {\n                    // this allows us to hold a copy of the `components` option\n                    // so that async components cache is hold on the original record\n                    components: originalRecord\n                        ? originalRecord.record.components\n                        : mainNormalizedRecord.components,\n                    path: alias,\n                    // we might be the child of an alias\n                    aliasOf: originalRecord\n                        ? originalRecord.record\n                        : mainNormalizedRecord,\n                    // the aliases are always of the same kind as the original since they\n                    // are defined on the same record\n                })));\n            }\n        }\n        let matcher;\n        let originalMatcher;\n        for (const normalizedRecord of normalizedRecords) {\n            const { path } = normalizedRecord;\n            // Build up the path for nested routes if the child isn't an absolute\n            // route. Only add the / delimiter if the child path isn't empty and if the\n            // parent path doesn't have a trailing slash\n            if (parent && path[0] !== '/') {\n                const parentPath = parent.record.path;\n                const connectingSlash = parentPath[parentPath.length - 1] === '/' ? '' : '/';\n                normalizedRecord.path =\n                    parent.record.path + (path && connectingSlash + path);\n            }\n            // create the object beforehand, so it can be passed to children\n            matcher = createRouteRecordMatcher(normalizedRecord, parent, options);\n            // if we are an alias we must tell the original record that we exist,\n            // so we can be removed\n            if (originalRecord) {\n                originalRecord.alias.push(matcher);\n            }\n            else {\n                // otherwise, the first record is the original and others are aliases\n                originalMatcher = originalMatcher || matcher;\n                if (originalMatcher !== matcher)\n                    originalMatcher.alias.push(matcher);\n                // remove the route if named and only for the top record (avoid in nested calls)\n                // this works because the original record is the first one\n                if (isRootAdd && record.name && !isAliasRecord(matcher)) {\n                    removeRoute(record.name);\n                }\n            }\n            // Avoid adding a record that doesn't display anything. This allows passing through records without a component to\n            // not be reached and pass through the catch all route\n            if (isMatchable(matcher)) {\n                insertMatcher(matcher);\n            }\n            if (mainNormalizedRecord.children) {\n                const children = mainNormalizedRecord.children;\n                for (let i = 0; i < children.length; i++) {\n                    addRoute(children[i], matcher, originalRecord && originalRecord.children[i]);\n                }\n            }\n            // if there was no original record, then the first one was not an alias and all\n            // other aliases (if any) need to reference this record when adding children\n            originalRecord = originalRecord || matcher;\n            // TODO: add normalized records for more flexibility\n            // if (parent && isAliasRecord(originalRecord)) {\n            //   parent.children.push(originalRecord)\n            // }\n        }\n        return originalMatcher\n            ? () => {\n                // since other matchers are aliases, they should be removed by the original matcher\n                removeRoute(originalMatcher);\n            }\n            : noop;\n    }\n    function removeRoute(matcherRef) {\n        if (isRouteName(matcherRef)) {\n            const matcher = matcherMap.get(matcherRef);\n            if (matcher) {\n                matcherMap.delete(matcherRef);\n                matchers.splice(matchers.indexOf(matcher), 1);\n                matcher.children.forEach(removeRoute);\n                matcher.alias.forEach(removeRoute);\n            }\n        }\n        else {\n            const index = matchers.indexOf(matcherRef);\n            if (index > -1) {\n                matchers.splice(index, 1);\n                if (matcherRef.record.name)\n                    matcherMap.delete(matcherRef.record.name);\n                matcherRef.children.forEach(removeRoute);\n                matcherRef.alias.forEach(removeRoute);\n            }\n        }\n    }\n    function getRoutes() {\n        return matchers;\n    }\n    function insertMatcher(matcher) {\n        const index = findInsertionIndex(matcher, matchers);\n        matchers.splice(index, 0, matcher);\n        // only add the original record to the name map\n        if (matcher.record.name && !isAliasRecord(matcher))\n            matcherMap.set(matcher.record.name, matcher);\n    }\n    function resolve(location, currentLocation) {\n        let matcher;\n        let params = {};\n        let path;\n        let name;\n        if ('name' in location && location.name) {\n            matcher = matcherMap.get(location.name);\n            if (!matcher)\n                throw createRouterError(1 /* ErrorTypes.MATCHER_NOT_FOUND */, {\n                    location,\n                });\n            name = matcher.record.name;\n            params = assign(\n            // paramsFromLocation is a new object\n            paramsFromLocation(currentLocation.params, \n            // only keep params that exist in the resolved location\n            // only keep optional params coming from a parent record\n            matcher.keys\n                .filter(k => !k.optional)\n                .concat(matcher.parent ? matcher.parent.keys.filter(k => k.optional) : [])\n                .map(k => k.name)), \n            // discard any existing params in the current location that do not exist here\n            // #1497 this ensures better active/exact matching\n            location.params &&\n                paramsFromLocation(location.params, matcher.keys.map(k => k.name)));\n            // throws if cannot be stringified\n            path = matcher.stringify(params);\n        }\n        else if (location.path != null) {\n            // no need to resolve the path with the matcher as it was provided\n            // this also allows the user to control the encoding\n            path = location.path;\n            matcher = matchers.find(m => m.re.test(path));\n            // matcher should have a value after the loop\n            if (matcher) {\n                // we know the matcher works because we tested the regexp\n                params = matcher.parse(path);\n                name = matcher.record.name;\n            }\n            // location is a relative path\n        }\n        else {\n            // match by name or path of current route\n            matcher = currentLocation.name\n                ? matcherMap.get(currentLocation.name)\n                : matchers.find(m => m.re.test(currentLocation.path));\n            if (!matcher)\n                throw createRouterError(1 /* ErrorTypes.MATCHER_NOT_FOUND */, {\n                    location,\n                    currentLocation,\n                });\n            name = matcher.record.name;\n            // since we are navigating to the same location, we don't need to pick the\n            // params like when `name` is provided\n            params = assign({}, currentLocation.params, location.params);\n            path = matcher.stringify(params);\n        }\n        const matched = [];\n        let parentMatcher = matcher;\n        while (parentMatcher) {\n            // reversed order so parents are at the beginning\n            matched.unshift(parentMatcher.record);\n            parentMatcher = parentMatcher.parent;\n        }\n        return {\n            name,\n            path,\n            params,\n            matched,\n            meta: mergeMetaFields(matched),\n        };\n    }\n    // add initial routes\n    routes.forEach(route => addRoute(route));\n    function clearRoutes() {\n        matchers.length = 0;\n        matcherMap.clear();\n    }\n    return {\n        addRoute,\n        resolve,\n        removeRoute,\n        clearRoutes,\n        getRoutes,\n        getRecordMatcher,\n    };\n}\nfunction paramsFromLocation(params, keys) {\n    const newParams = {};\n    for (const key of keys) {\n        if (key in params)\n            newParams[key] = params[key];\n    }\n    return newParams;\n}\n/**\n * Normalizes a RouteRecordRaw. Creates a copy\n *\n * @param record\n * @returns the normalized version\n */\nfunction normalizeRouteRecord(record) {\n    const normalized = {\n        path: record.path,\n        redirect: record.redirect,\n        name: record.name,\n        meta: record.meta || {},\n        aliasOf: record.aliasOf,\n        beforeEnter: record.beforeEnter,\n        props: normalizeRecordProps(record),\n        children: record.children || [],\n        instances: {},\n        leaveGuards: new Set(),\n        updateGuards: new Set(),\n        enterCallbacks: {},\n        // must be declared afterwards\n        // mods: {},\n        components: 'components' in record\n            ? record.components || null\n            : record.component && { default: record.component },\n    };\n    // mods contain modules and shouldn't be copied,\n    // logged or anything. It's just used for internal\n    // advanced use cases like data loaders\n    Object.defineProperty(normalized, 'mods', {\n        value: {},\n    });\n    return normalized;\n}\n/**\n * Normalize the optional `props` in a record to always be an object similar to\n * components. Also accept a boolean for components.\n * @param record\n */\nfunction normalizeRecordProps(record) {\n    const propsObject = {};\n    // props does not exist on redirect records, but we can set false directly\n    const props = record.props || false;\n    if ('component' in record) {\n        propsObject.default = props;\n    }\n    else {\n        // NOTE: we could also allow a function to be applied to every component.\n        // Would need user feedback for use cases\n        for (const name in record.components)\n            propsObject[name] = typeof props === 'object' ? props[name] : props;\n    }\n    return propsObject;\n}\n/**\n * Checks if a record or any of its parent is an alias\n * @param record\n */\nfunction isAliasRecord(record) {\n    while (record) {\n        if (record.record.aliasOf)\n            return true;\n        record = record.parent;\n    }\n    return false;\n}\n/**\n * Merge meta fields of an array of records\n *\n * @param matched - array of matched records\n */\nfunction mergeMetaFields(matched) {\n    return matched.reduce((meta, record) => assign(meta, record.meta), {});\n}\nfunction mergeOptions(defaults, partialOptions) {\n    const options = {};\n    for (const key in defaults) {\n        options[key] = key in partialOptions ? partialOptions[key] : defaults[key];\n    }\n    return options;\n}\n/**\n * Performs a binary search to find the correct insertion index for a new matcher.\n *\n * Matchers are primarily sorted by their score. If scores are tied then we also consider parent/child relationships,\n * with descendants coming before ancestors. If there's still a tie, new routes are inserted after existing routes.\n *\n * @param matcher - new matcher to be inserted\n * @param matchers - existing matchers\n */\nfunction findInsertionIndex(matcher, matchers) {\n    // First phase: binary search based on score\n    let lower = 0;\n    let upper = matchers.length;\n    while (lower !== upper) {\n        const mid = (lower + upper) >> 1;\n        const sortOrder = comparePathParserScore(matcher, matchers[mid]);\n        if (sortOrder < 0) {\n            upper = mid;\n        }\n        else {\n            lower = mid + 1;\n        }\n    }\n    // Second phase: check for an ancestor with the same score\n    const insertionAncestor = getInsertionAncestor(matcher);\n    if (insertionAncestor) {\n        upper = matchers.lastIndexOf(insertionAncestor, upper - 1);\n    }\n    return upper;\n}\nfunction getInsertionAncestor(matcher) {\n    let ancestor = matcher;\n    while ((ancestor = ancestor.parent)) {\n        if (isMatchable(ancestor) &&\n            comparePathParserScore(matcher, ancestor) === 0) {\n            return ancestor;\n        }\n    }\n    return;\n}\n/**\n * Checks if a matcher can be reachable. This means if it's possible to reach it as a route. For example, routes without\n * a component, or name, or redirect, are just used to group other routes.\n * @param matcher\n * @param matcher.record record of the matcher\n * @returns\n */\nfunction isMatchable({ record }) {\n    return !!(record.name ||\n        (record.components && Object.keys(record.components).length) ||\n        record.redirect);\n}\n\n/**\n * Transforms a queryString into a {@link LocationQuery} object. Accept both, a\n * version with the leading `?` and without Should work as URLSearchParams\n\n * @internal\n *\n * @param search - search string to parse\n * @returns a query object\n */\nfunction parseQuery(search) {\n    const query = {};\n    // avoid creating an object with an empty key and empty value\n    // because of split('&')\n    if (search === '' || search === '?')\n        return query;\n    const hasLeadingIM = search[0] === '?';\n    const searchParams = (hasLeadingIM ? search.slice(1) : search).split('&');\n    for (let i = 0; i < searchParams.length; ++i) {\n        // pre decode the + into space\n        const searchParam = searchParams[i].replace(PLUS_RE, ' ');\n        // allow the = character\n        const eqPos = searchParam.indexOf('=');\n        const key = decode(eqPos < 0 ? searchParam : searchParam.slice(0, eqPos));\n        const value = eqPos < 0 ? null : decode(searchParam.slice(eqPos + 1));\n        if (key in query) {\n            // an extra variable for ts types\n            let currentValue = query[key];\n            if (!isArray(currentValue)) {\n                currentValue = query[key] = [currentValue];\n            }\n            currentValue.push(value);\n        }\n        else {\n            query[key] = value;\n        }\n    }\n    return query;\n}\n/**\n * Stringifies a {@link LocationQueryRaw} object. Like `URLSearchParams`, it\n * doesn't prepend a `?`\n *\n * @internal\n *\n * @param query - query object to stringify\n * @returns string version of the query without the leading `?`\n */\nfunction stringifyQuery(query) {\n    let search = '';\n    for (let key in query) {\n        const value = query[key];\n        key = encodeQueryKey(key);\n        if (value == null) {\n            // only null adds the value\n            if (value !== undefined) {\n                search += (search.length ? '&' : '') + key;\n            }\n            continue;\n        }\n        // keep null values\n        const values = isArray(value)\n            ? value.map(v => v && encodeQueryValue(v))\n            : [value && encodeQueryValue(value)];\n        values.forEach(value => {\n            // skip undefined values in arrays as if they were not present\n            // smaller code than using filter\n            if (value !== undefined) {\n                // only append & with non-empty search\n                search += (search.length ? '&' : '') + key;\n                if (value != null)\n                    search += '=' + value;\n            }\n        });\n    }\n    return search;\n}\n/**\n * Transforms a {@link LocationQueryRaw} into a {@link LocationQuery} by casting\n * numbers into strings, removing keys with an undefined value and replacing\n * undefined with null in arrays\n *\n * @param query - query object to normalize\n * @returns a normalized query object\n */\nfunction normalizeQuery(query) {\n    const normalizedQuery = {};\n    for (const key in query) {\n        const value = query[key];\n        if (value !== undefined) {\n            normalizedQuery[key] = isArray(value)\n                ? value.map(v => (v == null ? null : '' + v))\n                : value == null\n                    ? value\n                    : '' + value;\n        }\n    }\n    return normalizedQuery;\n}\n\n/**\n * RouteRecord being rendered by the closest ancestor Router View. Used for\n * `onBeforeRouteUpdate` and `onBeforeRouteLeave`. rvlm stands for Router View\n * Location Matched\n *\n * @internal\n */\nconst matchedRouteKey = Symbol('');\n/**\n * Allows overriding the router view depth to control which component in\n * `matched` is rendered. rvd stands for Router View Depth\n *\n * @internal\n */\nconst viewDepthKey = Symbol('');\n/**\n * Allows overriding the router instance returned by `useRouter` in tests. r\n * stands for router\n *\n * @internal\n */\nconst routerKey = Symbol('');\n/**\n * Allows overriding the current route returned by `useRoute` in tests. rl\n * stands for route location\n *\n * @internal\n */\nconst routeLocationKey = Symbol('');\n/**\n * Allows overriding the current route used by router-view. Internally this is\n * used when the `route` prop is passed.\n *\n * @internal\n */\nconst routerViewLocationKey = Symbol('');\n\n/**\n * Create a list of callbacks that can be reset. Used to create before and after navigation guards list\n */\nfunction useCallbacks() {\n    let handlers = [];\n    function add(handler) {\n        handlers.push(handler);\n        return () => {\n            const i = handlers.indexOf(handler);\n            if (i > -1)\n                handlers.splice(i, 1);\n        };\n    }\n    function reset() {\n        handlers = [];\n    }\n    return {\n        add,\n        list: () => handlers.slice(),\n        reset,\n    };\n}\n\nfunction registerGuard(record, name, guard) {\n    const removeFromList = () => {\n        record[name].delete(guard);\n    };\n    vue.onUnmounted(removeFromList);\n    vue.onDeactivated(removeFromList);\n    vue.onActivated(() => {\n        record[name].add(guard);\n    });\n    record[name].add(guard);\n}\n/**\n * Add a navigation guard that triggers whenever the component for the current\n * location is about to be left. Similar to {@link beforeRouteLeave} but can be\n * used in any component. The guard is removed when the component is unmounted.\n *\n * @param leaveGuard - {@link NavigationGuard}\n */\nfunction onBeforeRouteLeave(leaveGuard) {\n    const activeRecord = vue.inject(matchedRouteKey, \n    // to avoid warning\n    {}).value;\n    if (!activeRecord) {\n        return;\n    }\n    registerGuard(activeRecord, 'leaveGuards', leaveGuard);\n}\n/**\n * Add a navigation guard that triggers whenever the current location is about\n * to be updated. Similar to {@link beforeRouteUpdate} but can be used in any\n * component. The guard is removed when the component is unmounted.\n *\n * @param updateGuard - {@link NavigationGuard}\n */\nfunction onBeforeRouteUpdate(updateGuard) {\n    const activeRecord = vue.inject(matchedRouteKey, \n    // to avoid warning\n    {}).value;\n    if (!activeRecord) {\n        return;\n    }\n    registerGuard(activeRecord, 'updateGuards', updateGuard);\n}\nfunction guardToPromiseFn(guard, to, from, record, name, runWithContext = fn => fn()) {\n    // keep a reference to the enterCallbackArray to prevent pushing callbacks if a new navigation took place\n    const enterCallbackArray = record &&\n        // name is defined if record is because of the function overload\n        (record.enterCallbacks[name] = record.enterCallbacks[name] || []);\n    return () => new Promise((resolve, reject) => {\n        const next = (valid) => {\n            if (valid === false) {\n                reject(createRouterError(4 /* ErrorTypes.NAVIGATION_ABORTED */, {\n                    from,\n                    to,\n                }));\n            }\n            else if (valid instanceof Error) {\n                reject(valid);\n            }\n            else if (isRouteLocation(valid)) {\n                reject(createRouterError(2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */, {\n                    from: to,\n                    to: valid,\n                }));\n            }\n            else {\n                if (enterCallbackArray &&\n                    // since enterCallbackArray is truthy, both record and name also are\n                    record.enterCallbacks[name] === enterCallbackArray &&\n                    typeof valid === 'function') {\n                    enterCallbackArray.push(valid);\n                }\n                resolve();\n            }\n        };\n        // wrapping with Promise.resolve allows it to work with both async and sync guards\n        const guardReturn = runWithContext(() => guard.call(record && record.instances[name], to, from, next));\n        let guardCall = Promise.resolve(guardReturn);\n        if (guard.length < 3)\n            guardCall = guardCall.then(next);\n        guardCall.catch(err => reject(err));\n    });\n}\nfunction extractComponentsGuards(matched, guardType, to, from, runWithContext = fn => fn()) {\n    const guards = [];\n    for (const record of matched) {\n        for (const name in record.components) {\n            let rawComponent = record.components[name];\n            // skip update and leave guards if the route component is not mounted\n            if (guardType !== 'beforeRouteEnter' && !record.instances[name])\n                continue;\n            if (isRouteComponent(rawComponent)) {\n                // __vccOpts is added by vue-class-component and contain the regular options\n                const options = rawComponent.__vccOpts || rawComponent;\n                const guard = options[guardType];\n                guard &&\n                    guards.push(guardToPromiseFn(guard, to, from, record, name, runWithContext));\n            }\n            else {\n                // start requesting the chunk already\n                let componentPromise = rawComponent();\n                guards.push(() => componentPromise.then(resolved => {\n                    if (!resolved)\n                        throw new Error(`Couldn't resolve component \"${name}\" at \"${record.path}\"`);\n                    const resolvedComponent = isESModule(resolved)\n                        ? resolved.default\n                        : resolved;\n                    // keep the resolved module for plugins like data loaders\n                    record.mods[name] = resolved;\n                    // replace the function with the resolved component\n                    // cannot be null or undefined because we went into the for loop\n                    record.components[name] = resolvedComponent;\n                    // __vccOpts is added by vue-class-component and contain the regular options\n                    const options = resolvedComponent.__vccOpts || resolvedComponent;\n                    const guard = options[guardType];\n                    return (guard &&\n                        guardToPromiseFn(guard, to, from, record, name, runWithContext)());\n                }));\n            }\n        }\n    }\n    return guards;\n}\n/**\n * Ensures a route is loaded, so it can be passed as o prop to `<RouterView>`.\n *\n * @param route - resolved route to load\n */\nfunction loadRouteLocation(route) {\n    return route.matched.every(record => record.redirect)\n        ? Promise.reject(new Error('Cannot load a route that redirects.'))\n        : Promise.all(route.matched.map(record => record.components &&\n            Promise.all(Object.keys(record.components).reduce((promises, name) => {\n                const rawComponent = record.components[name];\n                if (typeof rawComponent === 'function' &&\n                    !('displayName' in rawComponent)) {\n                    promises.push(rawComponent().then(resolved => {\n                        if (!resolved)\n                            return Promise.reject(new Error(`Couldn't resolve component \"${name}\" at \"${record.path}\". Ensure you passed a function that returns a promise.`));\n                        const resolvedComponent = isESModule(resolved)\n                            ? resolved.default\n                            : resolved;\n                        // keep the resolved module for plugins like data loaders\n                        record.mods[name] = resolved;\n                        // replace the function with the resolved component\n                        // cannot be null or undefined because we went into the for loop\n                        record.components[name] = resolvedComponent;\n                        return;\n                    }));\n                }\n                return promises;\n            }, [])))).then(() => route);\n}\n\n// TODO: we could allow currentRoute as a prop to expose `isActive` and\n// `isExactActive` behavior should go through an RFC\n/**\n * Returns the internal behavior of a {@link RouterLink} without the rendering part.\n *\n * @param props - a `to` location and an optional `replace` flag\n */\nfunction useLink(props) {\n    const router = vue.inject(routerKey);\n    const currentRoute = vue.inject(routeLocationKey);\n    const route = vue.computed(() => {\n        const to = vue.unref(props.to);\n        return router.resolve(to);\n    });\n    const activeRecordIndex = vue.computed(() => {\n        const { matched } = route.value;\n        const { length } = matched;\n        const routeMatched = matched[length - 1];\n        const currentMatched = currentRoute.matched;\n        if (!routeMatched || !currentMatched.length)\n            return -1;\n        const index = currentMatched.findIndex(isSameRouteRecord.bind(null, routeMatched));\n        if (index > -1)\n            return index;\n        // possible parent record\n        const parentRecordPath = getOriginalPath(matched[length - 2]);\n        return (\n        // we are dealing with nested routes\n        length > 1 &&\n            // if the parent and matched route have the same path, this link is\n            // referring to the empty child. Or we currently are on a different\n            // child of the same parent\n            getOriginalPath(routeMatched) === parentRecordPath &&\n            // avoid comparing the child with its parent\n            currentMatched[currentMatched.length - 1].path !== parentRecordPath\n            ? currentMatched.findIndex(isSameRouteRecord.bind(null, matched[length - 2]))\n            : index);\n    });\n    const isActive = vue.computed(() => activeRecordIndex.value > -1 &&\n        includesParams(currentRoute.params, route.value.params));\n    const isExactActive = vue.computed(() => activeRecordIndex.value > -1 &&\n        activeRecordIndex.value === currentRoute.matched.length - 1 &&\n        isSameRouteLocationParams(currentRoute.params, route.value.params));\n    function navigate(e = {}) {\n        if (guardEvent(e)) {\n            const p = router[vue.unref(props.replace) ? 'replace' : 'push'](vue.unref(props.to)\n            // avoid uncaught errors are they are logged anyway\n            ).catch(noop);\n            if (props.viewTransition &&\n                typeof document !== 'undefined' &&\n                'startViewTransition' in document) {\n                document.startViewTransition(() => p);\n            }\n            return p;\n        }\n        return Promise.resolve();\n    }\n    /**\n     * NOTE: update {@link _RouterLinkI}'s `$slots` type when updating this\n     */\n    return {\n        route,\n        href: vue.computed(() => route.value.href),\n        isActive,\n        isExactActive,\n        navigate,\n    };\n}\nfunction preferSingleVNode(vnodes) {\n    return vnodes.length === 1 ? vnodes[0] : vnodes;\n}\nconst RouterLinkImpl = /*#__PURE__*/ vue.defineComponent({\n    name: 'RouterLink',\n    compatConfig: { MODE: 3 },\n    props: {\n        to: {\n            type: [String, Object],\n            required: true,\n        },\n        replace: Boolean,\n        activeClass: String,\n        // inactiveClass: String,\n        exactActiveClass: String,\n        custom: Boolean,\n        ariaCurrentValue: {\n            type: String,\n            default: 'page',\n        },\n        viewTransition: Boolean,\n    },\n    useLink,\n    setup(props, { slots }) {\n        const link = vue.reactive(useLink(props));\n        const { options } = vue.inject(routerKey);\n        const elClass = vue.computed(() => ({\n            [getLinkClass(props.activeClass, options.linkActiveClass, 'router-link-active')]: link.isActive,\n            // [getLinkClass(\n            //   props.inactiveClass,\n            //   options.linkInactiveClass,\n            //   'router-link-inactive'\n            // )]: !link.isExactActive,\n            [getLinkClass(props.exactActiveClass, options.linkExactActiveClass, 'router-link-exact-active')]: link.isExactActive,\n        }));\n        return () => {\n            const children = slots.default && preferSingleVNode(slots.default(link));\n            return props.custom\n                ? children\n                : vue.h('a', {\n                    'aria-current': link.isExactActive\n                        ? props.ariaCurrentValue\n                        : null,\n                    href: link.href,\n                    // this would override user added attrs but Vue will still add\n                    // the listener, so we end up triggering both\n                    onClick: link.navigate,\n                    class: elClass.value,\n                }, children);\n        };\n    },\n});\n// export the public type for h/tsx inference\n// also to avoid inline import() in generated d.ts files\n/**\n * Component to render a link that triggers a navigation on click.\n */\nconst RouterLink = RouterLinkImpl;\nfunction guardEvent(e) {\n    // don't redirect with control keys\n    if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)\n        return;\n    // don't redirect when preventDefault called\n    if (e.defaultPrevented)\n        return;\n    // don't redirect on right click\n    if (e.button !== undefined && e.button !== 0)\n        return;\n    // don't redirect if `target=\"_blank\"`\n    // @ts-expect-error getAttribute does exist\n    if (e.currentTarget && e.currentTarget.getAttribute) {\n        // @ts-expect-error getAttribute exists\n        const target = e.currentTarget.getAttribute('target');\n        if (/\\b_blank\\b/i.test(target))\n            return;\n    }\n    // this may be a Weex event which doesn't have this method\n    if (e.preventDefault)\n        e.preventDefault();\n    return true;\n}\nfunction includesParams(outer, inner) {\n    for (const key in inner) {\n        const innerValue = inner[key];\n        const outerValue = outer[key];\n        if (typeof innerValue === 'string') {\n            if (innerValue !== outerValue)\n                return false;\n        }\n        else {\n            if (!isArray(outerValue) ||\n                outerValue.length !== innerValue.length ||\n                innerValue.some((value, i) => value !== outerValue[i]))\n                return false;\n        }\n    }\n    return true;\n}\n/**\n * Get the original path value of a record by following its aliasOf\n * @param record\n */\nfunction getOriginalPath(record) {\n    return record ? (record.aliasOf ? record.aliasOf.path : record.path) : '';\n}\n/**\n * Utility class to get the active class based on defaults.\n * @param propClass\n * @param globalClass\n * @param defaultClass\n */\nconst getLinkClass = (propClass, globalClass, defaultClass) => propClass != null\n    ? propClass\n    : globalClass != null\n        ? globalClass\n        : defaultClass;\n\nconst RouterViewImpl = /*#__PURE__*/ vue.defineComponent({\n    name: 'RouterView',\n    // #674 we manually inherit them\n    inheritAttrs: false,\n    props: {\n        name: {\n            type: String,\n            default: 'default',\n        },\n        route: Object,\n    },\n    // Better compat for @vue/compat users\n    // https://github.com/vuejs/router/issues/1315\n    compatConfig: { MODE: 3 },\n    setup(props, { attrs, slots }) {\n        const injectedRoute = vue.inject(routerViewLocationKey);\n        const routeToDisplay = vue.computed(() => props.route || injectedRoute.value);\n        const injectedDepth = vue.inject(viewDepthKey, 0);\n        // The depth changes based on empty components option, which allows passthrough routes e.g. routes with children\n        // that are used to reuse the `path` property\n        const depth = vue.computed(() => {\n            let initialDepth = vue.unref(injectedDepth);\n            const { matched } = routeToDisplay.value;\n            let matchedRoute;\n            while ((matchedRoute = matched[initialDepth]) &&\n                !matchedRoute.components) {\n                initialDepth++;\n            }\n            return initialDepth;\n        });\n        const matchedRouteRef = vue.computed(() => routeToDisplay.value.matched[depth.value]);\n        vue.provide(viewDepthKey, vue.computed(() => depth.value + 1));\n        vue.provide(matchedRouteKey, matchedRouteRef);\n        vue.provide(routerViewLocationKey, routeToDisplay);\n        const viewRef = vue.ref();\n        // watch at the same time the component instance, the route record we are\n        // rendering, and the name\n        vue.watch(() => [viewRef.value, matchedRouteRef.value, props.name], ([instance, to, name], [oldInstance, from, oldName]) => {\n            // copy reused instances\n            if (to) {\n                // this will update the instance for new instances as well as reused\n                // instances when navigating to a new route\n                to.instances[name] = instance;\n                // the component instance is reused for a different route or name, so\n                // we copy any saved update or leave guards. With async setup, the\n                // mounting component will mount before the matchedRoute changes,\n                // making instance === oldInstance, so we check if guards have been\n                // added before. This works because we remove guards when\n                // unmounting/deactivating components\n                if (from && from !== to && instance && instance === oldInstance) {\n                    if (!to.leaveGuards.size) {\n                        to.leaveGuards = from.leaveGuards;\n                    }\n                    if (!to.updateGuards.size) {\n                        to.updateGuards = from.updateGuards;\n                    }\n                }\n            }\n            // trigger beforeRouteEnter next callbacks\n            if (instance &&\n                to &&\n                // if there is no instance but to and from are the same this might be\n                // the first visit\n                (!from || !isSameRouteRecord(to, from) || !oldInstance)) {\n                (to.enterCallbacks[name] || []).forEach(callback => callback(instance));\n            }\n        }, { flush: 'post' });\n        return () => {\n            const route = routeToDisplay.value;\n            // we need the value at the time we render because when we unmount, we\n            // navigated to a different location so the value is different\n            const currentName = props.name;\n            const matchedRoute = matchedRouteRef.value;\n            const ViewComponent = matchedRoute && matchedRoute.components[currentName];\n            if (!ViewComponent) {\n                return normalizeSlot(slots.default, { Component: ViewComponent, route });\n            }\n            // props from route configuration\n            const routePropsOption = matchedRoute.props[currentName];\n            const routeProps = routePropsOption\n                ? routePropsOption === true\n                    ? route.params\n                    : typeof routePropsOption === 'function'\n                        ? routePropsOption(route)\n                        : routePropsOption\n                : null;\n            const onVnodeUnmounted = vnode => {\n                // remove the instance reference to prevent leak\n                if (vnode.component.isUnmounted) {\n                    matchedRoute.instances[currentName] = null;\n                }\n            };\n            const component = vue.h(ViewComponent, assign({}, routeProps, attrs, {\n                onVnodeUnmounted,\n                ref: viewRef,\n            }));\n            return (\n            // pass the vnode to the slot as a prop.\n            // h and <component :is=\"...\"> both accept vnodes\n            normalizeSlot(slots.default, { Component: component, route }) ||\n                component);\n        };\n    },\n});\nfunction normalizeSlot(slot, data) {\n    if (!slot)\n        return null;\n    const slotContent = slot(data);\n    return slotContent.length === 1 ? slotContent[0] : slotContent;\n}\n// export the public type for h/tsx inference\n// also to avoid inline import() in generated d.ts files\n/**\n * Component to display the current route the user is at.\n */\nconst RouterView = RouterViewImpl;\n\n/**\n * Creates a Router instance that can be used by a Vue app.\n *\n * @param options - {@link RouterOptions}\n */\nfunction createRouter(options) {\n    const matcher = createRouterMatcher(options.routes, options);\n    const parseQuery$1 = options.parseQuery || parseQuery;\n    const stringifyQuery$1 = options.stringifyQuery || stringifyQuery;\n    const routerHistory = options.history;\n    const beforeGuards = useCallbacks();\n    const beforeResolveGuards = useCallbacks();\n    const afterGuards = useCallbacks();\n    const currentRoute = vue.shallowRef(START_LOCATION_NORMALIZED);\n    let pendingLocation = START_LOCATION_NORMALIZED;\n    // leave the scrollRestoration if no scrollBehavior is provided\n    if (isBrowser && options.scrollBehavior && 'scrollRestoration' in history) {\n        history.scrollRestoration = 'manual';\n    }\n    const normalizeParams = applyToParams.bind(null, paramValue => '' + paramValue);\n    const encodeParams = applyToParams.bind(null, encodeParam);\n    const decodeParams = \n    // @ts-expect-error: intentionally avoid the type check\n    applyToParams.bind(null, decode);\n    function addRoute(parentOrRoute, route) {\n        let parent;\n        let record;\n        if (isRouteName(parentOrRoute)) {\n            parent = matcher.getRecordMatcher(parentOrRoute);\n            record = route;\n        }\n        else {\n            record = parentOrRoute;\n        }\n        return matcher.addRoute(record, parent);\n    }\n    function removeRoute(name) {\n        const recordMatcher = matcher.getRecordMatcher(name);\n        if (recordMatcher) {\n            matcher.removeRoute(recordMatcher);\n        }\n    }\n    function getRoutes() {\n        return matcher.getRoutes().map(routeMatcher => routeMatcher.record);\n    }\n    function hasRoute(name) {\n        return !!matcher.getRecordMatcher(name);\n    }\n    function resolve(rawLocation, currentLocation) {\n        // const resolve: Router['resolve'] = (rawLocation: RouteLocationRaw, currentLocation) => {\n        // const objectLocation = routerLocationAsObject(rawLocation)\n        // we create a copy to modify it later\n        currentLocation = assign({}, currentLocation || currentRoute.value);\n        if (typeof rawLocation === 'string') {\n            const locationNormalized = parseURL(parseQuery$1, rawLocation, currentLocation.path);\n            const matchedRoute = matcher.resolve({ path: locationNormalized.path }, currentLocation);\n            const href = routerHistory.createHref(locationNormalized.fullPath);\n            // locationNormalized is always a new object\n            return assign(locationNormalized, matchedRoute, {\n                params: decodeParams(matchedRoute.params),\n                hash: decode(locationNormalized.hash),\n                redirectedFrom: undefined,\n                href,\n            });\n        }\n        let matcherLocation;\n        // path could be relative in object as well\n        if (rawLocation.path != null) {\n            matcherLocation = assign({}, rawLocation, {\n                path: parseURL(parseQuery$1, rawLocation.path, currentLocation.path).path,\n            });\n        }\n        else {\n            // remove any nullish param\n            const targetParams = assign({}, rawLocation.params);\n            for (const key in targetParams) {\n                if (targetParams[key] == null) {\n                    delete targetParams[key];\n                }\n            }\n            // pass encoded values to the matcher, so it can produce encoded path and fullPath\n            matcherLocation = assign({}, rawLocation, {\n                params: encodeParams(targetParams),\n            });\n            // current location params are decoded, we need to encode them in case the\n            // matcher merges the params\n            currentLocation.params = encodeParams(currentLocation.params);\n        }\n        const matchedRoute = matcher.resolve(matcherLocation, currentLocation);\n        const hash = rawLocation.hash || '';\n        // the matcher might have merged current location params, so\n        // we need to run the decoding again\n        matchedRoute.params = normalizeParams(decodeParams(matchedRoute.params));\n        const fullPath = stringifyURL(stringifyQuery$1, assign({}, rawLocation, {\n            hash: encodeHash(hash),\n            path: matchedRoute.path,\n        }));\n        const href = routerHistory.createHref(fullPath);\n        return assign({\n            fullPath,\n            // keep the hash encoded so fullPath is effectively path + encodedQuery +\n            // hash\n            hash,\n            query: \n            // if the user is using a custom query lib like qs, we might have\n            // nested objects, so we keep the query as is, meaning it can contain\n            // numbers at `$route.query`, but at the point, the user will have to\n            // use their own type anyway.\n            // https://github.com/vuejs/router/issues/328#issuecomment-649481567\n            stringifyQuery$1 === stringifyQuery\n                ? normalizeQuery(rawLocation.query)\n                : (rawLocation.query || {}),\n        }, matchedRoute, {\n            redirectedFrom: undefined,\n            href,\n        });\n    }\n    function locationAsObject(to) {\n        return typeof to === 'string'\n            ? parseURL(parseQuery$1, to, currentRoute.value.path)\n            : assign({}, to);\n    }\n    function checkCanceledNavigation(to, from) {\n        if (pendingLocation !== to) {\n            return createRouterError(8 /* ErrorTypes.NAVIGATION_CANCELLED */, {\n                from,\n                to,\n            });\n        }\n    }\n    function push(to) {\n        return pushWithRedirect(to);\n    }\n    function replace(to) {\n        return push(assign(locationAsObject(to), { replace: true }));\n    }\n    function handleRedirectRecord(to) {\n        const lastMatched = to.matched[to.matched.length - 1];\n        if (lastMatched && lastMatched.redirect) {\n            const { redirect } = lastMatched;\n            let newTargetLocation = typeof redirect === 'function' ? redirect(to) : redirect;\n            if (typeof newTargetLocation === 'string') {\n                newTargetLocation =\n                    newTargetLocation.includes('?') || newTargetLocation.includes('#')\n                        ? (newTargetLocation = locationAsObject(newTargetLocation))\n                        : // force empty params\n                            { path: newTargetLocation };\n                // @ts-expect-error: force empty params when a string is passed to let\n                // the router parse them again\n                newTargetLocation.params = {};\n            }\n            return assign({\n                query: to.query,\n                hash: to.hash,\n                // avoid transferring params if the redirect has a path\n                params: newTargetLocation.path != null ? {} : to.params,\n            }, newTargetLocation);\n        }\n    }\n    function pushWithRedirect(to, redirectedFrom) {\n        const targetLocation = (pendingLocation = resolve(to));\n        const from = currentRoute.value;\n        const data = to.state;\n        const force = to.force;\n        // to could be a string where `replace` is a function\n        const replace = to.replace === true;\n        const shouldRedirect = handleRedirectRecord(targetLocation);\n        if (shouldRedirect)\n            return pushWithRedirect(assign(locationAsObject(shouldRedirect), {\n                state: typeof shouldRedirect === 'object'\n                    ? assign({}, data, shouldRedirect.state)\n                    : data,\n                force,\n                replace,\n            }), \n            // keep original redirectedFrom if it exists\n            redirectedFrom || targetLocation);\n        // if it was a redirect we already called `pushWithRedirect` above\n        const toLocation = targetLocation;\n        toLocation.redirectedFrom = redirectedFrom;\n        let failure;\n        if (!force && isSameRouteLocation(stringifyQuery$1, from, targetLocation)) {\n            failure = createRouterError(16 /* ErrorTypes.NAVIGATION_DUPLICATED */, { to: toLocation, from });\n            // trigger scroll to allow scrolling to the same anchor\n            handleScroll(from, from, \n            // this is a push, the only way for it to be triggered from a\n            // history.listen is with a redirect, which makes it become a push\n            true, \n            // This cannot be the first navigation because the initial location\n            // cannot be manually navigated to\n            false);\n        }\n        return (failure ? Promise.resolve(failure) : navigate(toLocation, from))\n            .catch((error) => isNavigationFailure(error)\n            ? // navigation redirects still mark the router as ready\n                isNavigationFailure(error, 2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */)\n                    ? error\n                    : markAsReady(error) // also returns the error\n            : // reject any unknown error\n                triggerError(error, toLocation, from))\n            .then((failure) => {\n            if (failure) {\n                if (isNavigationFailure(failure, 2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */)) {\n                    return pushWithRedirect(\n                    // keep options\n                    assign({\n                        // preserve an existing replacement but allow the redirect to override it\n                        replace,\n                    }, locationAsObject(failure.to), {\n                        state: typeof failure.to === 'object'\n                            ? assign({}, data, failure.to.state)\n                            : data,\n                        force,\n                    }), \n                    // preserve the original redirectedFrom if any\n                    redirectedFrom || toLocation);\n                }\n            }\n            else {\n                // if we fail we don't finalize the navigation\n                failure = finalizeNavigation(toLocation, from, true, replace, data);\n            }\n            triggerAfterEach(toLocation, from, failure);\n            return failure;\n        });\n    }\n    /**\n     * Helper to reject and skip all navigation guards if a new navigation happened\n     * @param to\n     * @param from\n     */\n    function checkCanceledNavigationAndReject(to, from) {\n        const error = checkCanceledNavigation(to, from);\n        return error ? Promise.reject(error) : Promise.resolve();\n    }\n    function runWithContext(fn) {\n        const app = installedApps.values().next().value;\n        // support Vue < 3.3\n        return app && typeof app.runWithContext === 'function'\n            ? app.runWithContext(fn)\n            : fn();\n    }\n    // TODO: refactor the whole before guards by internally using router.beforeEach\n    function navigate(to, from) {\n        let guards;\n        const [leavingRecords, updatingRecords, enteringRecords] = extractChangingRecords(to, from);\n        // all components here have been resolved once because we are leaving\n        guards = extractComponentsGuards(leavingRecords.reverse(), 'beforeRouteLeave', to, from);\n        // leavingRecords is already reversed\n        for (const record of leavingRecords) {\n            record.leaveGuards.forEach(guard => {\n                guards.push(guardToPromiseFn(guard, to, from));\n            });\n        }\n        const canceledNavigationCheck = checkCanceledNavigationAndReject.bind(null, to, from);\n        guards.push(canceledNavigationCheck);\n        // run the queue of per route beforeRouteLeave guards\n        return (runGuardQueue(guards)\n            .then(() => {\n            // check global guards beforeEach\n            guards = [];\n            for (const guard of beforeGuards.list()) {\n                guards.push(guardToPromiseFn(guard, to, from));\n            }\n            guards.push(canceledNavigationCheck);\n            return runGuardQueue(guards);\n        })\n            .then(() => {\n            // check in components beforeRouteUpdate\n            guards = extractComponentsGuards(updatingRecords, 'beforeRouteUpdate', to, from);\n            for (const record of updatingRecords) {\n                record.updateGuards.forEach(guard => {\n                    guards.push(guardToPromiseFn(guard, to, from));\n                });\n            }\n            guards.push(canceledNavigationCheck);\n            // run the queue of per route beforeEnter guards\n            return runGuardQueue(guards);\n        })\n            .then(() => {\n            // check the route beforeEnter\n            guards = [];\n            for (const record of enteringRecords) {\n                // do not trigger beforeEnter on reused views\n                if (record.beforeEnter) {\n                    if (isArray(record.beforeEnter)) {\n                        for (const beforeEnter of record.beforeEnter)\n                            guards.push(guardToPromiseFn(beforeEnter, to, from));\n                    }\n                    else {\n                        guards.push(guardToPromiseFn(record.beforeEnter, to, from));\n                    }\n                }\n            }\n            guards.push(canceledNavigationCheck);\n            // run the queue of per route beforeEnter guards\n            return runGuardQueue(guards);\n        })\n            .then(() => {\n            // NOTE: at this point to.matched is normalized and does not contain any () => Promise<Component>\n            // clear existing enterCallbacks, these are added by extractComponentsGuards\n            to.matched.forEach(record => (record.enterCallbacks = {}));\n            // check in-component beforeRouteEnter\n            guards = extractComponentsGuards(enteringRecords, 'beforeRouteEnter', to, from, runWithContext);\n            guards.push(canceledNavigationCheck);\n            // run the queue of per route beforeEnter guards\n            return runGuardQueue(guards);\n        })\n            .then(() => {\n            // check global guards beforeResolve\n            guards = [];\n            for (const guard of beforeResolveGuards.list()) {\n                guards.push(guardToPromiseFn(guard, to, from));\n            }\n            guards.push(canceledNavigationCheck);\n            return runGuardQueue(guards);\n        })\n            // catch any navigation canceled\n            .catch(err => isNavigationFailure(err, 8 /* ErrorTypes.NAVIGATION_CANCELLED */)\n            ? err\n            : Promise.reject(err)));\n    }\n    function triggerAfterEach(to, from, failure) {\n        // navigation is confirmed, call afterGuards\n        // TODO: wrap with error handlers\n        afterGuards\n            .list()\n            .forEach(guard => runWithContext(() => guard(to, from, failure)));\n    }\n    /**\n     * - Cleans up any navigation guards\n     * - Changes the url if necessary\n     * - Calls the scrollBehavior\n     */\n    function finalizeNavigation(toLocation, from, isPush, replace, data) {\n        // a more recent navigation took place\n        const error = checkCanceledNavigation(toLocation, from);\n        if (error)\n            return error;\n        // only consider as push if it's not the first navigation\n        const isFirstNavigation = from === START_LOCATION_NORMALIZED;\n        const state = !isBrowser ? {} : history.state;\n        // change URL only if the user did a push/replace and if it's not the initial navigation because\n        // it's just reflecting the url\n        if (isPush) {\n            // on the initial navigation, we want to reuse the scroll position from\n            // history state if it exists\n            if (replace || isFirstNavigation)\n                routerHistory.replace(toLocation.fullPath, assign({\n                    scroll: isFirstNavigation && state && state.scroll,\n                }, data));\n            else\n                routerHistory.push(toLocation.fullPath, data);\n        }\n        // accept current navigation\n        currentRoute.value = toLocation;\n        handleScroll(toLocation, from, isPush, isFirstNavigation);\n        markAsReady();\n    }\n    let removeHistoryListener;\n    // attach listener to history to trigger navigations\n    function setupListeners() {\n        // avoid setting up listeners twice due to an invalid first navigation\n        if (removeHistoryListener)\n            return;\n        removeHistoryListener = routerHistory.listen((to, _from, info) => {\n            if (!router.listening)\n                return;\n            // cannot be a redirect route because it was in history\n            const toLocation = resolve(to);\n            // due to dynamic routing, and to hash history with manual navigation\n            // (manually changing the url or calling history.hash = '#/somewhere'),\n            // there could be a redirect record in history\n            const shouldRedirect = handleRedirectRecord(toLocation);\n            if (shouldRedirect) {\n                pushWithRedirect(assign(shouldRedirect, { replace: true, force: true }), toLocation).catch(noop);\n                return;\n            }\n            pendingLocation = toLocation;\n            const from = currentRoute.value;\n            // TODO: should be moved to web history?\n            if (isBrowser) {\n                saveScrollPosition(getScrollKey(from.fullPath, info.delta), computeScrollPosition());\n            }\n            navigate(toLocation, from)\n                .catch((error) => {\n                if (isNavigationFailure(error, 4 /* ErrorTypes.NAVIGATION_ABORTED */ | 8 /* ErrorTypes.NAVIGATION_CANCELLED */)) {\n                    return error;\n                }\n                if (isNavigationFailure(error, 2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */)) {\n                    // Here we could call if (info.delta) routerHistory.go(-info.delta,\n                    // false) but this is bug prone as we have no way to wait the\n                    // navigation to be finished before calling pushWithRedirect. Using\n                    // a setTimeout of 16ms seems to work but there is no guarantee for\n                    // it to work on every browser. So instead we do not restore the\n                    // history entry and trigger a new navigation as requested by the\n                    // navigation guard.\n                    // the error is already handled by router.push we just want to avoid\n                    // logging the error\n                    pushWithRedirect(assign(locationAsObject(error.to), {\n                        force: true,\n                    }), toLocation\n                    // avoid an uncaught rejection, let push call triggerError\n                    )\n                        .then(failure => {\n                        // manual change in hash history #916 ending up in the URL not\n                        // changing, but it was changed by the manual url change, so we\n                        // need to manually change it ourselves\n                        if (isNavigationFailure(failure, 4 /* ErrorTypes.NAVIGATION_ABORTED */ |\n                            16 /* ErrorTypes.NAVIGATION_DUPLICATED */) &&\n                            !info.delta &&\n                            info.type === NavigationType.pop) {\n                            routerHistory.go(-1, false);\n                        }\n                    })\n                        .catch(noop);\n                    // avoid the then branch\n                    return Promise.reject();\n                }\n                // do not restore history on unknown direction\n                if (info.delta) {\n                    routerHistory.go(-info.delta, false);\n                }\n                // unrecognized error, transfer to the global handler\n                return triggerError(error, toLocation, from);\n            })\n                .then((failure) => {\n                failure =\n                    failure ||\n                        finalizeNavigation(\n                        // after navigation, all matched components are resolved\n                        toLocation, from, false);\n                // revert the navigation\n                if (failure) {\n                    if (info.delta &&\n                        // a new navigation has been triggered, so we do not want to revert, that will change the current history\n                        // entry while a different route is displayed\n                        !isNavigationFailure(failure, 8 /* ErrorTypes.NAVIGATION_CANCELLED */)) {\n                        routerHistory.go(-info.delta, false);\n                    }\n                    else if (info.type === NavigationType.pop &&\n                        isNavigationFailure(failure, 4 /* ErrorTypes.NAVIGATION_ABORTED */ | 16 /* ErrorTypes.NAVIGATION_DUPLICATED */)) {\n                        // manual change in hash history #916\n                        // it's like a push but lacks the information of the direction\n                        routerHistory.go(-1, false);\n                    }\n                }\n                triggerAfterEach(toLocation, from, failure);\n            })\n                // avoid warnings in the console about uncaught rejections, they are logged by triggerErrors\n                .catch(noop);\n        });\n    }\n    // Initialization and Errors\n    let readyHandlers = useCallbacks();\n    let errorListeners = useCallbacks();\n    let ready;\n    /**\n     * Trigger errorListeners added via onError and throws the error as well\n     *\n     * @param error - error to throw\n     * @param to - location we were navigating to when the error happened\n     * @param from - location we were navigating from when the error happened\n     * @returns the error as a rejected promise\n     */\n    function triggerError(error, to, from) {\n        markAsReady(error);\n        const list = errorListeners.list();\n        if (list.length) {\n            list.forEach(handler => handler(error, to, from));\n        }\n        else {\n            console.error(error);\n        }\n        // reject the error no matter there were error listeners or not\n        return Promise.reject(error);\n    }\n    function isReady() {\n        if (ready && currentRoute.value !== START_LOCATION_NORMALIZED)\n            return Promise.resolve();\n        return new Promise((resolve, reject) => {\n            readyHandlers.add([resolve, reject]);\n        });\n    }\n    function markAsReady(err) {\n        if (!ready) {\n            // still not ready if an error happened\n            ready = !err;\n            setupListeners();\n            readyHandlers\n                .list()\n                .forEach(([resolve, reject]) => (err ? reject(err) : resolve()));\n            readyHandlers.reset();\n        }\n        return err;\n    }\n    // Scroll behavior\n    function handleScroll(to, from, isPush, isFirstNavigation) {\n        const { scrollBehavior } = options;\n        if (!isBrowser || !scrollBehavior)\n            return Promise.resolve();\n        const scrollPosition = (!isPush && getSavedScrollPosition(getScrollKey(to.fullPath, 0))) ||\n            ((isFirstNavigation || !isPush) &&\n                history.state &&\n                history.state.scroll) ||\n            null;\n        return vue.nextTick()\n            .then(() => scrollBehavior(to, from, scrollPosition))\n            .then(position => position && scrollToPosition(position))\n            .catch(err => triggerError(err, to, from));\n    }\n    const go = (delta) => routerHistory.go(delta);\n    let started;\n    const installedApps = new Set();\n    const router = {\n        currentRoute,\n        listening: true,\n        addRoute,\n        removeRoute,\n        clearRoutes: matcher.clearRoutes,\n        hasRoute,\n        getRoutes,\n        resolve,\n        options,\n        push,\n        replace,\n        go,\n        back: () => go(-1),\n        forward: () => go(1),\n        beforeEach: beforeGuards.add,\n        beforeResolve: beforeResolveGuards.add,\n        afterEach: afterGuards.add,\n        onError: errorListeners.add,\n        isReady,\n        install(app) {\n            const router = this;\n            app.component('RouterLink', RouterLink);\n            app.component('RouterView', RouterView);\n            app.config.globalProperties.$router = router;\n            Object.defineProperty(app.config.globalProperties, '$route', {\n                enumerable: true,\n                get: () => vue.unref(currentRoute),\n            });\n            // this initial navigation is only necessary on client, on server it doesn't\n            // make sense because it will create an extra unnecessary navigation and could\n            // lead to problems\n            if (isBrowser &&\n                // used for the initial navigation client side to avoid pushing\n                // multiple times when the router is used in multiple apps\n                !started &&\n                currentRoute.value === START_LOCATION_NORMALIZED) {\n                // see above\n                started = true;\n                push(routerHistory.location).catch(err => {\n                });\n            }\n            const reactiveRoute = {};\n            for (const key in START_LOCATION_NORMALIZED) {\n                Object.defineProperty(reactiveRoute, key, {\n                    get: () => currentRoute.value[key],\n                    enumerable: true,\n                });\n            }\n            app.provide(routerKey, router);\n            app.provide(routeLocationKey, vue.shallowReactive(reactiveRoute));\n            app.provide(routerViewLocationKey, currentRoute);\n            const unmountApp = app.unmount;\n            installedApps.add(app);\n            app.unmount = function () {\n                installedApps.delete(app);\n                // the router is not attached to an app anymore\n                if (installedApps.size < 1) {\n                    // invalidate the current navigation\n                    pendingLocation = START_LOCATION_NORMALIZED;\n                    removeHistoryListener && removeHistoryListener();\n                    removeHistoryListener = null;\n                    currentRoute.value = START_LOCATION_NORMALIZED;\n                    started = false;\n                    ready = false;\n                }\n                unmountApp();\n            };\n        },\n    };\n    // TODO: type this as NavigationGuardReturn or similar instead of any\n    function runGuardQueue(guards) {\n        return guards.reduce((promise, guard) => promise.then(() => runWithContext(guard)), Promise.resolve());\n    }\n    return router;\n}\nfunction extractChangingRecords(to, from) {\n    const leavingRecords = [];\n    const updatingRecords = [];\n    const enteringRecords = [];\n    const len = Math.max(from.matched.length, to.matched.length);\n    for (let i = 0; i < len; i++) {\n        const recordFrom = from.matched[i];\n        if (recordFrom) {\n            if (to.matched.find(record => isSameRouteRecord(record, recordFrom)))\n                updatingRecords.push(recordFrom);\n            else\n                leavingRecords.push(recordFrom);\n        }\n        const recordTo = to.matched[i];\n        if (recordTo) {\n            // the type doesn't matter because we are comparing per reference\n            if (!from.matched.find(record => isSameRouteRecord(record, recordTo))) {\n                enteringRecords.push(recordTo);\n            }\n        }\n    }\n    return [leavingRecords, updatingRecords, enteringRecords];\n}\n\n/**\n * Returns the router instance. Equivalent to using `$router` inside\n * templates.\n */\nfunction useRouter() {\n    return vue.inject(routerKey);\n}\n/**\n * Returns the current route location. Equivalent to using `$route` inside\n * templates.\n */\nfunction useRoute(_name) {\n    return vue.inject(routeLocationKey);\n}\n\nexports.RouterLink = RouterLink;\nexports.RouterView = RouterView;\nexports.START_LOCATION = START_LOCATION_NORMALIZED;\nexports.createMemoryHistory = createMemoryHistory;\nexports.createRouter = createRouter;\nexports.createRouterMatcher = createRouterMatcher;\nexports.createWebHashHistory = createWebHashHistory;\nexports.createWebHistory = createWebHistory;\nexports.isNavigationFailure = isNavigationFailure;\nexports.loadRouteLocation = loadRouteLocation;\nexports.matchedRouteKey = matchedRouteKey;\nexports.onBeforeRouteLeave = onBeforeRouteLeave;\nexports.onBeforeRouteUpdate = onBeforeRouteUpdate;\nexports.parseQuery = parseQuery;\nexports.routeLocationKey = routeLocationKey;\nexports.routerKey = routerKey;\nexports.routerViewLocationKey = routerViewLocationKey;\nexports.stringifyQuery = stringifyQuery;\nexports.useLink = useLink;\nexports.useRoute = useRoute;\nexports.useRouter = useRouter;\nexports.viewDepthKey = viewDepthKey;\n","'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./dist/vue-router.prod.cjs')\n} else {\n  module.exports = require('./dist/vue-router.cjs')\n}\n","//We implement the backend version of getWHDebugFlags so bridge can access us without going through a recursive dep\n\nimport type { DTAPStage } from \"./concepts\";\n\n/// List global polyfills currently active. This may be needed to align TypeScript hosts configuration\nexport const globalPolyfills: string[] = [];\n\n/// An object with string keys and typed values\nexport interface WellKnownFlags {\n  /** Log RPcs */\n  rpc?: boolean;\n  /** Log web traffic */\n  wrq?: boolean;\n  /** Autoprofile */\n  apr?: boolean;\n  /** IPC */\n  ipc?: boolean;\n  /** async */\n  async?: boolean;\n}\nexport type DebugFlags = WellKnownFlags & { [key: string]: boolean | undefined };\n\nexport type DebugConfig = {\n  tags: readonly string[];\n  outputsession: string;\n  context: string;\n};\n\n/// Empty or no parameter lang is get, otherwise it's a set\nexport type GetSetAssetBase = (assetBase?: string | null) => string | null;\n\nexport type EnvHooks = {\n  currentAssetBase: GetSetAssetBase;\n};\n\n\nconst settingschangedcallbacks = new Array<() => void>;\n\n/* Global debug flags are set by `wh debug`, local flags are prefilled by environment variables.\n   Edits to the debug flags will be applied to the local flags (unless setDebugFlagsOverrideCB returns\n   override records).\n*/\nconst globalDebugFlags: DebugFlags = {}, localDebugFlags: DebugFlags = {};\n\n/** Returns the flag override records. The first record is examined first, then the second, etc. */\nlet debugFlagsOverridesCB: undefined | (() => DebugFlags[]);\n\n/** Override the debug flag override getter. */\nexport function setDebugFlagsOverrideCB(cb: undefined | (() => DebugFlags[])) {\n  debugFlagsOverridesCB = cb;\n}\n\n/* Proxy handler for the published debug flags. Uses the override records (with the first record\n   examined first, then the second, etc.) to override the flags from baseDebugFlags. Setting to `true` sets\n   the flag, `false` disables it and setting to `undefined` has the same effect as deleting the property in the\n   current top record (exposing any value from a lower record, like the debug settings from `wh debug`).\n*/\nclass DebugFlagsProxyHandler implements ProxyHandler<DebugFlags> {\n  private getRecordList(): DebugFlags[] {\n    return [...debugFlagsOverridesCB?.() ?? [], localDebugFlags, globalDebugFlags];\n  }\n\n  get(target: DebugFlags, p: string) {\n    for (const record of this.getRecordList())\n      if (p in record && typeof record[p] !== \"undefined\")\n        return record[p];\n    return undefined;\n  }\n  has(target: DebugFlags, p: string): boolean {\n    return this.get(target, p) !== undefined;\n  }\n  ownKeys(target: DebugFlags): Array<string | symbol> {\n    const keys = new Array<string | symbol>;\n    for (const record of this.getRecordList())\n      for (const key of Reflect.ownKeys(record))\n        if (typeof key === \"string\" && record[key] !== undefined && !keys.includes(key))\n          keys.push(key);\n    return keys;\n  }\n  set(target: DebugFlags, p: string, newValue: boolean | undefined): boolean {\n    const toModify = this.getRecordList()[0];\n    if (typeof newValue === \"boolean\")\n      toModify[p] = newValue;\n    else\n      delete toModify[p];\n\n    runSettingsCallbacks();\n    return true;\n  }\n  deleteProperty(target: DebugFlags, p: string): boolean {\n    const toModify = this.getRecordList()[0];\n    delete toModify[p];\n\n    runSettingsCallbacks();\n    return true;\n  }\n  getOwnPropertyDescriptor(target: DebugFlags, p: string): PropertyDescriptor | undefined {\n    const value = this.get(target, p);\n    return value !== undefined ? { enumerable: true, value, configurable: true } : undefined;\n  }\n}\n\nexport const debugFlags = new Proxy<DebugFlags>({\n  [Symbol.for('nodejs.util.inspect.custom')]: formatForConsoleLogs\n}, new DebugFlagsProxyHandler());\n\nfunction formatForConsoleLogs() {\n  return `DebugFlags [${[...Object.keys(debugFlags)].filter(key => debugFlags[key]).join(\", \")}]`;\n}\n\nfunction runSettingsCallbacks() {\n  for (const cb of [...settingschangedcallbacks]) {\n    try {\n      cb();\n    } catch (e) {\n      console.error(\"Error invoking settings change callback\", cb?.name, e);\n      //ignore, debugFlags can change due to external updates so they're basically signal handlers and there's no real point in crashing whatever was really running\n    }\n  }\n}\n\n/** Update the debugconfig as present in the system configuration record\n    @param settings - debugconfig cell of the system configuration record\n*/\nexport function updateDebugConfig(settings: DebugConfig | null) {\n  const oldenabledflags = Object.keys(globalDebugFlags).sort();\n  const newenabledflags = settings?.tags ? [...settings.tags].sort() : [];\n\n  if (oldenabledflags.join(\",\") !== newenabledflags.join(\",\")) {\n    for (const flag of newenabledflags)\n      globalDebugFlags[flag] = true;\n    for (const flag of oldenabledflags)\n      if (!newenabledflags.includes(flag))\n        delete globalDebugFlags[flag];\n\n    runSettingsCallbacks();\n  }\n  if (debugFlags.async && Error.stackTraceLimit < 100)\n    Error.stackTraceLimit = 100;\n}\n\nexport function registerDebugConfigChangedCallback(cb: () => void) {\n  settingschangedcallbacks.push(cb);\n}\n\nexport function updateLocalDebugFlags(mode: \"enable\" | \"disable\" | \"clear\", flags: string[]): DebugFlags {\n  switch (mode) {\n    case \"enable\":\n    case \"disable\":\n      for (const flag of flags)\n        localDebugFlags[flag] = mode === \"enable\";\n      break;\n    case \"clear\":\n      for (const flag of Object.keys(localDebugFlags))\n        delete localDebugFlags[flag];\n  }\n  runSettingsCallbacks();\n  return { ...globalDebugFlags, ...localDebugFlags };\n}\n\n/** DTAP stage set for this WebHare */\nlet dtapStage: DTAPStage = \"production\";\n\n/** @deprecated We now recommend checking dtapStage against production/acceptance Explicitly */\nlet isLive: boolean = dtapStage === \"production\" || dtapStage === \"acceptance\";\n\n/** The backend base URL. Used for eg. autoconfiguring JSON/RPC */\nlet backendBase = \"\";\n\n/** The global assetbase */\nlet assetBase: string | null = null;\n\n//deprecated variants\n/** @deprecated For WH5.4 and up use 'dtapStage' */\nlet dtapstage: DTAPStage = dtapStage;\n/** @deprecated For WH5.4 and up compare 'dtapStage' for production or acceptance */\nlet islive: boolean = isLive;\n\nlet hooks: EnvHooks | undefined;\nlet hookFactory: (() => EnvHooks) | undefined;\nlet gotHooks = false;\n\nexport function initEnv(setDtapStage: DTAPStage, setBackendBase: string) {\n  dtapStage = setDtapStage;\n  isLive = dtapStage === \"production\" || dtapStage === \"acceptance\";\n  backendBase = setBackendBase;\n\n  dtapstage = dtapStage;\n  islive = isLive;\n}\n\nexport function setEnvHooksFactory(newHookFactory: () => EnvHooks) {\n  if (gotHooks)\n    throw new Error(`The call to setEnvHooksFactory was too late - hooks have already been retrieved once`);\n  hookFactory = newHookFactory;\n}\n\nexport function getEnvHooks() {\n  gotHooks = true;\n  return hookFactory?.();\n}\n\nfunction ensureHooks(): EnvHooks {\n  return hooks ??= getEnvHooks?.() ?? {\n    currentAssetBase: (newAssetBase) => {\n      if (newAssetBase !== undefined)\n        assetBase = newAssetBase;\n      return assetBase;\n    }\n  };\n}\n\n/** Get the base url for assets. This may point towards eg. a CDN\n * @returns The base url for assets, ending with a '/'. null if not set\n */\nexport function getAssetBase(): string | null {\n  return ensureHooks().currentAssetBase();\n}\n\n/** Get the base url for a module's public assets (those located in the module's `public` folder)\n */\nexport function getModulePublicAssetBase(module: string) {\n  return `${getAssetBase() || \"/\"}.wh/mod/${encodeURIComponent(module)}/public/`;\n}\n\n/** Set the base url for assets */\nexport function setAssetBase(base: string | null): void {\n  if (base && !base.endsWith(\"/\"))\n    throw new Error(`Asset base must end with a '/'`);\n\n  ensureHooks().currentAssetBase(base);\n}\n\nexport { dtapStage, isLive, backendBase, localDebugFlags };\nexport { dtapstage, islive }; //deprecated variants\n","\n//Note that @webhare/env does not invoke this API itself. In WebHare @webhare/frontend/src/init uses this to initialize\nexport function getBrowserDebugFlags(varname: string): string[] {\n  const flags = [];\n  const urldebugvar = new URL(location.href).searchParams.get(varname);\n  if (urldebugvar)\n    flags.push(...urldebugvar.split(','));\n\n  //not importing getCookie to solve some import ordering issues\n  if (typeof document !== \"undefined\") { //'document' is undefined in a worker but assetpacks compiled for a ServiceWorker will also load us\n    const debugcookie = document.cookie.match(`(?:^|;)\\\\s*${varname}=([^;]*)`); //TODO escape varname\n    if (debugcookie) {\n      const debugcookievalue = decodeURIComponent(debugcookie[1]);\n      if (debugcookievalue)\n        flags.push(... (debugcookievalue.split('.').filter(flag => !flag.startsWith('sig='))));\n    }\n  }\n\n  if (typeof sessionStorage !== \"undefined\") {\n    const sessionDebug = sessionStorage.getItem(varname);\n    if (sessionDebug)\n      flags.push(...sessionDebug.split(','));\n  }\n\n  return flags;\n}\n","/** Rect describing an elements position */\nexport type Rect = {\n  top: number;\n  bottom: number;\n  left: number;\n  right: number;\n  width: number;\n  height: number;\n};\n\n/** Elements you can set a value on and would have to trigger change and/or input events */\nexport type FormControlElement = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n\n/** Types that support querySelector(All) */\ntype QuerySelectorAble = ParentNode | ShadowRoot;\n\nexport function qS<E extends Element = HTMLElement>(startnode: QuerySelectorAble, selector: string): E | null;\nexport function qS<E extends Element = HTMLElement>(selector: string): E | null;\n\n/** Match the first element using a CSS selector\n * @param node_or_selector - The starting node or selector\n * @param selector - The selector to match if the starting node was specified\n * @returns The first matching element or null\n */\nexport function qS<E extends Element>(node_or_selector: QuerySelectorAble | string, selector?: string): E | null {\n  if (typeof node_or_selector === 'string')\n    return document.querySelector<E>(node_or_selector);\n  else if (selector)\n    return node_or_selector.querySelector<E>(selector);\n  return null;\n}\n\n\nexport function qR<E extends Element = HTMLElement>(startnode: QuerySelectorAble, selector: string): E;\nexport function qR<E extends Element = HTMLElement>(selector: string): E;\n\n/** Match a specific element using a CSS selector, requiring it to exist and be unique\n * @param node_or_selector - The starting node or selector\n * @param selector - The selector to match if the starting node was specified\n * @returns The requested element. Throw it the selector doesn't match exactly one element\n */\nexport function qR<E extends Element>(node_or_selector: QuerySelectorAble | string, selector?: string): E {\n  const matches = qSA<E>(node_or_selector as QuerySelectorAble, selector as string);\n  if (matches.length === 1)\n    return matches[0];\n\n  if (typeof node_or_selector !== 'string') {\n    console.error(`${matches.length} elements match selector \\`${selector}\\` with startingpoint`, node_or_selector, matches);\n    throw new Error(`${matches.length} elements match selector \\`${selector}\\` given startingpoint '${node_or_selector.nodeName}'`);\n  } else {\n    console.error(`${matches.length} elements match selector \\`${node_or_selector}\\` in the document`, matches);\n    throw new Error(`${matches.length} elements match selector \\`${node_or_selector}\\` in the document`);\n  }\n}\n\nexport function qSA<E extends Element = HTMLElement>(startnode: QuerySelectorAble, selector: string): E[];\nexport function qSA<E extends Element = HTMLElement>(selector: string): E[];\n\n/** Find multiple elements using a CSS selector\n * @param node_or_selector - The starting node or selector\n * @param selector - The selector to match if the starting node was specified\n * @returns The requested elements.\n */\nexport function qSA<E extends Element>(node_or_selector: QuerySelectorAble | string, selector?: string): E[] {\n  if (typeof node_or_selector === 'string')\n    return Array.from(document.querySelectorAll(node_or_selector));\n  else if (selector)\n    return Array.from(node_or_selector.querySelectorAll(selector));\n\n  return [];\n}\n\n/** Return whether the passed element is a FormControlElement */\nexport function isFormControl(field: Element): field is FormControlElement {\n  return isHTMLElement(field) && [\"INPUT\", \"SELECT\", \"TEXTAREA\"].includes(field.tagName);\n}\n\n/** Return whether the passed element is an editable text field */\nexport function isEditControl(field: Element): field is HTMLElement {\n  return isHTMLElement(field) && ([\"INPUT\", \"TEXTAREA\"].includes(field.tagName) || field.isContentEditable);\n}\n\n/** Test whether node is an Element, even if it's in a different iframe */\nexport function isElement(node: unknown): node is Element {\n  //TODO What is actually going on if defaultView is missing?\n  if (!node || typeof node !== \"object\")\n    return false;\n\n  /* Getting the proto doesn't always work:\n  const proto = (node as Element).ownerDocument.defaultView?.Element;\n  (because our iframes derive off about? not sure) so until someone finds the real answer, we'll do a heuristic\n  */\n\n  /** Analyzing node.constructor.name doesn't work because custom elements don't necessarily have their constructor's name ending in Element\n  return Boolean(\"ownerDocument\" in node && node.constructor.name.match(/Element$/));\n  */\n\n  return Boolean(\"ownerDocument\" in node && (node as Element).nodeType === 1);\n\n}\n\n/** Test whether node is a HTMLElement, even if it's in a different iframe */\nexport function isHTMLElement(node: unknown): node is HTMLElement {\n  return isElement(node) && \"accessKey\" in node;\n}\n\n/**\n * get the relative bound difference between two elements, and return a writable copy\n *\n * @param node - The node for which you need coordinates\n * @param relativeto - Optional reference point. If not set, you just get a 'normal' coordinate object\n */\nexport function getRelativeBounds(node: Element, relativeto?: Element): Rect {\n  if (!relativeto)\n    relativeto = node.ownerDocument.documentElement;\n\n  const nodecoords = node.getBoundingClientRect();\n  const relcoords = relativeto.getBoundingClientRect();\n  return {\n    top: nodecoords.top - relcoords.top,\n    left: nodecoords.left - relcoords.left,\n    right: nodecoords.right - relcoords.left,\n    bottom: nodecoords.bottom - relcoords.top,\n    width: nodecoords.width,\n    height: nodecoords.height\n  };\n}\n\nexport type ParsedLanguageTag = {\n  /** The full tag, eg en-US */\n  tag: string;\n  /** The language code, eg 'en' */\n  language: string;\n  region?: string;\n  /** The script, eg 'Hant' */\n  script?: string;\n};\n\n/** Parse a BCP47 language tag */\nexport function parseLanguageTag(languageTag: string): ParsedLanguageTag {\n  /* https://datatracker.ietf.org/doc/html/rfc5646#section-2.1\n     langtag       = language\n                 [\"-\" script]\n                 [\"-\" region]\n                 *(\"-\" variant)\n                 *(\"-\" extension)\n                 [\"-\" privateuse]\n     BUT: we're limiting ourselves to language, script and region for now\n\n     language      = 2*3ALPHA           ; shortest ISO 639 code\n                    [\"-\" extlang]       ; sometimes followed by\n                                          extended language subtags\n\n                                           extlang       = 3ALPHA              ; selected ISO 639 codes\n                 *2(\"-\" 3ALPHA)      ; permanently reserved\n\n      script        = 4ALPHA              ; ISO 15924 code\n\n      region        = 2ALPHA              ; ISO 3166-1 code\n                    / 3DIGIT              ; UN M.49 code\n\n     Note that we're not yet fully implementing the spec, just the parts we expect to encounter in practice\n  */\n  const match = languageTag.match(/^([a-z]{2,}(-[a-z]{3})?)(-[A-Za-z]{4,})?(-[A-Z]{2}|-\\d{3})?$/);\n  if (!match)\n    throw new Error(`Invalid language tag: ${languageTag}`);\n\n  return {\n    tag: languageTag,\n    language: match[1],\n    ...(match[3] ? { script: match[3].substring(1) } : {}),\n    ...(match[4] ? { region: match[4].substring(1) } : {})\n  };\n}\n\n/** Get the effective language for an element (or the document)\n * @param node - The element for which to get the effective language. If not specified, the documentElement and finally the browser is used\n * @returns The language code, eg. \"nl\" or \"en-GB\"\n */\nexport function getLang(node?: Element): ParsedLanguageTag {\n  if (!node && typeof document !== \"undefined\")\n    node = document.documentElement;\n  const tag = (node?.closest('[lang]')?.getAttribute(\"lang\") || navigator.language || \"en\");\n  return parseLanguageTag(tag);\n}\n","//TODO can we replace ourselves with nodejs util.types in a pure NodeJS environment?\n\nimport type { Money } from \"./money.ts\";\n\nexport function getWHType(obj: unknown): string | null { //not exporting this directly as we hope JS comes up with better solutions for instanceOf not being compatible with realms/reloading\n  // Ideally we'd use symbol but it breaks tree shaking in esbuild, so this is our workaround. Reported as https://github.com/evanw/esbuild/issues/3940\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Can't cleanly type this it seems and it's low level anyway\n  return (obj as any)?.constructor?.[\"__ $whTypeSymbol\"] ?? null;\n}\n\nfunction isCrossRealm(value: unknown): value is object {\n  return Boolean(value // it's not null\n    && typeof value === \"object\" //and it's an object\n    && !(value instanceof Object)); //and it's not an instance of our Object\n}\n\n/** Test whether a value looks like an instance of Money */\nexport function isMoney(value: unknown): value is Money {\n  return getWHType(value) === \"Money\";\n}\n\n/** Test whether a value looks like an instance of Temporal.Instant */\nexport function isTemporalInstant(value: unknown): value is Temporal.Instant {\n  return Boolean(value && typeof value === \"object\" && Symbol.toStringTag in value && value?.[Symbol.toStringTag] === 'Temporal.Instant');\n}\n\n/** Test whether a value looks like an instance of Temporal.PlainDateTime */\nexport function isTemporalPlainDateTime(value: unknown): value is Temporal.PlainDateTime {\n  return Boolean(value && typeof value === \"object\" && Symbol.toStringTag in value && value?.[Symbol.toStringTag] === 'Temporal.PlainDateTime');\n}\n\n/** Test whether a value looks like an instance of Temporal.PlainDate */\nexport function isTemporalPlainDate(value: unknown): value is Temporal.PlainDate {\n  return Boolean(value && typeof value === \"object\" && Symbol.toStringTag in value && value?.[Symbol.toStringTag] === 'Temporal.PlainDate');\n}\n\n/** Test whether a value looks like an instance of Temporal.PlainTime */\nexport function isTemporalPlainTime(value: unknown): value is Temporal.PlainTime {\n  return Boolean(value && typeof value === \"object\" && Symbol.toStringTag in value && value?.[Symbol.toStringTag] === 'Temporal.PlainTime');\n}\n\n/** Test whether a value looks like an instance of Temporal.ZonedDateTime */\nexport function isTemporalZonedDateTime(value: unknown): value is Temporal.ZonedDateTime {\n  return Boolean(value && typeof value === \"object\" && Symbol.toStringTag in value && value?.[Symbol.toStringTag] === 'Temporal.ZonedDateTime');\n}\n\n/** Test whether a value looks like an instance of Date (assumes no subclasses) */\nexport function isDate(value: unknown): value is Date {\n  return value instanceof Date || (isCrossRealm(value) && value.constructor.name === \"Date\");\n}\n\n/** Test whether a value appears to implement the Blob interface */\nexport function isBlob(value: unknown): value is Blob {\n  return value instanceof Blob || Boolean(value && typeof value === \"object\" && \"size\" in value && \"type\" in value && \"slice\" in value && typeof value.slice === \"function\" && \"stream\" in value && typeof value.stream === \"function\");\n}\n\n/** Test whether a value appears to implement the File interface */\nexport function isFile(value: unknown): value is File {\n  return isBlob(value) && \"name\" in value;\n}\n\n/** Check if the object is probably an Error object. Can't use 'instanceof Error' as an Error might come from a different frame */\nexport function isError(e: unknown): e is Error {\n  return e instanceof Error || (isCrossRealm(e) && \"name\" in e && \"stack\" in e && \"message\" in e);\n}\n\n/** Check if the object looks like a promise */\nexport function isPromise<T>(e: T | Promise<T>): e is Promise<Awaited<T>> {\n  return Boolean(e && typeof (e as Promise<unknown>).then === \"function\" && typeof (e as Promise<unknown>).catch === \"function\");\n}\n\n/** Check the type of a value, return its JS or STD type\n * @param value - The value to check\n * @returns The type of the value. If the value is an object but recognized as any of Money, Date, Blob, Temporal.Instant/PlainDate/PlainDateTime, that type is returned.\n */\nexport function stdTypeOf(value: unknown): \"string\" | \"number\" | \"boolean\" | \"null\" | \"symbol\" | \"bigint\" | \"function\" | \"object\" | \"undefined\" | \"Date\" | \"Money\" | \"Array\" | \"Instant\" | \"PlainDate\" | \"PlainDateTime\" | \"PlainTime\" | \"ZonedDateTime\" | \"File\" | \"Blob\" {\n  const t = typeof value;\n  if (t === \"object\") {\n    if (!value)\n      return \"null\";\n    if (Array.isArray(value))\n      return \"Array\";\n    if (isMoney(value))\n      return \"Money\";\n    if (isBlob(value))\n      return isFile(value) ? \"File\" : \"Blob\";\n    if (isDate(value))\n      return \"Date\";\n    if (isTemporalInstant(value))\n      return \"Instant\";\n    if (isTemporalPlainTime(value))\n      return \"PlainTime\";\n    if (isTemporalPlainDate(value))\n      return \"PlainDate\";\n    if (isTemporalPlainDateTime(value))\n      return \"PlainDateTime\";\n    if (isTemporalZonedDateTime(value))\n      return \"ZonedDateTime\";\n  }\n  return t;\n}\n","/* A math library for safe calculation with money amounts in JS. If you don't\n   know why we need this, try to predict what the following code would print:\n   var cents=0;for(var i=0;i<100;++i)cents+=0.01;cents-=1;console.log(cents);\n   and think twice about whether you want to code anything financial in JS.\n\n   Money values supplied from HareScript should be formatted using FormatJSFinmathMoney\n*/\n\nexport type FinmathInput = string | number;\n\nexport type RoundMode = \"none\" | \"toward-zero\" | \"down\" | \"up\" | \"half-toward-zero\" | \"half-down\" | \"half-up\" | \"toward-infinity\" | \"half-toward-infinity\";\n\nexport interface SplitNumber {\n  num: number;\n  decimals: number;\n}\n\n//a 'price' is a string of the form \"nnn[.NNNN]\"\n\nfunction stripUnneededDecimals(num: number, decimals: number) {\n  //we have a maximum of 5 digits of external precision\n  if (decimals > 5) {\n    // math.round rounds toward positive infinity\n    const isneg = num < 0;\n    if (isneg)\n      num = -num;\n\n    while (decimals > 6) { //truncate excess digits\n      num = Math.floor(num / 10);\n      --decimals;\n    }\n    //round up if 6th decimal >= 5\n    num = Math.round(num / 10);\n    decimals = 5;\n\n    if (isneg)\n      num = -num;\n  }\n\n  //strip unneeded decimals\n  while (decimals > 0 && !(num % 10)) {\n    num /= 10;\n    --decimals;\n  }\n\n  return { num, decimals };\n}\n\nfunction toText(amount: SplitNumber, decimalpoint: string, mindecimals: number) {\n  if (!Number.isSafeInteger(amount.num))\n    throw new Error(\"Result would overflow the safe value range\");\n\n  let num, decimals;\n  ({ num, decimals } = stripUnneededDecimals(amount.num, amount.decimals));\n\n  // Strip sign from number, may need to prefix it\n  const isnegative = num < 0;\n  if (isnegative)\n    num = -num;\n\n  let astext = String(num);\n\n  // Ensure we have enough leading 0's to render the first integer digit\n  if (astext.length <= decimals)\n    astext = '00000000000000000000'.substr(0, decimals + 1 - astext.length) + astext;\n  // make sure we have enough 0's to show mindecimals\n  if (decimals < mindecimals) {\n    astext += '00000000000000000000'.substr(0, mindecimals - decimals);\n    decimals = mindecimals;\n  }\n\n  // insert decimal point if needed\n  if (decimals)\n    astext = astext.substr(0, astext.length - decimals) + decimalpoint + astext.substr(-decimals);\n\n  // add sign if needed\n  astext = (isnegative ? \"-\" : \"\") + astext;\n  return astext;\n}\n\n/** Convert a money of any format to a split number object\n    @param money - Either an integer number or string with a number\n    @returns Split number object\n*/\nfunction splitValue(money: FinmathInput): SplitNumber {\n  if (typeof money === 'number') {\n    if (money !== Math.floor(money))\n      throw new Error(\"Non-integer number passed\");\n    if (!Number.isSafeInteger(money))\n      throw new Error(`The value ${money} is outside the safe value range`);\n    return { num: money, decimals: 0 };\n  }\n  if (typeof money !== 'string')\n    throw new Error(\"Number or string expected, got \" + money);\n\n  const split = money.match(/^(-)?([0-9]*)(\\.([0-9]{0,5})([0-9]*))?$/);\n  if (!split)\n    throw new Error(`Illegal money value received: '${money}'`);\n\n  const sign = split[1] === '-' ? -1 : 1;\n  const decimals = split[3] ? split[4].length : 0;\n  // If there are more than 5 decimals, round up (using halfExpand strategy)\n  const num = sign * (parseInt(split[2] || \"0\") * Math.pow(10, decimals) + (parseInt((split[4] || '')) || 0) + (split[5]?.[0] >= '5' ? 1 : 0));\n  if (!Number.isSafeInteger(num))\n    throw new Error(`The value '${money}' is outside the safe value range`);\n\n  return stripUnneededDecimals(num, decimals);\n}\n\n/** Convert split number into a string\n*/\nfunction joinPrice(parts: SplitNumber): string {\n  return toText(parts, '.', 0);\n}\n\nfunction adjustDecimals(amount: SplitNumber, requiredecimals: number) {\n  const toadd = requiredecimals - amount.decimals;\n  if (toadd <= 0)\n    return;\n\n  let multiplier = 1;\n  for (let idx = 0; idx < toadd; ++idx)\n    multiplier *= 10;\n\n  if (!Number.isSafeInteger(amount.num * multiplier))\n    throw new Error(\"adjustDecimals would overflow the safe value range\");\n\n  amount.num *= multiplier;\n  amount.decimals += toadd;\n}\n\n/** Returns if a price string is valid\n*/\nexport function isValidPrice(money: string) {\n  if (typeof money !== 'string' || !money.match(/[0-9]+(\\.[0-9]{0,5})?$/))\n    return false;\n  return true;\n}\n\nfunction __add(lhs: SplitNumber, rhs: SplitNumber) {\n  //equalize # of decimals, and then it's a simple addition\n  const requiredecimals = Math.max(lhs.decimals, rhs.decimals);\n  adjustDecimals(lhs, requiredecimals);\n  adjustDecimals(rhs, requiredecimals);\n  return { num: lhs.num + rhs.num, decimals: requiredecimals };\n}\n\n/** Adds two numbers together\n*/\nexport function add(amount1: FinmathInput, amount2: FinmathInput): string {\n  return joinPrice(__add(splitValue(amount1), splitValue(amount2)));\n}\n\n/** Subtracts a number from another number\n*/\nexport function subtract(amount: FinmathInput, tosubtract: FinmathInput) {\n  const lhs = splitValue(amount), rhs = splitValue(tosubtract);\n  rhs.num = -rhs.num;\n  return joinPrice(__add(lhs, rhs));\n}\n\nfunction __multiply(lhs: SplitNumber, rhs: SplitNumber) {\n  //ADDME the naive 'add decimals, multiple nums' approach gets you out of the safe range real fast. needs tests\n  return { num: lhs.num * rhs.num, decimals: lhs.decimals + rhs.decimals };\n}\n\n/** Multiplies two numbers together\n*/\nexport function multiply(amount1: FinmathInput, amount2: FinmathInput): string {\n  const lhs = splitValue(amount1), rhs = splitValue(amount2);\n  return joinPrice(__multiply(lhs, rhs));\n}\n\n/** Compares two numbers\n    @param amount1 - Left hand value\n    @param amount2 - Right hand value\n    @returns Returns 0 if amount1 === amount2, -1 if amount1 \\< amount2, 1 if amount1 \\> amount2\n*/\nexport function cmp(amount1: FinmathInput, amount2: FinmathInput) {\n  const diff = __add(splitValue(amount1), __multiply(splitValue(amount2), { num: -1, decimals: 0 }));\n  return diff.num < 0 ? -1 : diff.num === 0 ? 0 : 1;\n}\n\n/** Returns a percentage of an amount\n    @param amount - Original amount\n    @param perc - Percentage of the amount to return\n    @returns Percentage of the amount\n*/\nexport function getPercentageOfAmount(amount: FinmathInput, perc: FinmathInput) {\n  const lhs = splitValue(amount), rhs = splitValue(perc);\n  const result = __multiply(lhs, rhs);\n  result.decimals += 2;\n  return joinPrice(normalize(result));\n}\n\nfunction normalize(amount: SplitNumber) {\n  while (amount.decimals && (amount.num % 10) === 0) {\n    amount.num /= 10;\n    --amount.decimals;\n  }\n  return amount;\n}\n\n/// format a price amount. extend # of decimals to specified # if not enough\nexport function formatPrice(money: FinmathInput, decimalpoint: string, decimals: number) {\n  return toText(splitValue(money), decimalpoint, decimals);\n}\n\n/** Rounds integer to multiple, exposed for testing only\n*/\nexport function __roundIntegerToMultiple(value: number, roundunit: number, mode: RoundMode) {\n  switch (mode) {\n    case \"none\":\n      {\n        // no rounding\n      } break;\n    case \"toward-zero\":\n      {\n        value = Math.trunc(value / roundunit) * roundunit;\n      } break;\n    case \"toward-infinity\":\n      {\n        if (value > 0)\n          value = Math.trunc((value + roundunit - 1) / roundunit) * roundunit;\n        else\n          value = Math.trunc((value - roundunit + 1) / roundunit) * roundunit;\n      } break;\n    case \"down\":\n      {\n        if (value > 0)\n          value = Math.trunc(value / roundunit) * roundunit;\n        else\n          value = Math.trunc((value - roundunit + 1) / roundunit) * roundunit;\n      } break;\n    case \"up\":\n      {\n        if (value > 0)\n          value = Math.trunc((value + roundunit - 1) / roundunit) * roundunit;\n        else\n          value = Math.trunc(value / roundunit) * roundunit;\n      } break;\n    case \"half-toward-zero\":\n      {\n        if (value > 0)\n          value = Math.trunc((value + (roundunit - 1) / 2) / roundunit) * roundunit;\n        else\n          value = Math.trunc((value - (roundunit - 1) / 2) / roundunit) * roundunit;\n      } break;\n    case \"half-toward-infinity\":\n      {\n        if (value > 0)\n          value = Math.trunc((value + roundunit / 2) / roundunit) * roundunit;\n        else\n          value = Math.trunc((value - roundunit / 2) / roundunit) * roundunit;\n      } break;\n    case \"half-down\":\n      {\n        if (value > 0)\n          value = Math.trunc((value + (roundunit - 1) / 2) / roundunit) * roundunit;\n        else\n          value = Math.trunc((value - roundunit / 2) / roundunit) * roundunit;\n      } break;\n    case \"half-up\":\n      {\n        if (value > 0)\n          value = Math.trunc((value + roundunit / 2) / roundunit) * roundunit;\n        else\n          value = Math.trunc((value - (roundunit - 1) / 2) / roundunit) * roundunit;\n      } break;\n    default:\n      {\n        throw new Error(`Unknown rounding mode ${mode}`);\n      }\n  }\n  return value;\n}\n\n/** Rounds a value to a multiple of a unit, with a specific rounding mode\n    @param value - Value to round\n    @param unit - The value will be rounded to a mulitple of this unit (except when rounding mode is 'none')\n    @param mode - Rounding mode. Possible values:\n      <ul>\n        <li>none: No rounding</li>\n        <li>toward-zero: Round toward zero</li>\n        <li>down: Round toward negative infity</li>\n        <li>up: Round toward positive infity</li>\n        <li>half-toward-zero: Round nearest multiple, round half of a multiple toward zero</li>\n        <li>half-down: Round nearest multiple, round half of a multiple toward negative infinity</li>\n        <li>half-up: Round nearest multiple, round half of a multiple toward positive infity</li>\n      </ul>\n    @returns The rounded value\n*/\nexport function roundToMultiple(value: FinmathInput, unit: FinmathInput, mode: RoundMode) {\n  const split_value = splitValue(value);\n  const split_unit = splitValue(unit);\n\n  const requiredecimals = Math.max(split_value.decimals, split_unit.decimals);\n  adjustDecimals(split_value, requiredecimals);\n  adjustDecimals(split_unit, requiredecimals);\n\n  const result = { num: __roundIntegerToMultiple(split_value.num, split_unit.num, mode), decimals: split_value.decimals };\n  return joinPrice(result);\n}\n\n/** Returns the minimum of all the arguments\n    @param amount - First value\n    @param amounts - Rest of the values\n    @returns The lowest value among amount and amounts\n*/\nexport function min(amount: FinmathInput, ...amounts: FinmathInput[]) {\n  for (const val of amounts)\n    if (cmp(amount, val) > 0)\n      amount = val;\n  return joinPrice(splitValue(amount));\n}\n\n/** Returns the maximum of all the arguments\n    @param amount - First value\n    @param amounts - Rest of the values\n    @returns The highest value among amount and amounts\n*/\nexport function max(amount: FinmathInput, ...amounts: FinmathInput[]) {\n  for (const val of amounts)\n    if (cmp(amount, val) < 0)\n      amount = val;\n  return joinPrice(splitValue(amount));\n}\n\n/** Returns a power of 10\n    @param exp - Integer power, must be 0 or bigger\n    @returns Requested power of 10\n*/\nfunction getNonNegativePowerOf10(exp: number) {\n  let retval = 1, running_exp = 10;\n  while (exp) {\n    if (exp & 1)\n      retval *= running_exp;\n    running_exp *= running_exp;\n    exp = exp >> 1;\n  }\n  return retval;\n}\n\n/** Divides two values, with 5 decimals of precision\n    @param value - Value To divide\n    @param divisor - Divisor\n    @returns Divided value, with 5 decimals of precision\n*/\nexport function divide(value: FinmathInput, divisor: FinmathInput) {\n  const lhs = splitValue(value), rhs = splitValue(divisor);\n  const mul10exp = lhs.decimals - rhs.decimals - 5;\n  const mulfactor = mul10exp < 0 ? getNonNegativePowerOf10(-mul10exp) : 1;\n  const roundunit = mul10exp > 0 ? getNonNegativePowerOf10(mul10exp) : 1;\n  return joinPrice({ num: __roundIntegerToMultiple(mulfactor * lhs.num / rhs.num, roundunit, \"half-toward-infinity\"), decimals: 5 });\n}\n\nexport function moneyDivide(value: FinmathInput, divisor: FinmathInput) { //divide was added in 5.0. remove this old name eventually\n  return divide(value, divisor);\n}\n\n/** Test whether two values have a specific relation\n    @param lhs - Left hand value\n    @param relation - One of '\\<', '\\<=', '==', '!=', '\\>', '\\>=''\n    @param rhs - Right hand value\n    @returns TRUE if the relation holds\n    @example\n      console.log(finmath.test(1, '\\<', 2)); // prints 'true'\n*/\nexport function test(lhs: FinmathInput, relation: \"<\" | \"<=\" | \"==\" | \"!=\" | \">\" | \">=\", rhs: FinmathInput) {\n  const compareresult = cmp(lhs, rhs);\n  switch (relation) {\n    case '<': return compareresult < 0;\n    case '<=': return compareresult <= 0;\n    case '==': return compareresult === 0;\n    case '!=': return compareresult !== 0;\n    case '>': return compareresult > 0;\n    case '>=': return compareresult >= 0;\n  }\n  throw Error(`Cannot test for unknown relation '${relation}'`);\n}\n","/* A Money type library for safe calculation with money amounts in JS. If you don't\n   know why we need this, try to predict what the following code would print:\n   var cents=0;for(var i=0;i<100;++i)cents+=0.01;cents-=1;console.log(cents);\n   and think twice about whether you want to code anything financial in JS.\n\n   We haven't decideded yet what range Money should support. To keep our options open and keep HS compatbility for now\n   we will fix ourselves to 5 digits (HS compat) and not allow values bigger than 900_000_000 (2**53 / 100000 'number' compatbiility clamped to a more readable number)\n\n  Users should not rely on JS Money keeping this smaller range in the future. Money values supplied from HareScript should be formatted using FormatJSFinmathMoney\n*/\n\nimport * as finmath from \"./finmath.ts\"; //TODO absorb into us as soon as noone externally depends on finmath anymore\nimport { isMoney } from \"./quacks.ts\";\n\nexport type MoneyRoundingMode = \"none\" | \"toward-zero\" | \"down\" | \"up\" | \"half-toward-zero\" | \"half-down\" | \"half-up\" | \"toward-infinity\" | \"half-toward-infinity\";\nexport type MoneyTestTypes = \"<\" | \"<=\" | \"==\" | \"!=\" | \">\" | \">=\";\n\ntype MoneyParameter = Money | string;\n\ninterface SplitNumber {\n  num: number;\n  decimals: number;\n}\n\nexport interface MoneyFormatOptions {\n  //thousand separator. defaults to \"\"\n  thousandsSeparator?: string;\n  //decimal separator. defaults to \".\"\n  decimalSeparator?: string;\n  //minimum # of decimals. defaults to 2\n  minDecimals?: number;\n}\n\nfunction stripUnneededDecimals(num: number, decimals: number) {\n  //we have a maximum of 5 digits of external precision\n  if (decimals > 5) {\n    // math.round rounds toward positive infinity\n    const isneg = num < 0;\n    if (isneg)\n      num = -num;\n\n    while (decimals > 6) { //truncate excess digits\n      num = Math.floor(num / 10);\n      --decimals;\n    }\n    //round up if 6th decimal >= 5\n    num = Math.round(num / 10);\n    decimals = 5;\n\n    if (isneg)\n      num = -num;\n  }\n\n  //strip unneeded decimals\n  while (decimals > 0 && !(num % 10)) {\n    num /= 10;\n    --decimals;\n  }\n\n  return { num, decimals };\n}\n\n/** Convert a money of any format to a split number object\n    @param money - Either an integer number or string with a number\n    @returns Split number object\n*/\nfunction splitValue(money: MoneyParameter): SplitNumber {\n  if (typeof money === 'number') {\n    if (money !== Math.floor(money))\n      throw new Error(\"Non-integer number passed\");\n    if (!Number.isSafeInteger(money))\n      throw new Error(`The value ${money} is outside the safe value range`);\n    return { num: money, decimals: 0 };\n  }\n  if (typeof money !== 'string')\n    throw new Error(\"Number or string expected, got \" + money);\n\n  const split = money.match(/^(-)?([0-9]*)(\\.([0-9]{0,5})([0-9]*))?$/);\n  if (!split)\n    throw new Error(`Illegal money value received: '${money}'`);\n\n  const sign = split[1] === '-' ? -1 : 1;\n  const decimals = split[3] ? split[4].length : 0;\n  // If there are more than 5 decimals, round up (using halfExpand strategy)\n  const num = sign * (parseInt(split[2] || \"0\") * Math.pow(10, decimals) + (parseInt((split[4] || '')) || 0) + (split[5]?.[0] >= '5' ? 1 : 0));\n  if (!Number.isSafeInteger(num))\n    throw new Error(`The value '${money}' is outside the safe value range`);\n\n  return stripUnneededDecimals(num, decimals);\n}\n\nfunction toText(amount: SplitNumber, decimalpoint: string, mindecimals: number, thousandpoint: string) {\n  if (!Number.isSafeInteger(amount.num))\n    throw new Error(\"Result would overflow the safe value range\");\n\n  let { num, decimals } = stripUnneededDecimals(amount.num, amount.decimals);\n\n  // Strip sign from number, may need to prefix it\n  const isnegative = num < 0;\n  if (isnegative)\n    num = -num;\n\n  let astext = String(num);\n\n  // Ensure we have enough leading 0's to render the first integer digit\n  if (astext.length <= decimals)\n    astext = '00000000000000000000'.substring(0, decimals + 1 - astext.length) + astext;\n  // make sure we have enough 0's to show mindecimals\n  if (decimals < mindecimals) {\n    astext += '00000000000000000000'.substring(0, mindecimals - decimals);\n    decimals = mindecimals;\n  }\n\n  let beforepoint = astext.substring(0, astext.length - decimals);\n  const afterpoint = astext.substring(astext.length - decimals);\n\n  // Add thouands points if neeed\n  if (thousandpoint)\n    beforepoint = beforepoint.replaceAll(/\\B(?=(\\d{3})+(?!\\d))/g, thousandpoint);\n\n  return (isnegative ? \"-\" : \"\") + beforepoint + (afterpoint.length ? decimalpoint + afterpoint : \"\");\n}\n\n/** A decimal based JS money type*/\nexport class Money {\n  /** finmath-compatible value */\n  readonly value: string;\n  private static \"__ $whTypeSymbol\" = \"Money\";\n\n  constructor(value: MoneyParameter = \"0\") {\n    this.value = Money.parseParameter(value);\n\n    const intvalue = parseInt(this.value);\n    //We need the number to be in the safe range even after adding 5 decimals\n    if (intvalue <= (Number.MIN_SAFE_INTEGER / 100000) || intvalue >= (Number.MAX_SAFE_INTEGER / 100000))\n      throw new TypeError(`Money value '${value}' is out of range`);\n  }\n\n  private static parseParameter(param: MoneyParameter): string {\n    if (typeof param === \"string\")\n      return toText(splitValue(param), \".\", 0, \"\");\n    if (Money.isMoney(param))\n      return (param as unknown as { value: string }).value;\n\n    throw new TypeError(`Money cannot be constructed out of a value of type ${typeof param}`);\n  }\n\n  static isMoney(value: unknown): value is Money {\n    return isMoney(value);\n  }\n\n  static fromNumber(value: number): Money {\n    return new Money(String(value));\n  }\n\n  /** Adds numbers together\n  */\n  static add(left: MoneyParameter, ...right: MoneyParameter[]): Money {\n    let sum = Money.parseParameter(left);\n    for (const item of right)\n      sum = finmath.add(sum, Money.parseParameter(item));\n    return new Money(sum);\n  }\n\n  /** Subtracts a number from another number\n  */\n  static subtract(left: MoneyParameter, right: MoneyParameter): Money {\n    return new Money(finmath.subtract(Money.parseParameter(left), Money.parseParameter(right)));\n  }\n\n  /** Rounds a value to a multiple of a unit, with a specific rounding mode\n      @param amount - Value to round\n      @param roundto - The value will be rounded to a mulitple of this unit (except when rounding mode is 'none')\n      @param mode - Rounding mode. Possible values:<br>\n        <ul>\n          <li>none: No rounding</li>\n          <li>toward-zero: Round toward zero</li>\n          <li>down: Round toward negative infity</li>\n          <li>up: Round toward positive infity</li>\n          <li>half-toward-zero: Round nearest multiple, round half of a multiple toward zero</li>\n          <li>half-down: Round nearest multiple, round half of a multiple toward negative infinity</li>\n          <li>half-up: Round nearest multiple, round half of a multiple toward positive infity</li>\n        </ul>\n      @returns The rounded value\n  */\n  static roundToMultiple(amount: MoneyParameter, roundto: MoneyParameter, mode: MoneyRoundingMode): Money {\n    return new Money(finmath.roundToMultiple(Money.parseParameter(amount), Money.parseParameter(roundto), mode));\n  }\n\n  /** Compares two numbers\n      @param lhs - Left hand value\n      @param rhs - Right hand value\n      @returns Returns 0 if amount1 === amount2, -1 if amount1 \\< amount2, 1 if amount1 \\> amount2\n  */\n  static cmp(lhs: MoneyParameter, rhs: MoneyParameter): -1 | 0 | 1 {\n    return finmath.cmp(Money.parseParameter(lhs), Money.parseParameter(rhs));\n  }\n\n  /** Test whether two values have a specific relation\n      @param lhs - Left hand value\n      @param relation - One of '\\<', '\\<=', '==', '!=', '\\>', '\\>=''\n      @param rhs - Right hand value\n      @returns TRUE if the relation holds\n      @example\n        console.log(Money.check(1, '\\<', 2)); // prints 'true'\n  */\n  static check(lhs: MoneyParameter, relation: MoneyTestTypes, rhs: MoneyParameter): boolean {\n    return finmath.test(Money.parseParameter(lhs), relation, Money.parseParameter(rhs));\n  }\n\n  /** Multiplies two numbers together\n  */\n  static multiply(left: MoneyParameter, right: MoneyParameter): Money {\n    return new Money(finmath.multiply(Money.parseParameter(left), Money.parseParameter(right)));\n  }\n\n  /** Returns a percentage of an amount\n      @param amount - Original amount\n      @param percentage - Percentage of the amount to return\n      @returns Percentage of the amount\n  */\n  static getPercentage(amount: MoneyParameter, percentage: MoneyParameter): Money {\n    return new Money(finmath.getPercentageOfAmount(Money.parseParameter(amount), Money.parseParameter(percentage)));\n  }\n\n  /** Divides two values, (currently with up to 5 decimals of precision)\n      @param numerator - Value to divide\n      @param divisor - Divisor\n      @returns Divided value\n  */\n  static divide(numerator: MoneyParameter, divisor: MoneyParameter): Money {\n    return new Money(finmath.divide(Money.parseParameter(numerator), Money.parseParameter(divisor)));\n  }\n  /** Returns the minimum of all the arguments\n      @param amount - First value\n      @param amounts - Rest of the values\n      @returns The lowest value among amount and amounts\n  */\n  static min(amount: MoneyParameter, ...amounts: MoneyParameter[]): Money {\n    return new Money(finmath.min(Money.parseParameter(amount), ...(amounts.map(Money.parseParameter))));\n\n  }\n\n  /** Returns the maximum of all the arguments\n      @param amount - First value\n      @param amounts - Rest of the values\n      @returns The highest value among amount and amounts\n  */\n  static max(amount: MoneyParameter, ...amounts: MoneyParameter[]): Money {\n    return new Money(finmath.max(Money.parseParameter(amount), ...(amounts.map(Money.parseParameter))));\n  }\n\n  /** format a price amount. extend # of decimals to specified # if not enough */\n  format(format?: MoneyFormatOptions): string {\n    return toText(splitValue(this.value),\n      format?.decimalSeparator ?? \".\",\n      format?.minDecimals ?? 2,\n      format?.thousandsSeparator ?? \"\");\n  }\n\n  toJSON(): string {\n    return this.value;\n  }\n\n  toString(): string {\n    return this.value;\n  }\n\n  toNumber(): number {\n    return parseFloat(this.value);\n  }\n}\n","import { stdTypeOf } from \"./quacks.ts\";\nimport { Money } from \"./money.ts\";\n\nexport type WildcardTypes = \"?*\";\n\n/** Encode string for use in a regexp\n * @param text - Text to encode\n * @param options - Options for encoding\n * @param options.wildcards - Type of wildcards to encode (defaults to none)\n * @returns Encoded for safe use in a RegExp\n*/\nexport function escapeRegExp(text: string, options?: { wildcards?: WildcardTypes }): string {\n  let mask = text.replaceAll(/[/\\-\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'); // $& means the whole matched string\n  if (options?.wildcards === \"?*\") {\n    mask = mask.replaceAll(\"\\\\*\", \".*\");\n    mask = mask.replaceAll(\"\\\\?\", \".\");\n  }\n  return mask;\n}\n\n/** Create a regular expression from one or more wildcard masks\n * @param masks - One or more masks with '?' and/or '*' wildcards\n * @returns Regular expression string\n*/\nexport function regExpFromWildcards(masks: string | string[], options?: { wildcards?: WildcardTypes; caseInsensitive?: boolean }): RegExp {\n  if (Array.isArray(masks) && masks.length === 0)\n    throw new Error(\"Empty mask list\");\n\n  const code = Array.isArray(masks)\n    ? `^(${masks.map(mask => escapeRegExp(mask, { wildcards: options?.wildcards || \"?*\" })).join('|')})$`\n    : `^${escapeRegExp(masks, { wildcards: options?.wildcards || \"?*\" })}$`;\n  return new RegExp(code, options?.caseInsensitive ? \"i\" : undefined);\n}\n\nfunction isHTMLUnrepresentableChar(curch: number) {\n  return (curch < 32 && curch !== 9 && curch !== 10 && curch !== 13)\n    || (curch >= 128 && curch <= 159);\n}\n\nfunction encodeEntities(str: string, html: boolean) {\n  let s = \"\";\n  for (const char of str) {\n    const curch = char.codePointAt(0);\n    if (curch === undefined || isHTMLUnrepresentableChar(curch))\n      continue;\n    if (curch >= 32 && curch < 128 && curch !== 38 && curch !== 60 && curch !== 62 && (html || curch !== 34 && curch !== 39)) {\n      s += String.fromCodePoint(curch);\n      continue;\n    }\n\n    switch (curch) {\n      case 10:\n        {\n          if (html) {\n            s += \"<br>\";\n            continue;\n          }\n          break;\n        }\n      case 13:\n        {\n          if (html)\n            continue;\n          break;\n        }\n      case 34:\n        {\n          s += \"&quot;\";\n          continue;\n        }\n      case 38:\n        {\n          s += \"&amp;\";\n          continue;\n        }\n      case 39:\n        {\n          s += \"&apos;\";\n          continue;\n        }\n      case 60:\n        {\n          s += \"&lt;\";\n          continue;\n        }\n      case 62:\n        {\n          s += \"&gt;\";\n          continue;\n        }\n    }\n\n    s += \"&#\" + curch + \";\";\n  }\n  return s;\n}\n\nfunction decodeEntities(str: string, html: boolean) {\n  if (html)\n    str = str.replace(/<br *\\/?>/g, \"\\n\");\n\n  str = str.replace(/&#(\\d+);/g, (_, dec) => String.fromCharCode(dec))\n    .replace(/&lt;/g, \"<\")\n    .replace(/&gt;/g, \">\")\n    .replace(/&quot;/g, '\"')\n    .replace(/&apos;/g, \"'\")\n    .replace(/&amp;/g, \"&\");\n\n  return str;\n}\n\nexport type StringEncodings = \"base64url\" | \"attribute\" | \"html\";\n\nexport function encodeString(str: string, encoding: StringEncodings): string {\n  if (encoding === \"base64url\")\n    return btoa(str).replaceAll(\"=\", \"\").replaceAll(\"+\", \"-\").replaceAll(\"/\", \"_\");\n  if (encoding === \"attribute\")\n    return encodeEntities(str, false);\n  if (encoding === \"html\")\n    return encodeEntities(str, true);\n\n  throw new Error(`Invalid encoding '${encoding}'`);\n}\n\nexport function decodeString(str: string, encoding: StringEncodings): string {\n  if (encoding === \"base64url\")\n    return atob(str.replaceAll(\"-\", \"+\").replaceAll(\"_\", \"/\"));\n  if (encoding === \"attribute\")\n    return decodeEntities(str, false);\n  if (encoding === \"html\")\n    return decodeEntities(str, true);\n\n  throw new Error(`Invalid encoding '${encoding}'`);\n}\n\ntype JSONReplacerArgument = ((this: unknown, key: string, value: unknown) => unknown) | undefined;\n\nexport interface StringifyOptions {\n  replacer?: JSONReplacerArgument;\n  space?: string | number;\n  stable?: boolean;\n  ///Encode with types (preserve Money, Date, BigInt). Needs std.parseTyped\n  typed?: boolean;\n  ///What to target: string (like JSON.stringify), script (escapes '/') or attribute (escapes '/' and applies attribute encoding)\n  target?: \"string\" | \"script\" | \"attribute\";\n}\n\n/** Improved JSON encoder\n * @param arg - Object to encode\n * @param options - Encoding options\n*/\nexport function stringify(arg: unknown, options?: StringifyOptions) {\n  const usereplacer: JSONReplacerArgument = options?.stable || options?.typed ? (function (this: unknown, key: string, value: unknown) {\n    if (options.typed) {\n      const origvalue = (this as Record<string, unknown>)[key]; //We can't use 'value' as .toJSON() will already have been invoked\n      const type = stdTypeOf(origvalue);\n      switch (type) {\n        case \"function\":\n          throw new Error(`Cannot stringify property '${key}' of type \"${type}'`);\n        case \"Date\":\n          value = { \"$stdType\": \"Date\", date: (origvalue as Date).toISOString() };\n          break;\n        case \"Money\":\n        case \"bigint\":\n        case \"Instant\":\n        case \"PlainDate\":\n        case \"PlainTime\":\n        case \"PlainDateTime\":\n        case \"ZonedDateTime\":\n          value = { \"$stdType\": type, [type.toLowerCase()]: (origvalue as { toString: () => string }).toString() };\n          break;\n        case \"object\":\n          if (\"$stdType\" in (origvalue as { \"$stdType\": string }))\n            throw new Error(`Cannot encode objects with already embedded '$stdType's`);\n        //fallthrough\n      }\n    }\n    if (options.stable && value && typeof value === \"object\" && !Array.isArray(value))\n      value = Object.fromEntries(Object.entries(value).sort((lhs, rhs) => lhs < rhs ? -1 : lhs === rhs ? 0 : 1));\n    if (options.replacer)\n      value = options.replacer.call(this, key, value);\n    return value;\n  }) : options?.replacer ?? undefined;\n\n  let result = JSON.stringify(arg, usereplacer, options?.space);\n  if (options?.target && [\"script\", \"attribute\"].includes(options.target)) {\n    result = result.replaceAll(\"/\", \"\\\\/\");\n    if (options.target === \"attribute\")\n      result = encodeEntities(result, false);\n  }\n  return result;\n}\n\n/** Decode JSON with types (Generated using stringify with typed:true ) */\nexport function parseTyped(input: string) {\n  return JSON.parse(input, (key, value) => {\n    switch (value?.[\"$stdType\"]) {\n      case \"Money\":\n        return new Money(value.money);\n      case \"Date\":\n        return new Date(value.date);\n      case \"bigint\":\n      case \"BigInt\": //pre wh5.7 spelling\n        return BigInt(value.bigint as string);\n      case \"Instant\":\n      case \"PlainDate\":\n      case \"PlainTime\":\n      case \"PlainDateTime\":\n      case \"ZonedDateTime\":\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any -- we just assume/require you to have Temporal installed if you expect to receive/decode Temporal types. browsers should catch up eventually\n        if (!(globalThis as any).Temporal)\n          throw new Error(`Temporal is not available in this environment, cannot deserialize value of type Temporal.${value[\"$stdType\"]}. Load eg. @webhare/deps/temporal-polyfill to use Temporal types in browsers`);\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any -- we just assume/require you to have Temporal installed if you expect to receive/decode Temporal types. browsers should catch up eventually\n        return (globalThis as any).Temporal[value[\"$stdType\"]].from(value[value[\"$stdType\"].toLowerCase()]);\n      case undefined:\n        return value;\n      default:\n        throw new Error(`Unrecognized type '${value[\"$stdType\"]}'`);\n    }\n  });\n}\n\n/** Generate a slug from a (suggested) (file)name\n * @param text - Text to convert\n * @param options - Options for slugification\n * @param options.separator - Separator to use between words (defaults to '-')\n * @param options.keep - Set of characters to keep in addition to a-z0-9\n * @returns Slugified text or null if we couldn't generate anything reeadable\n */\nexport function slugify(text: string, { separator = \"-\", keep = \"\" }: {\n  separator?: string;\n  keep?: string;\n} = {}): string | null {\n  //This function mixes HS getSafeName with a few more modern approaches\n  const keepclass = `[^a-z0-9${escapeRegExp(keep)}]`;\n  text = text\n    .normalize('NFD')                   // split an accented letter in the base letter and the acent\n    // eslint-disable-next-line no-control-regex\n    .replaceAll(/[\\u0000-\\u001F]/g, '')\n    .replaceAll(/[\\u0300-\\u036f]/g, '')   // remove all previously split accents\n    .replaceAll(/ß/g, 'ss')               // german ss\n    .toLowerCase()\n    .replace(new RegExp(`^${keepclass}+`), \"\") //replace bad characters at the start\n    .replace(new RegExp(`${keepclass}+$`), \"\") //.. and end\n    .replaceAll(new RegExp(`${keepclass}+`, \"g\"), separator); // replace all non alphanumeric/space with a single dash\n\n  return text || null; //we return 'null' on purpose so callers realize we won't necessarily give them a string!\n}\n\n/** Check if an email address is valid in modern times (an emailcheck much closer to what a browser would do, with additional sanity checks. No attempt to allow all legacy styles supported by the RFCs but 99.9%+ sure to be an error if seen submitted in a form\n    @returns True if the email address appears to be a well-formed email address to a non-greybeard\n*/\nexport function isValidEmail(email: string): boolean {\n  if (email.length > 254) //TODO count bytes instead of characters\n    return false;\n\n  return /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]{1,64}@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*(?:\\.[a-zA-Z0-9-]{2,})$/.test(email);\n}\n\n/** Uppercases a string using the C-locale (so only the ASCII characters a-z are uppercased)\n * @param str - String to uppercase\n * @returns Uppercased string\n */\nexport function toCLocaleUppercase(str: string) {\n  return str.replaceAll(/[a-z]+/g, part => part.toUpperCase());\n}\n\n/** Lowercases a string using the C-locale (so only the ASCII characters A-Z are lowercased)\n * @param str - String to lowercase\n * @returns Lowercased string\n */\nexport function toCLocaleLowercase(str: string) {\n  return str.replaceAll(/[A-Z]+/g, part => part.toLowerCase());\n}\n\n/** Calculate the levenshtein distance between two strings */\nexport function levenshteinDistance(a: string, b: string): number {\n  /* calculateLevenshteinDistance is adopted from https://github.com/gustf/js-levenshtein/blob/master/index.js, licensed MIT © Gustaf Andersson\n    Picked over fastest-levenshtein because a permanent 256KB memory area for a bit more speed doesn't seem worth it\n  */\n  function _min(d0: number, d1: number, d2: number, bx: number, ay: number) {\n    return d0 < d1 || d2 < d1\n      ? d0 > d2\n        ? d2 + 1\n        : d0 + 1\n      : bx === ay\n        ? d1\n        : d1 + 1;\n  }\n\n  if (a === b) {\n    return 0;\n  }\n\n  if (a.length > b.length) {\n    const tmp = a;\n    a = b;\n    b = tmp;\n  }\n\n  let la = a.length;\n  let lb = b.length;\n\n  while (la > 0 && (a.charCodeAt(la - 1) === b.charCodeAt(lb - 1))) {\n    la--;\n    lb--;\n  }\n\n  let offset = 0;\n\n  while (offset < la && (a.charCodeAt(offset) === b.charCodeAt(offset))) {\n    offset++;\n  }\n\n  la -= offset;\n  lb -= offset;\n\n  if (la === 0 || lb < 3) {\n    return lb;\n  }\n\n  let x = 0;\n  let y, d0, d1, d2, d3, dd = 0, dy, ay, bx0, bx1, bx2, bx3;\n\n  const vector: number[] = [];\n\n  for (y = 0; y < la; y++) {\n    vector.push(y + 1);\n    vector.push(a.charCodeAt(offset + y));\n  }\n\n  const len = vector.length - 1;\n\n  for (; x < lb - 3;) {\n    bx0 = b.charCodeAt(offset + (d0 = x));\n    bx1 = b.charCodeAt(offset + (d1 = x + 1));\n    bx2 = b.charCodeAt(offset + (d2 = x + 2));\n    bx3 = b.charCodeAt(offset + (d3 = x + 3));\n    dd = (x += 4);\n    for (y = 0; y < len; y += 2) {\n      dy = vector[y];\n      ay = vector[y + 1];\n      d0 = _min(dy, d0, d1, bx0, ay);\n      d1 = _min(d0, d1, d2, bx1, ay);\n      d2 = _min(d1, d2, d3, bx2, ay);\n      dd = _min(d2, d3, dd, bx3, ay);\n      vector[y] = dd;\n      d3 = d2;\n      d2 = d1;\n      d1 = d0;\n      d0 = dy;\n    }\n  }\n\n  for (; x < lb;) {\n    bx0 = b.charCodeAt(offset + (d0 = x));\n    dd = ++x;\n    for (y = 0; y < len; y += 2) {\n      dy = vector[y];\n      vector[y] = dd = _min(dy, d0, dd, bx0, vector[y + 1]);\n      d0 = dy;\n    }\n  }\n\n  return dd;\n}\n\n/** Return the length of the string in bytes when UTF-8 encoded */\nexport function getUTF8Length(str: string) {\n  return new TextEncoder().encode(str).length;\n}\n\n/** Truncate the string so it's at most len UTF-8 bytes long */\nexport function limitUTF8Length(str: string, len: number) {\n  // TextEncoder.encodeInto writes into the given array until there's no more room to add more valid UTF-8 sequences from the\n  // source. We can use this property to limit the number of bytes by creating an array that has room for at most the given\n  // number of bytes.\n  const utf8array = new Uint8Array(len);\n  // This function returns the actual number of bytes written to the array\n  const { written } = new TextEncoder().encodeInto(str, utf8array);\n  // Decode only the actually written bytes\n  return new TextDecoder().decode(utf8array.subarray(0, written));\n}\n\n/** Update the search parameters in a URL\n * @param inUrl - URL to update\n * @param updates - Updates to apply, use 'null' to delete a variable\n * @returns Updated URL\n */\nexport function updateURL(inUrl: string | URL, updates: Record<string, string | null>): URL {\n  const u = new URL(inUrl);\n  for (const [k, v] of Object.entries(updates)) {\n    if (v === null) {\n      u.searchParams.delete(k);\n    } else {\n      u.searchParams.set(k, v);\n    }\n  }\n  return u;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any -- Cannot specify this without using any */\n\nexport interface EmplaceHandler<ValueType> {\n  insert?: () => ValueType;\n  update?: (current: ValueType) => ValueType;\n}\n\nfunction binarySearchImpl<A, K>(compareFn: (element: A, key: K) => number, contents: A[], searchfor: K, upper_bound: boolean): { present: boolean; index: number } {\n  let first = 0;\n  let len = contents.length;\n  let present = false;\n\n  const cmpbound = upper_bound ? 1 : 0;\n  let unsorted_cmp = 0; // if this is non-0 and cmp is this value, we have an unsorted list\n  while (len > 0) {\n    const half = Math.floor(len / 2);\n    const middle = first + half;\n    const cmp = compareFn(contents[middle], searchfor);\n    if (cmp === 0) {\n      present = true;\n      unsorted_cmp = upper_bound ? -1 : 1;\n    } else if (cmp === unsorted_cmp)\n      throw new Error(`The provided array was not properly sorted!`);\n\n    if (cmp < cmpbound) {\n      first = middle + 1;\n      len -= half;\n      --len;\n    } else {\n      len = half;\n    }\n  }\n  return { present, index: first };\n}\n\n//emplace is based on https://github.com/tc39/proposal-upsert (a Map.prototype.emplace)\n/** Place a value into a Map\n * @param map - The map to place the value into\n * @param key - The key to add/replace\n * @param handler - Callbacks for inserting or updating the value\n * @returns The value that was placed into the map.\n * @throws If the key is not found and no insert handler is provided\n */\nexport function emplace<T extends Map<any, any> | WeakMap<any, any>>(\n  map: T,\n  key: T extends Map<infer K, any> ? K : T extends WeakMap<infer K, any> ? K : never,\n  handler?: T extends Map<any, infer V> ? EmplaceHandler<V> : T extends WeakMap<any, infer V> ? EmplaceHandler<V> : never):\n  T extends Map<any, infer V> ? V : T extends WeakMap<any, infer V> ? V : never {\n  let current = map.get(key);\n  if (current !== undefined) {\n    if (handler?.update) {\n      current = handler.update(current);\n      map.set(key, current);\n    }\n    return current;\n  }\n\n  if (!handler?.insert)\n    throw new Error(\"Key not found and no insert handler provided\");\n\n  const setvalue = handler.insert();\n  map.set(key, setvalue);\n  return setvalue;\n}\n\n// the `| keyof X` is needed to be able to use a `keyof X` type as key parameter in DistributedPick or DistributedOmit in generics\nexport type DistributedKeys<X extends object> = (X extends object ? keyof X : never) | keyof X;\n\n/** Applies Pick to all types in a union. Allows all keys that are present in any object in the union. Warning: You might not be\n    able to use all keys of the union if TypeScript has narrowed the union to a specific type. Eg:\n```typescript\ntype A = { x: number; t: \"a\"; a: number } | { x: number; t: \"b\"; b: number };\nconst a: A = { t: \"a\", a: 1 };\nconst b = pick(a, [\"t\", \"a\", \"b\"]); // No overload matches this call. <snip> Type '\"b\"' is not assignable to type '\"a\" | \"t\" | \"d\"'.\n```\n    @typeParam T - Type of the supplied object\n    @typeParam K - Type of the property keys to return\n    @returns Type with only the specified keys (distributed over the union if present)\n*/\nexport type DistributedPick<X extends object, Y extends DistributedKeys<X>> = X extends object ? Pick<X, keyof X & Y> : never;\n\n/** Applies Omit to all types in a union. Allows all keys that are not present in any object in the union. Warning: You might not be\n    able to use all keys of the union if TypeScript has narrowed the union to a specific type. Eg:\n```typescript\ntype A = { x: number; t: \"a\"; a: number } | { x: number; t: \"b\"; b: number };\nconst a: A = { t: \"a\", a: 1 };\nconst b = omit(a, [\"b\"]); // No overload matches this call. <snip> Type '\"b\"' is not assignable to type '\"a\" | \"t\" | \"d\"'.\n```\n    @typeParam T - Type of the supplied object\n    @typeParam K - Type of the property keys to leave out\n    @returns Type with only the specified keys left out (distributed over the union if present)\n*/\nexport type DistributedOmit<X extends object, Y extends DistributedKeys<X>> = X extends object ? Omit<X, keyof X & Y> : never;\n\n/** Returns an object with a selection of properties\n    @typeParam T - Type of the supplied object\n    @typeParam K - Type of the property keys to return\n    @param obj - Object to pick properties out of\n    @param keys - Names of the properties to pick\n    @returns Resulting object\n*/\nexport function pick<T extends object, K extends string & NoInfer<DistributedKeys<T>>>(obj: T, keys: readonly K[]): DistributedPick<T, K>;\n\n/** Returns an array with a selection of properties\n    @typeParam T - Type of the supplied array\n    @typeParam K - Type of the property keys to return\n    @param arr - Array to pick properties out of\n    @param keys - Names of the properties to pick\n    @returns Resulting array\n*/\nexport function pick<T extends object, K extends string & NoInfer<DistributedKeys<T>>>(arr: T[], keys: readonly K[]): Array<DistributedPick<T, K>>;\n\nexport function pick<T extends object, K extends string & NoInfer<DistributedKeys<T>>>(value: T | T[], keys: readonly K[]): DistributedPick<T, K> | Array<DistributedPick<T, K>> {\n  if (Array.isArray(value))\n    return value.map((elt: T) => pick(elt, keys));\n  const ret = {} as T;\n  keys.forEach((key: K) => {\n    if (key in value)\n      ret[key] = value[key];\n  });\n  return ret as object as DistributedPick<T, K>;\n}\n\n/** Returns an object with a selection of properties left out\n    @typeParam T - Type of the supplied object\n    @typeParam K - Type of the property keys to leave out\n    @param obj - Object to leave properties out of\n    @param keys - Names of the properties to remove\n    @returns Resulting object\n*/\nexport function omit<T extends object, K extends string & NoInfer<DistributedKeys<T>>>(obj: T, keys: readonly K[]): DistributedOmit<T, K>;\n\n/** Returns an array with a selection of properties left out\n    @typeParam T - Type of the supplied array\n    @typeParam K - Type of the property keys to leave out\n    @param arr - Array to leave properties out of\n    @param keys - Names of the properties to leave out\n    @returns Resulting array\n*/\nexport function omit<T extends object, K extends string & NoInfer<DistributedKeys<T>>>(arr: T[], keys: readonly K[]): Array<DistributedOmit<T, K>>;\n\nexport function omit<T extends object, K extends string & NoInfer<DistributedKeys<T>>>(value: T | T[], keys: readonly K[]): DistributedOmit<T, K> | Array<DistributedOmit<T, K>> {\n  if (Array.isArray(value))\n    return value.map((elt: T) => omit(elt, keys));\n  const ret = {} as T;\n  for (const [key, val] of Object.entries(value)) {\n    if (!keys.includes(key as K))\n      ret[key as K] = val;\n  }\n  return ret as object as DistributedOmit<T, K>;\n}\n\n/** Shuffle an array in-place\n * @param array - Array to shuffle\n * @returns The shuffled array\n*/\nexport function shuffle<T>(array: T[]): T[] {\n  for (let i = array.length - 1; i > 0; i--) {\n    const j = Math.floor(Math.random() * (i + 1));\n    [array[i], array[j]] = [array[j], array[i]];\n  }\n  return array;\n}\n\n/** Returns (and TypeScript-asserts) that the specified function is truthy. Handy for adjusting the type of an array when\n * filtering out falsy values\n * @example\n * const myarray: Array&lt;number | null&gt; = [0, null];\n * const filtered: number[] = myarray.filter(isTruthy);\n **/\nexport function isTruthy<T>(a: T): a is (T & {}) {\n  return Boolean(a);\n}\n\n/** Append to array, without overflowing the stack (eg V8 overflows at more than 32K entries)\n * @param array - Array to append to\n * @param values - Values to append\n*/\nexport function appendToArray<T>(array: T[], values: ReadonlyArray<NoInfer<T>>): void {\n  if (values.length < 1000)\n    array.push(...values); //push should be safe enough\n  else for (const value of values) //performance wise this appears just as fast as tricks with pushing blocks of slices\n    array.push(value);\n\n  //not returning the original array to make it clear we're not creating a new one\n}\n\ntype TypedEntriesInternal<T extends object, K extends keyof T> = K extends keyof T ? [K, T[K]] : never;\n\n/** Returns a union of [ key, value ] types for an object */\nexport type TypedEntries<T extends object> = T extends object ? TypedEntriesInternal<T, keyof T & string> : never;\n\n/** Returns an array of key/values of the enumerable own properties of an object, with exact types. Use when\n * no extra properties are expected on the object. Exists because Object.entries returns always string as key type.\n * @param obj - Object that contains the properties and methods\n */\nexport function typedEntries<T extends object>(obj: T): Array<TypedEntries<T>> {\n  return Object.entries(obj) as Array<TypedEntries<T>>;\n}\n\n/** Returns an array of keys of the enumerable own properties of an object, with exact types. Use when\n * no extra properties are expected on the object. Exists because Object.keys returns always string as key type.\n * @param obj - Object that contains the properties and methods\n */\nexport function typedKeys<T extends object>(obj: T): Array<keyof T & string> {\n  return Object.keys(obj) as Array<keyof T & string>;\n}\n\n/** Given a union of [key, value] types, returns the object constructed from those pairs. Exists because\n *  Object.fromEntries does not take the type of the keys and values into account.\n * @typeParam T - Union of [key, value] pairs\n */\nexport type TypedFromEntries<T extends [string, unknown]> = { [C in T as C[0]]: C[1] };\n\n/** Returns an object from an iterable of [key, value] pairs, with exact types. Exists because Object.fromEntries\n * doesn't take the type of the keys and values into account.\n * @param entries - Iterable of [key, value] pairs\n * @returns An object with the same keys and values as the input\n */\nexport function typedFromEntries<T extends [string, unknown]>(entries: Iterable<T>): TypedFromEntries<T> {\n  return Object.fromEntries(entries) as TypedFromEntries<T>;\n}\n\n\nexport class SortedMultiSet<V> {\n  private contents: V[] = [];\n  private compareFn;\n\n  constructor(compareFn: (lhs: V, rhs: V) => number, contents?: V[]) {\n    this.compareFn = compareFn;\n    if (contents)\n      this.addMultiple(contents);\n  }\n\n  get size() {\n    return this.contents.length;\n  }\n\n  at(index: number): V | undefined {\n    return this.contents.at(index);\n  }\n\n  add(value: V): number {\n    const pos = this.upperBound(value);\n    this.contents.splice(pos, 0, value);\n    return pos;\n  }\n\n  addMultiple(values: V[]): void {\n    for (const value of values) {\n      this.add(value);\n    }\n  }\n\n  delete(key: V): void {\n    const [start, limit] = this.range(key);\n    this.contents.splice(start, limit - start);\n  }\n\n  clear() {\n    this.contents.splice(0, this.contents.length);\n  }\n\n  lowerBound(key: Readonly<V>): { present: boolean; index: number } {\n    return binarySearchImpl(this.compareFn, this.contents, key, false);\n  }\n\n  upperBound(key: Readonly<V>): number {\n    return binarySearchImpl(this.compareFn, this.contents, key, true).index;\n  }\n\n  range(key: Readonly<V>): [number, number] {\n    return [this.lowerBound(key).index, this.upperBound(key)];\n  }\n\n  slice(start: number, limit: number): V[] {\n    return this.contents.slice(start, limit);\n  }\n\n  *#sliceIterator(start: number, limit: number): Generator<V, void> {\n    for (let idx = start; idx < limit; ++idx)\n      yield this.contents[idx];\n  }\n\n  sliceRange(key: Readonly<V>): V[] {\n    const [start, limit] = this.range(key);\n    return this.slice(start, limit);\n  }\n\n  rangeIterator(key: Readonly<V>): Iterable<V> {\n    const [start, limit] = this.range(key);\n    return this.#sliceIterator(start, limit);\n  }\n}\n\nexport class SortedMultiMap<K, V> {\n  private compareFn;\n  private contents: Array<[K, V]> = [];\n\n  constructor(compareFn: (lhs: K, rhs: K) => number, contents?: Array<[K, V]>) {\n    this.compareFn = (element: [K, V], key: K) => compareFn(element[0], key);\n    if (contents)\n      this.addMultiple(contents);\n  }\n\n  get size() {\n    return this.contents.length;\n  }\n\n  at(index: number): [K, V] | undefined {\n    return this.contents.at(index);\n  }\n\n  add(key: K, value: V): number {\n    const pos = this.upperBound(key);\n    this.contents.splice(pos, 0, [key, value]);\n    return pos;\n  }\n\n  addMultiple(values: Array<[K, V]>) {\n    for (const [key, value] of values) {\n      this.add(key, value);\n    }\n  }\n\n  delete(key: K): void {\n    const [start, limit] = this.range(key);\n    this.contents.splice(start, limit - start);\n  }\n\n  clear() {\n    this.contents.splice(0, this.contents.length);\n  }\n\n  lowerBound(key: Readonly<K>): { present: boolean; index: number } {\n    return binarySearchImpl(this.compareFn, this.contents, key, false);\n  }\n\n  upperBound(key: Readonly<K>): number {\n    return binarySearchImpl(this.compareFn, this.contents, key, true).index;\n  }\n\n  range(key: Readonly<K>): [number, number] {\n    return [this.lowerBound(key).index, this.upperBound(key)];\n  }\n\n  slice(start: number, limit: number): Array<[K, V]> {\n    return this.contents.slice(start, limit);\n  }\n\n  *#sliceIterator(start: number, limit: number): Generator<[K, V], void> {\n    for (let idx = start; idx < limit; ++idx)\n      yield this.contents[idx];\n  }\n\n  sliceRange(key: Readonly<K>): Array<[K, V]> {\n    const [start, limit] = this.range(key);\n    return this.slice(start, limit);\n  }\n\n  rangeIterator(key: Readonly<K>): Iterable<[K, V]> {\n    const [start, limit] = this.range(key);\n    return this.#sliceIterator(start, limit);\n  }\n}\n","const unlock = Symbol(\"unlock\");\n\n/** A mutex which is only visible in the current JavaScript VM\n\n    @example\n```ts\nconst mutex = new LocalMutex;\n\nusing lock = await mutex.lock();\nlock.release();\n\n// If you'll be relying on automatic release\nusing lock = await mutex.lock();\nvoid(lock);\n```\n\n*/\nexport class LocalMutex {\n  private locked = false;\n  private unlockList = new Array<() => void>;\n\n  /** Lock this mutex\n   * @returns Lock object. Use with `using` to ensure automatic unlock\n   */\n  async lock() {\n    if (this.locked) {\n      const defer = Promise.withResolvers<void>();\n      this.unlockList.push(() => defer.resolve());\n      await defer.promise;\n    } else {\n      this.locked = true;\n    }\n    return new LocalLock(this);\n  }\n\n  [unlock](): void {\n    if (this.unlockList.length > 0)\n      (this.unlockList.shift()!)(); //we're fair... unlock longest waiter\n    else\n      this.locked = false;\n  }\n}\n\n/** Instance of a LocalMutex lock */\nclass LocalLock implements Disposable {\n  private mutex: LocalMutex | null;\n\n  constructor(mutex: LocalMutex) {\n    this.mutex = mutex;\n  }\n  /** Explicitly release the lock\n   * @throws Error if the lock is already released\n  */\n  release() {\n    if (!this.mutex)\n      throw new Error(\"Lock already released\");\n\n    this.mutex[unlock]();\n    this.mutex = null;\n  }\n  [Symbol.dispose]() {\n    this.mutex?.[unlock]();\n  }\n}\n\nexport type { LocalLock };\n","/* frontend-config parses the wh-config object in the browser and mocks any missing data. @webhare/env does not actually expose this config, @webhare/frontend does\n   The frontend configuration is built in PageBuildRequest's 'frontendConfig' member */\n\nimport type { DTAPStage } from \"@webhare/env/src/concepts\";\nimport { debugFlags, initEnv } from \"@webhare/env/src/envbackend\";\nimport { getBrowserDebugFlags } from \"@webhare/env/src/init-browser\";\nimport { getLang } from \"@webhare/dompack/src/tree\";\nimport type { FrontendDataTypes } from \"@webhare/frontend\";\nimport { omit } from \"@webhare/std\";\n\n\n/** The format of the <script id=\"wh-config\"> object  */\nexport type WHConfigScriptData = {\n  //NOTE: existing frontend code doesn't expect site/obj to ever be null. not sure if 'object' provides the best interface or whether we need some sort of 'unknown but an existing object'\n  /** Page (targetobject) specific settings\n   *  @deprecated Use setFrontendData for type-safe settings\n  */\n  obj: { [key: string]: unknown };\n  /** Site specific settings\n   *  @deprecated Use setFrontendData for type-safe settings\n   */\n  site: { [key: string]: unknown };\n\n  /** Numeric server version number (eg 5.02.24 = 50224)\n   *  @deprecated Interpreting numbers (or version strings) is dangerous. Feature flags/testing or limiting your entire module to compatible versions is safer\n  */\n  server: number;\n  /** Root URL of this site */\n  siteRoot: string;\n} & {\n  ///Plugins may add keys at this level\n  [key in keyof FrontendDataTypes]?: FrontendDataTypes[key];\n};\n\nexport type WHConfigScriptData_FromServer = WHConfigScriptData & { dtapStage: DTAPStage };\n\n//names fields can still have when not yet republished\nexport interface WHConfigScriptData_OldPublishFields {\n  islive: boolean;\n  dtapstage: DTAPStage;\n  siteroot: string;\n}\n\n//fallback names with deprecation warnings\nexport interface WHConfigScriptData_LegacyFields {\n  /** @deprecated Use dtapStage in WH5.4+ */\n  islive: boolean;\n  /** @deprecated Use `dtapStage` from \"\\@webhare/env\"; in WH5.4+ */\n  dtapstage: DTAPStage;\n  /** @deprecated Use `getSiteRoot` from \"\\@webhare/frontend\"; in WH5.7+ */\n  siteroot: string;\n}\n\nlet config: WHConfigScriptData_FromServer | undefined;\nlet siteroot;\nlet dtapStage: DTAPStage = \"production\";\n\n//if document is undefined, we're serverside or in a worker\nconst whconfigel = typeof document !== \"undefined\" ? document.querySelector('script#wh-config') : null;\nif (whconfigel?.textContent) {\n  const parsedConfig: WHConfigScriptData_FromServer & WHConfigScriptData_OldPublishFields = JSON.parse(whconfigel.textContent);\n  config = omit(parsedConfig, [\"siteroot\", \"dtapstage\", \"islive\"]);\n\n  //Fallbacks for pages last published with WH5.3 *and* pages published from HareScript which still emit lowercase props\n  siteroot = parsedConfig.siteRoot ?? parsedConfig.siteroot!;\n  dtapStage = parsedConfig.dtapStage ?? parsedConfig.dtapstage;\n}\n\ninitEnv(dtapStage, '/');\n\nif (typeof location !== \"undefined\")\n  for (const flag of getBrowserDebugFlags('wh-debug'))\n    debugFlags[flag] = true;\n\n\n/** @deprecated frontendConfig has been deprecated. Switch to the getFrontendData system */\n// Make sure we have obj/site as some sort of object, to prevent crashes on naive 'if ($wh.config.obj.x)' tests'\nexport const frontendConfig: WHConfigScriptData & WHConfigScriptData_LegacyFields = {\n  server: 0,\n  ...config,\n  obj: config?.obj || {},\n  site: config?.site || {},\n  siteRoot: siteroot || \"\",\n  dtapstage: dtapStage,\n  islive: dtapStage === \"production\" || dtapStage === \"acceptance\",\n  siteroot: siteroot || \"\",\n};\n\nif (typeof document !== \"undefined\") {\n  //@ts-expect-error -- locale isn't supposed to exist - but some old code is still referring to it\n  frontendConfig.locale = getLang().tag;\n}\n\nif (dtapStage === \"development\") { //WH6.0: it's time to hard phase-out the old fields\n  for (const prop of [\"islive\", \"dtapstage\", \"siteroot\", \"locale\"] as const)\n    Object.defineProperty(frontendConfig, prop, {\n      get() { throw new Error(`frontendConfig.${prop} will be removed`); }\n    });\n}\n\n//NOTE: These APIs need to live in init.ts so eg gtm.ts can access us without triggering a CSS reset through frontend.ts. When frontend.ts stops auto-resetting we might move it back\n\nexport function getFrontendData<Type extends keyof FrontendDataTypes>(type: Type, options: { allowMissing: true }): FrontendDataTypes[Type] | null;\nexport function getFrontendData<Type extends keyof FrontendDataTypes>(type: Type, options?: { allowMissing: boolean }): FrontendDataTypes[Type];\n\n/** Get data exported by the response\n * @typeParam Type - The type of data to get\n * @param dataObject - The data object of data to get\n * @param allowMissing - If true, return null if the data object is missing. Otherwise throw an error\n * @example\n```\n  declare module \"@webhare/frontend\" {\n    interface FrontendDataTypes {\n      \"mymodule:type\": {\n        test: number;\n      };\n    }\n  }\n\n  const data = getFrontendData(\"mymodule:type\");\n```\n*/\nexport function getFrontendData<Type extends keyof FrontendDataTypes>(dataObject: Type, { allowMissing = false } = {}): FrontendDataTypes[Type] | null {\n  const retval = config?.[dataObject] as FrontendDataTypes[Type];\n  if (!retval)\n    if (allowMissing)\n      return null;\n    else\n      throw new Error(`Missing frontend data object: ${dataObject}`);\n\n  return retval;\n}\n\n/** Get the current site root\n *\n * @returns The site root URL (ending with a slash)\n*/\nexport function getSiteRoot() { //now an API to improve treeshaking\n  return frontendConfig.siteRoot;\n}\n","// Set up dispose symbols - https://github.com/evanw/esbuild/pull/3192 \"you'll need to polyfill Symbol.dispose if it's not present before you use it.\n\n//@ts-expect-error -- It's marked readonly\nSymbol.dispose ||= Symbol.for('Symbol.dispose');\n//@ts-expect-error -- It's marked readonly\nSymbol.asyncDispose ||= Symbol.for('Symbol.asyncDispose');\n\n// Set up promise resolvers (ES2024)\nPromise.withResolvers ||= function <T>(): PromiseWithResolvers<T> {\n  let resolve: (value: T | PromiseLike<T>) => void;\n  let reject: (reason: Error) => void;\n  const promise = new Promise<T>((_resolve, _reject) => { resolve = _resolve; reject = _reject; });\n  // @ts-expect-error `resolve` and `reject` are assigned synchronously, which isn't picked up by the TypeScript compiler (see\n  // https://github.com/Microsoft/TypeScript/issues/30053)\n  return { promise, resolve, reject };\n};\n\n// Polyfills for https://caniuse.com/?search=groupby - needed until we can assume safari 17.4 as global baseline\nif (!Map.groupBy)\n  Map.groupBy = function <Item, Key>(items: Iterable<Item>, callbackfn: (item: Item, idx: number) => Key): Map<Key, Item[]> {\n    const retval = new Map<Key, Item[]>;\n    let idx = 0;\n    for (const item of items) {\n      const key = callbackfn(item, idx++);\n      let list = retval.get(key);\n      if (!list)\n        retval.set(key, list = []);\n      list.push(item);\n    }\n    return retval;\n  };\n\nif (!Object.groupBy)\n  Object.groupBy = function <Item, Key extends string | number | symbol>(items: Iterable<Item>, callbackfn: (item: Item, idx: number) => Key): Partial<Record<Key, Item[]>> {\n    return Object.fromEntries(Map.groupBy(items, callbackfn).entries()) as Partial<Record<Key, Item[]>>;\n  };\n","/* eslint-disable @typescript-eslint/no-loop-func */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-this-alias */\n\n/* Iterator polyfills (https://caniuse.com/?search=iterator) - stage 4 ES but not in all browsers yet\n   Based on https://github.com/alkihis/iterator-polyfill/tree/master but we removed all the AsyncIterator\n   stuff as that's still stage 2 AND not implemented in TypeScript (as of 5.6)\n\n   We're ignoring a few linting/any issues as we really don't care to maintain this much\n   Fixed an issue with .some - reported as https://github.com/alkihis/iterator-polyfill/issues/6\n*/\n\n(function () {\n  // polyfill already applied / proposal implemented\n  if ('Iterator' in globalThis) {\n    return;\n  }\n\n  // Polyfill for Iterator\n  const IteratorPrototype = {};\n\n  const ArrayIteratorPrototype = Object.getPrototypeOf([][Symbol.iterator]());\n  const OriginalIteratorPrototype = Object.getPrototypeOf(ArrayIteratorPrototype);\n\n  Object.setPrototypeOf(OriginalIteratorPrototype, IteratorPrototype);\n\n  Object.defineProperties(IteratorPrototype, {\n    [Symbol.iterator]: {\n      value() {\n        return this;\n      }\n    },\n    map: {\n      *value<T, R>(callback: (value: T) => R): Generator<any, any, any> {\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = callback(value.value);\n          const next_value = yield real_value;\n          value = it.next(next_value);\n        }\n\n        return value.value;\n      },\n    },\n    filter: {\n      *value<T>(callback: (value: T) => boolean): Generator<any, any, any> {\n        const it = this;\n        let value = it.next();\n        let next_value;\n\n        while (!value.done) {\n          const real_value = value.value;\n          if (callback(real_value)) {\n            next_value = yield real_value;\n            value = it.next(next_value);\n          } else {\n            value = it.next(next_value);\n          }\n        }\n\n        return value.value;\n      },\n    },\n    find: {\n      value<T>(callback: (value: boolean) => T) {\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (callback(real_value))\n            return real_value;\n\n          value = it.next();\n        }\n      }\n    },\n    every: {\n      value<T>(callback: (value: T) => boolean) {\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (!callback(real_value))\n            return false;\n\n          value = it.next();\n        }\n\n        return true;\n      }\n    },\n    some: {\n      value<T>(callback: (value: T) => boolean) {\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (callback(real_value)) {\n            it.return();\n            return true;\n          }\n\n          value = it.next();\n        }\n\n        return false;\n      }\n    },\n    toArray: {\n      value(max_count = Infinity) {\n        const values = [];\n\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (max_count <= 0)\n            return values;\n\n          values.push(real_value);\n\n          if (max_count !== Infinity)\n            max_count--;\n\n          value = it.next();\n        }\n\n        return values;\n      }\n    },\n    take: {\n      *value(limit: number): Generator<any, any, any> {\n        limit = Number(limit);\n        if (limit < 0)\n          throw new RangeError('Invalid limit.');\n\n        const it = this;\n        let value = it.next();\n        let remaining = limit;\n        let next_value;\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (remaining <= 0)\n            return;\n\n          next_value = yield real_value;\n          value = it.next(next_value);\n          remaining--;\n        }\n\n        return value.value;\n      },\n    },\n    drop: {\n      *value(limit: number): Generator<any, any, any> {\n        limit = Number(limit);\n        if (limit < 0)\n          throw new RangeError('Invalid limit.');\n\n        const it = this;\n        let value = it.next();\n        let remaining = limit;\n        let next_value;\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (remaining > 0) {\n            value = it.next(next_value);\n            remaining--;\n            continue;\n          }\n\n          next_value = yield real_value;\n          value = it.next(next_value);\n        }\n\n        return value.value;\n      },\n    },\n    asIndexedPairs: {\n      *value(): Generator<any, any, any> {\n        const it = this;\n        let value = it.next();\n        let index = 0;\n\n        while (!value.done) {\n          const real_value = value.value;\n          const next_value = yield [index, real_value];\n          value = it.next(next_value);\n          index++;\n        }\n\n        return value.value;\n      }\n    },\n    flatMap: {\n      *value<T, R extends object>(mapper: (value: T) => IterableIterator<R> | R): Generator<any, any, any> {\n        if (typeof mapper !== 'function') {\n          throw new TypeError('Mapper must be a function.');\n        }\n\n        const it = this;\n        let value = it.next();\n        let next_value;\n\n        while (!value.done) {\n          const real_value = value.value;\n          const mapped = mapper(real_value);\n\n          if (Symbol.iterator in mapped) {\n            next_value = yield* mapped[Symbol.iterator]();\n          } else {\n            next_value = yield mapped;\n          }\n\n          value = it.next(next_value);\n        }\n\n        return value.value;\n      },\n    },\n    reduce: {\n      value<T, V>(reducer: (acc: V, value: T) => V, initial_value?: V) {\n        let acc = initial_value;\n\n        const it = this;\n        if (acc === undefined) {\n          acc = it.next().value;\n        }\n\n        let value = it.next();\n        while (!value.done) {\n          const real_value = value.value;\n\n          acc = reducer(acc!, real_value);\n\n          value = it.next();\n        }\n\n        return acc;\n      }\n    },\n    forEach: {\n      value<T>(callback: (value: T) => any) {\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          callback(real_value);\n\n          value = it.next();\n        }\n      }\n    },\n    [Symbol.toStringTag]: {\n      value: 'IteratorPrototype'\n    },\n\n    /* OUTSIDE PROPOSAL */\n    count: {\n      value() {\n        let count = 0;\n\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          count++;\n          value = it.next();\n        }\n\n        return count;\n      },\n    },\n    join: {\n      value(string: string) {\n        let final = '';\n        let first = true;\n\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (first) {\n            first = false;\n            final += real_value;\n          } else {\n            final += string + real_value;\n          }\n\n          value = it.next();\n        }\n\n        return final;\n      }\n    },\n    chain: {\n      *value<I>(...iterables: IterableIterator<I>[]) {\n        yield* this;\n\n        for (const it of iterables) {\n          yield* it;\n        }\n      }\n    },\n    zip: {\n      *value<T, O>(...others: IterableIterator<O>[]): Iterator<(T | O)[]> {\n        const it_array = [this, ...others].map((e: any) => Symbol.iterator in e ? e[Symbol.iterator]() : e as Iterator<T | O>);\n        let values = it_array.map(e => e.next());\n        let next_value: any;\n\n        while (values.every(e => !e.done)) {\n          next_value = yield values.map(e => e.value);\n          values = it_array.map(e => e.next(next_value));\n        }\n      },\n    },\n    takeWhile: {\n      *value<T>(callback: (value: T) => boolean): Generator<any, any, any> {\n        const it = this;\n        let value = it.next();\n        let next_value;\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (callback(real_value))\n            next_value = yield real_value;\n          else\n            return;\n\n          value = it.next(next_value);\n        }\n\n        return value.value;\n      }\n    },\n    dropWhile: {\n      *value<T>(callback: (value: T) => boolean): Generator<any, any, any> {\n        const it = this;\n        let value = it.next();\n        let next_value;\n        let finished = false;\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (!finished && callback(real_value)) {\n            value = it.next(next_value);\n            continue;\n          }\n\n          finished = true;\n          next_value = yield real_value;\n\n          value = it.next(next_value);\n        }\n\n        return value.value;\n      }\n    },\n    fuse: {\n      *value(): Generator<any, any, any> {\n        const it = this;\n        let value = it.next();\n        let next_value;\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (real_value !== undefined && real_value !== null)\n            next_value = yield real_value;\n          else\n            return;\n\n          value = it.next(next_value);\n        }\n\n        return value.value;\n      }\n    },\n    partition: {\n      value<T>(callback: (value: T) => boolean) {\n        const partition1 = [], partition2 = [];\n\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (callback(real_value))\n            partition1.push(real_value);\n          else\n            partition2.push(real_value);\n\n          value = it.next();\n        }\n\n        return [partition1, partition2];\n      },\n    },\n    findIndex: {\n      value<T>(callback: (value: T) => boolean) {\n        const it = this;\n        let i = 0;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (callback(real_value))\n            return i;\n\n          value = it.next();\n          i++;\n        }\n\n        return -1;\n      }\n    },\n    max: {\n      value() {\n        let max = -Infinity;\n\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (max < real_value)\n            max = real_value;\n\n          value = it.next();\n        }\n\n        return max;\n      },\n    },\n    min: {\n      value() {\n        let min = Infinity;\n\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (min > real_value)\n            min = real_value;\n\n          value = it.next();\n        }\n\n        return min;\n      },\n    },\n    cycle: {\n      *value(): Generator<any, any, any> {\n        const values = [];\n\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n          values.push(real_value);\n\n          const next_value = yield real_value;\n          value = it.next(next_value);\n        }\n\n        while (true) {\n          yield* values;\n        }\n      },\n    },\n  });\n\n  //iterator.from from https://github.com/rauschma/iterator-helpers-polyfill/\n\n  function isObject(value: unknown) {\n    if (value === null) return false;\n    const t = typeof value;\n    return t === 'object' || t === 'function';\n  }\n\n  function GetIteratorFlattenable<T>(obj: Record<symbol, any>): T {\n    if (!isObject(obj)) {\n      throw new TypeError();\n    }\n    const method = obj[Symbol.iterator];\n    let iterator = undefined;\n    if (typeof method !== 'function') {\n      iterator = obj;\n    } else {\n      iterator = method.call(obj);\n    }\n    if (!isObject(iterator)) {\n      throw new TypeError();\n    }\n    return iterator;\n  }\n\n  if (!('Iterator' in globalThis)) {\n    const Iterator = function Iterator() { };\n\n    Iterator.prototype = IteratorPrototype;\n\n    // @ts-expect-error We're still missing From in this poyfill\n    (globalThis).Iterator = Iterator;\n  }\n\n\n  //----- Static method -----\n  // Must be done after Iterator.prototype was set up,\n  // so that `extends Iterator` works below\n\n  class WrappedIterator<T, TReturn = any, TNext = undefined> extends Iterator<T, TReturn, TNext> {\n    #iterator;\n    constructor(iterator: Iterator<T, TReturn, TNext>) {\n      super();\n      this.#iterator = iterator;\n    }\n    override next(...args: [] | [TNext]): any {\n      return this.#iterator.next(...args);\n    }\n    // `async` helps with line (*)\n    override return(value?: TReturn | PromiseLike<TReturn>): any {\n      const returnMethod = this.#iterator.return;\n      if (returnMethod === undefined) {\n        return { done: true, value: value as any }; // (*)\n      }\n      return returnMethod.call(this.#iterator);\n    }\n  }\n\n  function Iterator_from<T>(value: any) {\n    const iterator = GetIteratorFlattenable<Iterator<T>>(value);\n    if (iterator instanceof Iterator) {\n      return iterator;\n    }\n    // `iterator´ does not support the new API – wrap it so that it does\n    return new WrappedIterator(iterator);\n  }\n\n  Object.defineProperty(\n    Iterator, 'from',\n    {\n      writable: true,\n      enumerable: false,\n      configurable: true,\n      value: Iterator_from,\n    }\n  );\n})();\n","type FormValueList = Array<{ name: string; value: string }>;\n\n/** A navigation instruction encapsulates the next step that a client has to take in eg. a login, payment or wizard flow.\n * Use navigateTo to execute a navigation in a browser\n*/\n\nexport type NavigateInstruction =\n  {\n    type: \"redirect\";\n    url: string;\n  } | {\n    type: \"form\";\n    form: {\n      action: string;\n      vars: FormValueList;\n      method?: \"POST\";\n    };\n  } | {\n    type: \"reload\";\n  } | {\n    type: \"postmessage\";\n    message: unknown;\n    target?: \"parent\" | \"opener\";\n  } | {\n    type: \"close\";\n  };\n\nfunction submitForm(action: string, values: FormValueList, method = \"POST\") {\n  const form = document.createElement(\"form\");\n  form.method = method;\n  form.action = action;\n  form.append(...values.map(item => {\n    const input = document.createElement(\"input\");\n    input.type = \"hidden\";\n    input.name = item.name;\n    input.value = item.value;\n    return input;\n  }));\n  document.body.appendChild(form);\n  form.submit();\n}\n\n/** Navigate to a specific URL (may be hookable by other scripts)\n* @param navigation - Target URL or NavigateInstruction\n*/\nexport function navigateTo(navigation: string | NavigateInstruction) {\n  if (typeof window === \"undefined\")\n    throw new Error(`navigateTo() is not available in this environment`);\n\n  if (typeof navigation === \"string\")\n    navigation = { type: \"redirect\", url: navigation };\n\n  switch (navigation.type) {\n    case \"redirect\":\n      {\n        location.href = navigation.url;\n      } break;\n\n    case \"form\":\n      {\n        submitForm(navigation.form.action, navigation.form.vars, navigation.form.method);\n      } break;\n\n    case \"reload\":\n      {\n        window.location.reload();\n      } break;\n\n    case \"postmessage\":\n      {\n        if (!navigation.target || navigation.target === \"parent\")\n          window.parent.postMessage(navigation.message, \"*\");\n        else if (navigation.target === \"opener\") {\n          window.opener.postMessage(navigation.message, \"*\");\n          window.close();\n        } else\n          throw Error(\"Unknown postmessage target '\" + navigation.target + \"' received\");\n      } break;\n\n    case \"close\":\n      {\n        window.close();\n      } break;\n\n    default:\n      throw new Error(`Unknown navigation type '${(navigation as { type: string }).type}'`);\n  }\n}\n","/* Manages the $wh global, an API for just-in-time debugging */\nimport type { DebugRegistry } from \"@webhare/env\";\nimport { debugFlags } from \"./envbackend\";\n\nlet debugRegFinalizer: FinalizationRegistry<{ type: keyof DebugRegistry; key: string }> | undefined;\n\nexport type WHGlobal = DebugRegistry & {\n  debugFlags: typeof debugFlags;\n  /** Global counter to avoid HMRs from duplicating IDs */\n  nextId: number;\n};\n\ndeclare global {\n  var $wh: WHGlobal;\n}\n\nglobalThis.$wh = {\n  debugFlags,\n  nextId: 1\n} satisfies WHGlobal;\n\nexport function addToDebugRegistry<T extends keyof DebugRegistry>(type: T, key: string, value: NonNullable<ReturnType<NonNullable<DebugRegistry[T]>[string][\"deref\"]>>) {\n  const debugRegistry = globalThis.$wh as unknown as DebugRegistry;\n  //@ts-ignore prevents '>   Type '{}' is not assignable to type 'never'. in jssdk builds, probably because noone yet extends DebugRegistry there\n  debugRegistry[type] ||= {};\n  debugRegFinalizer ||= new FinalizationRegistry(({ type: t, key: k }) => {\n    delete debugRegistry![t]?.[k];\n  });\n\n  if (debugRegistry[type][key])\n    console.error(`Debug registry key ${key} already exists, overwriting it`);\n\n  (debugRegistry[type] as Record<string, unknown>)[key] = new WeakRef(value);\n  debugRegFinalizer.register(value, { type, key });\n}\n","import type { FormControlElement } from \"@webhare/dompack\";\n\nexport const CustomEvent = globalThis.CustomEvent;\n/** Wrap an event to ensure it's target is a HTMLElement\n * @typeParam EventType - The expected event type\n * @typeParam CurrentTargetType - The type of the elemnt you're binding the event to. Optional, defaults to HTMLElement\n * @typeParam RelatedTargetType - The type of the elemnt you're binding the event to. Optional, defaults to HTMLElement\n*/\nexport type DocEvent<EventType extends Event, CurrentTargetType extends HTMLElement = HTMLElement, RelatedTargetType extends HTMLElement = HTMLElement> = EventType & {\n  target: HTMLElement;\n  currentTarget: CurrentTargetType;\n  relatedTarget: RelatedTargetType | null;\n};\n\nexport type DomEventOptions =\n  {\n    bubbles?: boolean;\n    cancelable?: boolean;\n    relatedTarget?: EventTarget;\n    detail?: object;\n  };\n\nexport function dispatchDomEvent(element: EventTarget, eventtype: string, options?: DomEventOptions) {\n  //see here https://developer.mozilla.org/en-US/docs/Web/Events whether an event is bubbles/cancelabel\n  options = {\n    bubbles: [\n      \"input\", \"change\", \"click\", \"contextmenu\", \"dblclick\",\n      \"reset\", \"submit\"\n    ].includes(eventtype),\n    cancelable: [\n      \"animationstart\", \"animationcancel\", \"animationend\", \"animationiteration\",\n      \"beforeunload\",\n      \"click\", \"contextmenu\", \"dblclick\",\n      \"reset\", \"submit\",\n      \"transitionstart\", \"transitioncancel\", \"transitionend\", \"transitionrun\"\n    ].includes(eventtype),\n    ...options\n  };\n\n  if (!element || !(element as Node).ownerDocument)\n    return true; //the element has left the dom... so there's no more bubbling. just drop it\n\n  //FIXME the load/scroll is buggy and we should be probably be using new Event (but an earlier attempt at that triggered quite a few test failures)\n  const createtype = /*[\"load\",\"scroll\"].includes(eventtype) === \"load\" ? \"UIEvents\" :*/[\"focus\", \"blur\", \"focusin\", \"focusout\"].includes(eventtype) ? \"FocusEvent\" : eventtype === \"click\" ? \"MouseEvents\" : \"HTMLEvents\";\n  //we verified its non-null ness above but TS doesn't really understand that\n  const evt = (element as Node).ownerDocument!.createEvent(createtype);\n  evt.initEvent(eventtype, options.bubbles, options.cancelable);\n  if (options.detail)\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any -- we should just rewrite to new Event\n    (evt as any).detail = options.detail;\n  if (options.relatedTarget) //its a readonly prop, so redefine it\n    Object.defineProperty(evt, 'relatedTarget', { value: options.relatedTarget, writable: false });\n\n  //TODO: Should we keep this code?\n  // @ts-expect-error IScroll is a custom Window property set by IScroll\n  if (eventtype === 'click' && window.IScroll)\n    // @ts-expect-error _constructed is a custom Event property used by IScroll\n    evt._constructed = true; //ensure IScroll doesn't blindly cancel our synthetic clicks\n\n  return element.dispatchEvent(evt);\n}\n\n/** Fire the proper modified events (input and/or change) on the element after changing its value\n * @param element - Element to receive event\n * @param options - Event options\n * @deprecated Use changeValue so we can figure out the proper events to fire\n */\nexport function fireModifiedEvents(element: FormControlElement, options?: DomEventOptions) {\n  dispatchDomEvent(element, 'input', options);\n  dispatchDomEvent(element, 'change', options);\n}\n\n//manually fire 'onchange' events. needed for event simulation - DEPRECATED\n/**\n * @param element - Element to receive event\n * @param type - Event type\n * @param options - Event options\n * @deprecated Use dispatchDomEvent instead\n */\nexport function fireHTMLEvent(element: EventTarget, type: string, options?: DomEventOptions) {\n  return dispatchDomEvent(element, type, options);\n}\n\ntype CustomEventParams =\n  {\n    /** Whether this event should bubble up in the DOM */\n    bubbles: boolean;\n    /** Whether this event can be cancelled */\n    cancelable: boolean;\n    /** Custom event information */\n    detail?: unknown;\n    /** Handler to execute if the default isn't prevented by a event listener */\n    defaulthandler?: (evt: CustomEvent) => void;\n  };\n\n/** Fire a custom event\n    @param node - node to fire the event on\n    @param event - event type. You should add this event to the GlobalEventHandlersEventMap for validation in dispatchCustomEvent calls and addEventListener callbacks.\n    @param params - Event options\n    @returns true if the default wasn't prevented\n */\n\nexport function dispatchCustomEvent<K extends string>(\n  node: EventTarget,\n  event: K,\n  params: CustomEventParams & (K extends keyof GlobalEventHandlersEventMap ?\n    GlobalEventHandlersEventMap[K] extends CustomEvent ?\n    { detail: GlobalEventHandlersEventMap[K][\"detail\"] } : unknown : unknown)) {\n\n  if (!params)\n    throw new Error(`Missing dispatchCustomEvent params`);\n  ['bubbles', 'cancelable'].forEach(prop => {\n    if (!(prop in params))\n      throw new Error(`Missing '${prop}' in dispatchCustomEvent params`);\n  });\n\n  const evt = new CustomEvent(event, {\n    bubbles: params.bubbles,\n    cancelable: params.cancelable,\n    detail: params.detail\n  });\n  let defaultaction = true;\n  try {\n    if (!node.dispatchEvent(evt))\n      defaultaction = false; //defaultPrevented is unreliable on IE11, so double check\n  } finally {\n    if (!evt.defaultPrevented && params.defaulthandler && defaultaction) {\n      params.defaulthandler(evt);\n    }\n  }\n  return defaultaction && !evt.defaultPrevented;\n}\n\n/**\n     Change the value of a form element, and fire the correct events as if it were a user change\n *\n    @param element - Element to change\n    @param newvalue - New value\n */\nexport function changeValue(element: FormControlElement, newvalue: string | number | boolean) {\n  if (element.matches(`input[type=radio], input[type=checkbox]`)) {\n    if (Boolean((element as HTMLInputElement).checked) === Boolean(newvalue))\n      return;\n    (element as HTMLInputElement).checked = Boolean(newvalue);\n  } else {\n    //FIXME it's not really clean to assume that this element is changeable - throw for non input/select..\n    const asString = String(newvalue);\n    if ((element as HTMLInputElement).value === asString)\n      return;\n\n    (element as HTMLInputElement).value = String(newvalue);\n  }\n  dispatchDomEvent(element as EventTarget, 'input');\n  dispatchDomEvent(element as EventTarget, 'change');\n}\n\nlet keydata: { mapping: { [key: string]: string } };\n\nfunction initKeyMapping() {\n  keydata =\n  {\n    // Mapping from keyIdentifier/key to key. If not found, translate U+XXXX to the unicode char and return that.\n\n    // List of all current key mappings (and current inconsistencies\n    // at https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values\n    mapping:\n    {\n      \"Del\": \"Delete\", // IE/edge use 'Del' instead of 'Delete'\n      \"Esc\": \"Escape\", // IE/edge use 'Esc' instead of 'Escape'\n      \"OS\": \"Meta\", // Meta key is called OS on IE 9 and Firefox (tested v50)\n      \"Win\": \"Meta\", // Meta key is called Win on IE/Edge\n      \"Scroll\": \"ScrollLock\", // More IE/Edge, from tests\n      \"PrintScreen\": \"Print\", // More IE/Edge, from tests\n      \"MozHomeScreen\": \"GoHome\", // Prior to Firefox 37, the Home button generated a key code of \"Exit\". Starting in Firefox 37, the button generates the key code \"MozHomeScreen\".\n\n      // Internet Explorer 9 and Firefox 36 and earlier return \"Left\", \"Right\", \"Up\", and \"Down\" for the arrow keys, instead of \"ArrowLeft\", \"ArrowRight\", \"ArrowUp\", and \"ArrowDown\".\n      \"Left\": \"ArrowLeft\",\n      \"Right\": \"ArrowRight\",\n      \"Up\": \"ArrowUp\",\n      \"Down\": \"ArrowDown\",\n      // More IE and old Firefox stuff\n      \"Crsel\": \"CrSel\",\n      \"Exsel\": \"ExSel\",\n      \"Nonconvert\": \"NonConvert\",\n      // Internet Explorer 9 and Firefox 36 and earlier report \"Apps\" instead of \"ContextMenu\" for the context menu key.\n      \"Apps\": \"ContextMenu\",\n      // Internet Explorer 9 and Firefox 36 and earlier use \"MediaNextTrack\" and \"MediaPreviousTrack\" instead of \"MediaTrackNext\" and \"MediaTrackPrevious\".\n      \"MediaNextTrack\": \"MediaTrackNext\",\n      \"MediaPreviousTrack\": \"MediaTrackPrevious\",\n      // In Internet Explorer 9, and prior to Firefox 49, \"AudioVolumeUp\", \"AudioVolumeDown\", and \"AudioVolumeMute\" were \"VolumeUp\", \"VolumeDown\", and \"VolumeMute\".\n      // In Firefox 49 they were updated to match the latest specification. The old names are still used on Boot to Gecko.\n      \"VolumeUp\": \"AudioVolumeUp\",\n      \"VolumeDown\": \"AudioVolumeDown\",\n      \"VolumeMute\": \"AudioVolumeMute\",\n      // Firefox added proper support for the \"TV\" key in Firefox 37; before that, this key generated the key code \"Live\".\n      \"Live\": \"TV\",\n      // Internet Explorer 9 and Firefox 36 and earlier identify the zoom toggle button as \"Zoom\". Firefox 37 corrects this to \"ZoomToggle\".\n      \"Zoom\": \"ZoomToggle\",\n      // Internet Explorer 9 and Firefox 36 and earlier use \"SelectMedia\" instead of \"LaunchMediaPlayer\". Firefox 37 through Firefox 48 use \"MediaSelect\". Firefox 49 has been updated to match the latest specification, and to return \"LaunchMediaPlayer\".\n      \"SelectMedia\": \"LaunchMediaPlayer\",\n      \"MediaSelect\": \"LaunchMediaPlayer\",\n      // Google Chrome returns \"LaunchCalculator\" instead of \"LaunchApplication1\". See Chromium bug 612743 for more information.\n      // Google Chrome returns \"LaunchMyComputer\" instead of \"LaunchApplication2\". See Chromium bug 612743 for more information.\n      // (LaunchCalculator and LaunchMyComputer are valid too, so no translation)\n\n      // While older browsers used words like \"Add\", \"Decimal\", \"Multiply\", and so forth modern browsers identify these using the actual character (\"+\", \".\", \"*\", and so forth).\n      \"Multiply\": \"*\",\n      \"Add\": \"+\",\n      \"Divide\": \"/\",\n      \"Subtract\": \"-\",\n      \"Decimal\": \".\", // (mozilla Key_Values doc says depends on region)\n      \"Separator\": \".\", // (mozilla Key_Values doc says depends on region)\n\n      // keyIdenfier spec mapping of non-printable keys: https://www.w3.org/TR/2009/WD-DOM-Level-3-Events-20090908/#keyset-keyidentifiers\n      // Used in safari\n      \"U+0008\": \"Backspace\",\n      \"U+0009\": \"Tab\",\n      \"U+000D\": \"Enter\",\n      \"U+0018\": \"Cancel\",\n      \"U+001B\": \"Escape\",\n      \"U+007F\": \"Delete\",\n      \"U+0300\": \"DeadGrave\",\n      \"U+0301\": \"DeadEacute\",\n      \"U+0302\": \"DeadCircumflex\",\n      \"U+0303\": \"DeadTilde\",\n      \"U+0304\": \"DeadMacron\",\n      \"U+0306\": \"DeadBreve\",\n      \"U+0307\": \"DeadAboveDot\",\n      \"U+0308\": \"DeadUmlaut\",\n      \"U+030A\": \"DeadAboveRing\",\n      \"U+030B\": \"DeadDoubleacute\",\n      \"U+030C\": \"DeadCaron\",\n      \"U+0327\": \"DeadCedilla\",\n      \"U+0328\": \"DeadOgonek\",\n      \"U+0345\": \"DeadIota\",\n      \"U+3099\": \"DeadVoicedSound\",\n      \"U+309A\": \"DeadSemivoicedSound\",\n\n      // keyIdenfier spec mapping to characters: https://www.w3.org/TR/2009/WD-DOM-Level-3-Events-20090908/#keyset-keyidentifiers\n      \"Exclamation\": \"!\",\n      \"DoubleQuote\": \"\\\"\",\n      \"Hash\": \"#\",\n      \"Dollar\": \"$\",\n      \"Ampersand\": \"&\",\n      \"LeftParen\": \"(\",\n      \"RightParen\": \")\",\n      \"Asterisk\": \"*\",\n      \"Plus\": \"+\",\n      \"Percent\": \"%\",\n      \"Comma\": \",\",\n      \"HyphenMinus\": \"-\",\n      \"Period\": \".\",\n      \"Solidus\": \"/\",\n      \"Colon\": \":\",\n      \"Semicolon\": \";\",\n      \"LessThan\": \"<\",\n      \"Equals\": \"=\",\n      \"GreaterThan\": \">\",\n      \"QuestionMark\": \"?\",\n      \"At\": \"@\",\n      \"LeftSquareBracket\": \"[\",\n      \"Backslash\": \"\\\\\",\n      \"RightSquareBracket\": \"]\",\n      \"Circumflex\": \"^\",\n      \"Underscore\": \"_\",\n      \"Grave\": \"`\",\n      \"LeftCurlyBracket\": \"{\",\n      \"Pipe\": \"|\",\n      \"RightCurlyBracket\": \"}\",\n      \"Euro\": \"€\",\n      \"InvertedExclamation\": \"¡\",\n\n      // Safari fixes: viewed in local tests\n      \"U+0010\": \"ContextMenu\"\n    }\n  };\n}\n\nexport type NormalizedKeyboardEvent =\n  {\n    type: string;\n    target: EventTarget | null;\n    key: string;\n    code: string;\n    ctrlKey: boolean;\n    altKey: boolean;\n    location: number;\n    shiftKey: boolean;\n    metaKey: boolean;\n    repeat: boolean;\n    isComposing: boolean;\n  };\n\n/**\n     Returns normalized keyboard event properties, following the current W3C UI Events spec\n *\n    @param evt - Keyboard event\n    @returns Normalized keyboard event data\n */\nexport function normalizeKeyboardEventData(evt: KeyboardEvent): NormalizedKeyboardEvent {\n  // event.key is supported from chrome:51, edge, ff: 29, ie: 9, not in safari\n  // event.keyIdentifier in chrome 26-54, opera 15-41, safara: 5.1\n  // safari doesn't provide either in keypress events, use U+evt.keyCode (uppercase 4-byte hex)\n\n  let key = evt.key;\n  if (!keydata)\n    initKeyMapping();\n  if (keydata.mapping[key])\n    key = keydata.mapping[key];\n  else if (key.startsWith(\"U+\")) // U+xxxx code\n    key = String.fromCodePoint(parseInt(key.substring(2), 16));\n\n  // Seen in chrome 56.0.2924.76 on linux, numpad '.' without numlock returns key \"\\u0000\"\n  if (evt.key === \"\\u0000\" && evt.code === \"NumpadDecimal\")\n    key = \".\";\n\n  return (\n    {\n      type: evt.type,\n      target: evt.target,\n      key: key,\n      code: evt.code || \"Unidentified\",\n      ctrlKey: evt.ctrlKey,\n      altKey: evt.altKey,\n      location: evt.location,\n      shiftKey: evt.shiftKey,\n      metaKey: evt.metaKey,\n      repeat: evt.repeat,\n      isComposing: evt.isComposing\n    });\n}\n\n/**\n * Stop, fully, an event\n *\n * @param event - Event to stop\n */\nexport function stop(event: Event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n\n/** Add an event listener to HTMLElements inside a document (which allows us to ensure that 'target' is a HTMLElement for easier typings) */\nexport function addDocEventListener<CurrentTargetType extends HTMLElement, Type extends keyof HTMLElementEventMap>(node: CurrentTargetType, type: Type, listener: (this: CurrentTargetType, ev: DocEvent<HTMLElementEventMap[Type], CurrentTargetType>) => void | Promise<void>, options?: AddEventListenerOptions): void;\nexport function addDocEventListener<CurrentTargetType extends HTMLElement>(node: CurrentTargetType, type: string, listener: (this: CurrentTargetType, evt: DocEvent<Event, CurrentTargetType>) => void | Promise<void>, options?: AddEventListenerOptions): void;\n\nexport function addDocEventListener<CurrentTargetType extends HTMLElement>(node: CurrentTargetType, type: string, listener: (this: CurrentTargetType, evt: DocEvent<Event, CurrentTargetType>) => void | Promise<void>, options?: AddEventListenerOptions): void {\n  node.addEventListener(type, listener as EventListener, options);\n}\n","import { debugFlags } from '@webhare/env';\nimport * as domevents from '../../../modules/system/js/dompack/src/events';\nimport \"@webhare/tsrun/src/polyfills\";\n\nlet locallocks: BusyLock[] = [];\nlet modallocked = false;\nlet uiwatcher: NodeJS.Timeout | null = null;\nlet installedanticancelhandler = false;\n\nlet currentbusymodaldialog: HTMLDialogElement | null = null;\nlet currentbusymodaluserdialog: HTMLDialogElement | null = null;\nlet busymodalcontent: string | HTMLElement | HTMLDialogElement | undefined;\nlet mylockmgr: LockManager | undefined;\n\nexport type BusyModalEvent = CustomEvent<{ show: boolean }>;\n\n// As 'Lock' already exists on the Web (https://developer.mozilla.org/docs/Web/API/Lock) and it's seldom used just use a longer name. Available since WH 5.4\nexport interface UIBusyLock extends Disposable {\n  release(): void;\n  [Symbol.dispose](): void;\n}\n\ndeclare global {\n  interface GlobalEventHandlersEventMap {\n    \"dompack:busymodal\": BusyModalEvent;\n  }\n  interface Window {\n    __dompack_busylockmanager?: LockManager;\n  }\n\n  // __dompack_busylockmanager: LockManager | undefined;  //\n}\n\nfunction getLockmgr(): LockManager {\n  if (!mylockmgr) {\n    mylockmgr = getParentLockManager() || new LockManager;\n    if (typeof window !== \"undefined\")\n      window.__dompack_busylockmanager = mylockmgr;\n  }\n  return mylockmgr;\n}\n\nfunction anyModalLocks() {\n  return locallocks.some(l => l.modal);\n}\n\n/* scheduleCheckUIFree is invoked by release() or when waitUIFree is explicitly called. the call from release() should\n   be a 'fast' path. We schedule a full check for the next tick if there's a chance it might actually find a free UI */\nfunction scheduleCheckUIFree() {\n  if (!uiwatcher && locallocks.length === 0)\n    uiwatcher = setTimeout(() => checkUIFree(), 0);\n}\n\n/* check if the UI is actually free. if so, remove busymodals and resolve waitUIFrees for the benefit of testfw  */\nfunction checkUIFree() {\n  uiwatcher = null;\n\n  if (modallocked && !anyModalLocks()) { //did the last frame-level *modal* lock just get released?\n    modallocked = false;\n    toggleBusyModal(false);\n  }\n\n  if (locallocks.length === 0) {\n    const lockmgr = getLockmgr();\n    lockmgr.busyframes.delete(window); //we won't release our block in the lockmanager until we've had a chance to remove our modal layer\n    lockmgr.checkUIFree(); //to resolve any waitUIFrees. runs in the top-level frame. note that lockmgr cares about ALL ui locks, not just modals\n  }\n}\n\nfunction isDialogElement(el: unknown): boolean {\n  return typeof el === \"object\" && (el as HTMLElement).matches?.(\"dialog\") || false;\n}\n\nfunction checkCancelEvent(evt: Event) {\n  if (modallocked)\n    evt.preventDefault();\n}\n\nfunction toggleBusyModal(show: boolean) {\n  //'islock' is legacy non-camel version. TypeScript typing should help us transition (since 5.3). 'as' shuts up the warning TODO remove 'islock' and the 'as'\n  if (!domevents.dispatchCustomEvent(window, 'dompack:busymodal', { bubbles: true, cancelable: true, detail: { show: show, islock: show } as BusyModalEvent['detail'] }))\n    return; //cancelled!\n\n  if (!installedanticancelhandler) {\n    //capture cancel, as it doesn't bubble up\n    addEventListener(\"cancel\", evt => checkCancelEvent(evt), { capture: true });\n    installedanticancelhandler = true;\n  }\n\n  if (show) {\n    if (isDialogElement(busymodalcontent)) { //the user provided us with an element\n      currentbusymodaluserdialog = busymodalcontent as HTMLDialogElement;\n      currentbusymodaluserdialog.showModal();\n    } else if (busymodalcontent) { //we'll create our own dialog\n      const dialog = document.createElement('dialog');\n      const toembed = typeof busymodalcontent === \"string\" ? document.createTextNode(busymodalcontent) : busymodalcontent.cloneNode(true);\n      dialog.className = \"dompack-busydialog\";\n      dialog.role = \"status\";\n      dialog.ariaLive = \"off\";\n      dialog.append(toembed);\n      document.body.appendChild(dialog);\n      currentbusymodaldialog = dialog;\n      dialog.showModal();\n      return;\n    }\n\n    document.documentElement.classList.add(\"dompack--busymodal\");\n    return;\n  }\n\n  //hiding\n  document.documentElement.classList.remove(\"dompack--busymodal\");\n  if (currentbusymodaluserdialog)\n    currentbusymodaluserdialog.close();\n  if (currentbusymodaldialog) { //we added a dialog to the dom\n    currentbusymodaldialog.close();\n    document.body.removeChild(currentbusymodaldialog);\n    currentbusymodaldialog = null;\n  }\n}\n\nclass LockManager {\n  locks: BusyLock[];\n  busyframes: Set<Window> = new Set;\n  busycounter: number;\n  deferreduipromise: PromiseWithResolvers<boolean> | null;\n\n  //this object is not for external consumption\n  constructor() {\n    this.locks = [];\n    this.busycounter = 0;\n    this.deferreduipromise = null;\n  }\n  add(lock: BusyLock) {\n    this.locks.push(lock);\n    const returnvalue = this.busycounter++;\n    return returnvalue;\n  }\n  release(lock: BusyLock) {\n    const pos = this.locks.indexOf(lock);\n    if (pos === -1) {\n      if (debugFlags.bus) {\n        console.error(\"Duplicate release of busy lock #\" + lock.locknum);\n        console.log(\"Lock allocated:\");\n        console.log(lock.acquirestack);\n        console.log(\"Lock first released:\");\n        console.log(lock.releasestack);\n      }\n      throw new Error(\"Duplicate release of busy lock\");\n    }\n\n    this.locks.splice(pos, 1);\n  }\n  getNumLocks() {\n    return this.locks.length;\n  }\n  //used by child windows to schedule a check in *our* frame (eg before they themselves are unloaded)\n  scheduleCheckUIFree() {\n    scheduleCheckUIFree();\n  }\n  checkUIFree() {\n    if (this.locks.length === 0 && this.busyframes.size === 0 && this.deferreduipromise) {\n      this.deferreduipromise.resolve(true);\n      this.deferreduipromise = null;\n    }\n  }\n  waitUIFree() {\n    if (!this.deferreduipromise)\n      this.deferreduipromise = Promise.withResolvers();\n\n    scheduleCheckUIFree(); //ensures uiwait is released at next tick if no locks are present at all\n    return this.deferreduipromise.promise;\n  }\n  logLocks() {\n    this.locks.forEach(lock => console.log('[bus] lock #' + lock.locknum, lock.acquirestack, lock));\n    console.log(\"[bus] total \" + this.locks.length + \" locks\");\n  }\n  getLockIds() {\n    return this.locks.map(l => \"#\" + l.locknum).join(\", \");\n  }\n}\n\n/** Configure an (accessible) modal dialog\n * @param bmc - What to show in the dialog: either a text or DOM fragment to clone.\n *              If a <dialog> element is passed, this dialog will be used instead of creating a new one.\n */\nexport function setupBusyModal(bmc: NonNullable<typeof busymodalcontent>) {\n  busymodalcontent = bmc;\n}\n\ninterface LockOptions {\n  ///Whether this lock should enable a modality laayer\n  modal?: boolean;\n}\n\nclass BusyLock implements UIBusyLock {\n  modal: boolean;\n  locknum: number;\n  acquirestack: string | undefined;\n  releasestack: string | undefined;\n\n  constructor(options?: LockOptions) {\n    //legacy non-camel name is 'ismodal'\n    this.modal = options?.modal ?? (options as { ismodal?: boolean })?.ismodal ?? false;\n\n    const lockmgr = getLockmgr();\n    this.locknum = lockmgr.add(this);\n    lockmgr.busyframes.add(window);\n    locallocks.push(this);\n\n    if (this.modal && !modallocked) {\n      modallocked = true;\n      toggleBusyModal(true);\n    }\n\n    if (debugFlags.bus) {\n      this.acquirestack = (new Error).stack;\n      console.trace('[bus] Busy lock #' + this.locknum + ' taken. ' + lockmgr.getNumLocks() + \" locks active now: \" + lockmgr.getLockIds());\n    }\n  }\n\n  [Symbol.dispose]() {\n    if (debugFlags.bus)\n      this.releasestack = (new Error).stack;\n\n    const lockmgr = getLockmgr();\n    lockmgr.release(this);\n    const lockpos = locallocks.indexOf(this);\n    locallocks.splice(lockpos, 1);\n\n    if (debugFlags.bus) {\n      console.trace('[bus] Busy lock #' + this.locknum + ' released. ' + lockmgr.getNumLocks() + \" locks active now: \" + lockmgr.getLockIds());\n    }\n\n    scheduleCheckUIFree();\n  }\n\n  release() {\n    this[Symbol.dispose]();\n  }\n}\n\n/** Return a promise resolving as soon as the UI (any accessible frame) is free for at least one tick */\nexport function waitUIFree() {\n  return getLockmgr().waitUIFree();\n}\n\n/**\n     flag userinterface as busy. tests then know not to interact with the UI until the busy flag is released\n *\n    @param options - Options.<br>\n                   - modal: true/false - Whether the lock is a modal lock\n */\nexport function flagUIBusy(options?: LockOptions): UIBusyLock {\n  return new BusyLock(options);\n}\n\nexport function getUIBusyCounter() {\n  return getLockmgr().busycounter;\n}\n\nfunction getParentLockManager(): LockManager | null {\n  try { //we're accessing a parent window, so we may hit security exceptions\n    if (!(window.parent?.__dompack_busylockmanager))\n      return null;\n\n    //if we connected to a parent...  deregister our locks, eg. if parent navigated our frame away\n    window.addEventListener(\"pagehide\", () => {\n      if (debugFlags.bus)\n        console.log(\"[bus] Frame unloading, \" + locallocks.length + \" locks pending.\", locallocks.map(l => \"#\" + l.locknum).join(\", \"), locallocks);\n\n      //switch to local instance in case anyone still tries to touch these locks during unload\n      const lockmgr = getLockmgr();\n      const locallockmgr = new LockManager;\n      locallocks.forEach(lock => { lockmgr.release(lock); locallockmgr.add(lock); });\n      locallocks = [];\n\n      lockmgr.busyframes.delete(window); //explicitly remove us so we won't be waited upon\n      lockmgr.scheduleCheckUIFree();\n      mylockmgr = locallockmgr;\n    });\n\n    return window.parent.__dompack_busylockmanager;\n  } catch (e) {\n    return null;\n  }\n}\n","\n/* Regex to identify dimensionless style sttributes. copied from old version of preact/src/constants.js (MIT)\n   meant to capture:\n  { boxFlex:1, boxFlexGroup:1, columnCount:1, fillOpacity:1, flex:1, flexGrow:1,\n    flexPositive:1, flexShrink:1, flexNegative:1, fontWeight:1, lineClamp:1, lineHeight:1,\n    opacity:1, order:1, orphans:1, strokeOpacity:1, widows:1, zIndex:1, zoom:1\n*/\nconst IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;\n\nexport { qS, qSA } from '@webhare/dompack/src/tree.ts';\n\nfunction generateInsertList(nodes: Array<string | Node>) {\n  if (nodes.length === 1)\n    return typeof nodes[0] === 'string' ? document.createTextNode(nodes[0]) : nodes[0];\n\n  const frag = document.createDocumentFragment();\n  nodes.forEach(node => frag.appendChild(typeof node === 'string' ? document.createTextNode(node) : node));\n  return frag;\n}\n\n/** @deprecated Use node.matches() */\nexport function matches(node: Element, selector: string): boolean {\n  //only invoke 'matches' if it exists. it *should* but past versions of dompack.matches would check for it too (and thus not fail if you passed in a string instead of a Node)\n  return node.matches?.(selector);\n}\n/** @deprecated Use node.closest() */\nexport function closest(node: Element, selector: string) {\n  if (node.closest)\n    return node.closest(selector);\n  //TODO: Warn about out-of-date browser?\n  let testNode: Element | null = node;\n  for (; testNode && !matches(testNode, selector); testNode = testNode.parentElement)\n    /*iterate*/;\n  return testNode;\n}\n//implements contains. TODO we only really need this on IE11, which doesn't consider a text node a child, we can probably fall back to native elsewhere ?\n/** @deprecated Use node.contains() */\nexport function contains(ancestor: Node, child: Node) {\n  if (ancestor.contains)\n    return ancestor.contains(child);\n  //TODO: Warn about out-of-date browser?\n  for (let testNode: Node | null = child; testNode; testNode = testNode.parentNode)\n    if (testNode === ancestor)\n      return true;\n  return false;\n}\n//insert a range of nodes before a node: https://dom.spec.whatwg.org/#dom-childnode-before\n/** @deprecated Use node.before() */\nexport function before(node: ChildNode, ...nodes: Array<string | Node>) {\n  if (node.before) {\n    node.before(...nodes);\n    return;\n  }\n  //TODO: Warn about out-of-date browser?\n  if (node.parentNode)\n    node.parentNode.insertBefore(generateInsertList(nodes), node);\n}\n//insert a range of nodes after a node: https://dom.spec.whatwg.org/#dom-childnode-after\n/** @deprecated Use node.after() */\nexport function after(node: ChildNode, ...nodes: Array<string | Node>) {\n  if (node.after) {\n    node.after(...nodes);\n    return;\n  }\n  //TODO: Warn about out-of-date browser?\n  if (node.parentNode)\n    node.parentNode.insertBefore(generateInsertList(nodes), node.nextSibling);\n}\n//replace node with a set of nodes : https://dom.spec.whatwg.org/#dom-childnode-replacewith\n/** @deprecated Use node.replaceWith() */\nexport function replaceWith(node: ChildNode, ...nodes: Array<string | Node>) {\n  if (node.replaceWith) {\n    node.replaceWith(...nodes);\n    return;\n  }\n  //TODO: Warn about out-of-date browser?\n  if (node.parentNode)\n    node.parentNode.replaceChild(generateInsertList(nodes), node);\n}\n//remove node with a set of nodes : https://dom.spec.whatwg.org/#dom-childnode-remove\n/** @deprecated Use node.remove() */\nexport function remove(node: ChildNode) {\n  if (node.remove) {\n    node.remove();\n    return;\n  }\n  //TODO: Warn about out-of-date browser?\n  if (node.parentNode)\n    node.parentNode.removeChild(node);\n}\n//insert nodes at start: https://dom.spec.whatwg.org/#dom-parentnode-prepend\n/** @deprecated Use node.prepend() */\nexport function prepend(node: ParentNode, ...nodes: Array<string | Node>) {\n  if (node.prepend) {\n    node.prepend(...nodes);\n    return;\n  }\n  //TODO: Warn about out-of-date browser?\n  node.insertBefore(generateInsertList(nodes), node.firstChild);\n}\n//insert nodes at end: https://dom.spec.whatwg.org/#dom-parentnode-append\n/** @deprecated Use node.append() */\nexport function append(node: ParentNode, ...nodes: Array<string | Node>) {\n  if (node.append) {\n    node.append(...nodes);\n    return;\n  }\n  //TODO: Warn about out-of-date browser?\n  node.appendChild(generateInsertList(nodes));\n}\n\n/**\n * Toggle a single class\n *\n * @param node - Node to modify\n * @param classname - Class to toggle\n * @param settoggle - true to enable, false to disable, undefined to toggle\n * @deprecated Just use classList.toggle on the node itself\n */\n/** @deprecated Use classList.toggle() */\nexport function toggleClass(node: Element, classname: string, settoggle?: boolean) {\n  if (arguments.length === 2) //in old dompack, 2 argument version toggled and 3 argument version toggled off. match that behavior\n    node.classList.toggle(classname);\n  else\n    node.classList.toggle(classname, settoggle);\n}\n\n/**\n     Toggle classes in a node\n *\n    @param node - Node which classes to toggle\n    @param toggles - Object, all keys will be added/removed based on the truthyness of their values\n */\nexport function toggleClasses(node: Element, toggles: { [key: string]: boolean }) {\n  if (typeof (toggles) !== \"object\")\n    throw new Error(\"Expected an object with keys as classnames\");\n  Object.keys(toggles).forEach(key => node.classList[toggles[key] ? \"add\" : \"remove\"](key));\n}\n\n/* remove the contents of an existing node */\n/** @deprecated Use node.replaceChildren() */\nexport function empty(node: Element) {\n  if (node.replaceChildren) {\n    node.replaceChildren();\n    return;\n  }\n  //TODO: Warn about out-of-date browser?\n  while (node.lastChild)\n    node.removeChild(node.lastChild);\n}\n\nexport function isDomReady() {\n  //ensure no domready events can run if there will never be a dom\n  return typeof document !== \"undefined\" && (document.readyState === \"interactive\" || document.readyState === \"complete\");\n}\n\n/* run the specified function 'on ready'. adds to DOMContentLoaded if dom is not ready yet. Exceptions/rejections from the ready handler will not be fatal to the rest of code execution */\nexport function onDomReady(callback: () => unknown | Promise<unknown>) {\n  if (isDomReady()) {\n    try {\n      void callback(); //Ignore unhandled rejections\n    } catch (e) { // We don't want our caller to 'stop' due to a domready exception as its usually the toplevel initialization code, so log the exception ourselves\n      void Promise.reject(new Error(\"Synchronous onDomReady handler failed\", { cause: e })); //Let it propagate as a standard unhandled rejection\n    }\n  } else\n    document.addEventListener(\"DOMContentLoaded\", () => void callback());\n}\n\n//parse JSON data, throw with more info on parse failure\nexport function getJSONAttribute<T>(node: Element, attributename: string): T | null {\n  try {\n    if (node.hasAttribute(attributename))\n      return JSON.parse(node.getAttribute(attributename) as string);\n  } catch (e) {\n    console.error(\"JSON parse failure on attribute '\" + attributename + \"' of node\", node);\n    throw e;\n  }\n  return null;\n}\n\n/**\n     Get the base URI of the current document. IE11 doesn't implement document.baseURI\n *\n    @param doc - Document to query. Defaults to window.document\n    @deprecated Use document.baseURI\n */\nexport function getBaseURI(doc: Document | undefined) {\n  if (!doc)\n    doc = window.document;\n  if (doc.baseURI)\n    return doc.baseURI;\n\n  const base = doc.querySelector('base');\n  if (base && base.href)\n    return base.href;\n  return doc.URL;\n}\n\n/**\n     Sets multiple styles on a node, automatically adding 'px' to numbers when appropriate\n    (can be used as replacement for Mootools .setStyles)\n *\n * @param node - Node to update\n * @param value - Styles to set\n */\nexport function setStyles(node: HTMLElement, value?: string | { [key: string]: string | number }) {\n  if (!value)\n    node.style.cssText = '';\n  else if (typeof value === 'string')\n    node.style.cssText = value || '';\n  else {\n    for (const [key, propvalue] of Object.entries(value)) {\n      // for numbers, add 'px' if the constant isn't dimensionless (eg zIndex)\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any -- we don't know which keys will be set\n      (node.style as any)[key] = typeof value[key] === 'number' && IS_NON_DIMENSIONAL.test(key) === false\n        ? propvalue + 'px'\n        : propvalue;\n    }\n  }\n}\n","import * as domtree from './tree';\nimport * as domevents from './events';\n\nexport type TakeFocusEvent = CustomEvent<{ options?: FocusOptions }>;\n\ndeclare global {\n  interface GlobalEventHandlersEventMap {\n    \"dompack:takefocus\": TakeFocusEvent;\n  }\n}\n\ntype RegistrationHandler<E extends Element = HTMLElement> = (node: E, index?: number) => void;\ntype ComponentRegistration<E extends Element = HTMLElement> =\n  {\n    selector: string;\n    handler: RegistrationHandler<E>;\n    index: number;\n    num: number;\n    afterdomready: boolean;\n  };\n\nconst components: Array<ComponentRegistration<Element>> = [];\nconst map = new WeakMap();\n\n//is a node completely in the dom? if we can find a sibling anywhere, it must be closed\nfunction isNodeCompletelyInDom(node: Element | null) {\n  for (; node; node = node.parentElement)\n    if (node.nextSibling)\n      return true;\n  return false;\n}\nfunction processRegistration<E extends Element>(item: E, reg: ComponentRegistration<E>, domready: boolean) {\n  if (!domready && !isNodeCompletelyInDom(item))\n    return; //not safe to register\n\n  if (!map.has(item))\n    map.set(item, [reg.num]);\n  else {\n    const list = map.get(item);\n    if (list.includes(reg.num))\n      return;\n    list.push(reg.num);\n  }\n  reg.handler(item, reg.index++); //note: if an exception is reported from Object.handler,\n}\nfunction applyRegistration<E extends Element>(reg: ComponentRegistration<E>, startnode?: Element) {\n  const domready = domtree.isDomReady();\n  if (reg.afterdomready && !domready)\n    return;\n\n  const items = Array.from((startnode || document).querySelectorAll(reg.selector)) as E[];\n  if (startnode?.matches(reg.selector))\n    items.unshift(startnode as E); //if startnode matches it has to be an E\n\n  items.forEach(item => {\n    try {\n      processRegistration<E>(item, reg, domready);\n    } catch (e) {\n      console.error(\"Exception handling registration of\", item, \"for rule\", reg.selector);\n      console.log(\"Registration\", reg);\n      if (e instanceof Error) {\n        console.log(e, e.stack);\n        if (window.onerror) {\n          // Send to onerror to trigger exception reporting\n          try {\n            // @ts-expect-error: fileName, lineNumber and columnNumber are non-standard\n            window.onerror(e.message, e.fileName || \"\", e.lineNumber || 1, e.columNumber || 1, e);\n          } catch (e2) { }\n        }\n      } else\n        console.log(e);\n    }\n  });\n}\n\n/* A focus implementation that allows the node to intercept focused, allowing eg\n   radio/checkbox replacements to redirect focus but also explicitly preventing\n   focus of a disabled element\n   Returns true when the focus operation was successfull or handled by an event handler.\n   @param node Node to focus\n   @param options.preventScroll Prevent scroll to focused element\n*/\nexport function focus(node: Element, options?: FocusOptions) {\n  if (!domevents.dispatchCustomEvent(node, 'dompack:takefocus', { bubbles: true, cancelable: true, detail: { options } }))\n    return true;\n\n  if (typeof (node as HTMLElement).focus !== \"function\" || (node as HTMLInputElement).disabled)\n    return false;\n\n  (node as HTMLInputElement).focus(options);\n  return true;\n}\n\n/**\n * @param node - Node to show\n * @param options - Scroll options\n * @deprecated invoke scrollIntoView directly  on the nodes\n */\nexport function scrollIntoView(node: Element, options?: ScrollIntoViewOptions) {\n  node.scrollIntoView(options);\n  return true;\n}\n\n/**\n    Register a component for auto-initialization.\n\n    @param selector - Selector the component must match\n    @param handler - Handler\n    @param options - Any unrecognized options are passed to the handler\n\n    The handler will be invoked with two parameters\n    - the node to register\n    - the index of the node (a unique counter for this selector - first is 0)\n */\n\nexport function register<E extends Element = HTMLElement>(selector: string, handler: RegistrationHandler<E>, options?: { afterdomready: boolean }) {\n  const newreg: ComponentRegistration<E> =\n  {\n    selector: selector,\n    handler: handler,\n    index: 0,\n    num: components.length,\n    afterdomready: !options || options.afterdomready\n  };\n  if (components.length === 0 && !domtree.isDomReady()) //first component... we'll need a ready handler\n    domtree.onDomReady(() => registerMissed());\n\n  components.push(newreg as ComponentRegistration<Element>);\n  applyRegistration(newreg);\n}\n\n// register any components we missed on previous scans\nexport function registerMissed(startnode?: Element) {\n  const todo = components.slice(0);\n  todo.forEach(item => applyRegistration(item, startnode));\n}\n","import { buildCookieHeader, type CookieOptions } from '@webhare/dompack/src/cookiebuilder';\nimport { escapeRegExp, parseTyped, stringify } from '@webhare/std';\n\nconst backup: {\n  sessionStorage?: Record<string, string>;\n  localStorage?: Record<string, string>;\n} = {};\ntype BrowserStorage = keyof typeof backup;\n\nexport function listCookies() {\n  return document.cookie.split(';').map(cookie => {\n    const parts = cookie.split('=');\n    return { name: decodeURIComponent(parts[0].trim()), value: decodeURIComponent(parts[1] || '') };\n  });\n}\n\nexport function setCookie(key: string, value: string, options?: CookieOptions) {\n  document.cookie = buildCookieHeader(key, value, options);\n}\n\nexport function getCookie(key: string): string | null {\n  const value = document.cookie.match('(?:^|;)\\\\s*' + escapeRegExp(key) + '=([^;]*)');\n  return (value) ? decodeURIComponent(value[1]) : null;\n}\n\nexport function deleteCookie(key: string, options?: CookieOptions) {\n  setCookie(key, '', { ...options, duration: -1, expires: undefined });\n}\n\nfunction get(storage: BrowserStorage, key: string): unknown | null {\n  let foundvalue: string | undefined | null = backup[storage]?.[key];\n  if (foundvalue) //if it's in the backups storage encoding can't fail either\n    return parseTyped(foundvalue);\n\n  try {\n    foundvalue = window[storage].getItem(key);\n    if (foundvalue)\n      return parseTyped(foundvalue);\n  } catch (e) {\n    //we ignore parse failures\n  }\n  return null;\n}\n\nfunction set(storage: BrowserStorage, key: string, value: unknown) {\n  const tostore = value !== null && value !== undefined ? stringify(value, { typed: true }) : null;\n  try {\n    if (tostore !== null)\n      window[storage].setItem(key, tostore);\n    else\n      window[storage].removeItem(key);\n    return;\n  } catch (e) {\n    //ignore\n  }\n\n  const store = (backup[storage] ||= {});\n  if (tostore !== null)\n    store[key] = tostore;\n  else\n    delete store[key];\n}\n\nexport function getSession<T>(key: string): T | null {\n  return get(\"sessionStorage\", key) as T | null;\n}\nexport function setSession<T>(key: string, value: T | null) {\n  set(\"sessionStorage\", key, value);\n}\nexport function getLocal<T>(key: string): T | null {\n  return get(\"localStorage\", key) as T | null;\n}\nexport function setLocal<T>(key: string, value: T | null) {\n  set(\"localStorage\", key, value);\n}\nexport function listSessionKeys() {\n  try {\n    return Object.keys(window.sessionStorage);\n  } catch (e) {\n    return Object.keys(backup.sessionStorage || {});\n  }\n}\nexport function listLocalKeys() {\n  try {\n    return Object.keys(window.localStorage);\n  } catch (e) {\n    return Object.keys(backup.localStorage || {});\n  }\n}\n","/* Identify devices for the purpose of analytics/tracing\n   NOT a library for feature detection!\n   Originally based on Mootools.Browser\n*/\n\nexport type Platform = \"windows\" | \"ios\" | \"webos\" | \"android\" | \"linux\" | \"mac\" | \"other\";\nexport type Device = \"desktop\" | \"mobile\" | \"tablet\" | \"\";\n\n/** Valid KeyboardEvent.key values (next to 'plain' keys)\n    This list was built from https://www.w3.org/TR/uievents-key/\n    using `console.log([...new Set([...document.querySelectorAll(\".key-table-key .key\")].map(_ => _.textContent))].toSorted().join(' | '))`\n*/\nexport type KeyAttributeValue = \"AVRInput\" | \"AVRPower\" | \"Accept\" | \"Again\" | \"AllCandidates\" | \"Alphanumeric\" | \"Alt\" | \"AltGraph\" | \"AppSwitch\" | \"ArrowDown\" | \"ArrowLeft\" | \"ArrowRight\" | \"ArrowUp\" | \"Attn\" | \"AudioBalanceLeft\" | \"AudioBalanceRight\" | \"AudioBassBoostDown\" | \"AudioBassBoostToggle\" | \"AudioBassBoostUp\" | \"AudioFaderFront\" | \"AudioFaderRear\" | \"AudioSurroundModeNext\" | \"AudioTrebleDown\" | \"AudioTrebleUp\" | \"AudioVolumeDown\" | \"AudioVolumeMute\" | \"AudioVolumeUp\" | \"Backspace\" | \"BrightnessDown\" | \"BrightnessUp\" | \"BrowserBack\" | \"BrowserFavorites\" | \"BrowserForward\" | \"BrowserHome\" | \"BrowserRefresh\" | \"BrowserSearch\" | \"BrowserStop\" | \"Call\" | \"Camera\" | \"CameraFocus\" | \"Cancel\" | \"CapsLock\" | \"ChannelDown\" | \"ChannelUp\" | \"Clear\" | \"Close\" | \"ClosedCaptionToggle\" | \"CodeInput\" | \"ColorF0Red\" | \"ColorF1Green\" | \"ColorF2Yellow\" | \"ColorF3Blue\" | \"ColorF4Grey\" | \"ColorF5Brown\" | \"Compose\" | \"ContextMenu\" | \"Control\" | \"Convert\" | \"Copy\" | \"CrSel\" | \"Cut\" | \"DVR\" | \"Dead\" | \"Delete\" | \"Dimmer\" | \"DisplaySwap\" | \"Eisu\" | \"Eject\" | \"End\" | \"EndCall\" | \"Enter\" | \"EraseEof\" | \"Escape\" | \"ExSel\" | \"Execute\" | \"Exit\" | \"F1\" | \"F10\" | \"F11\" | \"F12\" | \"F2\" | \"F3\" | \"F4\" | \"F5\" | \"F6\" | \"F7\" | \"F8\" | \"F9\" | \"FavoriteClear0\" | \"FavoriteClear1\" | \"FavoriteClear2\" | \"FavoriteClear3\" | \"FavoriteRecall0\" | \"FavoriteRecall1\" | \"FavoriteRecall2\" | \"FavoriteRecall3\" | \"FavoriteStore0\" | \"FavoriteStore1\" | \"FavoriteStore2\" | \"FavoriteStore3\" | \"FinalMode\" | \"Find\" | \"Fn\" | \"FnLock\" | \"GoBack\" | \"GoHome\" | \"GroupFirst\" | \"GroupLast\" | \"GroupNext\" | \"GroupPrevious\" | \"Guide\" | \"GuideNextDay\" | \"GuidePreviousDay\" | \"HangulMode\" | \"HanjaMode\" | \"Hankaku\" | \"HeadsetHook\" | \"Help\" | \"Hibernate\" | \"Hiragana\" | \"HiraganaKatakana\" | \"Home\" | \"Hyper\" | \"Info\" | \"Insert\" | \"InstantReplay\" | \"JunjaMode\" | \"KanaMode\" | \"KanjiMode\" | \"Katakana\" | \"Key11\" | \"Key12\" | \"LastNumberRedial\" | \"LaunchApplication1\" | \"LaunchApplication2\" | \"LaunchCalendar\" | \"LaunchContacts\" | \"LaunchMail\" | \"LaunchMediaPlayer\" | \"LaunchMusicPlayer\" | \"LaunchPhone\" | \"LaunchScreenSaver\" | \"LaunchSpreadsheet\" | \"LaunchWebBrowser\" | \"LaunchWebCam\" | \"LaunchWordProcessor\" | \"Link\" | \"ListProgram\" | \"LiveContent\" | \"Lock\" | \"LogOff\" | \"MailForward\" | \"MailReply\" | \"MailSend\" | \"MannerMode\" | \"MediaApps\" | \"MediaAudioTrack\" | \"MediaClose\" | \"MediaFastForward\" | \"MediaLast\" | \"MediaNextTrack\" | \"MediaPause\" | \"MediaPlay\" | \"MediaPlayPause\" | \"MediaPreviousTrack\" | \"MediaRecord\" | \"MediaRewind\" | \"MediaSkipBackward\" | \"MediaSkipForward\" | \"MediaStepBackward\" | \"MediaStepForward\" | \"MediaStop\" | \"MediaTopMenu\" | \"MediaTrackNext\" | \"MediaTrackPrevious\" | \"Meta\" | \"MicrophoneToggle\" | \"MicrophoneVolumeDown\" | \"MicrophoneVolumeMute\" | \"MicrophoneVolumeUp\" | \"ModeChange\" | \"NavigateIn\" | \"NavigateNext\" | \"NavigateOut\" | \"NavigatePrevious\" | \"New\" | \"NextCandidate\" | \"NextFavoriteChannel\" | \"NextUserProfile\" | \"NonConvert\" | \"Notification\" | \"NumLock\" | \"OnDemand\" | \"Open\" | \"PageDown\" | \"PageUp\" | \"Pairing\" | \"Paste\" | \"Pause\" | \"PinPDown\" | \"PinPMove\" | \"PinPToggle\" | \"PinPUp\" | \"Play\" | \"PlaySpeedDown\" | \"PlaySpeedReset\" | \"PlaySpeedUp\" | \"Power\" | \"PowerOff\" | \"PreviousCandidate\" | \"Print\" | \"PrintScreen\" | \"Process\" | \"Props\" | \"RandomToggle\" | \"RcLowBattery\" | \"RecordSpeedNext\" | \"Redo\" | \"RfBypass\" | \"Romaji\" | \"STBInput\" | \"STBPower\" | \"Save\" | \"ScanChannelsToggle\" | \"ScreenModeNext\" | \"ScrollLock\" | \"Select\" | \"Settings\" | \"Shift\" | \"SingleCandidate\" | \"Soft1\" | \"Soft2\" | \"Soft3\" | \"Soft4\" | \"SpeechCorrectionList\" | \"SpeechInputToggle\" | \"SpellCheck\" | \"SplitScreenToggle\" | \"Standby\" | \"Subtitle\" | \"Super\" | \"Symbol\" | \"SymbolLock\" | \"TV\" | \"TV3DMode\" | \"TVAntennaCable\" | \"TVAudioDescription\" | \"TVAudioDescriptionMixDown\" | \"TVAudioDescriptionMixUp\" | \"TVContentsMenu\" | \"TVDataService\" | \"TVInput\" | \"TVInputComponent1\" | \"TVInputComponent2\" | \"TVInputComposite1\" | \"TVInputComposite2\" | \"TVInputHDMI1\" | \"TVInputHDMI2\" | \"TVInputHDMI3\" | \"TVInputHDMI4\" | \"TVInputVGA1\" | \"TVMediaContext\" | \"TVNetwork\" | \"TVNumberEntry\" | \"TVPower\" | \"TVRadioService\" | \"TVSatellite\" | \"TVSatelliteBS\" | \"TVSatelliteCS\" | \"TVSatelliteToggle\" | \"TVTerrestrialAnalog\" | \"TVTerrestrialDigital\" | \"TVTimer\" | \"Tab\" | \"Teletext\" | \"Undo\" | \"Unidentified\" | \"VideoModeNext\" | \"VoiceDial\" | \"WakeUp\" | \"Wink\" | \"Zenkaku\" | \"ZenkakuHankaku\" | \"ZoomIn\" | \"ZoomOut\" | \"ZoomToggle\";\n\nexport type UserAgentInfo =\n  {\n    /** Browser name, eg 'chrome' or 'firefox' */\n    name: string;\n    /** Browser numeric version (eg 97) */\n    version: number;\n    /** Platform the browser is running on (eg 'windows') */\n    platform: Platform;\n    /** Type of device (eg 'desktop' or 'tablet' for an iPad) */\n    device: Device;\n    /** platform-browsername-version eg ios-safari-11 */\n    triplet: string;\n  };\n\nexport function parseUserAgent(ua: string): UserAgentInfo {\n  ua = ua.toLowerCase();\n\n  // chrome is included in the edge UA, so need to check for edge first, before checking if it's chrome.\n  // safari is included in the miuibrowser UA, so need to check for miuibrowser first, before checking if it's safari.\n  let UA: RegExpMatchArray | null = ua.match(/(edge|miuibrowser)[\\s/:]([\\w\\d.]+)/);\n  if (!UA)\n    UA = ua.match(/(opera|ie|firefox|chrome|trident|crios|version)[\\s/:]([\\w\\d.]+)?.*?(safari|(?:rv[\\s/:]|version[\\s/:])([\\w\\d.]+)|$)/);\n  if (!UA) { //try ios 11.4.1\n    UA = ua.match(/; cpu os ([\\d]+)/);\n    if (UA)\n      UA = ['', 'safari', UA[1]];\n  }\n  if (!UA)\n    UA = ['', 'unknown', \"0\"];\n\n  if (UA[1] === 'trident') {\n    UA[1] = 'ie';\n    if (UA[4]) UA[2] = UA[4];\n  } else if (UA[1] === 'crios') {\n    UA[1] = 'chrome';\n  }\n\n  let platform = ua.match(/ip(?:ad|od|hone)/) ? 'ios' : (ua.match(/(?:webos|android)/) || ua.match(/mac|win|linux/) || ['other'])[0];\n  if (platform === 'win')\n    platform = 'windows';\n\n  const name = (UA[1] === 'version') ? UA[3] : UA[1];\n  const version = parseInt((UA[1] === 'opera' && UA[4]) ? UA[4] : UA[2]);\n  const device = ua.match(/ipad/) ? 'tablet' : ['ios', 'webos', 'android'].includes(platform) ? 'mobile' : ['mac', 'windows', 'linux'].includes(platform) ? 'desktop' : '';\n\n  return {\n    name,\n    version,\n    platform: platform as Platform,\n    device,\n    triplet: platform + '-' + name + '-' + version\n  };\n}\n\n/**\n * Is the native 'multiselect' modifier for this platform pressed? (Cmd for Mac, Ctrl for Windows/Linux)\n *\n * @param event - Event to check\n */\nexport function isMultiSelectKey(event: KeyboardEvent | MouseEvent): boolean {\n  return browser.platform === 'mac' ? event.metaKey : event.ctrlKey;\n}\n\n/**\n * Is the native 'copy' modifier for this platform pressed?\n *\n * @param event - Event to check\n */\nexport function isCopyKey(event: KeyboardEvent | MouseEvent): boolean {\n  return browser.platform === 'mac' ? event.altKey : event.ctrlKey;\n}\n\n/** @deprecated Use getBrowser() instead, available since WH5.6.3. We will remove `browser` in the future to improve tree shaking */\nexport const browser: Readonly<UserAgentInfo> = Object.freeze(parseUserAgent(globalThis.navigator?.userAgent || \"\"));\n\n/** Get browser information */\nexport function getBrowser(): Readonly<UserAgentInfo> {\n  //Offer this as a function to improve treeshakability\n  return browser;\n}\n\n//CSS Query used to find valid submittors\nexport const submitselector = 'input[type=submit],input[type=image],button[type=submit],button:not([type])';\n//Must match possible types returned by the submitselector\nexport type SubmitSelectorType = HTMLInputElement | HTMLButtonElement;\n","import { isHTMLElement } from \"@webhare/dompack\";\nimport type { CMSConfig } from \"@mod-system/js/internal/generation/gen_misc_ts\";\n\nlet config: CMSConfig | undefined;\n\nfunction forwardPublisherNavigation(event: Event) {\n  /* we watch for clicks.. as we only want to update the Publisher's selection for user triggered actions (otherwise we'd\n     start navigation in response to JS or internal link autoredirects) */\n  if (!isHTMLElement(event.target) || !config?.interfaceServers)\n    return;\n\n  const navaction = event.target.closest<HTMLAnchorElement>('a[href]');\n  if (!navaction)\n    return;\n\n  const desturl = navaction.href;\n  if (desturl.split('#')[0] !== location.href.split('#')[0]) { //it's actual navigation...\n    for (const origin of config.interfaceServers) {\n      try {\n        window.top?.postMessage({ type: \"webhare-navigation\", location: desturl }, origin);\n      } catch (ignore) {\n        //ignore crossdomain errors\n      }\n    }\n  }\n}\n\nasync function configureForCMS() {\n  try {\n    const res = await fetch(\"/.wh/ea/config/cms.json\");\n    config = await res.json();\n  } catch (e) {\n    console.log(\"Failed to get CMS configuration\", e);\n    return;\n  }\n  window.addEventListener(\"click\", forwardPublisherNavigation);\n}\n\nif (typeof window !== \"undefined\" && window !== window.top) { //if we're in an iframe, we may be running in WebHare and need to forward navigation events\n  //we have no way to detect whether we're in a WebHare iframe or a 3rd party iframe. assume it's webhare and grab the interface servers\n  void configureForCMS();\n}\n","import \"@webhare/dompack/reset.css\";\nimport \"./frontend.scss\";\n\nimport { createApp } from \"vue\";\nimport { onDomReady, setupWRDAuth } from \"./lib/runtime\";\nimport { router } from \"./lib/router\";\nimport App from \"./App.vue\";\n\ndeclare module \"@webhare/frontend\" {\n  interface FrontendDataTypes {\n    \"nudam:beheer\": { hosted: true; siteRoot: string };\n  }\n}\n\nonDomReady(async () => {\n  const app = createApp(App);\n  app.use(router);\n  await router.isReady(); // eerst de route resolven, anders scant setupWRDAuth een lege DOM\n  app.mount(\"#app\");\n\n  setupWRDAuth({\n    onLogin: async () => {\n      // Geen page-reload: useWrdAuthState flipt reactief; altijd op het\n      // dashboard landen na een verse login.\n      await router.replace({ name: \"dashboard\" });\n    },\n  });\n});\n","var UNKNOWN_FUNCTION = '<unknown>';\n/**\n * This parses the different stack traces and puts them into one format\n * This borrows heavily from TraceKit (https://github.com/csnover/TraceKit)\n */\n\nfunction parse(stackString) {\n  var lines = stackString.split('\\n');\n  return lines.reduce(function (stack, line) {\n    var parseResult = parseChrome(line) || parseWinjs(line) || parseGecko(line) || parseNode(line) || parseJSC(line);\n\n    if (parseResult) {\n      stack.push(parseResult);\n    }\n\n    return stack;\n  }, []);\n}\nvar chromeRe = /^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack|rsc|<anonymous>|\\/|[a-z]:\\\\|\\\\\\\\).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\nvar chromeEvalRe = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\nfunction parseChrome(line) {\n  var parts = chromeRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n\n  var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n\n  var submatch = chromeEvalRe.exec(parts[2]);\n\n  if (isEval && submatch != null) {\n    // throw out eval line/column and use top-most line/column number\n    parts[2] = submatch[1]; // url\n\n    parts[3] = submatch[2]; // line\n\n    parts[4] = submatch[3]; // column\n  }\n\n  return {\n    file: !isNative ? parts[2] : null,\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: isNative ? [parts[2]] : [],\n    lineNumber: parts[3] ? +parts[3] : null,\n    column: parts[4] ? +parts[4] : null\n  };\n}\n\nvar winjsRe = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|rsc|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nfunction parseWinjs(line) {\n  var parts = winjsRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  return {\n    file: parts[2],\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: [],\n    lineNumber: +parts[3],\n    column: parts[4] ? +parts[4] : null\n  };\n}\n\nvar geckoRe = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|rsc|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nvar geckoEvalRe = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n\nfunction parseGecko(line) {\n  var parts = geckoRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n  var submatch = geckoEvalRe.exec(parts[3]);\n\n  if (isEval && submatch != null) {\n    // throw out eval line/column and use top-most line number\n    parts[3] = submatch[1];\n    parts[4] = submatch[2];\n    parts[5] = null; // no column when eval\n  }\n\n  return {\n    file: parts[3],\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: parts[2] ? parts[2].split(',') : [],\n    lineNumber: parts[4] ? +parts[4] : null,\n    column: parts[5] ? +parts[5] : null\n  };\n}\n\nvar javaScriptCoreRe = /^\\s*(?:([^@]*)(?:\\((.*?)\\))?@)?(\\S.*?):(\\d+)(?::(\\d+))?\\s*$/i;\n\nfunction parseJSC(line) {\n  var parts = javaScriptCoreRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  return {\n    file: parts[3],\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: [],\n    lineNumber: +parts[4],\n    column: parts[5] ? +parts[5] : null\n  };\n}\n\nvar nodeRe = /^\\s*at (?:((?:\\[object object\\])?[^\\\\/]+(?: \\[as \\S+\\])?) )?\\(?(.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nfunction parseNode(line) {\n  var parts = nodeRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  return {\n    file: parts[2],\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: [],\n    lineNumber: +parts[3],\n    column: parts[4] ? +parts[4] : null\n  };\n}\n\nexport { parse };\n","import * as stacktrace_parser from \"stacktrace-parser\";\n\nexport type StackTraceItem = {\n  filename: string;\n  line: number;\n  col: number;\n  func: string;\n};\n\nexport type StackTrace = StackTraceItem[];\n\nexport function parseTrace(e: Error): StackTrace {\n  if (!e?.stack)\n    return [];\n\n  const trace = stacktrace_parser.parse(e.stack);\n  return trace.map(i => ({ filename: i.file || \"\", line: i.lineNumber || 1, col: i.column || 1, func: (i.methodName || \"\") }));\n}\n\nexport function getStackTrace(): StackTrace {\n  return parseTrace(new Error()).slice(1);\n}\n\nexport function formatTrace(trace: StackTraceItem[]): string {\n  return trace.map(e =>\n    `    at ${e.func} (${e.filename}:${e.line}:${e.col})`).join(\"\\n\");\n}\n\nexport function prependStackTrace(error: Error, trace: StackTrace) {\n  if (!error.stack)\n    return; //no stack to manipulate\n\n  const stacklines = error.stack?.split(\"\\n\") || [];\n  const tracelines = formatTrace(trace);\n  error.stack = (stacklines[0] ? stacklines[0] + \"\\n\" : \"\") + tracelines + '\\n' + (stacklines.slice(1).join(\"\\n\"));\n  return error;\n}\n","// This gets TypeScript to refer to us by our @webhare/... name in auto imports:\ndeclare module \"@webhare/rpc\" {\n  export interface KnownRPCServices {\n    /* Filled by generated services.ts files */\n  }\n}\n\nimport { debugFlags, backendBase } from \"@webhare/env\";\nimport { type StackTrace, parseTrace, prependStackTrace, type PromisifyFunctionReturnType } from \"@webhare/js-api-tools\";\nimport { omit, parseTyped, stringify } from \"@webhare/std\";\n\n//Preload interface definitions. To solve this cleaner we would have to do some sort of auto-inject but how to robustly do that accross IDEs/Tscs ?\n\n//@ts-ignore Ignore if it doesn't exist. this line *must* remain a @ts-ignore\nimport type { } from \"@mod-platform/generated/ts/services.ts\";\n//@ts-ignore Ignore if it doesn't exist. this line *must* remain a @ts-ignore\nimport type { } from \"wh:ts/services.ts\";\n\nfunction isAbsolute(url: string) {\n  return url.startsWith(\"http:\") || url.startsWith(\"https:\");\n}\n\nfunction getBaseURL() {\n  if (!backendBase)\n    throw new Error(`You must set the baseUrl option when using the RPC Client outside Webhare`);\n  return isAbsolute(backendBase) ? backendBase : new URL(backendBase, location.origin);\n}\n\nexport interface RPCClientOptions {\n  /** Custom request update. Use to eg. set keepalive or add debug variables to the URL */\n  onBeforeRequest?: (url: URL, requestInit: RequestInit & { headers: Headers }) => void;\n  /** Response callback. Use this if you need to capture details on the incoming respones. May be invoked multiple times per request, eg due to 429 errors! */\n  onResponse?: (response: Response) => void;\n  /** Call timeout */\n  timeout?: number;\n  /** Abort signal to cancel the RPC */\n  signal?: AbortSignal;\n  /** Retry on 429 */\n  retry429?: boolean;\n  /** Silent - do not log errors */\n  silent?: boolean;\n  /** Debug (Follows 'rpc' debugflag if not explicity specified) */\n  debug?: boolean;\n  /** Headers to submit (Eg Authorization) */\n  headers?: Record<string, string>;\n  /** Base URL for service paths */\n  baseUrl?: string;\n}\n\n/** RPC Response format */\nexport type RPCResponse = ({\n  /** Result. Not present if the function didn't return anything */\n  result?: unknown;\n} | {\n  /** Error message */\n  error: string;\n  /** Captured stack trace (if 'etr' debugFlag is set) */\n  trace?: StackTrace;\n}) & {\n  /** Captured console log entries (if 'etr' debugFlag is set) */\n  consoleLog?: Array<{\n    //TODO this is Serialized<ConsoleLogItem[]> - should probably rename it to SerializedToJSON and move to std or env ?\n    /** Date when console function was called */\n    when: string;\n    /** `console` method that was called (eg 'log') */\n    method: string;\n    /** Logged data */\n    data: string;\n    /** Location of caller */\n    location?: {\n      filename: string;\n      line: number;\n      col: number;\n      func: string;\n    };\n    /** Codecontext */\n    codeContextId?: string;\n  }>;\n};\n\nclass ControlledCall {\n  client: RPCClient;\n  options: RPCClientOptions;\n  abortcontroller?: AbortController;\n  timeout?: number;\n  _callurl: string;\n  _fetchoptions: RequestInit;\n  promise: Promise<unknown>;\n  timedout?: boolean;\n  aborted?: boolean;\n\n  constructor(client: RPCClient, method: string, stack: StackTrace | null, options: RPCClientOptions, callurl: URL, fetchoptions: RequestInit) {\n    this.client = client;\n    this.options = options;\n\n    if (options.timeout || options.signal) {\n      this.abortcontroller = new AbortController;\n      fetchoptions.signal = this.abortcontroller.signal;\n\n      if (options.timeout && options.timeout > 0) {\n        this.timeout = options.timeout;\n        setTimeout(() => this._handleTimeout(), options.timeout);\n      }\n      if (options.signal) {\n        options.signal.addEventListener(\"abort\", () => this._abort());\n      }\n    }\n\n    this._callurl = callurl.toString();\n    this._fetchoptions = fetchoptions;\n\n    const fetchpromise = fetch(this._callurl, this._fetchoptions);\n    this.promise = this._completeCall(method, stack, fetchpromise) as Promise<unknown>;\n  }\n  _handleTimeout() {\n    this.timedout = true;\n    this.abortcontroller?.abort();\n  }\n  _abort() {\n    this.aborted = true;\n    this.abortcontroller?.abort();\n  }\n\n  async _completeCall(method: string, requestStack: StackTrace | null, fetchpromise: Promise<Response>) {\n    let response;\n    for (; ;) { //loop to handle \"429 Conflict\"s\n      try { //we should only guard the fetch call and specifically *not* the onResponse callback\n        response = await fetchpromise;\n      } catch (exception) {\n        if (this.client.debug)\n          console.log(`[rpc] Exception invoking '${method}'`, exception);\n\n        if (this.aborted)\n          throw new Error(`RPC Aborted`);\n        else if (this.timedout)\n          throw new Error(`RPC Timeout: timeout was set to ${this.timeout} milliseconds`);\n        else\n          throw new Error(`RPC Failed: exception: ` + exception);\n      }\n\n      this.options.onResponse?.(response); //allow hooks to capture headers\n\n      if (response.status === 429 && !(\"retry429\" in this.options && !this.options.retry429) && response.headers.get(\"Retry-After\")) {\n        const retryafter = parseInt(response.headers.get(\"Retry-After\") || \"\");\n        if (this.client.debug)\n          console.warn(`[rpc] We are being throttled (429 Too Many Requests) - retrying after ${retryafter} seconds`);\n\n        await new Promise(resolve => setTimeout(resolve, retryafter * 1000));\n        fetchpromise = fetch(this._callurl, this._fetchoptions);\n        continue;\n      }\n      break;\n    }\n\n    let jsonresponse: RPCResponse;\n    try {\n      jsonresponse = parseTyped(await response.text());\n      if (jsonresponse.consoleLog) {\n        for (const logitem of jsonresponse.consoleLog) {\n          //should we log 'when'? it's getting more and more noisy then though....\n          //TODO should we match the remote's method (after validating) or just keep everything at 'log' ?\n          console.log(`[remote:${logitem.method}] ${logitem.location ? `${logitem.location.filename.split(\"/\").at(-1)}:${logitem.location.line}: ` : ''}${logitem.data}`);\n        }\n      }\n\n      if (this.client.debug)\n        console.log(`[rpc] Received response to '${method}'`, omit(jsonresponse, [\"consoleLog\", \"trace\"]));\n    } catch (exception) {\n      if (this.client.debug)\n        console.warn(`[rpc] Response was not valid JSON`, exception);\n      throw new Error(\"RPC Failed: Invalid response received\", { cause: exception });\n    }\n\n    if (\"error\" in jsonresponse) {\n      const err = new Error(`RPC Error: ${jsonresponse.error}`);\n      if (jsonresponse.trace) {\n        try {\n          prependStackTrace(err, jsonresponse.trace);\n        } catch (err2) {\n          //ignore stacktrace manipulation error\n        }\n      }\n\n      if (this.options.debug) {\n        console.group();\n        console.warn(\"RPC failed:\", err);\n        if (requestStack) {\n          console.warn(\"Stack at calling point\");\n          console.log(requestStack);\n        }\n        console.groupEnd();\n      }\n\n      throw err;\n    }\n\n    return jsonresponse.result;\n  }\n}\n\nclass RPCClient {\n  readonly url: string;\n  options: RPCClientOptions;\n\n  constructor(url: string, options?: RPCClientOptions) {\n    this.url = url;\n    this.options = {\n      timeout: 0,\n      debug: false,\n      ...options\n    };\n  }\n\n  get debug() {\n    return this.options.debug || debugFlags.rpc;\n  }\n\n  _tryLogError(requestStack: StackTrace | null, error: Error) {\n  }\n\n  invoke(method: string, params: unknown[]) {\n    //build the URL, add profiling and function parameters where needed\n    //We'll delay the baseurl calculation until the first call to allow for the backendBase to be set up\n    const callurl = isAbsolute(this.url) ? new URL(this.url + method) : new URL(this.url + method, this.options.baseUrl || getBaseURL());\n\n    let requestStack: StackTrace | null = null;\n\n    const fetchoptions: RequestInit & { headers: Headers } = {\n      method: \"POST\",\n      headers: new Headers({\n        \"Accept\": \"application/json\",\n        \"Content-Type\": \"application/json; charset=utf-8\",\n        ...this.options.headers\n      }),\n      body: stringify(params, { typed: true }),\n    };\n\n    if (typeof location !== \"undefined\")\n      callurl.searchParams.set(\"pathname\", location.pathname);\n\n    if (this.debug) {\n      requestStack = parseTrace(new Error);\n      console.log(`[rpc] Invoking '${method}'`, params);\n    }\n\n    this.options.onBeforeRequest?.(callurl, fetchoptions);\n    return new ControlledCall(this, method, requestStack, this.options, callurl, fetchoptions).promise;\n  }\n}\n\ntype ServiceBase<T> = {\n  withOptions(options: RPCClientOptions): T & ServiceBase<T>;\n};\n\nclass ServiceProxy<Service extends keyof KnownRPCServices | object> {\n  client: RPCClient;\n\n  constructor(client: RPCClient) {\n    this.client = client;\n  }\n\n  get(target: object, prop: string, receiver: unknown) {\n    if ([\"then\", \"catch\", \"finally\"].includes(prop)) //do not appear like our object is a promise\n      return undefined;\n\n    if (prop === 'withOptions') { //create a withOptions function\n      return (options: RPCClientOptions) => {\n        const newoptions = {\n          ...this.client.options,\n          ...options,\n          headers: { ...this.client.options.headers, ...options.headers }\n        };\n        return rpc(this.client.url as (Service extends keyof KnownRPCServices ? Service : string), newoptions);\n      };\n    }\n\n    return (...args: unknown[]) => this.client.invoke(prop, args);\n  }\n}\n\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- need any to not worry about the actual first arg\ntype OmitFirstArg<F> = F extends (x: any, ...args: infer P) => infer R ? (...args: P) => R : never;\n\nexport type OmitRPCContextArgs<ServiceType> = {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- need any to not worry about the actual first arg\n  [K in keyof ServiceType as ServiceType[K] extends (...a: any) => any ? K : never]: ServiceType[K] extends (...a: any[]) => void ? OmitFirstArg<ServiceType[K]> : never;\n};\n\n/** Creates an async version of the functions in a class, removes context parameters\n * @typeParam ServiceType - Type definition of the service class that implements this service.\n*/\ntype ConvertToRPCInterface<ServiceType> = {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- using any is needed for this type definition\n  [K in keyof ServiceType as ServiceType[K] extends (...a: any) => any ? K : never]: ServiceType[K] extends (...a: any[]) => void ? PromisifyFunctionReturnType<ServiceType[K]> : never;\n};\n\ntype ExtractInterface<Service extends object> = ConvertToRPCInterface<Service> & ServiceBase<ConvertToRPCInterface<Service>>;\n\n/** Get the client interface type as would be returned by createClient\n * @typeParam Service - either the `module:service` name or the interface to implement. If you want to pass the implementation's type you should wrap it into `OmitRPCContextArgs`.\n*/\nexport type GetRPCClientInterface<Service extends (keyof KnownRPCServices) | object> = Service extends keyof KnownRPCServices ? ExtractInterface<OmitRPCContextArgs<KnownRPCServices[Service]>> : Service extends object ? ExtractInterface<Service> : never;\n\n/** Create a WebHare RPC client\n  @param service - URL (https://<ORIGIN>/.wh/rpc/module/service/) or service name (module:service) to invoke\n*/\nexport function rpc<Service extends keyof KnownRPCServices>(service: Service extends keyof KnownRPCServices ? Service : string, options?: RPCClientOptions): GetRPCClientInterface<Service>;\nexport function rpc<Service extends object>(service: Service extends keyof KnownRPCServices ? Service : string, options?: RPCClientOptions): GetRPCClientInterface<Service>;\n\nexport function rpc<Service extends keyof KnownRPCServices | object>(service: Service extends keyof KnownRPCServices ? Service : string, options?: RPCClientOptions): GetRPCClientInterface<Service> {\n  //NOTE: needed the separate overloads to get Intellisense to list the known services for createRPClient's first argument\n\n  if (!service)\n    throw new Error(`You must specify either a WebHare rpcService name or a full URL`);\n\n  const servicematch = service.match(/^([a-z0-9_]+):([a-z0-9_]+)$/);\n  if (servicematch)\n    service = `/.wh/rpc/${servicematch[1]}/${servicematch[2]}/` as (Service extends keyof KnownRPCServices ? Service : string);\n  else if (!service.endsWith('/'))\n    throw new Error(`Service URL must end in a slash`);\n\n  const rpcclient = new RPCClient(service, options);\n  return new Proxy({}, new ServiceProxy<GetRPCClientInterface<Service>>(rpcclient)) as GetRPCClientInterface<Service>;\n}\n","import type { NavigateInstruction } from \"@webhare/env\";\n\n/** Login failure reasons that can also be used by custom isLoginDenied checks */\nexport type LoginErrorCode = \"internal-error\" | \"incorrect-login-password\" | \"incorrect-email-password\" | \"account-disabled\" | \"unknown-account\" | \"require-external-login\";\n\n/** Login reasons that require further client side work but are not errors per-se */\nexport type LoginIncompleteCode = \"totp\" | \"incomplete-account\";\n\nexport type LoginTweaks = {\n  /** Limit session duration (development servers only) */\n  limitExpiry?: number;\n  /** Language code */\n  lang?: string;\n};\n\nexport type LoginResult = {\n  loggedIn: boolean;\n  navigateTo: NavigateInstruction;\n} | {\n  loggedIn: false;\n  code: LoginErrorCode;\n  error?: string;\n};\n\nexport type LogoutResult = { success: true } | {\n  error: string;\n  code: LoginErrorCode | LoginIncompleteCode;\n};\n\nexport const PublicCookieSuffix = \"_publicauthdata\";\n\n/* APIs and types shared between the client and server */\nexport function getCompleteAccountNavigation(token: string, pathname: string): NavigateInstruction {\n  return {\n    type: \"redirect\", //TODO or use a \"form\" too? went for a session now as an excursion to followup GET pages is much more likely in this procedure than with totp\n    url: \"/.wh/common/authpages/?wrd_pwdaction=completeaccount&token=\" + encodeURIComponent(token || '') + \"&pathname=\" + encodeURIComponent(pathname)\n  };\n}\n","import { createClient } from \"@webhare/jsonrpc-client\";\nimport { type NavigateInstruction, navigateTo } from \"@webhare/env\";\nimport * as dompack from '@webhare/dompack';\nimport type { LoginOptions } from \"@webhare/auth/src/identity\";\nimport { rpc } from \"@webhare/rpc\";\n\n//NOTE: Do *NOT* load @webhare/frontend or we enforce the new CSS reset!\nimport { getFrontendData } from '@webhare/frontend/src/init';\nimport { PublicCookieSuffix, type LoginErrorCode, type LoginResult, type LoginTweaks } from \"@webhare/auth/src/shared\";\nimport { parseTyped, toSnakeCase, type ToSnakeCase } from \"@webhare/std\";\nimport type WRDAuthenticationProvider from \"@mod-wrd/js/auth\";\nimport type { OAuth2PromptFlag } from \"@webhare/auth/src/oauth2-client\";\n\n/** WRDAuth configuration */\nexport interface WRDAuthOptions {\n  /** Callback that is invoked after a succesful login. If not set the page will be reloaded. */\n  onLogin?: () => Promise<void> | void;\n}\n\nexport interface PublicAuthData {\n  expiresMs: number;\n  userInfo?: object | null;\n  persistent?: boolean;\n}\n\ndeclare module \"@webhare/frontend\" {\n  interface FrontendDataTypes {\n    \"wrd:auth\": {\n      /** WRDAuth cookiename (used to store userinfo and expiry) */\n      cookiename: string;\n    };\n  }\n}\n\ndeclare global {\n  interface Window {\n    $wh$legacyAuthProvider: WRDAuthenticationProvider;\n    triggerWebHareSSO?: (tag: string, options?: SSOLoginOptions) => Promise<void>;\n  }\n}\n\n/** Current authoptions. undefined if setupWRDAuth hasn't been invoked yet */\nlet authOptions: WRDAuthOptions | undefined;\n\n/** Get current login cookie. If empty, wrdauth is not initialized here */\nfunction getCookieName(): string | null {\n  const settings = getFrontendData(\"wrd:auth\", { allowMissing: true });\n  return settings?.cookiename || null;\n}\n\nfunction getAuthLocalData(): PublicAuthData | null {\n  const c = getCookieName();\n  if (!c)\n    return null;\n\n  try {\n    return parseTyped(dompack.getCookie(c + PublicCookieSuffix)!) as PublicAuthData;\n  } catch {\n    return null;\n  }\n}\n\nasync function submitLoginForm(node: HTMLFormElement, event: SubmitEvent) {\n  if (node.propWhFormhandler)\n    return; //already handled by publisher forms so we'll defer to that\n  dompack.stop(event);\n\n  const username = (node.elements.namedItem(\"login\") as HTMLInputElement)?.value;\n  const password = (node.elements.namedItem(\"password\") as HTMLInputElement)?.value;\n  const site = (node.elements.namedItem(\"site\") as HTMLInputElement)?.value || undefined;\n  const returnto = (node.elements.namedItem(\"returnto\") as HTMLInputElement)?.value || undefined;\n  const persistentlogin = (node.elements.namedItem(\"persistent\") as HTMLInputElement)?.checked;\n  if (!login || !password)\n    throw new Error(`submitLoginForm: required elements login/password not set or missing`);\n\n  using lock = dompack.flagUIBusy({ modal: true });\n  void (lock);\n\n  const loginresult = await login(username, password, {\n    persistent: persistentlogin,\n    site,\n    returnTo: returnto ? new URL(returnto, location.href).toString() : location.href.split('#')[0]\n  });\n  if (loginresult.loggedIn) {\n    refreshLoginStatus();\n    if (loginresult.navigateTo.type === \"redirect\" && loginresult.navigateTo.url.split('#')[0] === location.href.split('#')[0]  //stay on same page\n      && authOptions?.onLogin) {\n\n      if (loginresult.navigateTo.url.includes('#')) //execute any #hash instruction\n        history.replaceState(null, \"\", loginresult.navigateTo.url.substring(loginresult.navigateTo.url.indexOf('#')));\n\n      await authOptions.onLogin();\n    } else {\n      //Reload the page to get the new login status - TODO put this behind a 'login state change' event and allow users to cancel it if they can deal with login/logout on-page\n      console.log(\"Post login redirect\", loginresult.navigateTo);\n      navigateTo(loginresult.navigateTo);\n    }\n  } else if (\"navigateTo\" in loginresult) {\n    console.log(\"Login incomplete, redirecting to\", loginresult.navigateTo);\n    navigateTo(loginresult.navigateTo);\n  } else\n    failLogin(loginresult.error ?? loginresult.code, { code: loginresult.code, data: \"\" }, node); //FIXME restore the code & data members from old wrdauth\n}\n\nfunction refreshLoginStatus() {\n  const loggedIn = isLoggedIn();\n  document.documentElement.classList.toggle(\"wh-wrdauth--isloggedin\", loggedIn);\n\n  window.$wh$legacyAuthProvider?.refresh();\n}\n\n/** Return whether a user's currently logged in */\nexport function isLoggedIn(): boolean {\n  return (getAuthLocalData()?.expiresMs || 0) > Date.now();\n}\n\n/** Setup WRDAuth frontend integration */\nexport function setupWRDAuth(options?: WRDAuthOptions) {\n  if (authOptions)\n    throw new Error(`Duplicate setupWRDAuth call`);\n\n  authOptions = { ...options };\n\n  dompack.register<HTMLFormElement>('form.wh-wrdauth__loginform,form.wh-wrdauth-login__form', node => {\n    node.setAttribute(\"data-wh-wrdauth-attached\", \"\");\n    dompack.addDocEventListener(node, \"submit\", evt => submitLoginForm(node, evt));\n  });\n  dompack.register('.wh-wrdauth__logout', node => {\n    function handleLogoutClick(event: Event) {\n      dompack.stop(event);\n\n      //letting rejections escape - our trigger is generally setup in HTML so there's nothing to catch but uncaught rejection handlers anyway\n      if (node instanceof HTMLAnchorElement && node.href && node.href.split('#')[0] !== location.href.split('#')[0]) { //logout link sending you elsewhere\n        void doLogout().then(() => {\n          console.log(\"Logout complete, redirecting to\", node.href);\n          navigateTo({ type: \"redirect\", url: node.href });\n        });\n      } else {\n        void logout(); //TODO what if the logout only changed the anchor? but what's the usecase for that?\n      }\n    }\n\n    dompack.addDocEventListener(node, \"click\", event => handleLogoutClick(event));\n  });\n\n  dompack.onDomReady(() => {\n    if (\"$wh$wrdauth\" in window) {\n      console.error(\"Both setupWRDAuth from @webhare/frontend and @mod-wrd/js/auth are present in this page. Mixing these is not supported!\");\n    }\n  });\n\n  refreshLoginStatus();\n}\n\nfunction failLogin(message: string, response: { code: LoginErrorCode; data: string }, form: HTMLFormElement) {\n  const evtdetail = {\n    message: message,\n    code: response.code,\n    data: response.data\n  };\n\n  const cancelled = !dompack.dispatchCustomEvent(form || document.documentElement, \"wh:wrdauth-loginfailed\", { bubbles: true, cancelable: true, detail: evtdetail });\n  if (!cancelled) {\n    //TODO depending on error we may need to change a different field?\n    const loginfield = dompack.qR<HTMLInputElement>(form, \"input[name=password]\");\n    loginfield.setCustomValidity(message);\n    // loginfield.reportValidity(); //this actually blocks wh-form error handling from showing the error in-page when so desired\n    loginfield.focus();\n  }\n}\n\n/** Retrieve userinfo if set by onFrontendUserInfo in your WRDAuth customizer */\nexport function getUserInfo<T extends object = object>(): T | null {\n  return isLoggedIn() ? getAuthLocalData()?.userInfo as T | null : null;\n}\n\nfunction getLoginTweaks(): LoginTweaks {\n  const tweaks: LoginTweaks = {\n    lang: dompack.getLang().tag\n  };\n\n  const urlvars = new URL(location.href);\n  if (urlvars.searchParams.has(\"wrdauth_limit_expiry\"))\n    tweaks.limitExpiry = parseInt(urlvars.searchParams.get(\"wrdauth_limit_expiry\") || '0') || undefined;\n\n  return tweaks;\n}\n\n/** Implements the common username/password flows */\nexport async function login(username: string, password: string, options: LoginOptions = {}): Promise<LoginResult> {\n  const cookieName = getCookieName();\n  if (!cookieName)\n    throw new Error(\"WRDAuth not initialized, please call setupWRDAuth first and ensure this page has a <wrdauth> rule\");\n\n  const result = await rpc(\"platform:authservice\").login(username, password, cookieName, dompack.getBrowser().triplet, { ...options, ...getLoginTweaks() });\n  if (result.loggedIn && !getAuthLocalData())\n    throw new Error(\"Login succeeded but no auth data was set in the cookie\");\n\n  return result;\n}\n\n/** Execute and verify cookie clearance to prepare for logging out */\nasync function doLogout() {\n  const cookieName = getCookieName();\n  if (!cookieName)\n    throw new Error(\"WRDAuth not initialized, please call setupWRDAuth first and ensure this page has a <wrdauth> rule\");\n\n  await rpc(\"platform:authservice\").logout(cookieName, dompack.getBrowser().triplet);\n\n  if (getAuthLocalData())\n    throw new Error(\"Logged out but we still have auth data in the cookie\");\n}\n\n/** Logout the current user */\nexport async function logout() {\n  await doLogout();\n  console.log(\"Reloading to process the new logged out status\");\n  navigateTo({ type: \"reload\" }); //TODO put this behind a 'login state change' event\n}\n\nexport interface MyService {\n  startLogin2(urlpath: string, tag: string, options: ToSnakeCase<SSOLoginOptions>): Promise<NavigateInstruction>;\n}\n\ninterface SSOLoginOptions {\n  /** @deprecated use prompt: \"none\" from WH6.0 up */\n  passive?: boolean;\n  /** Set the prompt flag for the authorize request */\n  prompt?: OAuth2PromptFlag;\n}\n\nexport function startSSOLogin(tag: string, options?: SSOLoginOptions): Promise<void> {\n  const client = createClient<MyService>(\"wrd:auth\");\n\n  if (options?.passive)\n    options = { prompt: \"none\", ...options, passive: undefined }; //force prompt to none in passive mode, and remove the passive flag since it doesn't mean anything to the server\n\n  const defer = Promise.withResolvers<void>();\n\n  //Launch SSO login for the current page.\n  //TODO also pass getLoginTweaks() at least to OIDC logins as soon as we've ported this to authservice\n  client.startLogin2(location.pathname + location.search + location.hash, tag, toSnakeCase(options) || {}).then(instr => {\n    //we leave the promise unresolved so any busy layers stay active during the actual redirect\n    //TODO can we have navigateTo detect failed navigations so we can throw ?\n    navigateTo(instr);\n  }).catch((e: Error) => {\n    defer.reject(e);\n  });\n\n  return defer.promise;\n}\n\n/** Configure WebHare external auth buttons (even hidden ones) to listen for bookmarklet login requests */\nexport function setupWebHareSSOTrigger(): void {\n  window.triggerWebHareSSO = startSSOLogin;\n}\n","import { qSA } from \"@webhare/dompack\";\nimport { debugFlags } from \"@webhare/env\";\nimport type { FormAnalyticsEvent } from \"@webhare/forms\";\nimport type { DataLayerEntry } from \"./gtm-types\";\nimport { omit } from \"@webhare/std\";\n\ndeclare global {\n  interface Window {\n    /** The google tag manager (GTM) datalayer */\n    dataLayer: DataLayerEntry[]; //technically window.dataLayer may not exist and should be optional, but we already used to declare it as existing from gtm.ts\n  }\n  //It's safer to access dataLayer through globalThis, which will always be available in all environments unlike 'window'\n  var dataLayer: DataLayerEntry[] | undefined;\n}\n\n//ADDME if we ever figure out a bundler trick to flush this command to the top of all imports/loads, that would be great (we could consider *ALWAYS* putting this in the generated startup code, or we'd need to do a tree pre-walk to see if gtm.es is loaded anywhere)\n(globalThis as unknown as Window).dataLayer ||= [];\nlet lastSeen: DataLayerEntry | undefined;\n\nfunction showDataLayerUpdates() {\n  if (!globalThis.dataLayer)\n    return; //not set up (yet?)\n\n  if (debugFlags.anl)\n    globalThis.dataLayer.slice(globalThis.dataLayer.indexOf(lastSeen!) + 1).forEach(entry => console.log(\"[anl] dataLayer.push:\", entry));\n\n  lastSeen = globalThis.dataLayer[globalThis.dataLayer.length - 1];\n}\n\n/** Push to the dataLayer\n * @param vars - The variables to push\n * @param options - Options for the push\n *   timeout Time before any eventCallback is forcibly called (default 200ms)\n*/\nexport function pushToDataLayer(vars: DataLayerEntry, options?: { timeout?: number }) {\n  if (vars.eventCallback) { //we'll wrap the callback into a promise to ensure it's only invoked once\n    const savecallback = vars.eventCallback;\n    let newcallback: () => void;\n    void (new Promise<void>(resolve => newcallback = resolve)).then(() => savecallback());\n    setTimeout(() => newcallback, options?.timeout || 200);\n  }\n\n  globalThis.dataLayer?.push(vars);\n  showDataLayerUpdates();\n}\n\nfunction collectFormValues(formnode: HTMLFormElement): Record<string, unknown> {\n  const donefields: Record<string, boolean> = {};\n  const outdata: Record<string, unknown> = {};\n\n  const multifields = qSA<HTMLInputElement>(formnode, 'input[type=radio], input[type=checkbox]');\n  for (const multifield of multifields) {\n    if (!multifield.name || donefields[multifield.name])\n      continue; //we did this one\n\n    donefields[multifield.name] = true;\n\n    let idx = 0;\n    const values = [];\n    const labels = [];\n    const checkboxes = multifields.filter(node => node.name === multifield.name);\n\n    for (const node of checkboxes.filter(cbox => cbox.checked)) {\n      const keyname = 'form_' + multifield.name + (idx ? '_' + idx : '');\n      let labelsfornode = node.dataset.gtmTag || qSA(`label[for=\"${CSS.escape(node.id)}\"]`).map(labelnode => labelnode.textContent).filter(labelnode => Boolean(labelnode)).join(' ');\n      labelsfornode = labelsfornode.trim(); //TODO normalize whitespace\n      outdata[keyname] = node.value;\n      outdata[keyname + '_label'] = labelsfornode;\n\n      ++idx;\n      values.push(node.value);\n      labels.push(labelsfornode);\n    }\n\n    if (values.length) {\n      const allkeyname = 'form_' + multifield.name + '_all';\n      outdata[allkeyname] = values.join(';');\n      outdata[allkeyname + '_label'] = labels.join(';');\n    }\n  }\n\n  for (const field of formnode.querySelectorAll<HTMLSelectElement | HTMLInputElement>('input:not([type=radio]):not([type=checkbox]),select,textarea')) {\n    if (!field.name || donefields[field.name])\n      continue;\n\n    donefields[field.name] = true;\n\n    const val = field.value;\n    outdata['form_' + field.name] = val;\n    if (field.matches('select')) {\n      const opt = (field as HTMLSelectElement).options[(field as HTMLSelectElement).selectedIndex];\n      if (opt)\n        outdata['form_' + field.name + '_label'] = opt.dataset.gtmTag || opt.textContent;\n    }\n  }\n  return outdata;\n}\n\n/** Setup the dataLayer */\nlet didinit: boolean | undefined;\nexport function setupGTM() {\n  if (!didinit) {\n    didinit = true;\n    if (debugFlags.anl)\n      setInterval(showDataLayerUpdates, 100);\n  }\n}\n\n/** Setup dataLayer events for form analytics events\n * @param options - Options for the form analytics setup\n     - `eventPrefix`. Prefix to use. Default is `wh-platform:form_` but existing integrations may (also) require `publisher:form`\n*/\nexport function setupFormAnalyticsForGTM(options?: { eventPrefix: string }): void {\n  setupGTM(); //ensurse the GTM basics are installed\n\n  addEventListener(\"wh:form-analytics\", (e: FormAnalyticsEvent) => {\n    //we use the same prefixing as pxl events would\n    const entry: DataLayerEntry = {\n      event: `${options?.eventPrefix || \"platform:form_\"}${e.detail.event}`\n    };\n\n    for (const [key, val] of Object.entries(e.detail))\n      if (key !== \"event\" && [\"string\", \"number\", \"boolean\"].includes(typeof val))\n        entry[`formmeta_${key}`] = val;\n\n    const form = e.target as HTMLFormElement | undefined;\n    if (form?.dataset.gtmSubmit) {\n      //When set, we push both the form: variable in gtmSubmit and the current form field avlues\n      Object.assign(entry, JSON.parse(form.dataset.gtmSubmit));\n      Object.assign(entry, collectFormValues(form));\n    }\n\n    pushToDataLayer(entry);\n  });\n}\n\nfunction processClickDataLayerTags(event: MouseEvent) {\n  const entry: Record<string, unknown> = {};\n\n  for (let node = event.target as HTMLElement | undefined | null; node; node = node?.parentElement)\n    for (const attr of node.attributes)\n      if (attr.nodeName.startsWith(\"data-wh-datalayer-onclick-\")) {\n        const key = attr.nodeName.substring(26);\n        if (key !== \"__proto__\" && !(key in entry)) //as we're working upwards, don't overwrite already set keys\n          entry[key] = attr.nodeValue || \"\";\n      } else if (attr.nodeName === \"data-wh-datalayer-onclick\") { //JSON setter\n        const data = JSON.parse(attr.nodeValue!);\n        for (const [key, value] of Object.entries(data))\n          if (key !== \"__proto__\" && !(key in entry)) //as we're working upwards, don't overwrite already set keys\n            entry[key] = value;\n      }\n\n  if (Object.keys(entry).length)\n    pushToDataLayer(entry as DataLayerEntry);\n}\n\n/** Setup support for data-wh-datalayer-onclick-xxx=\"yyy\" attributes. When clicking an element with these attributes the JSON from the attribute and all parents are merged together and pushed to the dataLayer  */\nexport function setupDataLayerTags() {\n  //we capture so we can also simply set variables for any existing GTM handlers\n  window.addEventListener(\"click\", processClickDataLayerTags, { capture: true });\n}\n\n/** Get the current variables in the GTM datalayer\n * @param win - The window to get the dataLayer from (default: current window)\n * @return The current variables in the GTM datalayer, merged together from all entries. Note that this is a snapshot and won't update as the dataLayer changes\n*/\nexport function getCurrentDataLayerVariables<DataLayerFormat extends object = Record<string, unknown>>(win: Window = window): DataLayerFormat {\n  const state: DataLayerFormat = {} as DataLayerFormat;\n  if (win.dataLayer)\n    win.dataLayer.forEach(entry =>\n      Object.assign(state, structuredClone(omit(entry, [\"event\", \"eventCallback\", \"gtm.uniqueEventId\"]))));\n  return state;\n}\n","/* To verify tree shaking viability, try:\n   whcd\n   cd whtree\n   echo 'import \"@webhare/frontend\"' | node_modules/.bin/esbuild --loader:.css=empty --tsconfig=tsconfig.json --bundle --minify\n*/\n\n// This gets TypeScript to refer to us by our @webhare/... name in auto imports:\ndeclare module \"@webhare/frontend\" {\n}\n\nimport { onDomReady } from \"@webhare/dompack\";\nexport { frontendConfig, getFrontendData, getSiteRoot } from \"./init\";\nexport { startSSOLogin, login, setupWRDAuth, isLoggedIn, logout, getUserInfo, setupWebHareSSOTrigger } from \"./auth\";\nexport { loadAssetPack, setupAuthorMode, type AuthorModeOptions } from \"./authormode\";\nexport { setPxlOptions, sendPxl, getPxlUserId, getPxlSessionId, setupFormAnalytics, type PxlData } from \"./pxl\";\nexport { getRemoteIPAddress, getGeoIPInfo, type GetIPInfoOptions, type GeoIPInfoResult } from \"./analytics\";\nexport { setupGTM, setupFormAnalyticsForGTM, pushToDataLayer, setupDataLayerTags, getCurrentDataLayerVariables } from \"./gtm\";\nexport { setupLinksInNewWindow, type LinkOpenOptions } from \"./linkhandler\";\n\nexport type * from \"./gtm-types\";\n\n// we shouldn't deprecate navigateTo exported from frontend. in fact it makes more sense to export it from frontend than env as it's browser-only\nexport { navigateTo } from \"@webhare/env\";\n\n/** Registry for data we receive from the backend */\nexport interface FrontendDataTypes {\n}\n\n/** Registry for expected PXL formats */\nexport interface PxlDataTypes {\n}\n\n/** Test whether the current page is being iframed in the WebHare test framework */\nexport function isInTestFramework(): boolean {\n  if (window.top !== window) { //in a frame\n    try {\n      if ((window.top as { __testframework?: unknown })?.__testframework)\n        return true;//we're inside a testframe, pretend to be the parent\n    } catch (ignore) {\n    }\n  }\n  return false;\n}\n\nfunction postRenderChecks() {\n  const log = document.getElementById(\"wh-console-log\");\n  if (log) {\n    const logtext = atob(log.textContent || \"\");\n    console.group(\"[etr] Server-side console output\");\n    console.log(logtext);\n    console.groupEnd();\n  }\n}\n\nonDomReady(postRenderChecks);\n","import { createRouter, createWebHashHistory, type RouteRecordRaw } from \"vue-router\";\nimport DashboardView from \"../views/DashboardView.vue\";\nimport ContractenView from \"../views/ContractenView.vue\";\nimport ConceptenView from \"../views/ConceptenView.vue\";\nimport KlantenView from \"../views/KlantenView.vue\";\nimport InstellingenView from \"../views/InstellingenView.vue\";\n\nconst routes: RouteRecordRaw[] = [\n  { path: \"/\", name: \"dashboard\", component: DashboardView },\n  { path: \"/contracten\", name: \"contracten\", component: ContractenView },\n  { path: \"/concepten\", name: \"concepten\", component: ConceptenView },\n  { path: \"/klanten\", name: \"klanten\", component: KlantenView },\n  { path: \"/instellingen\", name: \"instellingen\", component: InstellingenView },\n  { path: \"/:pathMatch(.*)*\", redirect: \"/\" },\n];\n\nexport const router = createRouter({\n  history: createWebHashHistory(),\n  routes,\n  scrollBehavior() {\n    return { top: 0 };\n  },\n});\n","<template>\n  <PageHeader title=\"Dashboard\" subtitle=\"Hoe staan we ervoor?\" />\n\n  <div class=\"dash\">\n    <div v-if=\"loading\" class=\"dash__loading\">Laden…</div>\n\n    <div v-else-if=\"!data || !data.hasData\" class=\"nd-empty\">\n      <p class=\"nd-empty__title\">Nog geen gegevens</p>\n      <p class=\"nd-empty__text\">Laad de demo-set om het dashboard, de contracten en de mailbox-simulatie te vullen.</p>\n      <button type=\"button\" class=\"nd-btn\" :disabled=\"loadingDemo\" @click=\"loadDemo\">\n        {{ loadingDemo ? \"Demo-data laden…\" : \"Demo-data laden\" }}\n      </button>\n    </div>\n\n    <template v-else>\n      <div class=\"dash__kpis\">\n        <div class=\"nd-stat\">\n          <div class=\"nd-stat__label\">Ontvangen tot nu</div>\n          <div class=\"nd-stat__value\">{{ formatEur(data.kpis.received) }}</div>\n        </div>\n        <div class=\"nd-stat\">\n          <div class=\"nd-stat__label\">Nog te ontvangen</div>\n          <div class=\"nd-stat__value\">{{ formatEur(data.kpis.expected) }}</div>\n        </div>\n        <div class=\"nd-stat\">\n          <div class=\"nd-stat__label\">Komende 3 maanden</div>\n          <div class=\"nd-stat__value\">{{ formatEur(data.kpis.next3Months) }}</div>\n        </div>\n        <div class=\"nd-stat\">\n          <div class=\"nd-stat__label\">Waarvan voor agents</div>\n          <div class=\"nd-stat__value\">{{ formatEur(data.kpis.agentExpected) }}</div>\n        </div>\n      </div>\n\n      <div class=\"dash__cards\">\n        <div class=\"nd-card\">\n          <h2 class=\"nd-card__title\">Verwachte betalingen per maand</h2>\n          <div class=\"nd-card__body dash__cardbody\">\n            <table v-if=\"data.months.length\" class=\"nd-table\">\n              <thead>\n                <tr>\n                  <th>Maand</th>\n                  <th class=\"is-num\">Totaal</th>\n                  <th class=\"is-num\">Agents</th>\n                  <th class=\"is-num\">Nudam</th>\n                </tr>\n              </thead>\n              <tbody>\n                <tr v-for=\"row in data.months\" :key=\"row.month\">\n                  <td class=\"dash__monthname\">{{ formatMonth(row.month) }}</td>\n                  <td class=\"is-num dash__strong\">{{ formatEur(row.total) }}</td>\n                  <td class=\"is-num\">{{ formatEur(row.agents) }}</td>\n                  <td class=\"is-num\">{{ formatEur(row.nudam) }}</td>\n                </tr>\n              </tbody>\n            </table>\n            <p v-else class=\"dash__none\">Geen verwachte betalingen.</p>\n          </div>\n        </div>\n\n        <div class=\"nd-card\">\n          <h2 class=\"nd-card__title\">Tegoed per accountmanager</h2>\n          <div class=\"nd-card__body dash__cardbody\">\n            <table v-if=\"data.agentBalances.length\" class=\"nd-table\">\n              <thead>\n                <tr>\n                  <th>Accountmanager</th>\n                  <th class=\"is-num\">Uitbetaald</th>\n                  <th class=\"is-num\">Nog tegoed</th>\n                </tr>\n              </thead>\n              <tbody>\n                <tr v-for=\"row in data.agentBalances\" :key=\"row.id\">\n                  <td>\n                    <span class=\"dash__agent\">\n                      <span class=\"nd-avatar\">{{ initials(row.name) }}</span>\n                      <span class=\"dash__agentname\">{{ row.name }}</span>\n                    </span>\n                  </td>\n                  <td class=\"is-num\">{{ formatEur(row.received) }}</td>\n                  <td class=\"is-num dash__strong\">{{ formatEur(row.expected) }}</td>\n                </tr>\n              </tbody>\n            </table>\n            <p v-else class=\"dash__none\">Nog geen agent-uitbetalingen.</p>\n          </div>\n        </div>\n      </div>\n    </template>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, ref } from \"vue\";\nimport PageHeader from \"../components/PageHeader.vue\";\nimport { api } from \"../lib/api\";\nimport { formatEur, formatMonth, initials } from \"../lib/format\";\nimport { showToast } from \"../lib/toast\";\nimport { refreshConceptCount } from \"../lib/state\";\n\ntype DashboardData = Awaited<ReturnType<typeof api.getDashboard>>;\n\nconst loading = ref(true);\nconst loadingDemo = ref(false);\nconst data = ref<DashboardData | null>(null);\n\nasync function load() {\n  loading.value = true;\n  try {\n    data.value = await api.getDashboard();\n  } catch (error) {\n    showToast(\"error\", error instanceof Error ? error.message : \"Dashboard laden mislukt.\");\n  } finally {\n    loading.value = false;\n  }\n}\n\nasync function loadDemo() {\n  loadingDemo.value = true;\n  try {\n    const result = await api.loadDemoDataIfEmpty();\n    showToast(\"success\", result.loaded ? \"Demo-data geladen.\" : \"Er staat al data in het systeem.\");\n    await load();\n    void refreshConceptCount();\n  } catch (error) {\n    showToast(\"error\", error instanceof Error ? error.message : \"Demo-data laden mislukt.\");\n  } finally {\n    loadingDemo.value = false;\n  }\n}\n\nonMounted(() => void load());\n</script>\n\n<style scoped>\n.dash {\n  flex: 1;\n  padding: 28px 32px;\n  display: flex;\n  flex-direction: column;\n  gap: 16px;\n}\n\n.dash__loading {\n  padding: 48px 0;\n  text-align: center;\n  color: var(--nd-color-muted);\n}\n\n.dash__kpis {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));\n  gap: 16px;\n}\n\n.dash__cards {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 16px;\n  align-items: start;\n}\n\n@media (max-width: 1100px) {\n  .dash__cards {\n    grid-template-columns: 1fr;\n  }\n}\n\n.dash__cardbody {\n  padding-top: 12px;\n}\n\n.dash__monthname {\n  font-weight: 700;\n}\n\n.dash__strong {\n  font-weight: 700;\n}\n\n.dash__none {\n  margin: 0;\n  padding: 8px 0;\n  font-size: 13px;\n  color: var(--nd-color-muted);\n}\n\n.dash__agent {\n  display: inline-flex;\n  align-items: center;\n  gap: 10px;\n}\n\n.dash__agentname {\n  font-weight: 700;\n}\n</style>\n","import { defineComponent as _defineComponent } from 'vue'\n\nexport default /*@__PURE__*/_defineComponent({\n  __name: 'PageHeader',\n  props: {\n    title: { type: String, required: true },\n    subtitle: { type: String, required: false }\n  },\n  setup(__props: any, { expose: __expose }) {\n  __expose();\n\n\n\nconst __returned__ = {  }\nObject.defineProperty(__returned__, '__isScriptSetup', { enumerable: false, value: true })\nreturn __returned__\n}\n\n})\n\n//@ sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL29wdC93aGRhdGEvaW5zdGFsbGVkbW9kdWxlcy9udWRhbS4yMDI2MDcwN1QxNjQwMDQuOTM1Wi93ZWJkZXNpZ25zL2JlaGVlci9mcm9udGVuZC9jb21wb25lbnRzL1BhZ2VIZWFkZXIudnVlIl0sInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cbiAgPGhlYWRlciBjbGFzcz1cInBhZ2VoZWFkXCI+XG4gICAgPGRpdiBjbGFzcz1cInBhZ2VoZWFkX190ZXh0XCI+XG4gICAgICA8aDEgY2xhc3M9XCJwYWdlaGVhZF9fdGl0bGVcIj57eyB0aXRsZSB9fTwvaDE+XG4gICAgICA8cCB2LWlmPVwic3VidGl0bGVcIiBjbGFzcz1cInBhZ2VoZWFkX19zdWJ0aXRsZVwiPnt7IHN1YnRpdGxlIH19PC9wPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJwYWdlaGVhZF9fYWN0aW9uc1wiPlxuICAgICAgPHNsb3QgLz5cbiAgICA8L2Rpdj5cbiAgPC9oZWFkZXI+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxuZGVmaW5lUHJvcHM8e1xuICB0aXRsZTogc3RyaW5nO1xuICBzdWJ0aXRsZT86IHN0cmluZztcbn0+KCk7XG48L3NjcmlwdD5cblxuPHN0eWxlIHNjb3BlZD5cbi5wYWdlaGVhZCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgZ2FwOiAxNnB4O1xuICBwYWRkaW5nOiAxNnB4IDMycHg7XG4gIGJhY2tncm91bmQ6IHZhcigtLW5kLWNvbG9yLXN1cmZhY2UpO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbmQtY29sb3ItYm9yZGVyKTtcbiAgcG9zaXRpb246IHN0aWNreTtcbiAgdG9wOiAwO1xuICB6LWluZGV4OiAxMDtcbn1cblxuLnBhZ2VoZWFkX190aXRsZSB7XG4gIG1hcmdpbjogMDtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBmb250LXdlaWdodDogODAwO1xuICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbn1cblxuLnBhZ2VoZWFkX19zdWJ0aXRsZSB7XG4gIG1hcmdpbjogMnB4IDAgMCAwO1xuICBmb250LXNpemU6IDEzcHg7XG4gIGNvbG9yOiB2YXIoLS1uZC1jb2xvci1tdXRlZCk7XG59XG5cbi5wYWdlaGVhZF9fYWN0aW9ucyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMTBweDtcbn1cbjwvc3R5bGU+XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OyJ9","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot } from \"vue\"\n\nconst _hoisted_1 = { class: \"pagehead\" }\nconst _hoisted_2 = { class: \"pagehead__text\" }\nconst _hoisted_3 = { class: \"pagehead__title\" }\nconst _hoisted_4 = {\n  key: 0,\n  class: \"pagehead__subtitle\"\n}\nconst _hoisted_5 = { class: \"pagehead__actions\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"header\", _hoisted_1, [\n    _createElementVNode(\"div\", _hoisted_2, [\n      _createElementVNode(\"h1\", _hoisted_3, _toDisplayString($props.title), 1 /* TEXT */),\n      ($props.subtitle)\n        ? (_openBlock(), _createElementBlock(\"p\", _hoisted_4, _toDisplayString($props.subtitle), 1 /* TEXT */))\n        : _createCommentVNode(\"v-if\", true)\n    ]),\n    _createElementVNode(\"div\", _hoisted_5, [\n      _renderSlot(_ctx.$slots, \"default\", {}, undefined, true)\n    ])\n  ]))\n}","import script from \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/PageHeader.vue?type=script\";import \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/PageHeader.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/PageHeader.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/PageHeader.vue\";script.__scopeId = \"data-v-51ec240b\";export default script;","import { rpc as createRpcClient, type OmitRPCContextArgs } from \"@webhare/rpc\";\n// Type-only import: wordt door esbuild weggegumd, dus het @mod-alias is hier veilig\nimport type { PublicRPC } from \"@mod-nudam/js/public-rpc\";\n\nexport type { ClientInput, ContractDetails, ContractInput, ContractRow, OptionItem, SupplierRow } from \"@mod-nudam/js/public-rpc\";\n\nexport const api = createRpcClient<OmitRPCContextArgs<typeof PublicRPC>>(\"nudam:public\", {\n  baseUrl: location.origin,\n});\n","/* Pure formatters (nl-NL) - geen @webhare-imports, dus unit-testbaar */\n\nconst eurFormat = new Intl.NumberFormat(\"nl-NL\", { style: \"currency\", currency: \"EUR\" });\nconst numFormat = new Intl.NumberFormat(\"nl-NL\");\n\nexport function formatEur(value: number): string {\n  return eurFormat.format(value);\n}\n\nexport function formatNumber(value: number): string {\n  return numFormat.format(value);\n}\n\n/** \"2026-06-15\" -> \"15-06-2026\" */\nexport function formatDate(iso: string): string {\n  const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(iso);\n  if (!match)\n    return iso || \"\\u2014\";\n  return `${match[3]}-${match[2]}-${match[1]}`;\n}\n\nconst MONTH_NAMES = [\"januari\", \"februari\", \"maart\", \"april\", \"mei\", \"juni\",\n  \"juli\", \"augustus\", \"september\", \"oktober\", \"november\", \"december\"];\n\n/** \"2026-08\" -> \"Augustus 2026\" */\nexport function formatMonth(yearMonth: string): string {\n  const match = /^(\\d{4})-(\\d{2})$/.exec(yearMonth);\n  if (!match)\n    return yearMonth;\n  const name = MONTH_NAMES[Number(match[2]) - 1] ?? yearMonth;\n  return `${name.charAt(0).toUpperCase()}${name.slice(1)} ${match[1]}`;\n}\n\n/** Date -> \"15-06-2026\" (voor betaalschema's die client-side berekend worden) */\nexport function formatDateObj(date: Date): string {\n  const pad = (n: number) => String(n).padStart(2, \"0\");\n  return `${pad(date.getDate())}-${pad(date.getMonth() + 1)}-${date.getFullYear()}`;\n}\n\n/** \"Mylan Damhuis\" -> \"MD\" */\nexport function initials(name: string): string {\n  return name\n    .split(/\\s+/)\n    .filter(Boolean)\n    .map(part => part[0]?.toUpperCase() ?? \"\")\n    .slice(0, 2)\n    .join(\"\") || \"?\";\n}\n","import { readonly, ref } from \"vue\";\n\nexport interface ToastItem {\n  id: number;\n  severity: \"success\" | \"error\" | \"info\";\n  text: string;\n}\n\nconst items = ref<ToastItem[]>([]);\nlet nextId = 1;\n\nexport const toasts = readonly(items);\n\nexport function showToast(severity: ToastItem[\"severity\"], text: string, timeoutMs = 4000): void {\n  const id = nextId++;\n  items.value = [...items.value, { id, severity, text }];\n  window.setTimeout(() => dismissToast(id), timeoutMs);\n}\n\nexport function dismissToast(id: number): void {\n  items.value = items.value.filter(item => item.id !== id);\n}\n","import { ref } from \"vue\";\nimport { api } from \"./api\";\n\n/** Aantal openstaande concepten, getoond als badge in de zijbalk.\n    Views die concepten wijzigen (goedkeuren, mailbox lezen, verwijderen)\n    roepen refreshConceptCount() aan. */\nexport const conceptCount = ref(0);\n\nexport async function refreshConceptCount(): Promise<void> {\n  try {\n    const result = await api.listContracts({ concepts: true });\n    conceptCount.value = result.contracts.length;\n  } catch {\n    // badge is niet-kritisch; stil laten\n  }\n}\n","import { createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = { class: \"dash\" }\nconst _hoisted_2 = {\n  key: 0,\n  class: \"dash__loading\"\n}\nconst _hoisted_3 = {\n  key: 1,\n  class: \"nd-empty\"\n}\nconst _hoisted_4 = [\"disabled\"]\nconst _hoisted_5 = { class: \"dash__kpis\" }\nconst _hoisted_6 = { class: \"nd-stat\" }\nconst _hoisted_7 = { class: \"nd-stat__value\" }\nconst _hoisted_8 = { class: \"nd-stat\" }\nconst _hoisted_9 = { class: \"nd-stat__value\" }\nconst _hoisted_10 = { class: \"nd-stat\" }\nconst _hoisted_11 = { class: \"nd-stat__value\" }\nconst _hoisted_12 = { class: \"nd-stat\" }\nconst _hoisted_13 = { class: \"nd-stat__value\" }\nconst _hoisted_14 = { class: \"dash__cards\" }\nconst _hoisted_15 = { class: \"nd-card\" }\nconst _hoisted_16 = { class: \"nd-card__body dash__cardbody\" }\nconst _hoisted_17 = {\n  key: 0,\n  class: \"nd-table\"\n}\nconst _hoisted_18 = { class: \"dash__monthname\" }\nconst _hoisted_19 = { class: \"is-num dash__strong\" }\nconst _hoisted_20 = { class: \"is-num\" }\nconst _hoisted_21 = { class: \"is-num\" }\nconst _hoisted_22 = {\n  key: 1,\n  class: \"dash__none\"\n}\nconst _hoisted_23 = { class: \"nd-card\" }\nconst _hoisted_24 = { class: \"nd-card__body dash__cardbody\" }\nconst _hoisted_25 = {\n  key: 0,\n  class: \"nd-table\"\n}\nconst _hoisted_26 = { class: \"dash__agent\" }\nconst _hoisted_27 = { class: \"nd-avatar\" }\nconst _hoisted_28 = { class: \"dash__agentname\" }\nconst _hoisted_29 = { class: \"is-num\" }\nconst _hoisted_30 = { class: \"is-num dash__strong\" }\nconst _hoisted_31 = {\n  key: 1,\n  class: \"dash__none\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _createVNode($setup[\"PageHeader\"], {\n      title: \"Dashboard\",\n      subtitle: \"Hoe staan we ervoor?\"\n    }),\n    _createElementVNode(\"div\", _hoisted_1, [\n      ($setup.loading)\n        ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, \"Laden…\"))\n        : (!$setup.data || !$setup.data.hasData)\n          ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n              _cache[0] || (_cache[0] = _createElementVNode(\"p\", { class: \"nd-empty__title\" }, \"Nog geen gegevens\", -1 /* CACHED */)),\n              _cache[1] || (_cache[1] = _createElementVNode(\"p\", { class: \"nd-empty__text\" }, \"Laad de demo-set om het dashboard, de contracten en de mailbox-simulatie te vullen.\", -1 /* CACHED */)),\n              _createElementVNode(\"button\", {\n                type: \"button\",\n                class: \"nd-btn\",\n                disabled: $setup.loadingDemo,\n                onClick: $setup.loadDemo\n              }, _toDisplayString($setup.loadingDemo ? \"Demo-data laden…\" : \"Demo-data laden\"), 9 /* TEXT, PROPS */, _hoisted_4)\n            ]))\n          : (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n              _createElementVNode(\"div\", _hoisted_5, [\n                _createElementVNode(\"div\", _hoisted_6, [\n                  _cache[2] || (_cache[2] = _createElementVNode(\"div\", { class: \"nd-stat__label\" }, \"Ontvangen tot nu\", -1 /* CACHED */)),\n                  _createElementVNode(\"div\", _hoisted_7, _toDisplayString($setup.formatEur($setup.data.kpis.received)), 1 /* TEXT */)\n                ]),\n                _createElementVNode(\"div\", _hoisted_8, [\n                  _cache[3] || (_cache[3] = _createElementVNode(\"div\", { class: \"nd-stat__label\" }, \"Nog te ontvangen\", -1 /* CACHED */)),\n                  _createElementVNode(\"div\", _hoisted_9, _toDisplayString($setup.formatEur($setup.data.kpis.expected)), 1 /* TEXT */)\n                ]),\n                _createElementVNode(\"div\", _hoisted_10, [\n                  _cache[4] || (_cache[4] = _createElementVNode(\"div\", { class: \"nd-stat__label\" }, \"Komende 3 maanden\", -1 /* CACHED */)),\n                  _createElementVNode(\"div\", _hoisted_11, _toDisplayString($setup.formatEur($setup.data.kpis.next3Months)), 1 /* TEXT */)\n                ]),\n                _createElementVNode(\"div\", _hoisted_12, [\n                  _cache[5] || (_cache[5] = _createElementVNode(\"div\", { class: \"nd-stat__label\" }, \"Waarvan voor agents\", -1 /* CACHED */)),\n                  _createElementVNode(\"div\", _hoisted_13, _toDisplayString($setup.formatEur($setup.data.kpis.agentExpected)), 1 /* TEXT */)\n                ])\n              ]),\n              _createElementVNode(\"div\", _hoisted_14, [\n                _createElementVNode(\"div\", _hoisted_15, [\n                  _cache[7] || (_cache[7] = _createElementVNode(\"h2\", { class: \"nd-card__title\" }, \"Verwachte betalingen per maand\", -1 /* CACHED */)),\n                  _createElementVNode(\"div\", _hoisted_16, [\n                    ($setup.data.months.length)\n                      ? (_openBlock(), _createElementBlock(\"table\", _hoisted_17, [\n                          _cache[6] || (_cache[6] = _createElementVNode(\"thead\", null, [\n                            _createElementVNode(\"tr\", null, [\n                              _createElementVNode(\"th\", null, \"Maand\"),\n                              _createElementVNode(\"th\", { class: \"is-num\" }, \"Totaal\"),\n                              _createElementVNode(\"th\", { class: \"is-num\" }, \"Agents\"),\n                              _createElementVNode(\"th\", { class: \"is-num\" }, \"Nudam\")\n                            ])\n                          ], -1 /* CACHED */)),\n                          _createElementVNode(\"tbody\", null, [\n                            (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.data.months, (row) => {\n                              return (_openBlock(), _createElementBlock(\"tr\", {\n                                key: row.month\n                              }, [\n                                _createElementVNode(\"td\", _hoisted_18, _toDisplayString($setup.formatMonth(row.month)), 1 /* TEXT */),\n                                _createElementVNode(\"td\", _hoisted_19, _toDisplayString($setup.formatEur(row.total)), 1 /* TEXT */),\n                                _createElementVNode(\"td\", _hoisted_20, _toDisplayString($setup.formatEur(row.agents)), 1 /* TEXT */),\n                                _createElementVNode(\"td\", _hoisted_21, _toDisplayString($setup.formatEur(row.nudam)), 1 /* TEXT */)\n                              ]))\n                            }), 128 /* KEYED_FRAGMENT */))\n                          ])\n                        ]))\n                      : (_openBlock(), _createElementBlock(\"p\", _hoisted_22, \"Geen verwachte betalingen.\"))\n                  ])\n                ]),\n                _createElementVNode(\"div\", _hoisted_23, [\n                  _cache[9] || (_cache[9] = _createElementVNode(\"h2\", { class: \"nd-card__title\" }, \"Tegoed per accountmanager\", -1 /* CACHED */)),\n                  _createElementVNode(\"div\", _hoisted_24, [\n                    ($setup.data.agentBalances.length)\n                      ? (_openBlock(), _createElementBlock(\"table\", _hoisted_25, [\n                          _cache[8] || (_cache[8] = _createElementVNode(\"thead\", null, [\n                            _createElementVNode(\"tr\", null, [\n                              _createElementVNode(\"th\", null, \"Accountmanager\"),\n                              _createElementVNode(\"th\", { class: \"is-num\" }, \"Uitbetaald\"),\n                              _createElementVNode(\"th\", { class: \"is-num\" }, \"Nog tegoed\")\n                            ])\n                          ], -1 /* CACHED */)),\n                          _createElementVNode(\"tbody\", null, [\n                            (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.data.agentBalances, (row) => {\n                              return (_openBlock(), _createElementBlock(\"tr\", {\n                                key: row.id\n                              }, [\n                                _createElementVNode(\"td\", null, [\n                                  _createElementVNode(\"span\", _hoisted_26, [\n                                    _createElementVNode(\"span\", _hoisted_27, _toDisplayString($setup.initials(row.name)), 1 /* TEXT */),\n                                    _createElementVNode(\"span\", _hoisted_28, _toDisplayString(row.name), 1 /* TEXT */)\n                                  ])\n                                ]),\n                                _createElementVNode(\"td\", _hoisted_29, _toDisplayString($setup.formatEur(row.received)), 1 /* TEXT */),\n                                _createElementVNode(\"td\", _hoisted_30, _toDisplayString($setup.formatEur(row.expected)), 1 /* TEXT */)\n                              ]))\n                            }), 128 /* KEYED_FRAGMENT */))\n                          ])\n                        ]))\n                      : (_openBlock(), _createElementBlock(\"p\", _hoisted_31, \"Nog geen agent-uitbetalingen.\"))\n                  ])\n                ])\n              ])\n            ], 64 /* STABLE_FRAGMENT */))\n    ])\n  ], 64 /* STABLE_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/DashboardView.vue?type=script\";import \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/DashboardView.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/DashboardView.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/DashboardView.vue\";script.__scopeId = \"data-v-40052c37\";export default script;","<template>\n  <PageHeader title=\"Contracten\" subtitle=\"Alle definitieve energiecontracten\">\n    <button type=\"button\" class=\"nd-btn nd-btn--sm\" @click=\"openNew\">Nieuw contract</button>\n  </PageHeader>\n\n  <div class=\"contracts\">\n    <div v-if=\"loading\" class=\"contracts__loading\">Laden…</div>\n\n    <div v-else-if=\"!rows.length\" class=\"nd-empty\">\n      <p class=\"nd-empty__title\">Nog geen contracten</p>\n      <p class=\"nd-empty__text\">Voeg een contract toe of laad de demo-data via het Dashboard.</p>\n      <button type=\"button\" class=\"nd-btn\" @click=\"openNew\">Nieuw contract</button>\n    </div>\n\n    <div v-else class=\"nd-tablewrap\">\n      <table class=\"nd-table nd-table--hover\">\n        <thead>\n          <tr>\n            <th>Datum</th>\n            <th>Klant</th>\n            <th>Leverancier</th>\n            <th>Accountmanager</th>\n            <th>Product</th>\n            <th class=\"is-num\">Verbruik p.j.</th>\n            <th class=\"is-num\">Vergoeding</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr v-for=\"row in rows\" :key=\"row.id\" @click=\"openEdit(row.id)\">\n            <td class=\"contracts__date\">{{ formatDate(row.closeDate) }}</td>\n            <td class=\"contracts__client\">{{ row.clientTitle }}</td>\n            <td>{{ row.supplierTitle }}</td>\n            <td>{{ row.agentTitle }}</td>\n            <td>\n              <span class=\"nd-badge\" :class=\"row.product === 'gas' ? 'nd-badge--warning' : 'nd-badge--blue'\">\n                {{ row.product === \"gas\" ? \"Gas\" : \"Stroom\" }}\n              </span>\n            </td>\n            <td class=\"is-num\">{{ formatNumber(row.usage) }} {{ row.product === \"gas\" ? \"m³\" : \"kWh\" }}</td>\n            <td class=\"is-num contracts__fee\">{{ formatEur(row.feeTotal) }}</td>\n          </tr>\n        </tbody>\n      </table>\n    </div>\n  </div>\n\n  <ContractModal :open=\"modalOpen\" :contract-id=\"editingId\" @close=\"modalOpen = false\" @saved=\"load\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, ref } from \"vue\";\nimport PageHeader from \"../components/PageHeader.vue\";\nimport ContractModal from \"../components/ContractModal.vue\";\nimport { api, type ContractRow } from \"../lib/api\";\nimport { formatDate, formatEur, formatNumber } from \"../lib/format\";\nimport { showToast } from \"../lib/toast\";\n\nconst loading = ref(true);\nconst rows = ref<ContractRow[]>([]);\nconst modalOpen = ref(false);\nconst editingId = ref<number | null>(null);\n\nasync function load() {\n  try {\n    const result = await api.listContracts({ concepts: false });\n    rows.value = result.contracts;\n  } catch (error) {\n    showToast(\"error\", error instanceof Error ? error.message : \"Contracten laden mislukt.\");\n  } finally {\n    loading.value = false;\n  }\n}\n\nfunction openNew() {\n  editingId.value = null;\n  modalOpen.value = true;\n}\n\nfunction openEdit(id: number) {\n  editingId.value = id;\n  modalOpen.value = true;\n}\n\nonMounted(() => void load());\n</script>\n\n<style scoped>\n.contracts {\n  flex: 1;\n  padding: 28px 32px;\n}\n\n.contracts__loading {\n  padding: 48px 0;\n  text-align: center;\n  color: var(--nd-color-muted);\n}\n\n.contracts__date {\n  color: var(--nd-color-muted);\n  white-space: nowrap;\n}\n\n.contracts__client {\n  font-weight: 700;\n}\n\n.contracts__fee {\n  font-weight: 700;\n}\n</style>\n","<template>\n  <ModalShell :open=\"open\" :title=\"contractId ? 'Contract bewerken' : 'Nieuw contract'\" :width=\"820\" @close=\"emit('close')\">\n    <template #headerextra>\n      <span v-if=\"isConcept\" class=\"nd-badge nd-badge--gold\">Concept</span>\n      <span v-if=\"source === 'mailbox'\" class=\"nd-badge nd-badge--blue\">Mailbox</span>\n    </template>\n\n    <div v-if=\"loading\" class=\"contractform__loading\">Laden…</div>\n    <template v-else>\n      <div class=\"contractform__grid\">\n        <div class=\"contractform__field\">\n          <label class=\"nd-label\" for=\"cf-closedate\">Afsluitdatum</label>\n          <input id=\"cf-closedate\" v-model=\"draft.closeDate\" class=\"nd-input\" :class=\"{ 'is-error': !!errors.closeDate }\" type=\"date\" @input=\"errors.closeDate = ''\">\n          <p v-if=\"errors.closeDate\" class=\"nd-fielderror\">{{ errors.closeDate }}</p>\n        </div>\n        <div class=\"contractform__field\">\n          <label class=\"nd-label\" for=\"cf-client\">Klant</label>\n          <select id=\"cf-client\" v-model.number=\"draft.client\" class=\"nd-select\" :class=\"{ 'is-error': !!errors.client }\" @change=\"errors.client = ''\">\n            <option :value=\"0\" disabled>&mdash; kies &mdash;</option>\n            <option v-for=\"option in options.clients\" :key=\"option.id\" :value=\"option.id\">{{ option.title }}</option>\n          </select>\n          <p v-if=\"errors.client\" class=\"nd-fielderror\">{{ errors.client }}</p>\n        </div>\n        <div class=\"contractform__field\">\n          <label class=\"nd-label\" for=\"cf-agent\">Accountmanager</label>\n          <select id=\"cf-agent\" v-model.number=\"draft.agent\" class=\"nd-select\">\n            <option :value=\"0\">&mdash; geen &mdash;</option>\n            <option v-for=\"option in options.agents\" :key=\"option.id\" :value=\"option.id\">{{ option.title }}</option>\n          </select>\n        </div>\n        <div class=\"contractform__field\">\n          <label class=\"nd-label\" for=\"cf-worker\">Binnendienst</label>\n          <select id=\"cf-worker\" v-model.number=\"draft.officeWorker\" class=\"nd-select\">\n            <option :value=\"0\">&mdash; geen &mdash;</option>\n            <option v-for=\"option in options.workers\" :key=\"option.id\" :value=\"option.id\">{{ option.title }}</option>\n          </select>\n        </div>\n        <div class=\"contractform__field\">\n          <label class=\"nd-label\" for=\"cf-supplier\">Leverancier</label>\n          <select id=\"cf-supplier\" v-model.number=\"draft.supplier\" class=\"nd-select\" :class=\"{ 'is-error': !!errors.supplier }\" @change=\"errors.supplier = ''\">\n            <option :value=\"0\" disabled>&mdash; kies &mdash;</option>\n            <option v-for=\"option in options.suppliers\" :key=\"option.id\" :value=\"option.id\">{{ option.title }}</option>\n          </select>\n          <p v-if=\"errors.supplier\" class=\"nd-fielderror\">{{ errors.supplier }}</p>\n        </div>\n        <div class=\"contractform__row2\">\n          <div class=\"contractform__field\">\n            <label class=\"nd-label\" for=\"cf-product\">Product</label>\n            <select id=\"cf-product\" v-model=\"draft.product\" class=\"nd-select\">\n              <option value=\"power\">Stroom</option>\n              <option value=\"gas\">Gas</option>\n            </select>\n          </div>\n          <div class=\"contractform__field\">\n            <label class=\"nd-label\" for=\"cf-type\">Contractvorm</label>\n            <select id=\"cf-type\" v-model=\"draft.contractType\" class=\"nd-select\">\n              <option value=\"fixed\">Vast</option>\n              <option value=\"dynamic\">Dynamisch</option>\n            </select>\n          </div>\n        </div>\n        <div class=\"contractform__field\">\n          <label class=\"nd-label\" for=\"cf-start\">Startdatum</label>\n          <input id=\"cf-start\" v-model=\"draft.startdate\" class=\"nd-input\" type=\"date\">\n        </div>\n        <div class=\"contractform__field\">\n          <label class=\"nd-label\" for=\"cf-end\">Einddatum</label>\n          <input id=\"cf-end\" v-model=\"draft.enddate\" class=\"nd-input\" type=\"date\">\n        </div>\n        <div class=\"contractform__field\">\n          <label class=\"nd-label\" for=\"cf-duration\">Looptijd (maanden)</label>\n          <input id=\"cf-duration\" v-model.number=\"draft.durationMonths\" class=\"nd-input\" type=\"number\" min=\"0\" step=\"1\">\n        </div>\n        <div class=\"contractform__row2\">\n          <div class=\"contractform__field\">\n            <label class=\"nd-label\" for=\"cf-kwh\">Aantal kWh p.j.</label>\n            <input id=\"cf-kwh\" v-model.number=\"draft.usageKwh\" class=\"nd-input\" type=\"number\" min=\"0\" step=\"1\">\n          </div>\n          <div class=\"contractform__field\">\n            <label class=\"nd-label\" for=\"cf-m3\">Aantal m&sup3; p.j.</label>\n            <input id=\"cf-m3\" v-model.number=\"draft.usageM3\" class=\"nd-input\" type=\"number\" min=\"0\" step=\"1\">\n          </div>\n        </div>\n      </div>\n\n      <div class=\"contractform__section\">Vergoeding</div>\n      <div class=\"contractform__grid4\">\n        <div class=\"contractform__field\">\n          <label class=\"nd-label\" for=\"cf-margin\">Marge (&euro;/kWh of &euro;/m&sup3;)</label>\n          <input id=\"cf-margin\" v-model.number=\"draft.margin\" class=\"nd-input\" type=\"number\" min=\"0\" step=\"0.0001\">\n        </div>\n        <div class=\"contractform__field\">\n          <label class=\"nd-label\" for=\"cf-marginagent\">Marge agent</label>\n          <input id=\"cf-marginagent\" v-model.number=\"draft.marginAgent\" class=\"nd-input\" type=\"number\" min=\"0\" step=\"0.0001\">\n        </div>\n        <div class=\"contractform__field\">\n          <label class=\"nd-label\" for=\"cf-sc\">Vastrecht p.j.</label>\n          <input id=\"cf-sc\" v-model.number=\"draft.standingCharge\" class=\"nd-input\" type=\"number\" min=\"0\" step=\"0.01\">\n        </div>\n        <div class=\"contractform__field\">\n          <label class=\"nd-label\" for=\"cf-scagent\">Vastrecht p.j. agent</label>\n          <input id=\"cf-scagent\" v-model.number=\"draft.standingChargeAgent\" class=\"nd-input\" type=\"number\" min=\"0\" step=\"0.01\">\n        </div>\n      </div>\n\n      <div class=\"contractform__feetiles\">\n        <div class=\"contractform__feetile\">\n          <div class=\"contractform__feelabel\">Totale vergoeding</div>\n          <div class=\"contractform__feevalue\">{{ formatEur(fee.total) }}</div>\n        </div>\n        <div class=\"contractform__feetile\">\n          <div class=\"contractform__feelabel\">Vergoeding agent</div>\n          <div class=\"contractform__feevalue\">{{ formatEur(fee.agent) }}</div>\n        </div>\n        <div class=\"contractform__feetile\">\n          <div class=\"contractform__feelabel\">Vergoeding Nudam</div>\n          <div class=\"contractform__feevalue contractform__feevalue--gold\">{{ formatEur(fee.nudam) }}</div>\n        </div>\n      </div>\n\n      <div v-if=\"schedule.length\" class=\"contractform__schedule\">\n        <table class=\"nd-table\">\n          <thead>\n            <tr>\n              <th>Betaaldatum</th>\n              <th>Omschrijving</th>\n              <th class=\"is-num\">Bedrag</th>\n            </tr>\n          </thead>\n          <tbody>\n            <tr v-for=\"(payment, index) in schedule\" :key=\"index\">\n              <td class=\"contractform__paydate\">{{ formatDateObj(payment.payDate) }}</td>\n              <td class=\"contractform__paydesc\">{{ payment.description }}</td>\n              <td class=\"is-num contractform__payamount\">{{ formatEur(payment.amount) }}</td>\n            </tr>\n          </tbody>\n        </table>\n      </div>\n      <div v-else class=\"contractform__noschedule\">\n        <div class=\"nd-alert nd-alert--warning\">\n          Het betaalmodel van deze leverancier is nog niet geconfigureerd; het betaalschema volgt in de MVP.\n        </div>\n      </div>\n\n      <div class=\"contractform__field contractform__notes\">\n        <label class=\"nd-label\" for=\"cf-notes\">Notities</label>\n        <textarea id=\"cf-notes\" v-model=\"draft.notes\" class=\"nd-textarea\" rows=\"3\" />\n      </div>\n    </template>\n\n    <template #footer>\n      <button\n        v-if=\"contractId\"\n        type=\"button\"\n        class=\"nd-btn nd-btn--danger nd-btn--sm\"\n        @click=\"confirmDelete = true\"\n      >Verwijderen</button>\n      <span class=\"contractform__footspacer\" />\n      <button type=\"button\" class=\"nd-btn nd-btn--ghost\" @click=\"emit('close')\">Annuleren</button>\n      <button type=\"button\" class=\"nd-btn\" :disabled=\"saving\" @click=\"save\">\n        {{ saving ? \"Opslaan…\" : \"Opslaan\" }}\n      </button>\n    </template>\n  </ModalShell>\n\n  <ConfirmDialog\n    :open=\"confirmDelete\"\n    title=\"Contract verwijderen\"\n    :message=\"`Weet je zeker dat je dit contract${isConcept ? ' (concept)' : ''} wilt verwijderen?`\"\n    confirm-label=\"Verwijderen\"\n    tone=\"danger\"\n    @cancel=\"confirmDelete = false\"\n    @confirm=\"removeContract\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, reactive, ref, watch } from \"vue\";\nimport ModalShell from \"./ModalShell.vue\";\nimport ConfirmDialog from \"./ConfirmDialog.vue\";\nimport { api, type ContractInput, type OptionItem } from \"../lib/api\";\nimport { formatDateObj, formatEur } from \"../lib/format\";\nimport { showToast } from \"../lib/toast\";\nimport { refreshConceptCount } from \"../lib/state\";\nimport { calculateContractFee, getContractPayments, parseIsoDate, toIsoDate, type ScheduledPayment } from \"../../../../js/calculations\";\n\nconst props = defineProps<{\n  open: boolean;\n  contractId: number | null;\n}>();\n\nconst emit = defineEmits<{ (e: \"close\"): void; (e: \"saved\"): void }>();\n\ninterface Options {\n  clients: OptionItem[];\n  suppliers: Array<OptionItem & { paymentModel: string }>;\n  agents: OptionItem[];\n  workers: OptionItem[];\n}\n\nconst loading = ref(false);\nconst saving = ref(false);\nconst confirmDelete = ref(false);\nconst isConcept = ref(false);\nconst source = ref<\"manual\" | \"mailbox\">(\"manual\");\nconst options = ref<Options>({ clients: [], suppliers: [], agents: [], workers: [] });\nconst errors = reactive<Record<string, string>>({});\n\nfunction emptyDraft() {\n  return {\n    closeDate: toIsoDate(new Date()),\n    client: 0,\n    agent: 0,\n    officeWorker: 0,\n    supplier: 0,\n    product: \"power\" as \"power\" | \"gas\",\n    contractType: \"fixed\" as \"fixed\" | \"dynamic\",\n    startdate: \"\",\n    enddate: \"\",\n    durationMonths: 36,\n    usageKwh: 0,\n    usageM3: 0,\n    margin: 0,\n    marginAgent: 0,\n    standingCharge: 0,\n    standingChargeAgent: 0,\n    notes: \"\",\n  };\n}\n\nconst draft = reactive(emptyDraft());\n\nwatch(() => props.open, async (open) => {\n  if (!open)\n    return;\n  Object.assign(draft, emptyDraft());\n  Object.keys(errors).forEach(key => delete errors[key]);\n  isConcept.value = false;\n  source.value = \"manual\";\n  confirmDelete.value = false;\n\n  loading.value = true;\n  try {\n    options.value = await api.getContractOptions();\n    if (props.contractId) {\n      const result = await api.getContract({ id: props.contractId });\n      if (result.contract) {\n        const { id: _id, isConcept: concept, source: contractSource, agent, officeWorker, ...fields } = result.contract;\n        Object.assign(draft, fields, { agent: agent ?? 0, officeWorker: officeWorker ?? 0 });\n        isConcept.value = concept;\n        source.value = contractSource;\n      }\n    }\n  } catch (error) {\n    showToast(\"error\", error instanceof Error ? error.message : \"Laden mislukt.\");\n    emit(\"close\");\n  } finally {\n    loading.value = false;\n  }\n});\n\nconst supplierPaymentModel = computed(() =>\n  options.value.suppliers.find(supplier => supplier.id === draft.supplier)?.paymentModel ?? \"none\");\n\nfunction numberOr0(value: unknown): number {\n  return typeof value === \"number\" && isFinite(value) ? value : 0;\n}\n\nconst fee = computed(() => calculateContractFee({\n  product: draft.product,\n  usageKwh: numberOr0(draft.usageKwh),\n  usageM3: numberOr0(draft.usageM3),\n  margin: numberOr0(draft.margin),\n  marginAgent: numberOr0(draft.marginAgent),\n  standingCharge: numberOr0(draft.standingCharge),\n  standingChargeAgent: numberOr0(draft.standingChargeAgent),\n}));\n\nconst schedule = computed<ScheduledPayment[]>(() => {\n  const closeDate = parseIsoDate(draft.closeDate);\n  if (!closeDate)\n    return [];\n  return getContractPayments({\n    product: draft.product,\n    usageKwh: numberOr0(draft.usageKwh),\n    usageM3: numberOr0(draft.usageM3),\n    margin: numberOr0(draft.margin),\n    marginAgent: numberOr0(draft.marginAgent),\n    standingCharge: numberOr0(draft.standingCharge),\n    standingChargeAgent: numberOr0(draft.standingChargeAgent),\n    closeDate,\n    paymentModel: supplierPaymentModel.value,\n  });\n});\n\nfunction validate(): boolean {\n  Object.keys(errors).forEach(key => delete errors[key]);\n  if (!draft.closeDate || !parseIsoDate(draft.closeDate))\n    errors.closeDate = \"Vul een afsluitdatum in.\";\n  if (!draft.client)\n    errors.client = \"Selecteer een klant.\";\n  if (!draft.supplier)\n    errors.supplier = \"Selecteer een leverancier.\";\n  return Object.keys(errors).length === 0;\n}\n\nasync function save() {\n  if (!validate())\n    return;\n  saving.value = true;\n  try {\n    const data: ContractInput = {\n      closeDate: draft.closeDate,\n      client: draft.client,\n      agent: draft.agent || null,\n      officeWorker: draft.officeWorker || null,\n      supplier: draft.supplier,\n      product: draft.product,\n      contractType: draft.contractType,\n      startdate: draft.startdate,\n      enddate: draft.enddate,\n      durationMonths: numberOr0(draft.durationMonths),\n      usageKwh: numberOr0(draft.usageKwh),\n      usageM3: numberOr0(draft.usageM3),\n      margin: numberOr0(draft.margin),\n      marginAgent: numberOr0(draft.marginAgent),\n      standingCharge: numberOr0(draft.standingCharge),\n      standingChargeAgent: numberOr0(draft.standingChargeAgent),\n      notes: draft.notes,\n    };\n    await api.saveContract({ id: props.contractId, data });\n    showToast(\"success\", props.contractId ? \"Contract opgeslagen.\" : \"Contract aangemaakt.\");\n    emit(\"saved\");\n    emit(\"close\");\n  } catch (error) {\n    showToast(\"error\", error instanceof Error ? error.message : \"Opslaan mislukt.\");\n  } finally {\n    saving.value = false;\n  }\n}\n\nasync function removeContract() {\n  confirmDelete.value = false;\n  if (!props.contractId)\n    return;\n  try {\n    await api.deleteContract({ id: props.contractId });\n    showToast(\"success\", \"Contract verwijderd.\");\n    void refreshConceptCount();\n    emit(\"saved\");\n    emit(\"close\");\n  } catch (error) {\n    showToast(\"error\", error instanceof Error ? error.message : \"Verwijderen mislukt.\");\n  }\n}\n</script>\n\n<style scoped>\n.contractform__loading {\n  padding: 32px 0;\n  text-align: center;\n  color: var(--nd-color-muted);\n}\n\n.contractform__grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 14px 16px;\n}\n\n.contractform__row2 {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 16px;\n}\n\n.contractform__grid4 {\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  gap: 14px 16px;\n}\n\n.contractform__section {\n  margin: 20px 0 12px 0;\n  font-size: 11px;\n  font-weight: 800;\n  text-transform: uppercase;\n  letter-spacing: 0.08em;\n  color: var(--nd-color-muted);\n}\n\n.contractform__feetiles {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 16px;\n  margin-top: 16px;\n}\n\n.contractform__feetile {\n  background: var(--nd-color-surface);\n  border-radius: var(--nd-radius-md);\n  padding: 12px 14px;\n}\n\n.contractform__feelabel {\n  font-size: 11px;\n  font-weight: 800;\n  text-transform: uppercase;\n  letter-spacing: 0.08em;\n  color: var(--nd-color-muted);\n}\n\n.contractform__feevalue {\n  font-size: 18px;\n  font-weight: 800;\n  margin-top: 4px;\n  font-variant-numeric: tabular-nums;\n}\n\n.contractform__feevalue--gold {\n  color: var(--nd-color-primary);\n}\n\n.contractform__schedule {\n  margin-top: 16px;\n  border: 1px solid var(--nd-color-border);\n  border-radius: var(--nd-radius-md);\n  overflow: hidden;\n}\n\n.contractform__paydate {\n  white-space: nowrap;\n}\n\n.contractform__paydesc {\n  color: var(--nd-color-muted);\n}\n\n.contractform__payamount {\n  font-weight: 700;\n}\n\n.contractform__noschedule {\n  margin-top: 16px;\n}\n\n.contractform__notes {\n  margin-top: 16px;\n}\n\n.contractform__footspacer {\n  flex: 1;\n}\n</style>\n","<template>\n  <Teleport to=\"body\">\n    <Transition name=\"modal\">\n      <div v-if=\"open\" class=\"modal\" @click.self=\"emit('close')\" @keydown.esc=\"emit('close')\">\n        <div class=\"modal__panel\" :style=\"{ width: `${width}px` }\" role=\"dialog\" aria-modal=\"true\">\n          <div class=\"modal__header\">\n            <span class=\"modal__title\">{{ title }}</span>\n            <slot name=\"headerextra\" />\n          </div>\n          <div class=\"modal__body\">\n            <slot />\n          </div>\n          <div class=\"modal__footer\">\n            <slot name=\"footer\" />\n          </div>\n        </div>\n      </div>\n    </Transition>\n  </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nwithDefaults(defineProps<{\n  open: boolean;\n  title: string;\n  width?: number;\n}>(), {\n  width: 560,\n});\n\nconst emit = defineEmits<{ (e: \"close\"): void }>();\n</script>\n\n<style scoped>\n.modal {\n  position: fixed;\n  inset: 0;\n  z-index: 60;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: rgba(23, 28, 45, 0.45);\n  padding: 24px;\n}\n\n.modal__panel {\n  max-width: 94vw;\n  max-height: 92vh;\n  display: flex;\n  flex-direction: column;\n  background: var(--nd-color-bg);\n  border-radius: var(--nd-radius-lg);\n  box-shadow: var(--nd-shadow-card);\n  overflow: hidden;\n}\n\n.modal__header {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  padding: 20px 24px;\n  border-bottom: 1px solid var(--nd-color-border);\n  flex: none;\n}\n\n.modal__title {\n  flex: 1;\n  font-size: 17px;\n  font-weight: 800;\n  letter-spacing: -0.01em;\n}\n\n.modal__body {\n  flex: 1;\n  min-height: 0;\n  overflow-y: auto;\n  padding: 20px 24px;\n}\n\n.modal__footer {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  padding: 16px 24px;\n  border-top: 1px solid var(--nd-color-border);\n  background: var(--nd-color-surface);\n  flex: none;\n}\n\n.modal-enter-active,\n.modal-leave-active {\n  transition: opacity 0.15s ease;\n}\n\n.modal-enter-from,\n.modal-leave-to {\n  opacity: 0;\n}\n</style>\n","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, renderSlot as _renderSlot, normalizeStyle as _normalizeStyle, withModifiers as _withModifiers, withKeys as _withKeys, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, Transition as _Transition, withCtx as _withCtx, createVNode as _createVNode, Teleport as _Teleport, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"modal__header\" }\nconst _hoisted_2 = { class: \"modal__title\" }\nconst _hoisted_3 = { class: \"modal__body\" }\nconst _hoisted_4 = { class: \"modal__footer\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock(_Teleport, { to: \"body\" }, [\n    _createVNode(_Transition, { name: \"modal\" }, {\n      default: _withCtx(() => [\n        ($props.open)\n          ? (_openBlock(), _createElementBlock(\"div\", {\n              key: 0,\n              class: \"modal\",\n              onClick: _cache[0] || (_cache[0] = _withModifiers($event => ($setup.emit('close')), [\"self\"])),\n              onKeydown: _cache[1] || (_cache[1] = _withKeys($event => ($setup.emit('close')), [\"esc\"]))\n            }, [\n              _createElementVNode(\"div\", {\n                class: \"modal__panel\",\n                style: _normalizeStyle({ width: `${$props.width}px` }),\n                role: \"dialog\",\n                \"aria-modal\": \"true\"\n              }, [\n                _createElementVNode(\"div\", _hoisted_1, [\n                  _createElementVNode(\"span\", _hoisted_2, _toDisplayString($props.title), 1 /* TEXT */),\n                  _renderSlot(_ctx.$slots, \"headerextra\", {}, undefined, true)\n                ]),\n                _createElementVNode(\"div\", _hoisted_3, [\n                  _renderSlot(_ctx.$slots, \"default\", {}, undefined, true)\n                ]),\n                _createElementVNode(\"div\", _hoisted_4, [\n                  _renderSlot(_ctx.$slots, \"footer\", {}, undefined, true)\n                ])\n              ], 4 /* STYLE */)\n            ], 32 /* NEED_HYDRATION */))\n          : _createCommentVNode(\"v-if\", true)\n      ]),\n      _: 3 /* FORWARDED */\n    })\n  ]))\n}","import script from \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/ModalShell.vue?type=script\";import \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/ModalShell.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/ModalShell.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/ModalShell.vue\";script.__scopeId = \"data-v-87f17310\";export default script;","<template>\n  <Teleport to=\"body\">\n    <Transition name=\"confirm\">\n      <div v-if=\"open\" class=\"confirm\" @click.self=\"emit('cancel')\" @keydown.esc=\"emit('cancel')\">\n        <div class=\"confirm__panel\" role=\"alertdialog\" aria-modal=\"true\">\n          <h2 class=\"confirm__title\">{{ title }}</h2>\n          <p class=\"confirm__message\">{{ message }}</p>\n          <div class=\"confirm__actions\">\n            <button type=\"button\" class=\"nd-btn nd-btn--secondary nd-btn--sm\" @click=\"emit('cancel')\">\n              {{ cancelLabel }}\n            </button>\n            <button\n              type=\"button\"\n              class=\"nd-btn nd-btn--sm\"\n              :class=\"{ 'nd-btn--danger-solid': tone === 'danger' }\"\n              @click=\"emit('confirm')\"\n            >\n              {{ confirmLabel }}\n            </button>\n          </div>\n        </div>\n      </div>\n    </Transition>\n  </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nwithDefaults(defineProps<{\n  open: boolean;\n  title: string;\n  message: string;\n  confirmLabel?: string;\n  cancelLabel?: string;\n  tone?: \"default\" | \"danger\";\n}>(), {\n  confirmLabel: \"Bevestigen\",\n  cancelLabel: \"Annuleren\",\n  tone: \"default\",\n});\n\nconst emit = defineEmits<{ (e: \"confirm\"): void; (e: \"cancel\"): void }>();\n</script>\n\n<style scoped>\n.confirm {\n  position: fixed;\n  inset: 0;\n  z-index: 70;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  background: rgba(23, 28, 45, 0.45);\n  padding: 24px;\n}\n\n.confirm__panel {\n  width: 400px;\n  max-width: 94vw;\n  background: var(--nd-color-bg);\n  border-radius: var(--nd-radius-lg);\n  box-shadow: var(--nd-shadow-card);\n  padding: 24px;\n}\n\n.confirm__title {\n  margin: 0 0 8px 0;\n  font-size: 16px;\n  font-weight: 800;\n  letter-spacing: -0.01em;\n}\n\n.confirm__message {\n  margin: 0 0 20px 0;\n  font-size: 13px;\n  color: var(--nd-color-muted);\n}\n\n.confirm__actions {\n  display: flex;\n  justify-content: flex-end;\n  gap: 10px;\n}\n\n.confirm-enter-active,\n.confirm-leave-active {\n  transition: opacity 0.15s ease;\n}\n\n.confirm-enter-from,\n.confirm-leave-to {\n  opacity: 0;\n}\n</style>\n","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, withModifiers as _withModifiers, withKeys as _withKeys, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, Transition as _Transition, withCtx as _withCtx, createVNode as _createVNode, Teleport as _Teleport, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = {\n  class: \"confirm__panel\",\n  role: \"alertdialog\",\n  \"aria-modal\": \"true\"\n}\nconst _hoisted_2 = { class: \"confirm__title\" }\nconst _hoisted_3 = { class: \"confirm__message\" }\nconst _hoisted_4 = { class: \"confirm__actions\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock(_Teleport, { to: \"body\" }, [\n    _createVNode(_Transition, { name: \"confirm\" }, {\n      default: _withCtx(() => [\n        ($props.open)\n          ? (_openBlock(), _createElementBlock(\"div\", {\n              key: 0,\n              class: \"confirm\",\n              onClick: _cache[2] || (_cache[2] = _withModifiers($event => ($setup.emit('cancel')), [\"self\"])),\n              onKeydown: _cache[3] || (_cache[3] = _withKeys($event => ($setup.emit('cancel')), [\"esc\"]))\n            }, [\n              _createElementVNode(\"div\", _hoisted_1, [\n                _createElementVNode(\"h2\", _hoisted_2, _toDisplayString($props.title), 1 /* TEXT */),\n                _createElementVNode(\"p\", _hoisted_3, _toDisplayString($props.message), 1 /* TEXT */),\n                _createElementVNode(\"div\", _hoisted_4, [\n                  _createElementVNode(\"button\", {\n                    type: \"button\",\n                    class: \"nd-btn nd-btn--secondary nd-btn--sm\",\n                    onClick: _cache[0] || (_cache[0] = $event => ($setup.emit('cancel')))\n                  }, _toDisplayString($props.cancelLabel), 1 /* TEXT */),\n                  _createElementVNode(\"button\", {\n                    type: \"button\",\n                    class: _normalizeClass([\"nd-btn nd-btn--sm\", { 'nd-btn--danger-solid': $props.tone === 'danger' }]),\n                    onClick: _cache[1] || (_cache[1] = $event => ($setup.emit('confirm')))\n                  }, _toDisplayString($props.confirmLabel), 3 /* TEXT, CLASS */)\n                ])\n              ])\n            ], 32 /* NEED_HYDRATION */))\n          : _createCommentVNode(\"v-if\", true)\n      ]),\n      _: 1 /* STABLE */\n    })\n  ]))\n}","import script from \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/ConfirmDialog.vue?type=script\";import \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/ConfirmDialog.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/ConfirmDialog.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/ConfirmDialog.vue\";script.__scopeId = \"data-v-45dbfc50\";export default script;","/** Vergoedings- en betaalschema-berekeningen voor het Nudam-prototype.\n\n    Pure module (geen imports): wordt gedeeld tussen de backend-RPC, de\n    frontend (live berekening in het contractformulier) en de unittests.\n    Spiegelt lib/calculations.whlib (de Tollium-variant).\n\n    Aannames (valideren met Mylan voor de MVP, zie docs/plan-prototype.md):\n    - Totale vergoeding = marge x jaarverbruik + vastrecht p.j.\n    - Vergoeding agent = marge agent x jaarverbruik + vastrecht agent p.j.\n    - Clean Energy: 70% aan het EIND van de maand na de afsluitmaand,\n      30% op afsluitdatum + 15 maanden (nominaal; correctie o.b.v. werkelijk\n      verbruik komt in de MVP). Het agent-deel volgt dezelfde momenten. */\n\nexport type Product = \"power\" | \"gas\";\nexport type PaymentModel = \"cleanenergy_7030\" | \"none\";\n\nexport interface ContractFeeInput {\n  product: Product;\n  usageKwh: number;\n  usageM3: number;\n  margin: number;\n  marginAgent: number;\n  standingCharge: number;\n  standingChargeAgent: number;\n}\n\nexport interface ContractFee {\n  total: number;\n  agent: number;\n  nudam: number;\n}\n\nexport interface PaymentScheduleInput extends ContractFeeInput {\n  closeDate: Date;\n  paymentModel: PaymentModel | string;\n}\n\nexport interface ScheduledPayment {\n  payDate: Date;\n  description: string;\n  amount: number;\n  amountAgent: number;\n  amountNudam: number;\n}\n\n/** Rond af op hele centen (vermijdt floating-point-ruis in de UI en tests) */\nfunction roundCents(value: number): number {\n  return Math.round(value * 100) / 100;\n}\n\n/** Datum + n maanden, met de dag vastgeklemd op de laatste dag van de doelmaand\n    (31 januari + 1 maand = 28/29 februari, niet 3 maart) */\nexport function addMonths(date: Date, months: number): Date {\n  const targetMonth = date.getMonth() + months;\n  const lastDay = new Date(date.getFullYear(), targetMonth + 1, 0).getDate();\n  return new Date(date.getFullYear(), targetMonth, Math.min(date.getDate(), lastDay));\n}\n\n/** Laatste dag van de maand waarin `date` valt */\nexport function endOfMonth(date: Date): Date {\n  return new Date(date.getFullYear(), date.getMonth() + 1, 0);\n}\n\n/** Date -> \"YYYY-MM-DD\" op basis van lokale datumdelen (geen UTC-verschuiving) */\nexport function toIsoDate(date: Date): string {\n  const pad = (n: number) => String(n).padStart(2, \"0\");\n  return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;\n}\n\n/** \"YYYY-MM-DD\" -> Date (lokale middernacht); null bij lege/ongeldige invoer */\nexport function parseIsoDate(iso: string): Date | null {\n  const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(iso);\n  if (!match)\n    return null;\n  return new Date(Number(match[1]), Number(match[2]) - 1, Number(match[3]));\n}\n\nexport function calculateContractFee(contract: ContractFeeInput): ContractFee {\n  const usage = contract.product === \"gas\" ? contract.usageM3 : contract.usageKwh;\n  const total = roundCents(contract.margin * usage + contract.standingCharge);\n  const agent = roundCents(contract.marginAgent * usage + contract.standingChargeAgent);\n  return { total, agent, nudam: roundCents(total - agent) };\n}\n\n/** Betaalschema voor een contract volgens het betaalmodel van de leverancier.\n    Leeg als het betaalmodel (nog) niet is geconfigureerd. */\nexport function getContractPayments(contract: PaymentScheduleInput): ScheduledPayment[] {\n  if (contract.paymentModel !== \"cleanenergy_7030\")\n    return [];\n\n  const fee = calculateContractFee(contract);\n  const firstPayment = endOfMonth(addMonths(contract.closeDate, 1));\n  const secondPayment = addMonths(contract.closeDate, 15);\n\n  return [\n    {\n      payDate: firstPayment,\n      description: \"70% voorschot o.b.v. standaard jaarverbruik\",\n      amount: roundCents(fee.total * 0.7),\n      amountAgent: roundCents(fee.agent * 0.7),\n      amountNudam: roundCents(fee.nudam * 0.7),\n    },\n    {\n      payDate: secondPayment,\n      description: \"30% nabetaling (correctie werkelijk verbruik)\",\n      amount: roundCents(fee.total * 0.3),\n      amountAgent: roundCents(fee.agent * 0.3),\n      amountNudam: roundCents(fee.nudam * 0.3),\n    },\n  ];\n}\n","import { openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, vModelText as _vModelText, normalizeClass as _normalizeClass, withDirectives as _withDirectives, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, vModelSelect as _vModelSelect, withCtx as _withCtx, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = {\n  key: 0,\n  class: \"nd-badge nd-badge--gold\"\n}\nconst _hoisted_2 = {\n  key: 1,\n  class: \"nd-badge nd-badge--blue\"\n}\nconst _hoisted_3 = {\n  key: 0,\n  class: \"contractform__loading\"\n}\nconst _hoisted_4 = { class: \"contractform__grid\" }\nconst _hoisted_5 = { class: \"contractform__field\" }\nconst _hoisted_6 = {\n  key: 0,\n  class: \"nd-fielderror\"\n}\nconst _hoisted_7 = { class: \"contractform__field\" }\nconst _hoisted_8 = [\"value\"]\nconst _hoisted_9 = {\n  key: 0,\n  class: \"nd-fielderror\"\n}\nconst _hoisted_10 = { class: \"contractform__field\" }\nconst _hoisted_11 = [\"value\"]\nconst _hoisted_12 = { class: \"contractform__field\" }\nconst _hoisted_13 = [\"value\"]\nconst _hoisted_14 = { class: \"contractform__field\" }\nconst _hoisted_15 = [\"value\"]\nconst _hoisted_16 = {\n  key: 0,\n  class: \"nd-fielderror\"\n}\nconst _hoisted_17 = { class: \"contractform__row2\" }\nconst _hoisted_18 = { class: \"contractform__field\" }\nconst _hoisted_19 = { class: \"contractform__field\" }\nconst _hoisted_20 = { class: \"contractform__field\" }\nconst _hoisted_21 = { class: \"contractform__field\" }\nconst _hoisted_22 = { class: \"contractform__field\" }\nconst _hoisted_23 = { class: \"contractform__row2\" }\nconst _hoisted_24 = { class: \"contractform__field\" }\nconst _hoisted_25 = { class: \"contractform__field\" }\nconst _hoisted_26 = { class: \"contractform__grid4\" }\nconst _hoisted_27 = { class: \"contractform__field\" }\nconst _hoisted_28 = { class: \"contractform__field\" }\nconst _hoisted_29 = { class: \"contractform__field\" }\nconst _hoisted_30 = { class: \"contractform__field\" }\nconst _hoisted_31 = { class: \"contractform__feetiles\" }\nconst _hoisted_32 = { class: \"contractform__feetile\" }\nconst _hoisted_33 = { class: \"contractform__feevalue\" }\nconst _hoisted_34 = { class: \"contractform__feetile\" }\nconst _hoisted_35 = { class: \"contractform__feevalue\" }\nconst _hoisted_36 = { class: \"contractform__feetile\" }\nconst _hoisted_37 = { class: \"contractform__feevalue contractform__feevalue--gold\" }\nconst _hoisted_38 = {\n  key: 0,\n  class: \"contractform__schedule\"\n}\nconst _hoisted_39 = { class: \"nd-table\" }\nconst _hoisted_40 = { class: \"contractform__paydate\" }\nconst _hoisted_41 = { class: \"contractform__paydesc\" }\nconst _hoisted_42 = { class: \"is-num contractform__payamount\" }\nconst _hoisted_43 = {\n  key: 1,\n  class: \"contractform__noschedule\"\n}\nconst _hoisted_44 = { class: \"contractform__field contractform__notes\" }\nconst _hoisted_45 = [\"disabled\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _createVNode($setup[\"ModalShell\"], {\n      open: $props.open,\n      title: $props.contractId ? 'Contract bewerken' : 'Nieuw contract',\n      width: 820,\n      onClose: _cache[22] || (_cache[22] = $event => ($setup.emit('close')))\n    }, {\n      headerextra: _withCtx(() => [\n        ($setup.isConcept)\n          ? (_openBlock(), _createElementBlock(\"span\", _hoisted_1, \"Concept\"))\n          : _createCommentVNode(\"v-if\", true),\n        ($setup.source === 'mailbox')\n          ? (_openBlock(), _createElementBlock(\"span\", _hoisted_2, \"Mailbox\"))\n          : _createCommentVNode(\"v-if\", true)\n      ]),\n      footer: _withCtx(() => [\n        ($props.contractId)\n          ? (_openBlock(), _createElementBlock(\"button\", {\n              key: 0,\n              type: \"button\",\n              class: \"nd-btn nd-btn--danger nd-btn--sm\",\n              onClick: _cache[20] || (_cache[20] = $event => ($setup.confirmDelete = true))\n            }, \"Verwijderen\"))\n          : _createCommentVNode(\"v-if\", true),\n        _cache[53] || (_cache[53] = _createElementVNode(\"span\", { class: \"contractform__footspacer\" }, null, -1 /* CACHED */)),\n        _createElementVNode(\"button\", {\n          type: \"button\",\n          class: \"nd-btn nd-btn--ghost\",\n          onClick: _cache[21] || (_cache[21] = $event => ($setup.emit('close')))\n        }, \"Annuleren\"),\n        _createElementVNode(\"button\", {\n          type: \"button\",\n          class: \"nd-btn\",\n          disabled: $setup.saving,\n          onClick: $setup.save\n        }, _toDisplayString($setup.saving ? \"Opslaan…\" : \"Opslaan\"), 9 /* TEXT, PROPS */, _hoisted_45)\n      ]),\n      default: _withCtx(() => [\n        ($setup.loading)\n          ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, \"Laden…\"))\n          : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n              _createElementVNode(\"div\", _hoisted_4, [\n                _createElementVNode(\"div\", _hoisted_5, [\n                  _cache[24] || (_cache[24] = _createElementVNode(\"label\", {\n                    class: \"nd-label\",\n                    for: \"cf-closedate\"\n                  }, \"Afsluitdatum\", -1 /* CACHED */)),\n                  _withDirectives(_createElementVNode(\"input\", {\n                    id: \"cf-closedate\",\n                    \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.draft.closeDate) = $event)),\n                    class: _normalizeClass([\"nd-input\", { 'is-error': !!$setup.errors.closeDate }]),\n                    type: \"date\",\n                    onInput: _cache[1] || (_cache[1] = $event => ($setup.errors.closeDate = ''))\n                  }, null, 34 /* CLASS, NEED_HYDRATION */), [\n                    [_vModelText, $setup.draft.closeDate]\n                  ]),\n                  ($setup.errors.closeDate)\n                    ? (_openBlock(), _createElementBlock(\"p\", _hoisted_6, _toDisplayString($setup.errors.closeDate), 1 /* TEXT */))\n                    : _createCommentVNode(\"v-if\", true)\n                ]),\n                _createElementVNode(\"div\", _hoisted_7, [\n                  _cache[26] || (_cache[26] = _createElementVNode(\"label\", {\n                    class: \"nd-label\",\n                    for: \"cf-client\"\n                  }, \"Klant\", -1 /* CACHED */)),\n                  _withDirectives(_createElementVNode(\"select\", {\n                    id: \"cf-client\",\n                    \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => (($setup.draft.client) = $event)),\n                    class: _normalizeClass([\"nd-select\", { 'is-error': !!$setup.errors.client }]),\n                    onChange: _cache[3] || (_cache[3] = $event => ($setup.errors.client = ''))\n                  }, [\n                    _cache[25] || (_cache[25] = _createElementVNode(\"option\", {\n                      value: 0,\n                      disabled: \"\"\n                    }, \"— kies —\", -1 /* CACHED */)),\n                    (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.options.clients, (option) => {\n                      return (_openBlock(), _createElementBlock(\"option\", {\n                        key: option.id,\n                        value: option.id\n                      }, _toDisplayString(option.title), 9 /* TEXT, PROPS */, _hoisted_8))\n                    }), 128 /* KEYED_FRAGMENT */))\n                  ], 34 /* CLASS, NEED_HYDRATION */), [\n                    [\n                      _vModelSelect,\n                      $setup.draft.client,\n                      void 0,\n                      { number: true }\n                    ]\n                  ]),\n                  ($setup.errors.client)\n                    ? (_openBlock(), _createElementBlock(\"p\", _hoisted_9, _toDisplayString($setup.errors.client), 1 /* TEXT */))\n                    : _createCommentVNode(\"v-if\", true)\n                ]),\n                _createElementVNode(\"div\", _hoisted_10, [\n                  _cache[28] || (_cache[28] = _createElementVNode(\"label\", {\n                    class: \"nd-label\",\n                    for: \"cf-agent\"\n                  }, \"Accountmanager\", -1 /* CACHED */)),\n                  _withDirectives(_createElementVNode(\"select\", {\n                    id: \"cf-agent\",\n                    \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => (($setup.draft.agent) = $event)),\n                    class: \"nd-select\"\n                  }, [\n                    _cache[27] || (_cache[27] = _createElementVNode(\"option\", { value: 0 }, \"— geen —\", -1 /* CACHED */)),\n                    (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.options.agents, (option) => {\n                      return (_openBlock(), _createElementBlock(\"option\", {\n                        key: option.id,\n                        value: option.id\n                      }, _toDisplayString(option.title), 9 /* TEXT, PROPS */, _hoisted_11))\n                    }), 128 /* KEYED_FRAGMENT */))\n                  ], 512 /* NEED_PATCH */), [\n                    [\n                      _vModelSelect,\n                      $setup.draft.agent,\n                      void 0,\n                      { number: true }\n                    ]\n                  ])\n                ]),\n                _createElementVNode(\"div\", _hoisted_12, [\n                  _cache[30] || (_cache[30] = _createElementVNode(\"label\", {\n                    class: \"nd-label\",\n                    for: \"cf-worker\"\n                  }, \"Binnendienst\", -1 /* CACHED */)),\n                  _withDirectives(_createElementVNode(\"select\", {\n                    id: \"cf-worker\",\n                    \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => (($setup.draft.officeWorker) = $event)),\n                    class: \"nd-select\"\n                  }, [\n                    _cache[29] || (_cache[29] = _createElementVNode(\"option\", { value: 0 }, \"— geen —\", -1 /* CACHED */)),\n                    (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.options.workers, (option) => {\n                      return (_openBlock(), _createElementBlock(\"option\", {\n                        key: option.id,\n                        value: option.id\n                      }, _toDisplayString(option.title), 9 /* TEXT, PROPS */, _hoisted_13))\n                    }), 128 /* KEYED_FRAGMENT */))\n                  ], 512 /* NEED_PATCH */), [\n                    [\n                      _vModelSelect,\n                      $setup.draft.officeWorker,\n                      void 0,\n                      { number: true }\n                    ]\n                  ])\n                ]),\n                _createElementVNode(\"div\", _hoisted_14, [\n                  _cache[32] || (_cache[32] = _createElementVNode(\"label\", {\n                    class: \"nd-label\",\n                    for: \"cf-supplier\"\n                  }, \"Leverancier\", -1 /* CACHED */)),\n                  _withDirectives(_createElementVNode(\"select\", {\n                    id: \"cf-supplier\",\n                    \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => (($setup.draft.supplier) = $event)),\n                    class: _normalizeClass([\"nd-select\", { 'is-error': !!$setup.errors.supplier }]),\n                    onChange: _cache[7] || (_cache[7] = $event => ($setup.errors.supplier = ''))\n                  }, [\n                    _cache[31] || (_cache[31] = _createElementVNode(\"option\", {\n                      value: 0,\n                      disabled: \"\"\n                    }, \"— kies —\", -1 /* CACHED */)),\n                    (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.options.suppliers, (option) => {\n                      return (_openBlock(), _createElementBlock(\"option\", {\n                        key: option.id,\n                        value: option.id\n                      }, _toDisplayString(option.title), 9 /* TEXT, PROPS */, _hoisted_15))\n                    }), 128 /* KEYED_FRAGMENT */))\n                  ], 34 /* CLASS, NEED_HYDRATION */), [\n                    [\n                      _vModelSelect,\n                      $setup.draft.supplier,\n                      void 0,\n                      { number: true }\n                    ]\n                  ]),\n                  ($setup.errors.supplier)\n                    ? (_openBlock(), _createElementBlock(\"p\", _hoisted_16, _toDisplayString($setup.errors.supplier), 1 /* TEXT */))\n                    : _createCommentVNode(\"v-if\", true)\n                ]),\n                _createElementVNode(\"div\", _hoisted_17, [\n                  _createElementVNode(\"div\", _hoisted_18, [\n                    _cache[34] || (_cache[34] = _createElementVNode(\"label\", {\n                      class: \"nd-label\",\n                      for: \"cf-product\"\n                    }, \"Product\", -1 /* CACHED */)),\n                    _withDirectives(_createElementVNode(\"select\", {\n                      id: \"cf-product\",\n                      \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => (($setup.draft.product) = $event)),\n                      class: \"nd-select\"\n                    }, _cache[33] || (_cache[33] = [\n                      _createElementVNode(\"option\", { value: \"power\" }, \"Stroom\", -1 /* CACHED */),\n                      _createElementVNode(\"option\", { value: \"gas\" }, \"Gas\", -1 /* CACHED */)\n                    ]), 512 /* NEED_PATCH */), [\n                      [_vModelSelect, $setup.draft.product]\n                    ])\n                  ]),\n                  _createElementVNode(\"div\", _hoisted_19, [\n                    _cache[36] || (_cache[36] = _createElementVNode(\"label\", {\n                      class: \"nd-label\",\n                      for: \"cf-type\"\n                    }, \"Contractvorm\", -1 /* CACHED */)),\n                    _withDirectives(_createElementVNode(\"select\", {\n                      id: \"cf-type\",\n                      \"onUpdate:modelValue\": _cache[9] || (_cache[9] = $event => (($setup.draft.contractType) = $event)),\n                      class: \"nd-select\"\n                    }, _cache[35] || (_cache[35] = [\n                      _createElementVNode(\"option\", { value: \"fixed\" }, \"Vast\", -1 /* CACHED */),\n                      _createElementVNode(\"option\", { value: \"dynamic\" }, \"Dynamisch\", -1 /* CACHED */)\n                    ]), 512 /* NEED_PATCH */), [\n                      [_vModelSelect, $setup.draft.contractType]\n                    ])\n                  ])\n                ]),\n                _createElementVNode(\"div\", _hoisted_20, [\n                  _cache[37] || (_cache[37] = _createElementVNode(\"label\", {\n                    class: \"nd-label\",\n                    for: \"cf-start\"\n                  }, \"Startdatum\", -1 /* CACHED */)),\n                  _withDirectives(_createElementVNode(\"input\", {\n                    id: \"cf-start\",\n                    \"onUpdate:modelValue\": _cache[10] || (_cache[10] = $event => (($setup.draft.startdate) = $event)),\n                    class: \"nd-input\",\n                    type: \"date\"\n                  }, null, 512 /* NEED_PATCH */), [\n                    [_vModelText, $setup.draft.startdate]\n                  ])\n                ]),\n                _createElementVNode(\"div\", _hoisted_21, [\n                  _cache[38] || (_cache[38] = _createElementVNode(\"label\", {\n                    class: \"nd-label\",\n                    for: \"cf-end\"\n                  }, \"Einddatum\", -1 /* CACHED */)),\n                  _withDirectives(_createElementVNode(\"input\", {\n                    id: \"cf-end\",\n                    \"onUpdate:modelValue\": _cache[11] || (_cache[11] = $event => (($setup.draft.enddate) = $event)),\n                    class: \"nd-input\",\n                    type: \"date\"\n                  }, null, 512 /* NEED_PATCH */), [\n                    [_vModelText, $setup.draft.enddate]\n                  ])\n                ]),\n                _createElementVNode(\"div\", _hoisted_22, [\n                  _cache[39] || (_cache[39] = _createElementVNode(\"label\", {\n                    class: \"nd-label\",\n                    for: \"cf-duration\"\n                  }, \"Looptijd (maanden)\", -1 /* CACHED */)),\n                  _withDirectives(_createElementVNode(\"input\", {\n                    id: \"cf-duration\",\n                    \"onUpdate:modelValue\": _cache[12] || (_cache[12] = $event => (($setup.draft.durationMonths) = $event)),\n                    class: \"nd-input\",\n                    type: \"number\",\n                    min: \"0\",\n                    step: \"1\"\n                  }, null, 512 /* NEED_PATCH */), [\n                    [\n                      _vModelText,\n                      $setup.draft.durationMonths,\n                      void 0,\n                      { number: true }\n                    ]\n                  ])\n                ]),\n                _createElementVNode(\"div\", _hoisted_23, [\n                  _createElementVNode(\"div\", _hoisted_24, [\n                    _cache[40] || (_cache[40] = _createElementVNode(\"label\", {\n                      class: \"nd-label\",\n                      for: \"cf-kwh\"\n                    }, \"Aantal kWh p.j.\", -1 /* CACHED */)),\n                    _withDirectives(_createElementVNode(\"input\", {\n                      id: \"cf-kwh\",\n                      \"onUpdate:modelValue\": _cache[13] || (_cache[13] = $event => (($setup.draft.usageKwh) = $event)),\n                      class: \"nd-input\",\n                      type: \"number\",\n                      min: \"0\",\n                      step: \"1\"\n                    }, null, 512 /* NEED_PATCH */), [\n                      [\n                        _vModelText,\n                        $setup.draft.usageKwh,\n                        void 0,\n                        { number: true }\n                      ]\n                    ])\n                  ]),\n                  _createElementVNode(\"div\", _hoisted_25, [\n                    _cache[41] || (_cache[41] = _createElementVNode(\"label\", {\n                      class: \"nd-label\",\n                      for: \"cf-m3\"\n                    }, \"Aantal m³ p.j.\", -1 /* CACHED */)),\n                    _withDirectives(_createElementVNode(\"input\", {\n                      id: \"cf-m3\",\n                      \"onUpdate:modelValue\": _cache[14] || (_cache[14] = $event => (($setup.draft.usageM3) = $event)),\n                      class: \"nd-input\",\n                      type: \"number\",\n                      min: \"0\",\n                      step: \"1\"\n                    }, null, 512 /* NEED_PATCH */), [\n                      [\n                        _vModelText,\n                        $setup.draft.usageM3,\n                        void 0,\n                        { number: true }\n                      ]\n                    ])\n                  ])\n                ])\n              ]),\n              _cache[52] || (_cache[52] = _createElementVNode(\"div\", { class: \"contractform__section\" }, \"Vergoeding\", -1 /* CACHED */)),\n              _createElementVNode(\"div\", _hoisted_26, [\n                _createElementVNode(\"div\", _hoisted_27, [\n                  _cache[42] || (_cache[42] = _createElementVNode(\"label\", {\n                    class: \"nd-label\",\n                    for: \"cf-margin\"\n                  }, \"Marge (€/kWh of €/m³)\", -1 /* CACHED */)),\n                  _withDirectives(_createElementVNode(\"input\", {\n                    id: \"cf-margin\",\n                    \"onUpdate:modelValue\": _cache[15] || (_cache[15] = $event => (($setup.draft.margin) = $event)),\n                    class: \"nd-input\",\n                    type: \"number\",\n                    min: \"0\",\n                    step: \"0.0001\"\n                  }, null, 512 /* NEED_PATCH */), [\n                    [\n                      _vModelText,\n                      $setup.draft.margin,\n                      void 0,\n                      { number: true }\n                    ]\n                  ])\n                ]),\n                _createElementVNode(\"div\", _hoisted_28, [\n                  _cache[43] || (_cache[43] = _createElementVNode(\"label\", {\n                    class: \"nd-label\",\n                    for: \"cf-marginagent\"\n                  }, \"Marge agent\", -1 /* CACHED */)),\n                  _withDirectives(_createElementVNode(\"input\", {\n                    id: \"cf-marginagent\",\n                    \"onUpdate:modelValue\": _cache[16] || (_cache[16] = $event => (($setup.draft.marginAgent) = $event)),\n                    class: \"nd-input\",\n                    type: \"number\",\n                    min: \"0\",\n                    step: \"0.0001\"\n                  }, null, 512 /* NEED_PATCH */), [\n                    [\n                      _vModelText,\n                      $setup.draft.marginAgent,\n                      void 0,\n                      { number: true }\n                    ]\n                  ])\n                ]),\n                _createElementVNode(\"div\", _hoisted_29, [\n                  _cache[44] || (_cache[44] = _createElementVNode(\"label\", {\n                    class: \"nd-label\",\n                    for: \"cf-sc\"\n                  }, \"Vastrecht p.j.\", -1 /* CACHED */)),\n                  _withDirectives(_createElementVNode(\"input\", {\n                    id: \"cf-sc\",\n                    \"onUpdate:modelValue\": _cache[17] || (_cache[17] = $event => (($setup.draft.standingCharge) = $event)),\n                    class: \"nd-input\",\n                    type: \"number\",\n                    min: \"0\",\n                    step: \"0.01\"\n                  }, null, 512 /* NEED_PATCH */), [\n                    [\n                      _vModelText,\n                      $setup.draft.standingCharge,\n                      void 0,\n                      { number: true }\n                    ]\n                  ])\n                ]),\n                _createElementVNode(\"div\", _hoisted_30, [\n                  _cache[45] || (_cache[45] = _createElementVNode(\"label\", {\n                    class: \"nd-label\",\n                    for: \"cf-scagent\"\n                  }, \"Vastrecht p.j. agent\", -1 /* CACHED */)),\n                  _withDirectives(_createElementVNode(\"input\", {\n                    id: \"cf-scagent\",\n                    \"onUpdate:modelValue\": _cache[18] || (_cache[18] = $event => (($setup.draft.standingChargeAgent) = $event)),\n                    class: \"nd-input\",\n                    type: \"number\",\n                    min: \"0\",\n                    step: \"0.01\"\n                  }, null, 512 /* NEED_PATCH */), [\n                    [\n                      _vModelText,\n                      $setup.draft.standingChargeAgent,\n                      void 0,\n                      { number: true }\n                    ]\n                  ])\n                ])\n              ]),\n              _createElementVNode(\"div\", _hoisted_31, [\n                _createElementVNode(\"div\", _hoisted_32, [\n                  _cache[46] || (_cache[46] = _createElementVNode(\"div\", { class: \"contractform__feelabel\" }, \"Totale vergoeding\", -1 /* CACHED */)),\n                  _createElementVNode(\"div\", _hoisted_33, _toDisplayString($setup.formatEur($setup.fee.total)), 1 /* TEXT */)\n                ]),\n                _createElementVNode(\"div\", _hoisted_34, [\n                  _cache[47] || (_cache[47] = _createElementVNode(\"div\", { class: \"contractform__feelabel\" }, \"Vergoeding agent\", -1 /* CACHED */)),\n                  _createElementVNode(\"div\", _hoisted_35, _toDisplayString($setup.formatEur($setup.fee.agent)), 1 /* TEXT */)\n                ]),\n                _createElementVNode(\"div\", _hoisted_36, [\n                  _cache[48] || (_cache[48] = _createElementVNode(\"div\", { class: \"contractform__feelabel\" }, \"Vergoeding Nudam\", -1 /* CACHED */)),\n                  _createElementVNode(\"div\", _hoisted_37, _toDisplayString($setup.formatEur($setup.fee.nudam)), 1 /* TEXT */)\n                ])\n              ]),\n              ($setup.schedule.length)\n                ? (_openBlock(), _createElementBlock(\"div\", _hoisted_38, [\n                    _createElementVNode(\"table\", _hoisted_39, [\n                      _cache[49] || (_cache[49] = _createElementVNode(\"thead\", null, [\n                        _createElementVNode(\"tr\", null, [\n                          _createElementVNode(\"th\", null, \"Betaaldatum\"),\n                          _createElementVNode(\"th\", null, \"Omschrijving\"),\n                          _createElementVNode(\"th\", { class: \"is-num\" }, \"Bedrag\")\n                        ])\n                      ], -1 /* CACHED */)),\n                      _createElementVNode(\"tbody\", null, [\n                        (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.schedule, (payment, index) => {\n                          return (_openBlock(), _createElementBlock(\"tr\", { key: index }, [\n                            _createElementVNode(\"td\", _hoisted_40, _toDisplayString($setup.formatDateObj(payment.payDate)), 1 /* TEXT */),\n                            _createElementVNode(\"td\", _hoisted_41, _toDisplayString(payment.description), 1 /* TEXT */),\n                            _createElementVNode(\"td\", _hoisted_42, _toDisplayString($setup.formatEur(payment.amount)), 1 /* TEXT */)\n                          ]))\n                        }), 128 /* KEYED_FRAGMENT */))\n                      ])\n                    ])\n                  ]))\n                : (_openBlock(), _createElementBlock(\"div\", _hoisted_43, _cache[50] || (_cache[50] = [\n                    _createElementVNode(\"div\", { class: \"nd-alert nd-alert--warning\" }, \" Het betaalmodel van deze leverancier is nog niet geconfigureerd; het betaalschema volgt in de MVP. \", -1 /* CACHED */)\n                  ]))),\n              _createElementVNode(\"div\", _hoisted_44, [\n                _cache[51] || (_cache[51] = _createElementVNode(\"label\", {\n                  class: \"nd-label\",\n                  for: \"cf-notes\"\n                }, \"Notities\", -1 /* CACHED */)),\n                _withDirectives(_createElementVNode(\"textarea\", {\n                  id: \"cf-notes\",\n                  \"onUpdate:modelValue\": _cache[19] || (_cache[19] = $event => (($setup.draft.notes) = $event)),\n                  class: \"nd-textarea\",\n                  rows: \"3\"\n                }, null, 512 /* NEED_PATCH */), [\n                  [_vModelText, $setup.draft.notes]\n                ])\n              ])\n            ], 64 /* STABLE_FRAGMENT */))\n      ]),\n      _: 1 /* STABLE */\n    }, 8 /* PROPS */, [\"open\", \"title\"]),\n    _createVNode($setup[\"ConfirmDialog\"], {\n      open: $setup.confirmDelete,\n      title: \"Contract verwijderen\",\n      message: `Weet je zeker dat je dit contract${$setup.isConcept ? ' (concept)' : ''} wilt verwijderen?`,\n      \"confirm-label\": \"Verwijderen\",\n      tone: \"danger\",\n      onCancel: _cache[23] || (_cache[23] = $event => ($setup.confirmDelete = false)),\n      onConfirm: $setup.removeContract\n    }, null, 8 /* PROPS */, [\"open\", \"message\"])\n  ], 64 /* STABLE_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/ContractModal.vue?type=script\";import \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/ContractModal.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/ContractModal.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/ContractModal.vue\";script.__scopeId = \"data-v-dd286dba\";export default script;","import { createElementVNode as _createElementVNode, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"contracts\" }\nconst _hoisted_2 = {\n  key: 0,\n  class: \"contracts__loading\"\n}\nconst _hoisted_3 = {\n  key: 1,\n  class: \"nd-empty\"\n}\nconst _hoisted_4 = {\n  key: 2,\n  class: \"nd-tablewrap\"\n}\nconst _hoisted_5 = { class: \"nd-table nd-table--hover\" }\nconst _hoisted_6 = [\"onClick\"]\nconst _hoisted_7 = { class: \"contracts__date\" }\nconst _hoisted_8 = { class: \"contracts__client\" }\nconst _hoisted_9 = { class: \"is-num\" }\nconst _hoisted_10 = { class: \"is-num contracts__fee\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _createVNode($setup[\"PageHeader\"], {\n      title: \"Contracten\",\n      subtitle: \"Alle definitieve energiecontracten\"\n    }, {\n      default: _withCtx(() => [\n        _createElementVNode(\"button\", {\n          type: \"button\",\n          class: \"nd-btn nd-btn--sm\",\n          onClick: $setup.openNew\n        }, \"Nieuw contract\")\n      ]),\n      _: 1 /* STABLE */\n    }),\n    _createElementVNode(\"div\", _hoisted_1, [\n      ($setup.loading)\n        ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, \"Laden…\"))\n        : (!$setup.rows.length)\n          ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n              _cache[1] || (_cache[1] = _createElementVNode(\"p\", { class: \"nd-empty__title\" }, \"Nog geen contracten\", -1 /* CACHED */)),\n              _cache[2] || (_cache[2] = _createElementVNode(\"p\", { class: \"nd-empty__text\" }, \"Voeg een contract toe of laad de demo-data via het Dashboard.\", -1 /* CACHED */)),\n              _createElementVNode(\"button\", {\n                type: \"button\",\n                class: \"nd-btn\",\n                onClick: $setup.openNew\n              }, \"Nieuw contract\")\n            ]))\n          : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n              _createElementVNode(\"table\", _hoisted_5, [\n                _cache[3] || (_cache[3] = _createElementVNode(\"thead\", null, [\n                  _createElementVNode(\"tr\", null, [\n                    _createElementVNode(\"th\", null, \"Datum\"),\n                    _createElementVNode(\"th\", null, \"Klant\"),\n                    _createElementVNode(\"th\", null, \"Leverancier\"),\n                    _createElementVNode(\"th\", null, \"Accountmanager\"),\n                    _createElementVNode(\"th\", null, \"Product\"),\n                    _createElementVNode(\"th\", { class: \"is-num\" }, \"Verbruik p.j.\"),\n                    _createElementVNode(\"th\", { class: \"is-num\" }, \"Vergoeding\")\n                  ])\n                ], -1 /* CACHED */)),\n                _createElementVNode(\"tbody\", null, [\n                  (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.rows, (row) => {\n                    return (_openBlock(), _createElementBlock(\"tr\", {\n                      key: row.id,\n                      onClick: $event => ($setup.openEdit(row.id))\n                    }, [\n                      _createElementVNode(\"td\", _hoisted_7, _toDisplayString($setup.formatDate(row.closeDate)), 1 /* TEXT */),\n                      _createElementVNode(\"td\", _hoisted_8, _toDisplayString(row.clientTitle), 1 /* TEXT */),\n                      _createElementVNode(\"td\", null, _toDisplayString(row.supplierTitle), 1 /* TEXT */),\n                      _createElementVNode(\"td\", null, _toDisplayString(row.agentTitle), 1 /* TEXT */),\n                      _createElementVNode(\"td\", null, [\n                        _createElementVNode(\"span\", {\n                          class: _normalizeClass([\"nd-badge\", row.product === 'gas' ? 'nd-badge--warning' : 'nd-badge--blue'])\n                        }, _toDisplayString(row.product === \"gas\" ? \"Gas\" : \"Stroom\"), 3 /* TEXT, CLASS */)\n                      ]),\n                      _createElementVNode(\"td\", _hoisted_9, _toDisplayString($setup.formatNumber(row.usage)) + \" \" + _toDisplayString(row.product === \"gas\" ? \"m³\" : \"kWh\"), 1 /* TEXT */),\n                      _createElementVNode(\"td\", _hoisted_10, _toDisplayString($setup.formatEur(row.feeTotal)), 1 /* TEXT */)\n                    ], 8 /* PROPS */, _hoisted_6))\n                  }), 128 /* KEYED_FRAGMENT */))\n                ])\n              ])\n            ]))\n    ]),\n    _createVNode($setup[\"ContractModal\"], {\n      open: $setup.modalOpen,\n      \"contract-id\": $setup.editingId,\n      onClose: _cache[0] || (_cache[0] = $event => ($setup.modalOpen = false)),\n      onSaved: $setup.load\n    }, null, 8 /* PROPS */, [\"open\", \"contract-id\"])\n  ], 64 /* STABLE_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/ContractenView.vue?type=script\";import \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/ContractenView.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/ContractenView.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/ContractenView.vue\";script.__scopeId = \"data-v-b43699a2\";export default script;","<template>\n  <PageHeader title=\"Concepten\" subtitle=\"Ingelezen offertes die wachten op goedkeuring\">\n    <button type=\"button\" class=\"nd-btn nd-btn--sm\" :disabled=\"reading\" @click=\"readMailbox\">\n      {{ reading ? \"Mailbox lezen…\" : \"Lees mailbox\" }}\n    </button>\n  </PageHeader>\n\n  <div class=\"concepts\">\n    <div class=\"nd-alert\">\n      <span class=\"nd-alert__title\">Offerte-mailbox</span>\n      Klik op \"Lees mailbox\" om de offerte-mailbox uit te lezen. Gevonden offertes verschijnen hier als\n      concept en tellen pas mee in het dashboard na goedkeuring.\n    </div>\n\n    <div v-if=\"loading\" class=\"concepts__loading\">Laden…</div>\n\n    <div v-else-if=\"!rows.length\" class=\"nd-empty\">\n      <p class=\"nd-empty__title\">Geen concepten</p>\n      <p class=\"nd-empty__text\">Klik rechtsboven op \"Lees mailbox\" om nieuwe offertes op te halen.</p>\n    </div>\n\n    <div v-else class=\"nd-tablewrap\">\n      <table class=\"nd-table nd-table--hover\">\n        <thead>\n          <tr>\n            <th>Datum</th>\n            <th>Klant</th>\n            <th>Leverancier</th>\n            <th>Product</th>\n            <th class=\"is-num\">Verbruik p.j.</th>\n            <th class=\"is-num\">Vergoeding</th>\n            <th>Bron</th>\n            <th />\n          </tr>\n        </thead>\n        <tbody>\n          <tr v-for=\"row in rows\" :key=\"row.id\" @click=\"openEdit(row.id)\">\n            <td class=\"concepts__date\">{{ formatDate(row.closeDate) }}</td>\n            <td class=\"concepts__client\">{{ row.clientTitle }}</td>\n            <td>{{ row.supplierTitle }}</td>\n            <td>\n              <span class=\"nd-badge\" :class=\"row.product === 'gas' ? 'nd-badge--warning' : 'nd-badge--blue'\">\n                {{ row.product === \"gas\" ? \"Gas\" : \"Stroom\" }}\n              </span>\n            </td>\n            <td class=\"is-num\">{{ formatNumber(row.usage) }} {{ row.product === \"gas\" ? \"m³\" : \"kWh\" }}</td>\n            <td class=\"is-num concepts__fee\">{{ formatEur(row.feeTotal) }}</td>\n            <td>\n              <span class=\"nd-badge\" :class=\"row.source === 'mailbox' ? 'nd-badge--blue' : 'nd-badge--neutral'\">\n                {{ row.source === \"mailbox\" ? \"Mailbox\" : \"Handmatig\" }}\n              </span>\n            </td>\n            <td class=\"concepts__actions\" @click.stop>\n              <button type=\"button\" class=\"nd-btn nd-btn--secondary nd-btn--sm\" @click=\"openEdit(row.id)\">Bekijken</button>\n              <button type=\"button\" class=\"nd-btn nd-btn--sm\" :disabled=\"approvingId === row.id\" @click=\"approve(row)\">\n                {{ approvingId === row.id ? \"Goedkeuren…\" : \"Goedkeuren\" }}\n              </button>\n            </td>\n          </tr>\n        </tbody>\n      </table>\n    </div>\n  </div>\n\n  <ContractModal :open=\"modalOpen\" :contract-id=\"editingId\" @close=\"modalOpen = false\" @saved=\"load\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, ref } from \"vue\";\nimport PageHeader from \"../components/PageHeader.vue\";\nimport ContractModal from \"../components/ContractModal.vue\";\nimport { api, type ContractRow } from \"../lib/api\";\nimport { formatDate, formatEur, formatNumber } from \"../lib/format\";\nimport { showToast } from \"../lib/toast\";\nimport { refreshConceptCount } from \"../lib/state\";\n\nconst loading = ref(true);\nconst reading = ref(false);\nconst approvingId = ref<number | null>(null);\nconst rows = ref<ContractRow[]>([]);\nconst modalOpen = ref(false);\nconst editingId = ref<number | null>(null);\n\nasync function load() {\n  try {\n    const result = await api.listContracts({ concepts: true });\n    rows.value = result.contracts;\n    void refreshConceptCount();\n  } catch (error) {\n    showToast(\"error\", error instanceof Error ? error.message : \"Concepten laden mislukt.\");\n  } finally {\n    loading.value = false;\n  }\n}\n\nasync function readMailbox() {\n  reading.value = true;\n  try {\n    const result = await api.readMailbox();\n    if (result.found > 0)\n      showToast(\"success\", `1 nieuwe offerte gevonden in de mailbox: \"${result.clientTitle}\" toegevoegd als concept.`);\n    else\n      showToast(\"info\", \"Geen nieuwe offertes gevonden in de mailbox.\");\n    await load();\n  } catch (error) {\n    showToast(\"error\", error instanceof Error ? error.message : \"Mailbox lezen mislukt.\");\n  } finally {\n    reading.value = false;\n  }\n}\n\nasync function approve(row: ContractRow) {\n  approvingId.value = row.id;\n  try {\n    await api.approveConcept({ id: row.id });\n    showToast(\"success\", `Contract voor \"${row.clientTitle}\" goedgekeurd en toegevoegd aan de contractenlijst.`);\n    await load();\n  } catch (error) {\n    showToast(\"error\", error instanceof Error ? error.message : \"Goedkeuren mislukt.\");\n  } finally {\n    approvingId.value = null;\n  }\n}\n\nfunction openEdit(id: number) {\n  editingId.value = id;\n  modalOpen.value = true;\n}\n\nonMounted(() => void load());\n</script>\n\n<style scoped>\n.concepts {\n  flex: 1;\n  padding: 28px 32px;\n  display: flex;\n  flex-direction: column;\n  gap: 16px;\n}\n\n.concepts__loading {\n  padding: 48px 0;\n  text-align: center;\n  color: var(--nd-color-muted);\n}\n\n.concepts__date {\n  color: var(--nd-color-muted);\n  white-space: nowrap;\n}\n\n.concepts__client {\n  font-weight: 700;\n}\n\n.concepts__fee {\n  font-weight: 700;\n}\n\n.concepts__actions {\n  white-space: nowrap;\n}\n\n.concepts__actions .nd-btn {\n  margin-left: 8px;\n}\n</style>\n","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, withCtx as _withCtx, createVNode as _createVNode, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, normalizeClass as _normalizeClass, withModifiers as _withModifiers } from \"vue\"\n\nconst _hoisted_1 = [\"disabled\"]\nconst _hoisted_2 = { class: \"concepts\" }\nconst _hoisted_3 = {\n  key: 0,\n  class: \"concepts__loading\"\n}\nconst _hoisted_4 = {\n  key: 1,\n  class: \"nd-empty\"\n}\nconst _hoisted_5 = {\n  key: 2,\n  class: \"nd-tablewrap\"\n}\nconst _hoisted_6 = { class: \"nd-table nd-table--hover\" }\nconst _hoisted_7 = [\"onClick\"]\nconst _hoisted_8 = { class: \"concepts__date\" }\nconst _hoisted_9 = { class: \"concepts__client\" }\nconst _hoisted_10 = { class: \"is-num\" }\nconst _hoisted_11 = { class: \"is-num concepts__fee\" }\nconst _hoisted_12 = [\"onClick\"]\nconst _hoisted_13 = [\"disabled\", \"onClick\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _createVNode($setup[\"PageHeader\"], {\n      title: \"Concepten\",\n      subtitle: \"Ingelezen offertes die wachten op goedkeuring\"\n    }, {\n      default: _withCtx(() => [\n        _createElementVNode(\"button\", {\n          type: \"button\",\n          class: \"nd-btn nd-btn--sm\",\n          disabled: $setup.reading,\n          onClick: $setup.readMailbox\n        }, _toDisplayString($setup.reading ? \"Mailbox lezen…\" : \"Lees mailbox\"), 9 /* TEXT, PROPS */, _hoisted_1)\n      ]),\n      _: 1 /* STABLE */\n    }),\n    _createElementVNode(\"div\", _hoisted_2, [\n      _cache[4] || (_cache[4] = _createElementVNode(\"div\", { class: \"nd-alert\" }, [\n        _createElementVNode(\"span\", { class: \"nd-alert__title\" }, \"Offerte-mailbox\"),\n        _createTextVNode(\" Klik op \\\"Lees mailbox\\\" om de offerte-mailbox uit te lezen. Gevonden offertes verschijnen hier als concept en tellen pas mee in het dashboard na goedkeuring. \")\n      ], -1 /* CACHED */)),\n      ($setup.loading)\n        ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, \"Laden…\"))\n        : (!$setup.rows.length)\n          ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, _cache[2] || (_cache[2] = [\n              _createElementVNode(\"p\", { class: \"nd-empty__title\" }, \"Geen concepten\", -1 /* CACHED */),\n              _createElementVNode(\"p\", { class: \"nd-empty__text\" }, \"Klik rechtsboven op \\\"Lees mailbox\\\" om nieuwe offertes op te halen.\", -1 /* CACHED */)\n            ])))\n          : (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n              _createElementVNode(\"table\", _hoisted_6, [\n                _cache[3] || (_cache[3] = _createElementVNode(\"thead\", null, [\n                  _createElementVNode(\"tr\", null, [\n                    _createElementVNode(\"th\", null, \"Datum\"),\n                    _createElementVNode(\"th\", null, \"Klant\"),\n                    _createElementVNode(\"th\", null, \"Leverancier\"),\n                    _createElementVNode(\"th\", null, \"Product\"),\n                    _createElementVNode(\"th\", { class: \"is-num\" }, \"Verbruik p.j.\"),\n                    _createElementVNode(\"th\", { class: \"is-num\" }, \"Vergoeding\"),\n                    _createElementVNode(\"th\", null, \"Bron\"),\n                    _createElementVNode(\"th\")\n                  ])\n                ], -1 /* CACHED */)),\n                _createElementVNode(\"tbody\", null, [\n                  (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.rows, (row) => {\n                    return (_openBlock(), _createElementBlock(\"tr\", {\n                      key: row.id,\n                      onClick: $event => ($setup.openEdit(row.id))\n                    }, [\n                      _createElementVNode(\"td\", _hoisted_8, _toDisplayString($setup.formatDate(row.closeDate)), 1 /* TEXT */),\n                      _createElementVNode(\"td\", _hoisted_9, _toDisplayString(row.clientTitle), 1 /* TEXT */),\n                      _createElementVNode(\"td\", null, _toDisplayString(row.supplierTitle), 1 /* TEXT */),\n                      _createElementVNode(\"td\", null, [\n                        _createElementVNode(\"span\", {\n                          class: _normalizeClass([\"nd-badge\", row.product === 'gas' ? 'nd-badge--warning' : 'nd-badge--blue'])\n                        }, _toDisplayString(row.product === \"gas\" ? \"Gas\" : \"Stroom\"), 3 /* TEXT, CLASS */)\n                      ]),\n                      _createElementVNode(\"td\", _hoisted_10, _toDisplayString($setup.formatNumber(row.usage)) + \" \" + _toDisplayString(row.product === \"gas\" ? \"m³\" : \"kWh\"), 1 /* TEXT */),\n                      _createElementVNode(\"td\", _hoisted_11, _toDisplayString($setup.formatEur(row.feeTotal)), 1 /* TEXT */),\n                      _createElementVNode(\"td\", null, [\n                        _createElementVNode(\"span\", {\n                          class: _normalizeClass([\"nd-badge\", row.source === 'mailbox' ? 'nd-badge--blue' : 'nd-badge--neutral'])\n                        }, _toDisplayString(row.source === \"mailbox\" ? \"Mailbox\" : \"Handmatig\"), 3 /* TEXT, CLASS */)\n                      ]),\n                      _createElementVNode(\"td\", {\n                        class: \"concepts__actions\",\n                        onClick: _cache[0] || (_cache[0] = _withModifiers(() => {}, [\"stop\"]))\n                      }, [\n                        _createElementVNode(\"button\", {\n                          type: \"button\",\n                          class: \"nd-btn nd-btn--secondary nd-btn--sm\",\n                          onClick: $event => ($setup.openEdit(row.id))\n                        }, \"Bekijken\", 8 /* PROPS */, _hoisted_12),\n                        _createElementVNode(\"button\", {\n                          type: \"button\",\n                          class: \"nd-btn nd-btn--sm\",\n                          disabled: $setup.approvingId === row.id,\n                          onClick: $event => ($setup.approve(row))\n                        }, _toDisplayString($setup.approvingId === row.id ? \"Goedkeuren…\" : \"Goedkeuren\"), 9 /* TEXT, PROPS */, _hoisted_13)\n                      ])\n                    ], 8 /* PROPS */, _hoisted_7))\n                  }), 128 /* KEYED_FRAGMENT */))\n                ])\n              ])\n            ]))\n    ]),\n    _createVNode($setup[\"ContractModal\"], {\n      open: $setup.modalOpen,\n      \"contract-id\": $setup.editingId,\n      onClose: _cache[1] || (_cache[1] = $event => ($setup.modalOpen = false)),\n      onSaved: $setup.load\n    }, null, 8 /* PROPS */, [\"open\", \"contract-id\"])\n  ], 64 /* STABLE_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/ConceptenView.vue?type=script\";import \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/ConceptenView.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/ConceptenView.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/ConceptenView.vue\";script.__scopeId = \"data-v-0e8348ec\";export default script;","<template>\n  <PageHeader title=\"Klanten\" subtitle=\"Zakelijke klanten en hun contactgegevens\">\n    <button type=\"button\" class=\"nd-btn nd-btn--sm\" @click=\"openNew\">Nieuwe klant</button>\n  </PageHeader>\n\n  <div class=\"clients\">\n    <div v-if=\"loading\" class=\"clients__loading\">Laden…</div>\n\n    <div v-else-if=\"!rows.length\" class=\"nd-empty\">\n      <p class=\"nd-empty__title\">Nog geen klanten</p>\n      <p class=\"nd-empty__text\">Voeg een klant toe of laad de demo-data via het Dashboard.</p>\n      <button type=\"button\" class=\"nd-btn\" @click=\"openNew\">Nieuwe klant</button>\n    </div>\n\n    <div v-else class=\"nd-tablewrap\">\n      <table class=\"nd-table nd-table--hover\">\n        <thead>\n          <tr>\n            <th>Bedrijfsnaam</th>\n            <th>Contactpersoon</th>\n            <th>Plaats</th>\n            <th>E-mail</th>\n            <th class=\"is-num\">Contracten</th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr v-for=\"row in rows\" :key=\"row.id\" @click=\"openEdit(row)\">\n            <td class=\"clients__name\">{{ row.wrdTitle }}</td>\n            <td>{{ row.contactName || \"\\u2014\" }}</td>\n            <td>{{ row.city || \"\\u2014\" }}</td>\n            <td class=\"clients__email\">{{ row.email || \"\\u2014\" }}</td>\n            <td class=\"is-num\">{{ row.contractCount }}</td>\n          </tr>\n        </tbody>\n      </table>\n    </div>\n  </div>\n\n  <ClientModal :open=\"modalOpen\" :client-id=\"editingId\" :initial=\"editingClient\" @close=\"modalOpen = false\" @saved=\"load\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, ref } from \"vue\";\nimport PageHeader from \"../components/PageHeader.vue\";\nimport ClientModal from \"../components/ClientModal.vue\";\nimport { api, type ClientInput } from \"../lib/api\";\nimport { showToast } from \"../lib/toast\";\n\ntype ClientRow = ClientInput & { id: number; contractCount: number };\n\nconst loading = ref(true);\nconst rows = ref<ClientRow[]>([]);\nconst modalOpen = ref(false);\nconst editingId = ref<number | null>(null);\nconst editingClient = ref<(ClientInput & { id: number }) | null>(null);\n\nasync function load() {\n  try {\n    const result = await api.listClients();\n    rows.value = result.clients;\n  } catch (error) {\n    showToast(\"error\", error instanceof Error ? error.message : \"Klanten laden mislukt.\");\n  } finally {\n    loading.value = false;\n  }\n}\n\nfunction openNew() {\n  editingId.value = null;\n  editingClient.value = null;\n  modalOpen.value = true;\n}\n\nfunction openEdit(row: ClientRow) {\n  editingId.value = row.id;\n  editingClient.value = { ...row };\n  modalOpen.value = true;\n}\n\nonMounted(() => void load());\n</script>\n\n<style scoped>\n.clients {\n  flex: 1;\n  padding: 28px 32px;\n}\n\n.clients__loading {\n  padding: 48px 0;\n  text-align: center;\n  color: var(--nd-color-muted);\n}\n\n.clients__name {\n  font-weight: 700;\n}\n\n.clients__email {\n  color: var(--nd-color-muted);\n}\n</style>\n","<template>\n  <ModalShell :open=\"open\" :title=\"clientId ? 'Klant bewerken' : 'Nieuwe klant'\" :width=\"460\" @close=\"emit('close')\">\n    <div class=\"clientform\">\n      <div class=\"clientform__field\">\n        <label class=\"nd-label\" for=\"cl-name\">Bedrijfsnaam</label>\n        <input id=\"cl-name\" v-model=\"draft.wrdTitle\" class=\"nd-input\" :class=\"{ 'is-error': !!errors.wrdTitle }\" type=\"text\" @input=\"errors.wrdTitle = ''\">\n        <p v-if=\"errors.wrdTitle\" class=\"nd-fielderror\">{{ errors.wrdTitle }}</p>\n      </div>\n      <div class=\"clientform__field\">\n        <label class=\"nd-label\" for=\"cl-contact\">Contactpersoon</label>\n        <input id=\"cl-contact\" v-model=\"draft.contactName\" class=\"nd-input\" type=\"text\">\n      </div>\n      <div class=\"clientform__field\">\n        <label class=\"nd-label\" for=\"cl-email\">E-mailadres</label>\n        <input id=\"cl-email\" v-model=\"draft.email\" class=\"nd-input\" :class=\"{ 'is-error': !!errors.email }\" type=\"email\" @input=\"errors.email = ''\">\n        <p v-if=\"errors.email\" class=\"nd-fielderror\">{{ errors.email }}</p>\n      </div>\n      <div class=\"clientform__field\">\n        <label class=\"nd-label\" for=\"cl-phone\">Telefoon</label>\n        <input id=\"cl-phone\" v-model=\"draft.phone\" class=\"nd-input\" type=\"tel\">\n      </div>\n      <div class=\"clientform__field\">\n        <label class=\"nd-label\" for=\"cl-city\">Plaats</label>\n        <input id=\"cl-city\" v-model=\"draft.city\" class=\"nd-input\" type=\"text\">\n      </div>\n    </div>\n\n    <template #footer>\n      <button\n        v-if=\"clientId\"\n        type=\"button\"\n        class=\"nd-btn nd-btn--danger nd-btn--sm\"\n        @click=\"confirmDelete = true\"\n      >Verwijderen</button>\n      <span class=\"clientform__footspacer\" />\n      <button type=\"button\" class=\"nd-btn nd-btn--ghost\" @click=\"emit('close')\">Annuleren</button>\n      <button type=\"button\" class=\"nd-btn\" :disabled=\"saving\" @click=\"save\">\n        {{ saving ? \"Opslaan…\" : \"Opslaan\" }}\n      </button>\n    </template>\n  </ModalShell>\n\n  <ConfirmDialog\n    :open=\"confirmDelete\"\n    title=\"Klant verwijderen\"\n    :message=\"`Weet je zeker dat je ${draft.wrdTitle || 'deze klant'} wilt verwijderen?`\"\n    confirm-label=\"Verwijderen\"\n    tone=\"danger\"\n    @cancel=\"confirmDelete = false\"\n    @confirm=\"removeClient\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nimport { reactive, ref, watch } from \"vue\";\nimport ModalShell from \"./ModalShell.vue\";\nimport ConfirmDialog from \"./ConfirmDialog.vue\";\nimport { api, type ClientInput } from \"../lib/api\";\nimport { showToast } from \"../lib/toast\";\n\nconst props = defineProps<{\n  open: boolean;\n  clientId: number | null;\n  initial: (ClientInput & { id: number }) | null;\n}>();\n\nconst emit = defineEmits<{ (e: \"close\"): void; (e: \"saved\"): void }>();\n\nconst saving = ref(false);\nconst confirmDelete = ref(false);\nconst errors = reactive<Record<string, string>>({});\n\nfunction emptyDraft(): ClientInput {\n  return { wrdTitle: \"\", contactName: \"\", email: \"\", phone: \"\", city: \"\" };\n}\n\nconst draft = reactive(emptyDraft());\n\nwatch(() => props.open, (open) => {\n  if (!open)\n    return;\n  Object.assign(draft, emptyDraft(), props.initial ?? {});\n  Object.keys(errors).forEach(key => delete errors[key]);\n  confirmDelete.value = false;\n});\n\nfunction validate(): boolean {\n  Object.keys(errors).forEach(key => delete errors[key]);\n  if (!draft.wrdTitle.trim())\n    errors.wrdTitle = \"Vul een bedrijfsnaam in.\";\n  if (draft.email && !/^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$/.test(draft.email))\n    errors.email = \"Vul een geldig e-mailadres in.\";\n  return Object.keys(errors).length === 0;\n}\n\nasync function save() {\n  if (!validate())\n    return;\n  saving.value = true;\n  try {\n    await api.saveClient({ id: props.clientId, data: { ...draft } });\n    showToast(\"success\", props.clientId ? \"Klant opgeslagen.\" : \"Klant aangemaakt.\");\n    emit(\"saved\");\n    emit(\"close\");\n  } catch (error) {\n    showToast(\"error\", error instanceof Error ? error.message : \"Opslaan mislukt.\");\n  } finally {\n    saving.value = false;\n  }\n}\n\nasync function removeClient() {\n  confirmDelete.value = false;\n  if (!props.clientId)\n    return;\n  try {\n    await api.deleteClient({ id: props.clientId });\n    showToast(\"success\", \"Klant verwijderd.\");\n    emit(\"saved\");\n    emit(\"close\");\n  } catch (error) {\n    showToast(\"error\", error instanceof Error ? error.message : \"Verwijderen mislukt.\");\n  }\n}\n</script>\n\n<style scoped>\n.clientform {\n  display: flex;\n  flex-direction: column;\n  gap: 14px;\n}\n\n.clientform__footspacer {\n  flex: 1;\n}\n</style>\n","import { createElementVNode as _createElementVNode, vModelText as _vModelText, normalizeClass as _normalizeClass, withDirectives as _withDirectives, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, withCtx as _withCtx, createVNode as _createVNode, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = { class: \"clientform\" }\nconst _hoisted_2 = { class: \"clientform__field\" }\nconst _hoisted_3 = {\n  key: 0,\n  class: \"nd-fielderror\"\n}\nconst _hoisted_4 = { class: \"clientform__field\" }\nconst _hoisted_5 = { class: \"clientform__field\" }\nconst _hoisted_6 = {\n  key: 0,\n  class: \"nd-fielderror\"\n}\nconst _hoisted_7 = { class: \"clientform__field\" }\nconst _hoisted_8 = { class: \"clientform__field\" }\nconst _hoisted_9 = [\"disabled\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _createVNode($setup[\"ModalShell\"], {\n      open: $props.open,\n      title: $props.clientId ? 'Klant bewerken' : 'Nieuwe klant',\n      width: 460,\n      onClose: _cache[9] || (_cache[9] = $event => ($setup.emit('close')))\n    }, {\n      footer: _withCtx(() => [\n        ($props.clientId)\n          ? (_openBlock(), _createElementBlock(\"button\", {\n              key: 0,\n              type: \"button\",\n              class: \"nd-btn nd-btn--danger nd-btn--sm\",\n              onClick: _cache[7] || (_cache[7] = $event => ($setup.confirmDelete = true))\n            }, \"Verwijderen\"))\n          : _createCommentVNode(\"v-if\", true),\n        _cache[16] || (_cache[16] = _createElementVNode(\"span\", { class: \"clientform__footspacer\" }, null, -1 /* CACHED */)),\n        _createElementVNode(\"button\", {\n          type: \"button\",\n          class: \"nd-btn nd-btn--ghost\",\n          onClick: _cache[8] || (_cache[8] = $event => ($setup.emit('close')))\n        }, \"Annuleren\"),\n        _createElementVNode(\"button\", {\n          type: \"button\",\n          class: \"nd-btn\",\n          disabled: $setup.saving,\n          onClick: $setup.save\n        }, _toDisplayString($setup.saving ? \"Opslaan…\" : \"Opslaan\"), 9 /* TEXT, PROPS */, _hoisted_9)\n      ]),\n      default: _withCtx(() => [\n        _createElementVNode(\"div\", _hoisted_1, [\n          _createElementVNode(\"div\", _hoisted_2, [\n            _cache[11] || (_cache[11] = _createElementVNode(\"label\", {\n              class: \"nd-label\",\n              for: \"cl-name\"\n            }, \"Bedrijfsnaam\", -1 /* CACHED */)),\n            _withDirectives(_createElementVNode(\"input\", {\n              id: \"cl-name\",\n              \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.draft.wrdTitle) = $event)),\n              class: _normalizeClass([\"nd-input\", { 'is-error': !!$setup.errors.wrdTitle }]),\n              type: \"text\",\n              onInput: _cache[1] || (_cache[1] = $event => ($setup.errors.wrdTitle = ''))\n            }, null, 34 /* CLASS, NEED_HYDRATION */), [\n              [_vModelText, $setup.draft.wrdTitle]\n            ]),\n            ($setup.errors.wrdTitle)\n              ? (_openBlock(), _createElementBlock(\"p\", _hoisted_3, _toDisplayString($setup.errors.wrdTitle), 1 /* TEXT */))\n              : _createCommentVNode(\"v-if\", true)\n          ]),\n          _createElementVNode(\"div\", _hoisted_4, [\n            _cache[12] || (_cache[12] = _createElementVNode(\"label\", {\n              class: \"nd-label\",\n              for: \"cl-contact\"\n            }, \"Contactpersoon\", -1 /* CACHED */)),\n            _withDirectives(_createElementVNode(\"input\", {\n              id: \"cl-contact\",\n              \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => (($setup.draft.contactName) = $event)),\n              class: \"nd-input\",\n              type: \"text\"\n            }, null, 512 /* NEED_PATCH */), [\n              [_vModelText, $setup.draft.contactName]\n            ])\n          ]),\n          _createElementVNode(\"div\", _hoisted_5, [\n            _cache[13] || (_cache[13] = _createElementVNode(\"label\", {\n              class: \"nd-label\",\n              for: \"cl-email\"\n            }, \"E-mailadres\", -1 /* CACHED */)),\n            _withDirectives(_createElementVNode(\"input\", {\n              id: \"cl-email\",\n              \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => (($setup.draft.email) = $event)),\n              class: _normalizeClass([\"nd-input\", { 'is-error': !!$setup.errors.email }]),\n              type: \"email\",\n              onInput: _cache[4] || (_cache[4] = $event => ($setup.errors.email = ''))\n            }, null, 34 /* CLASS, NEED_HYDRATION */), [\n              [_vModelText, $setup.draft.email]\n            ]),\n            ($setup.errors.email)\n              ? (_openBlock(), _createElementBlock(\"p\", _hoisted_6, _toDisplayString($setup.errors.email), 1 /* TEXT */))\n              : _createCommentVNode(\"v-if\", true)\n          ]),\n          _createElementVNode(\"div\", _hoisted_7, [\n            _cache[14] || (_cache[14] = _createElementVNode(\"label\", {\n              class: \"nd-label\",\n              for: \"cl-phone\"\n            }, \"Telefoon\", -1 /* CACHED */)),\n            _withDirectives(_createElementVNode(\"input\", {\n              id: \"cl-phone\",\n              \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => (($setup.draft.phone) = $event)),\n              class: \"nd-input\",\n              type: \"tel\"\n            }, null, 512 /* NEED_PATCH */), [\n              [_vModelText, $setup.draft.phone]\n            ])\n          ]),\n          _createElementVNode(\"div\", _hoisted_8, [\n            _cache[15] || (_cache[15] = _createElementVNode(\"label\", {\n              class: \"nd-label\",\n              for: \"cl-city\"\n            }, \"Plaats\", -1 /* CACHED */)),\n            _withDirectives(_createElementVNode(\"input\", {\n              id: \"cl-city\",\n              \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => (($setup.draft.city) = $event)),\n              class: \"nd-input\",\n              type: \"text\"\n            }, null, 512 /* NEED_PATCH */), [\n              [_vModelText, $setup.draft.city]\n            ])\n          ])\n        ])\n      ]),\n      _: 1 /* STABLE */\n    }, 8 /* PROPS */, [\"open\", \"title\"]),\n    _createVNode($setup[\"ConfirmDialog\"], {\n      open: $setup.confirmDelete,\n      title: \"Klant verwijderen\",\n      message: `Weet je zeker dat je ${$setup.draft.wrdTitle || 'deze klant'} wilt verwijderen?`,\n      \"confirm-label\": \"Verwijderen\",\n      tone: \"danger\",\n      onCancel: _cache[10] || (_cache[10] = $event => ($setup.confirmDelete = false)),\n      onConfirm: $setup.removeClient\n    }, null, 8 /* PROPS */, [\"open\", \"message\"])\n  ], 64 /* STABLE_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/ClientModal.vue?type=script\";import \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/ClientModal.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/ClientModal.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/ClientModal.vue\";script.__scopeId = \"data-v-255842af\";export default script;","import { createElementVNode as _createElementVNode, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, toDisplayString as _toDisplayString } from \"vue\"\n\nconst _hoisted_1 = { class: \"clients\" }\nconst _hoisted_2 = {\n  key: 0,\n  class: \"clients__loading\"\n}\nconst _hoisted_3 = {\n  key: 1,\n  class: \"nd-empty\"\n}\nconst _hoisted_4 = {\n  key: 2,\n  class: \"nd-tablewrap\"\n}\nconst _hoisted_5 = { class: \"nd-table nd-table--hover\" }\nconst _hoisted_6 = [\"onClick\"]\nconst _hoisted_7 = { class: \"clients__name\" }\nconst _hoisted_8 = { class: \"clients__email\" }\nconst _hoisted_9 = { class: \"is-num\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _createVNode($setup[\"PageHeader\"], {\n      title: \"Klanten\",\n      subtitle: \"Zakelijke klanten en hun contactgegevens\"\n    }, {\n      default: _withCtx(() => [\n        _createElementVNode(\"button\", {\n          type: \"button\",\n          class: \"nd-btn nd-btn--sm\",\n          onClick: $setup.openNew\n        }, \"Nieuwe klant\")\n      ]),\n      _: 1 /* STABLE */\n    }),\n    _createElementVNode(\"div\", _hoisted_1, [\n      ($setup.loading)\n        ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, \"Laden…\"))\n        : (!$setup.rows.length)\n          ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n              _cache[1] || (_cache[1] = _createElementVNode(\"p\", { class: \"nd-empty__title\" }, \"Nog geen klanten\", -1 /* CACHED */)),\n              _cache[2] || (_cache[2] = _createElementVNode(\"p\", { class: \"nd-empty__text\" }, \"Voeg een klant toe of laad de demo-data via het Dashboard.\", -1 /* CACHED */)),\n              _createElementVNode(\"button\", {\n                type: \"button\",\n                class: \"nd-btn\",\n                onClick: $setup.openNew\n              }, \"Nieuwe klant\")\n            ]))\n          : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n              _createElementVNode(\"table\", _hoisted_5, [\n                _cache[3] || (_cache[3] = _createElementVNode(\"thead\", null, [\n                  _createElementVNode(\"tr\", null, [\n                    _createElementVNode(\"th\", null, \"Bedrijfsnaam\"),\n                    _createElementVNode(\"th\", null, \"Contactpersoon\"),\n                    _createElementVNode(\"th\", null, \"Plaats\"),\n                    _createElementVNode(\"th\", null, \"E-mail\"),\n                    _createElementVNode(\"th\", { class: \"is-num\" }, \"Contracten\")\n                  ])\n                ], -1 /* CACHED */)),\n                _createElementVNode(\"tbody\", null, [\n                  (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.rows, (row) => {\n                    return (_openBlock(), _createElementBlock(\"tr\", {\n                      key: row.id,\n                      onClick: $event => ($setup.openEdit(row))\n                    }, [\n                      _createElementVNode(\"td\", _hoisted_7, _toDisplayString(row.wrdTitle), 1 /* TEXT */),\n                      _createElementVNode(\"td\", null, _toDisplayString(row.contactName || \"\\u2014\"), 1 /* TEXT */),\n                      _createElementVNode(\"td\", null, _toDisplayString(row.city || \"\\u2014\"), 1 /* TEXT */),\n                      _createElementVNode(\"td\", _hoisted_8, _toDisplayString(row.email || \"\\u2014\"), 1 /* TEXT */),\n                      _createElementVNode(\"td\", _hoisted_9, _toDisplayString(row.contractCount), 1 /* TEXT */)\n                    ], 8 /* PROPS */, _hoisted_6))\n                  }), 128 /* KEYED_FRAGMENT */))\n                ])\n              ])\n            ]))\n    ]),\n    _createVNode($setup[\"ClientModal\"], {\n      open: $setup.modalOpen,\n      \"client-id\": $setup.editingId,\n      initial: $setup.editingClient,\n      onClose: _cache[0] || (_cache[0] = $event => ($setup.modalOpen = false)),\n      onSaved: $setup.load\n    }, null, 8 /* PROPS */, [\"open\", \"client-id\", \"initial\"])\n  ], 64 /* STABLE_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/KlantenView.vue?type=script\";import \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/KlantenView.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/KlantenView.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/KlantenView.vue\";script.__scopeId = \"data-v-68b24fcc\";export default script;","<template>\n  <PageHeader title=\"Instellingen\" subtitle=\"Leveranciers, medewerkers en demo-data\" />\n\n  <div class=\"settings\">\n    <div v-if=\"loading\" class=\"settings__loading\">Laden…</div>\n\n    <div v-else class=\"settings__grid\">\n      <div class=\"settings__col\">\n        <div class=\"nd-card\">\n          <h2 class=\"nd-card__title\">Leveranciers</h2>\n          <div class=\"nd-card__body\">\n            <p class=\"settings__note\">\n              Het betaalmodel is per leverancier instelbaar. In dit prototype is alleen het\n              Clean Energy-model (70% vooraf / 30% na 15 maanden) doorgerekend.\n            </p>\n            <table class=\"nd-table settings__suppliertable\">\n              <thead>\n                <tr>\n                  <th>Naam</th>\n                  <th>Contractvorm</th>\n                  <th>Betaalmodel</th>\n                </tr>\n              </thead>\n              <tbody>\n                <tr v-for=\"supplier in suppliers\" :key=\"supplier.id\">\n                  <td class=\"settings__suppliername\">{{ supplier.title }}</td>\n                  <td>{{ contractTypeLabel(supplier.contractType) }}</td>\n                  <td class=\"settings__modelcell\">\n                    <select\n                      class=\"nd-select\"\n                      :value=\"supplier.paymentModel\"\n                      :disabled=\"savingModelId === supplier.id\"\n                      @change=\"setPaymentModel(supplier, ($event.target as HTMLSelectElement).value)\"\n                    >\n                      <option value=\"cleanenergy_7030\">Clean Energy: 70% vooraf / 30% na 15 mnd</option>\n                      <option value=\"none\">Nog niet geconfigureerd (volgt in MVP)</option>\n                    </select>\n                  </td>\n                </tr>\n              </tbody>\n            </table>\n          </div>\n        </div>\n\n        <div class=\"nd-card\">\n          <h2 class=\"nd-card__title\">Demo-data</h2>\n          <div class=\"nd-card__body\">\n            <p class=\"settings__note\">\n              Zet alle gegevens terug naar de demo-set: fictieve klanten en contracten van de\n              afgelopen 10 maanden. Alle huidige gegevens worden hierbij gewist.\n            </p>\n            <button type=\"button\" class=\"nd-btn nd-btn--secondary nd-btn--sm\" :disabled=\"resetting\" @click=\"confirmReset = true\">\n              {{ resetting ? \"Demo-data herladen…\" : \"Demo-data herladen\" }}\n            </button>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"settings__col\">\n        <div class=\"nd-card\">\n          <h2 class=\"nd-card__title\">Accountmanagers</h2>\n          <div class=\"nd-card__body settings__people\">\n            <div v-for=\"person in agents\" :key=\"person.id\" class=\"settings__person\">\n              <span class=\"nd-avatar\">{{ initials(person.title) }}</span>\n              <span class=\"settings__personname\">{{ person.title }}</span>\n              <span class=\"settings__personcount\">{{ person.contractCount }} contracten</span>\n            </div>\n            <p v-if=\"!agents.length\" class=\"settings__note\">Nog geen accountmanagers.</p>\n          </div>\n        </div>\n\n        <div class=\"nd-card\">\n          <h2 class=\"nd-card__title\">Binnendienst</h2>\n          <div class=\"nd-card__body settings__people\">\n            <div v-for=\"person in workers\" :key=\"person.id\" class=\"settings__person\">\n              <span class=\"nd-avatar\">{{ initials(person.title) }}</span>\n              <span class=\"settings__personname\">{{ person.title }}</span>\n              <span class=\"settings__personcount\">{{ person.contractCount }} contracten</span>\n            </div>\n            <p v-if=\"!workers.length\" class=\"settings__note\">Nog geen binnendienstmedewerkers.</p>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <ConfirmDialog\n    :open=\"confirmReset\"\n    title=\"Demo-data herladen\"\n    message=\"Alle huidige gegevens (klanten, contracten, concepten, leveranciers) worden gewist en vervangen door de demo-set. Doorgaan?\"\n    confirm-label=\"Herladen\"\n    tone=\"danger\"\n    @cancel=\"confirmReset = false\"\n    @confirm=\"resetDemo\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, ref } from \"vue\";\nimport PageHeader from \"../components/PageHeader.vue\";\nimport ConfirmDialog from \"../components/ConfirmDialog.vue\";\nimport { api, type OptionItem, type SupplierRow } from \"../lib/api\";\nimport { initials } from \"../lib/format\";\nimport { showToast } from \"../lib/toast\";\nimport { refreshConceptCount } from \"../lib/state\";\n\ntype PersonRow = OptionItem & { contractCount: number };\n\nconst loading = ref(true);\nconst suppliers = ref<SupplierRow[]>([]);\nconst agents = ref<PersonRow[]>([]);\nconst workers = ref<PersonRow[]>([]);\nconst savingModelId = ref<number | null>(null);\nconst confirmReset = ref(false);\nconst resetting = ref(false);\n\nfunction contractTypeLabel(type: string): string {\n  switch (type) {\n    case \"fixed\": return \"Vast\";\n    case \"dynamic\": return \"Dynamisch\";\n    case \"both\": return \"Beide\";\n    default: return type;\n  }\n}\n\nasync function load() {\n  try {\n    const result = await api.getSettings();\n    suppliers.value = result.suppliers;\n    agents.value = result.agents;\n    workers.value = result.workers;\n  } catch (error) {\n    showToast(\"error\", error instanceof Error ? error.message : \"Instellingen laden mislukt.\");\n  } finally {\n    loading.value = false;\n  }\n}\n\nasync function setPaymentModel(supplier: SupplierRow, model: string) {\n  savingModelId.value = supplier.id;\n  try {\n    await api.setSupplierPaymentModel({ id: supplier.id, paymentModel: model as \"cleanenergy_7030\" | \"none\" });\n    supplier.paymentModel = model;\n    showToast(\"success\", `Betaalmodel van ${supplier.title} bijgewerkt.`);\n  } catch (error) {\n    showToast(\"error\", error instanceof Error ? error.message : \"Betaalmodel opslaan mislukt.\");\n    await load();\n  } finally {\n    savingModelId.value = null;\n  }\n}\n\nasync function resetDemo() {\n  confirmReset.value = false;\n  resetting.value = true;\n  try {\n    await api.resetDemoData();\n    showToast(\"success\", \"Demo-data opnieuw geladen.\");\n    await load();\n    void refreshConceptCount();\n  } catch (error) {\n    showToast(\"error\", error instanceof Error ? error.message : \"Demo-data herladen mislukt.\");\n  } finally {\n    resetting.value = false;\n  }\n}\n\nonMounted(() => void load());\n</script>\n\n<style scoped>\n.settings {\n  flex: 1;\n  padding: 28px 32px;\n}\n\n.settings__loading {\n  padding: 48px 0;\n  text-align: center;\n  color: var(--nd-color-muted);\n}\n\n.settings__grid {\n  display: grid;\n  grid-template-columns: 1.4fr 1fr;\n  gap: 16px;\n  align-items: start;\n}\n\n@media (max-width: 1100px) {\n  .settings__grid {\n    grid-template-columns: 1fr;\n  }\n}\n\n.settings__col {\n  display: flex;\n  flex-direction: column;\n  gap: 16px;\n}\n\n.settings__note {\n  margin: 0 0 12px 0;\n  font-size: 13px;\n  color: var(--nd-color-muted);\n}\n\n.settings__suppliertable th:first-child,\n.settings__suppliertable td:first-child {\n  padding-left: 0;\n}\n\n.settings__suppliername {\n  font-weight: 700;\n  white-space: nowrap;\n}\n\n.settings__modelcell {\n  min-width: 260px;\n}\n\n.settings__people {\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n}\n\n.settings__person {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n}\n\n.settings__personname {\n  flex: 1;\n  font-size: 14px;\n  font-weight: 700;\n}\n\n.settings__personcount {\n  font-size: 12px;\n  color: var(--nd-color-muted);\n}\n</style>\n","import { createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, toDisplayString as _toDisplayString } from \"vue\"\n\nconst _hoisted_1 = { class: \"settings\" }\nconst _hoisted_2 = {\n  key: 0,\n  class: \"settings__loading\"\n}\nconst _hoisted_3 = {\n  key: 1,\n  class: \"settings__grid\"\n}\nconst _hoisted_4 = { class: \"settings__col\" }\nconst _hoisted_5 = { class: \"nd-card\" }\nconst _hoisted_6 = { class: \"nd-card__body\" }\nconst _hoisted_7 = { class: \"nd-table settings__suppliertable\" }\nconst _hoisted_8 = { class: \"settings__suppliername\" }\nconst _hoisted_9 = { class: \"settings__modelcell\" }\nconst _hoisted_10 = [\"value\", \"disabled\", \"onChange\"]\nconst _hoisted_11 = { class: \"nd-card\" }\nconst _hoisted_12 = { class: \"nd-card__body\" }\nconst _hoisted_13 = [\"disabled\"]\nconst _hoisted_14 = { class: \"settings__col\" }\nconst _hoisted_15 = { class: \"nd-card\" }\nconst _hoisted_16 = { class: \"nd-card__body settings__people\" }\nconst _hoisted_17 = { class: \"nd-avatar\" }\nconst _hoisted_18 = { class: \"settings__personname\" }\nconst _hoisted_19 = { class: \"settings__personcount\" }\nconst _hoisted_20 = {\n  key: 0,\n  class: \"settings__note\"\n}\nconst _hoisted_21 = { class: \"nd-card\" }\nconst _hoisted_22 = { class: \"nd-card__body settings__people\" }\nconst _hoisted_23 = { class: \"nd-avatar\" }\nconst _hoisted_24 = { class: \"settings__personname\" }\nconst _hoisted_25 = { class: \"settings__personcount\" }\nconst _hoisted_26 = {\n  key: 0,\n  class: \"settings__note\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _createVNode($setup[\"PageHeader\"], {\n      title: \"Instellingen\",\n      subtitle: \"Leveranciers, medewerkers en demo-data\"\n    }),\n    _createElementVNode(\"div\", _hoisted_1, [\n      ($setup.loading)\n        ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, \"Laden…\"))\n        : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n            _createElementVNode(\"div\", _hoisted_4, [\n              _createElementVNode(\"div\", _hoisted_5, [\n                _cache[5] || (_cache[5] = _createElementVNode(\"h2\", { class: \"nd-card__title\" }, \"Leveranciers\", -1 /* CACHED */)),\n                _createElementVNode(\"div\", _hoisted_6, [\n                  _cache[4] || (_cache[4] = _createElementVNode(\"p\", { class: \"settings__note\" }, \" Het betaalmodel is per leverancier instelbaar. In dit prototype is alleen het Clean Energy-model (70% vooraf / 30% na 15 maanden) doorgerekend. \", -1 /* CACHED */)),\n                  _createElementVNode(\"table\", _hoisted_7, [\n                    _cache[3] || (_cache[3] = _createElementVNode(\"thead\", null, [\n                      _createElementVNode(\"tr\", null, [\n                        _createElementVNode(\"th\", null, \"Naam\"),\n                        _createElementVNode(\"th\", null, \"Contractvorm\"),\n                        _createElementVNode(\"th\", null, \"Betaalmodel\")\n                      ])\n                    ], -1 /* CACHED */)),\n                    _createElementVNode(\"tbody\", null, [\n                      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.suppliers, (supplier) => {\n                        return (_openBlock(), _createElementBlock(\"tr\", {\n                          key: supplier.id\n                        }, [\n                          _createElementVNode(\"td\", _hoisted_8, _toDisplayString(supplier.title), 1 /* TEXT */),\n                          _createElementVNode(\"td\", null, _toDisplayString($setup.contractTypeLabel(supplier.contractType)), 1 /* TEXT */),\n                          _createElementVNode(\"td\", _hoisted_9, [\n                            _createElementVNode(\"select\", {\n                              class: \"nd-select\",\n                              value: supplier.paymentModel,\n                              disabled: $setup.savingModelId === supplier.id,\n                              onChange: $event => ($setup.setPaymentModel(supplier, ($event.target as HTMLSelectElement).value))\n                            }, _cache[2] || (_cache[2] = [\n                              _createElementVNode(\"option\", { value: \"cleanenergy_7030\" }, \"Clean Energy: 70% vooraf / 30% na 15 mnd\", -1 /* CACHED */),\n                              _createElementVNode(\"option\", { value: \"none\" }, \"Nog niet geconfigureerd (volgt in MVP)\", -1 /* CACHED */)\n                            ]), 40 /* PROPS, NEED_HYDRATION */, _hoisted_10)\n                          ])\n                        ]))\n                      }), 128 /* KEYED_FRAGMENT */))\n                    ])\n                  ])\n                ])\n              ]),\n              _createElementVNode(\"div\", _hoisted_11, [\n                _cache[7] || (_cache[7] = _createElementVNode(\"h2\", { class: \"nd-card__title\" }, \"Demo-data\", -1 /* CACHED */)),\n                _createElementVNode(\"div\", _hoisted_12, [\n                  _cache[6] || (_cache[6] = _createElementVNode(\"p\", { class: \"settings__note\" }, \" Zet alle gegevens terug naar de demo-set: fictieve klanten en contracten van de afgelopen 10 maanden. Alle huidige gegevens worden hierbij gewist. \", -1 /* CACHED */)),\n                  _createElementVNode(\"button\", {\n                    type: \"button\",\n                    class: \"nd-btn nd-btn--secondary nd-btn--sm\",\n                    disabled: $setup.resetting,\n                    onClick: _cache[0] || (_cache[0] = $event => ($setup.confirmReset = true))\n                  }, _toDisplayString($setup.resetting ? \"Demo-data herladen…\" : \"Demo-data herladen\"), 9 /* TEXT, PROPS */, _hoisted_13)\n                ])\n              ])\n            ]),\n            _createElementVNode(\"div\", _hoisted_14, [\n              _createElementVNode(\"div\", _hoisted_15, [\n                _cache[8] || (_cache[8] = _createElementVNode(\"h2\", { class: \"nd-card__title\" }, \"Accountmanagers\", -1 /* CACHED */)),\n                _createElementVNode(\"div\", _hoisted_16, [\n                  (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.agents, (person) => {\n                    return (_openBlock(), _createElementBlock(\"div\", {\n                      key: person.id,\n                      class: \"settings__person\"\n                    }, [\n                      _createElementVNode(\"span\", _hoisted_17, _toDisplayString($setup.initials(person.title)), 1 /* TEXT */),\n                      _createElementVNode(\"span\", _hoisted_18, _toDisplayString(person.title), 1 /* TEXT */),\n                      _createElementVNode(\"span\", _hoisted_19, _toDisplayString(person.contractCount) + \" contracten\", 1 /* TEXT */)\n                    ]))\n                  }), 128 /* KEYED_FRAGMENT */)),\n                  (!$setup.agents.length)\n                    ? (_openBlock(), _createElementBlock(\"p\", _hoisted_20, \"Nog geen accountmanagers.\"))\n                    : _createCommentVNode(\"v-if\", true)\n                ])\n              ]),\n              _createElementVNode(\"div\", _hoisted_21, [\n                _cache[9] || (_cache[9] = _createElementVNode(\"h2\", { class: \"nd-card__title\" }, \"Binnendienst\", -1 /* CACHED */)),\n                _createElementVNode(\"div\", _hoisted_22, [\n                  (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.workers, (person) => {\n                    return (_openBlock(), _createElementBlock(\"div\", {\n                      key: person.id,\n                      class: \"settings__person\"\n                    }, [\n                      _createElementVNode(\"span\", _hoisted_23, _toDisplayString($setup.initials(person.title)), 1 /* TEXT */),\n                      _createElementVNode(\"span\", _hoisted_24, _toDisplayString(person.title), 1 /* TEXT */),\n                      _createElementVNode(\"span\", _hoisted_25, _toDisplayString(person.contractCount) + \" contracten\", 1 /* TEXT */)\n                    ]))\n                  }), 128 /* KEYED_FRAGMENT */)),\n                  (!$setup.workers.length)\n                    ? (_openBlock(), _createElementBlock(\"p\", _hoisted_26, \"Nog geen binnendienstmedewerkers.\"))\n                    : _createCommentVNode(\"v-if\", true)\n                ])\n              ])\n            ])\n          ]))\n    ]),\n    _createVNode($setup[\"ConfirmDialog\"], {\n      open: $setup.confirmReset,\n      title: \"Demo-data herladen\",\n      message: \"Alle huidige gegevens (klanten, contracten, concepten, leveranciers) worden gewist en vervangen door de demo-set. Doorgaan?\",\n      \"confirm-label\": \"Herladen\",\n      tone: \"danger\",\n      onCancel: _cache[1] || (_cache[1] = $event => ($setup.confirmReset = false)),\n      onConfirm: $setup.resetDemo\n    }, null, 8 /* PROPS */, [\"open\"])\n  ], 64 /* STABLE_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/InstellingenView.vue?type=script\";import \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/InstellingenView.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/InstellingenView.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/views/InstellingenView.vue\";script.__scopeId = \"data-v-bddfc6d8\";export default script;","<template>\n  <div v-if=\"isLoggedIn\" class=\"shell\">\n    <aside class=\"sidebar\">\n      <div class=\"sidebar__brand\">\n        <span class=\"sidebar__brandname\">Nudam</span>\n        <span class=\"sidebar__brandtag\">Beheer</span>\n      </div>\n\n      <nav class=\"sidebar__nav\">\n        <RouterLink\n          v-for=\"item in navItems\"\n          :key=\"item.name\"\n          :to=\"{ name: item.name }\"\n          class=\"sidebar__navitem\"\n          :class=\"{ 'sidebar__navitem--active': route.name === item.name }\"\n        >\n          <span class=\"sidebar__navlabel\">{{ item.label }}</span>\n          <span\n            v-if=\"item.name === 'concepten' && conceptCount > 0\"\n            class=\"sidebar__navbadge\"\n            :class=\"{ 'sidebar__navbadge--inverse': route.name === 'concepten' }\"\n          >{{ conceptCount }}</span>\n        </RouterLink>\n        <div class=\"sidebar__divider\" />\n        <RouterLink\n          :to=\"{ name: 'instellingen' }\"\n          class=\"sidebar__navitem\"\n          :class=\"{ 'sidebar__navitem--active': route.name === 'instellingen' }\"\n        >\n          <span class=\"sidebar__navlabel\">Instellingen</span>\n        </RouterLink>\n      </nav>\n\n      <div class=\"sidebar__spacer\" />\n\n      <div class=\"sidebar__user\">\n        <span class=\"nd-avatar\">{{ userInitials }}</span>\n        <div class=\"sidebar__userinfo\">\n          <div class=\"sidebar__username\">{{ userName }}</div>\n          <div class=\"sidebar__useremail\">{{ userEmail }}</div>\n        </div>\n        <button type=\"button\" class=\"sidebar__logout\" title=\"Uitloggen\" @click=\"handleLogout\">\n          <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n            <path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\" />\n            <polyline points=\"16 17 21 12 16 7\" />\n            <line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\" />\n          </svg>\n        </button>\n      </div>\n    </aside>\n\n    <main class=\"main\">\n      <router-view />\n    </main>\n  </div>\n\n  <LoginForm v-else />\n\n  <ToastStack />\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, watch } from \"vue\";\nimport { useRoute } from \"vue-router\";\nimport LoginForm from \"./components/LoginForm.vue\";\nimport ToastStack from \"./components/ToastStack.vue\";\nimport { useWrdAuthState } from \"./lib/useWrdAuthState\";\nimport { getUserInfo, logout } from \"./lib/runtime\";\nimport { conceptCount, refreshConceptCount } from \"./lib/state\";\nimport { initials } from \"./lib/format\";\n\ntype CachedUserInfo = {\n  wrd_fullname?: string | null;\n  wrd_contact_email?: string | null;\n  wrd_firstname?: string | null;\n  wrd_lastname?: string | null;\n};\n\nconst route = useRoute();\nconst { isLoggedIn } = useWrdAuthState();\n\nconst navItems = [\n  { name: \"dashboard\", label: \"Dashboard\" },\n  { name: \"contracten\", label: \"Contracten\" },\n  { name: \"concepten\", label: \"Concepten\" },\n  { name: \"klanten\", label: \"Klanten\" },\n] as const;\n\nconst userName = computed(() => {\n  const info = getUserInfo<CachedUserInfo>();\n  const full = (info?.wrd_fullname\n    ?? [info?.wrd_firstname, info?.wrd_lastname].filter(Boolean).join(\" \")).trim();\n  return full || info?.wrd_contact_email || \"Ingelogd\";\n});\n\nconst userEmail = computed(() => getUserInfo<CachedUserInfo>()?.wrd_contact_email ?? \"\");\nconst userInitials = computed(() => initials(userName.value));\n\nwatch(isLoggedIn, (loggedIn) => {\n  if (loggedIn)\n    void refreshConceptCount();\n}, { immediate: true });\n\nasync function handleLogout() {\n  try {\n    await logout();\n  } catch (error) {\n    console.error(\"Uitloggen mislukt\", error);\n  }\n}\n</script>\n\n<style scoped>\n.shell {\n  display: flex;\n  flex: 1;\n  min-height: 100dvh;\n}\n\n.sidebar {\n  width: 232px;\n  flex: 0 0 232px;\n  display: flex;\n  flex-direction: column;\n  border-right: 1px solid var(--nd-color-border);\n  background: var(--nd-color-bg);\n  position: sticky;\n  top: 0;\n  height: 100dvh;\n}\n\n.sidebar__brand {\n  display: flex;\n  align-items: baseline;\n  gap: 8px;\n  padding: 22px 20px 20px 20px;\n}\n\n.sidebar__brandname {\n  font-size: 21px;\n  font-weight: 800;\n  letter-spacing: -0.02em;\n  color: var(--nd-color-primary);\n}\n\n.sidebar__brandtag {\n  font-size: 10px;\n  font-weight: 800;\n  text-transform: uppercase;\n  letter-spacing: 0.14em;\n  color: var(--nd-color-muted);\n}\n\n.sidebar__nav {\n  display: flex;\n  flex-direction: column;\n  gap: 2px;\n  padding: 0 12px;\n}\n\n.sidebar__navitem {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  padding: 9px 12px;\n  border-radius: 10px;\n  font-size: 14px;\n  font-weight: 700;\n  color: var(--nd-color-ink);\n  text-decoration: none;\n  cursor: pointer;\n}\n\n.sidebar__navitem:hover {\n  background: #f2f4fa;\n}\n\n.sidebar__navitem--active,\n.sidebar__navitem--active:hover {\n  background: var(--nd-color-primary);\n  color: var(--nd-color-primary-ink);\n}\n\n.sidebar__navlabel {\n  flex: 1;\n}\n\n.sidebar__navbadge {\n  font-size: 11px;\n  font-weight: 800;\n  line-height: 1;\n  padding: 3px 8px;\n  border-radius: 999px;\n  background: var(--nd-color-primary);\n  color: var(--nd-color-primary-ink);\n}\n\n.sidebar__navbadge--inverse {\n  background: #ffffff;\n  color: var(--nd-color-primary);\n}\n\n.sidebar__divider {\n  height: 1px;\n  margin: 10px 12px;\n  background: var(--nd-color-border);\n}\n\n.sidebar__spacer {\n  flex: 1;\n}\n\n.sidebar__user {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin: 12px;\n  padding: 10px 12px;\n  border-radius: 12px;\n  border: 1px solid var(--nd-color-border);\n}\n\n.sidebar__userinfo {\n  min-width: 0;\n  flex: 1;\n}\n\n.sidebar__username {\n  font-size: 13px;\n  font-weight: 700;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.sidebar__useremail {\n  font-size: 11px;\n  color: var(--nd-color-muted);\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.sidebar__logout {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: 28px;\n  height: 28px;\n  flex: none;\n  border: none;\n  border-radius: 8px;\n  background: transparent;\n  color: var(--nd-color-muted);\n  cursor: pointer;\n}\n\n.sidebar__logout:hover {\n  background: var(--nd-color-error-soft);\n  color: var(--nd-color-error);\n}\n\n.main {\n  flex: 1;\n  min-width: 0;\n  display: flex;\n  flex-direction: column;\n}\n</style>\n","<template>\n  <div class=\"login\">\n    <div class=\"login__card\">\n      <div class=\"login__brand\">\n        <span class=\"login__brandname\">Nudam</span>\n        <span class=\"login__brandtag\">Beheer</span>\n      </div>\n      <p class=\"login__intro\">Log in om verder te gaan naar het Nudam CRM.</p>\n\n      <!-- setupWRDAuth vindt dit formulier op class en leest login/password/persistent\n           live uit de DOM bij submit: geen preventDefault op @submit. -->\n      <form class=\"wh-wrdauth__loginform login__form\" method=\"post\" action=\"javascript:\" @submit=\"onLoginSubmit\">\n        <div class=\"login__msgslot\">\n          <div v-if=\"errorMessage\" class=\"nd-alert nd-alert--error\" role=\"alert\">{{ errorMessage }}</div>\n        </div>\n\n        <label class=\"nd-label\" for=\"login-email\">E-mailadres</label>\n        <input\n          id=\"login-email\"\n          v-model=\"email\"\n          class=\"nd-input\"\n          name=\"login\"\n          type=\"email\"\n          required\n          autocomplete=\"email\"\n          placeholder=\"naam@bedrijf.nl\"\n        >\n\n        <label class=\"nd-label login__pwlabel\" for=\"login-password\">Wachtwoord</label>\n        <PasswordInput v-model=\"password\" name=\"password\" :required=\"true\" autocomplete=\"current-password\" />\n\n        <label class=\"login__remember\">\n          <input v-model=\"rememberMe\" class=\"nd-checkbox\" name=\"persistent\" type=\"checkbox\">\n          <span>Ingelogd blijven</span>\n        </label>\n\n        <button type=\"submit\" class=\"nd-btn login__submit\" :disabled=\"loggingIn\">\n          {{ loggingIn ? \"Bezig met inloggen…\" : \"Inloggen\" }}\n        </button>\n\n        <p v-if=\"isDev\" class=\"login__devhint\">Developmentmodus: ingevuld als {{ DEV_EMAIL }}</p>\n      </form>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, ref, watch } from \"vue\";\nimport PasswordInput from \"./PasswordInput.vue\";\n\nconst DEV_EMAIL = \"test@example.com\";\nconst DEV_PASSWORD = \"test1234\";\nconst EMAIL_STORAGE_KEY = \"nudam:beheer:login-email\";\nconst REMEMBER_STORAGE_KEY = \"nudam:beheer:remember\";\nconst MIN_LOGIN_BUSY_MS = 500;\nconst LOGIN_SAFETY_MS = 12000;\n\nconst isDev = /^(localhost|127\\.0\\.0\\.1|0\\.0\\.0\\.0)$/.test(location.hostname);\n\nfunction readStored(key: string): string {\n  try {\n    return localStorage.getItem(key) ?? \"\";\n  } catch {\n    return \"\";\n  }\n}\n\nfunction writeStored(key: string, value: string): void {\n  try {\n    localStorage.setItem(key, value);\n  } catch {\n    // private mode: voorkeur wordt gewoon niet bewaard\n  }\n}\n\nconst email = ref(isDev ? DEV_EMAIL : readStored(EMAIL_STORAGE_KEY));\nconst password = ref(isDev ? DEV_PASSWORD : \"\");\nconst rememberMe = ref(isDev ? true : readStored(REMEMBER_STORAGE_KEY) === \"1\");\nconst errorMessage = ref(\"\");\nconst loggingIn = ref(false);\n\nlet loginSubmittedAt = 0;\nlet failTimer: number | null = null;\nlet safetyTimer: number | null = null;\n\nwatch(email, (value) => {\n  if (!isDev)\n    writeStored(EMAIL_STORAGE_KEY, value);\n});\nwatch(rememberMe, (value) => {\n  if (!isDev)\n    writeStored(REMEMBER_STORAGE_KEY, value ? \"1\" : \"0\");\n});\n\nfunction clearTimers() {\n  if (failTimer !== null) {\n    window.clearTimeout(failTimer);\n    failTimer = null;\n  }\n  if (safetyTimer !== null) {\n    window.clearTimeout(safetyTimer);\n    safetyTimer = null;\n  }\n}\n\nfunction onLoginSubmit() {\n  // GEEN preventDefault: setupWRDAuth doet de echte auth op ditzelfde submit\n  clearTimers();\n  errorMessage.value = \"\";\n  loggingIn.value = true;\n  loginSubmittedAt = Date.now();\n  safetyTimer = window.setTimeout(() => {\n    if (!loggingIn.value)\n      return;\n    loggingIn.value = false;\n    errorMessage.value = \"Inloggen duurt te lang. Controleer je verbinding en probeer het opnieuw.\";\n  }, LOGIN_SAFETY_MS);\n}\n\nfunction onLoginFailed(event: Event) {\n  event.preventDefault();\n  const message = (event as CustomEvent<{ message?: string }>).detail?.message\n    || \"Inloggen mislukt. Controleer je e-mailadres en wachtwoord.\";\n  const wait = Math.max(0, MIN_LOGIN_BUSY_MS - (Date.now() - loginSubmittedAt));\n  clearTimers();\n  failTimer = window.setTimeout(() => {\n    errorMessage.value = message;\n    loggingIn.value = false;\n  }, wait);\n}\n\nonMounted(() => window.addEventListener(\"wh:wrdauth-loginfailed\", onLoginFailed));\nonBeforeUnmount(() => {\n  window.removeEventListener(\"wh:wrdauth-loginfailed\", onLoginFailed);\n  clearTimers();\n});\n</script>\n\n<style scoped>\n.login {\n  flex: 1;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: 24px;\n  background: var(--nd-color-surface);\n}\n\n.login__card {\n  width: 400px;\n  max-width: 100%;\n  background: var(--nd-color-bg);\n  border: 1px solid var(--nd-color-border);\n  border-radius: var(--nd-radius-lg);\n  box-shadow: var(--nd-shadow-card);\n  padding: 32px;\n}\n\n.login__brand {\n  display: flex;\n  align-items: baseline;\n  gap: 8px;\n}\n\n.login__brandname {\n  font-size: 26px;\n  font-weight: 800;\n  letter-spacing: -0.02em;\n  color: var(--nd-color-primary);\n}\n\n.login__brandtag {\n  font-size: 11px;\n  font-weight: 800;\n  text-transform: uppercase;\n  letter-spacing: 0.14em;\n  color: var(--nd-color-muted);\n}\n\n.login__intro {\n  margin: 6px 0 0 0;\n  font-size: 13px;\n  color: var(--nd-color-muted);\n}\n\n.login__form {\n  margin-top: 18px;\n}\n\n.login__msgslot {\n  position: relative;\n  min-height: 8px;\n  margin-bottom: 10px;\n}\n\n.login__pwlabel {\n  margin-top: 14px;\n}\n\n.login__remember {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin: 14px 0 18px 0;\n  font-size: 13px;\n  cursor: pointer;\n  user-select: none;\n}\n\n.login__submit {\n  width: 100%;\n}\n\n.login__devhint {\n  margin: 12px 0 0 0;\n  font-size: 12px;\n  color: var(--nd-color-muted);\n  text-align: center;\n}\n</style>\n","<template>\n  <div class=\"pw\">\n    <input\n      ref=\"inputEl\"\n      class=\"nd-input pw__input\"\n      :class=\"{ 'is-error': error }\"\n      :type=\"visible ? 'text' : 'password'\"\n      :name=\"name\"\n      :value=\"modelValue\"\n      :required=\"required\"\n      :autocomplete=\"autocomplete\"\n      :placeholder=\"placeholder\"\n      @input=\"onInput\"\n    >\n    <button type=\"button\" class=\"pw__toggle\" tabindex=\"-1\" :title=\"visible ? 'Verberg wachtwoord' : 'Toon wachtwoord'\" @click=\"visible = !visible\">\n      <svg v-if=\"!visible\" viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n        <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n        <circle cx=\"12\" cy=\"12\" r=\"3\" />\n      </svg>\n      <svg v-else viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n        <path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94\" />\n        <path d=\"M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19\" />\n        <line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\" />\n      </svg>\n    </button>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from \"vue\";\n\nwithDefaults(defineProps<{\n  modelValue: string;\n  name?: string;\n  required?: boolean;\n  autocomplete?: string;\n  placeholder?: string;\n  error?: boolean;\n}>(), {\n  name: \"password\",\n  required: false,\n  autocomplete: \"current-password\",\n  placeholder: \"\",\n  error: false,\n});\n\nconst emit = defineEmits<{ (e: \"update:modelValue\", value: string): void }>();\n\n// Bewust ongecontroleerd (interne ref): elke instantie heeft zo altijd een\n// werkend oogje zonder dat de parent state hoeft door te lussen.\nconst visible = ref(false);\nconst inputEl = ref<HTMLInputElement | null>(null);\n\nfunction onInput(event: Event) {\n  emit(\"update:modelValue\", (event.target as HTMLInputElement).value);\n}\n\ndefineExpose({ focus: () => inputEl.value?.focus() });\n</script>\n\n<style scoped>\n.pw {\n  position: relative;\n}\n\n.pw__input {\n  padding-right: 42px;\n}\n\n.pw__toggle {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  width: 40px;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  border: none;\n  background: transparent;\n  color: var(--nd-color-muted);\n  cursor: pointer;\n}\n\n.pw__toggle:hover {\n  color: var(--nd-color-ink);\n}\n</style>\n","import { normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"pw\" }\nconst _hoisted_2 = [\"type\", \"name\", \"value\", \"required\", \"autocomplete\", \"placeholder\"]\nconst _hoisted_3 = [\"title\"]\nconst _hoisted_4 = {\n  key: 0,\n  viewBox: \"0 0 24 24\",\n  width: \"18\",\n  height: \"18\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  \"stroke-width\": \"2\",\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\"\n}\nconst _hoisted_5 = {\n  key: 1,\n  viewBox: \"0 0 24 24\",\n  width: \"18\",\n  height: \"18\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  \"stroke-width\": \"2\",\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createElementVNode(\"input\", {\n      ref: \"inputEl\",\n      class: _normalizeClass([\"nd-input pw__input\", { 'is-error': $props.error }]),\n      type: $setup.visible ? 'text' : 'password',\n      name: $props.name,\n      value: $props.modelValue,\n      required: $props.required,\n      autocomplete: $props.autocomplete,\n      placeholder: $props.placeholder,\n      onInput: $setup.onInput\n    }, null, 42 /* CLASS, PROPS, NEED_HYDRATION */, _hoisted_2),\n    _createElementVNode(\"button\", {\n      type: \"button\",\n      class: \"pw__toggle\",\n      tabindex: \"-1\",\n      title: $setup.visible ? 'Verberg wachtwoord' : 'Toon wachtwoord',\n      onClick: _cache[0] || (_cache[0] = $event => ($setup.visible = !$setup.visible))\n    }, [\n      (!$setup.visible)\n        ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_4, _cache[1] || (_cache[1] = [\n            _createElementVNode(\"path\", { d: \"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" }, null, -1 /* CACHED */),\n            _createElementVNode(\"circle\", {\n              cx: \"12\",\n              cy: \"12\",\n              r: \"3\"\n            }, null, -1 /* CACHED */)\n          ])))\n        : (_openBlock(), _createElementBlock(\"svg\", _hoisted_5, _cache[2] || (_cache[2] = [\n            _createElementVNode(\"path\", { d: \"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94\" }, null, -1 /* CACHED */),\n            _createElementVNode(\"path\", { d: \"M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19\" }, null, -1 /* CACHED */),\n            _createElementVNode(\"line\", {\n              x1: \"1\",\n              y1: \"1\",\n              x2: \"23\",\n              y2: \"23\"\n            }, null, -1 /* CACHED */)\n          ])))\n    ], 8 /* PROPS */, _hoisted_3)\n  ]))\n}","import script from \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/PasswordInput.vue?type=script\";import \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/PasswordInput.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/PasswordInput.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/PasswordInput.vue\";script.__scopeId = \"data-v-e41d998e\";export default script;","import { createElementVNode as _createElementVNode, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, vModelText as _vModelText, withDirectives as _withDirectives, createVNode as _createVNode, vModelCheckbox as _vModelCheckbox } from \"vue\"\n\nconst _hoisted_1 = { class: \"login\" }\nconst _hoisted_2 = { class: \"login__card\" }\nconst _hoisted_3 = { class: \"login__msgslot\" }\nconst _hoisted_4 = {\n  key: 0,\n  class: \"nd-alert nd-alert--error\",\n  role: \"alert\"\n}\nconst _hoisted_5 = { class: \"login__remember\" }\nconst _hoisted_6 = [\"disabled\"]\nconst _hoisted_7 = {\n  key: 0,\n  class: \"login__devhint\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createElementVNode(\"div\", _hoisted_2, [\n      _cache[6] || (_cache[6] = _createElementVNode(\"div\", { class: \"login__brand\" }, [\n        _createElementVNode(\"span\", { class: \"login__brandname\" }, \"Nudam\"),\n        _createElementVNode(\"span\", { class: \"login__brandtag\" }, \"Beheer\")\n      ], -1 /* CACHED */)),\n      _cache[7] || (_cache[7] = _createElementVNode(\"p\", { class: \"login__intro\" }, \"Log in om verder te gaan naar het Nudam CRM.\", -1 /* CACHED */)),\n      _createCommentVNode(\" setupWRDAuth vindt dit formulier op class en leest login/password/persistent\\n           live uit de DOM bij submit: geen preventDefault op @submit. \"),\n      _createElementVNode(\"form\", {\n        class: \"wh-wrdauth__loginform login__form\",\n        method: \"post\",\n        action: \"javascript:\",\n        onSubmit: $setup.onLoginSubmit\n      }, [\n        _createElementVNode(\"div\", _hoisted_3, [\n          ($setup.errorMessage)\n            ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, _toDisplayString($setup.errorMessage), 1 /* TEXT */))\n            : _createCommentVNode(\"v-if\", true)\n        ]),\n        _cache[4] || (_cache[4] = _createElementVNode(\"label\", {\n          class: \"nd-label\",\n          for: \"login-email\"\n        }, \"E-mailadres\", -1 /* CACHED */)),\n        _withDirectives(_createElementVNode(\"input\", {\n          id: \"login-email\",\n          \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.email) = $event)),\n          class: \"nd-input\",\n          name: \"login\",\n          type: \"email\",\n          required: \"\",\n          autocomplete: \"email\",\n          placeholder: \"naam@bedrijf.nl\"\n        }, null, 512 /* NEED_PATCH */), [\n          [_vModelText, $setup.email]\n        ]),\n        _cache[5] || (_cache[5] = _createElementVNode(\"label\", {\n          class: \"nd-label login__pwlabel\",\n          for: \"login-password\"\n        }, \"Wachtwoord\", -1 /* CACHED */)),\n        _createVNode($setup[\"PasswordInput\"], {\n          modelValue: $setup.password,\n          \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => (($setup.password) = $event)),\n          name: \"password\",\n          required: true,\n          autocomplete: \"current-password\"\n        }, null, 8 /* PROPS */, [\"modelValue\"]),\n        _createElementVNode(\"label\", _hoisted_5, [\n          _withDirectives(_createElementVNode(\"input\", {\n            \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => (($setup.rememberMe) = $event)),\n            class: \"nd-checkbox\",\n            name: \"persistent\",\n            type: \"checkbox\"\n          }, null, 512 /* NEED_PATCH */), [\n            [_vModelCheckbox, $setup.rememberMe]\n          ]),\n          _cache[3] || (_cache[3] = _createElementVNode(\"span\", null, \"Ingelogd blijven\", -1 /* CACHED */))\n        ]),\n        _createElementVNode(\"button\", {\n          type: \"submit\",\n          class: \"nd-btn login__submit\",\n          disabled: $setup.loggingIn\n        }, _toDisplayString($setup.loggingIn ? \"Bezig met inloggen…\" : \"Inloggen\"), 9 /* TEXT, PROPS */, _hoisted_6),\n        ($setup.isDev)\n          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_7, \"Developmentmodus: ingevuld als \" + _toDisplayString($setup.DEV_EMAIL)))\n          : _createCommentVNode(\"v-if\", true)\n      ], 32 /* NEED_HYDRATION */)\n    ])\n  ]))\n}","import script from \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/LoginForm.vue?type=script\";import \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/LoginForm.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/LoginForm.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/LoginForm.vue\";script.__scopeId = \"data-v-a5d7b8bf\";export default script;","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, TransitionGroup as _TransitionGroup, withCtx as _withCtx, createVNode as _createVNode, createElementVNode as _createElementVNode, Teleport as _Teleport, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"toasts\" }\nconst _hoisted_2 = [\"onClick\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock(_Teleport, { to: \"body\" }, [\n    _createElementVNode(\"div\", _hoisted_1, [\n      _createVNode(_TransitionGroup, { name: \"toast\" }, {\n        default: _withCtx(() => [\n          (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.toasts, (toast) => {\n            return (_openBlock(), _createElementBlock(\"div\", {\n              key: toast.id,\n              class: _normalizeClass([\"nd-alert toasts__item\", {\n            'nd-alert--success': toast.severity === 'success',\n            'nd-alert--error': toast.severity === 'error',\n          }]),\n              role: \"status\",\n              onClick: $event => ($setup.dismissToast(toast.id))\n            }, _toDisplayString(toast.text), 11 /* TEXT, CLASS, PROPS */, _hoisted_2))\n          }), 128 /* KEYED_FRAGMENT */))\n        ]),\n        _: 1 /* STABLE */\n      })\n    ])\n  ]))\n}","import script from \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/ToastStack.vue?type=script\";import \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/ToastStack.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/ToastStack.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/components/ToastStack.vue\";script.__scopeId = \"data-v-310d04a3\";export default script;","import { onBeforeUnmount, onMounted, readonly, ref } from \"vue\";\n\nconst LOGGED_IN_CLASS = \"wh-wrdauth--isloggedin\";\n\n/** Reactieve login-status: setupWRDAuth zet .wh-wrdauth--isloggedin op <html>,\n    wij observeren die class. Synchrone init voorkomt een loginform-flits. */\nexport function useWrdAuthState() {\n  const isLoggedIn = ref(document.documentElement.classList.contains(LOGGED_IN_CLASS));\n  let observer: MutationObserver | null = null;\n\n  function read() {\n    isLoggedIn.value = document.documentElement.classList.contains(LOGGED_IN_CLASS);\n  }\n\n  onMounted(() => {\n    read();\n    observer = new MutationObserver(read);\n    observer.observe(document.documentElement, { attributes: true, attributeFilter: [\"class\"] });\n  });\n  onBeforeUnmount(() => {\n    observer?.disconnect();\n    observer = null;\n  });\n\n  return { isLoggedIn: readonly(isLoggedIn) };\n}\n","import { createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createVNode as _createVNode, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = {\n  key: 0,\n  class: \"shell\"\n}\nconst _hoisted_2 = { class: \"sidebar\" }\nconst _hoisted_3 = { class: \"sidebar__nav\" }\nconst _hoisted_4 = { class: \"sidebar__navlabel\" }\nconst _hoisted_5 = { class: \"sidebar__user\" }\nconst _hoisted_6 = { class: \"nd-avatar\" }\nconst _hoisted_7 = { class: \"sidebar__userinfo\" }\nconst _hoisted_8 = { class: \"sidebar__username\" }\nconst _hoisted_9 = { class: \"sidebar__useremail\" }\nconst _hoisted_10 = { class: \"main\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  const _component_RouterLink = _resolveComponent(\"RouterLink\")\n  const _component_router_view = _resolveComponent(\"router-view\")\n\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    ($setup.isLoggedIn)\n      ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n          _createElementVNode(\"aside\", _hoisted_2, [\n            _cache[3] || (_cache[3] = _createElementVNode(\"div\", { class: \"sidebar__brand\" }, [\n              _createElementVNode(\"span\", { class: \"sidebar__brandname\" }, \"Nudam\"),\n              _createElementVNode(\"span\", { class: \"sidebar__brandtag\" }, \"Beheer\")\n            ], -1 /* CACHED */)),\n            _createElementVNode(\"nav\", _hoisted_3, [\n              (_openBlock(), _createElementBlock(_Fragment, null, _renderList($setup.navItems, (item) => {\n                return _createVNode(_component_RouterLink, {\n                  key: item.name,\n                  to: { name: item.name },\n                  class: _normalizeClass([\"sidebar__navitem\", { 'sidebar__navitem--active': $setup.route.name === item.name }])\n                }, {\n                  default: _withCtx(() => [\n                    _createElementVNode(\"span\", _hoisted_4, _toDisplayString(item.label), 1 /* TEXT */),\n                    (item.name === 'concepten' && $setup.conceptCount > 0)\n                      ? (_openBlock(), _createElementBlock(\"span\", {\n                          key: 0,\n                          class: _normalizeClass([\"sidebar__navbadge\", { 'sidebar__navbadge--inverse': $setup.route.name === 'concepten' }])\n                        }, _toDisplayString($setup.conceptCount), 3 /* TEXT, CLASS */))\n                      : _createCommentVNode(\"v-if\", true)\n                  ]),\n                  _: 2 /* DYNAMIC */\n                }, 1032 /* PROPS, DYNAMIC_SLOTS */, [\"to\", \"class\"])\n              }), 64 /* STABLE_FRAGMENT */)),\n              _cache[1] || (_cache[1] = _createElementVNode(\"div\", { class: \"sidebar__divider\" }, null, -1 /* CACHED */)),\n              _createVNode(_component_RouterLink, {\n                to: { name: 'instellingen' },\n                class: _normalizeClass([\"sidebar__navitem\", { 'sidebar__navitem--active': $setup.route.name === 'instellingen' }])\n              }, {\n                default: _withCtx(() => _cache[0] || (_cache[0] = [\n                  _createElementVNode(\"span\", { class: \"sidebar__navlabel\" }, \"Instellingen\", -1 /* CACHED */)\n                ])),\n                _: 1 /* STABLE */,\n                __: [0]\n              }, 8 /* PROPS */, [\"class\"])\n            ]),\n            _cache[4] || (_cache[4] = _createElementVNode(\"div\", { class: \"sidebar__spacer\" }, null, -1 /* CACHED */)),\n            _createElementVNode(\"div\", _hoisted_5, [\n              _createElementVNode(\"span\", _hoisted_6, _toDisplayString($setup.userInitials), 1 /* TEXT */),\n              _createElementVNode(\"div\", _hoisted_7, [\n                _createElementVNode(\"div\", _hoisted_8, _toDisplayString($setup.userName), 1 /* TEXT */),\n                _createElementVNode(\"div\", _hoisted_9, _toDisplayString($setup.userEmail), 1 /* TEXT */)\n              ]),\n              _createElementVNode(\"button\", {\n                type: \"button\",\n                class: \"sidebar__logout\",\n                title: \"Uitloggen\",\n                onClick: $setup.handleLogout\n              }, _cache[2] || (_cache[2] = [\n                _createElementVNode(\"svg\", {\n                  viewBox: \"0 0 24 24\",\n                  width: \"16\",\n                  height: \"16\",\n                  fill: \"none\",\n                  stroke: \"currentColor\",\n                  \"stroke-width\": \"2\",\n                  \"stroke-linecap\": \"round\",\n                  \"stroke-linejoin\": \"round\"\n                }, [\n                  _createElementVNode(\"path\", { d: \"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\" }),\n                  _createElementVNode(\"polyline\", { points: \"16 17 21 12 16 7\" }),\n                  _createElementVNode(\"line\", {\n                    x1: \"21\",\n                    y1: \"12\",\n                    x2: \"9\",\n                    y2: \"12\"\n                  })\n                ], -1 /* CACHED */)\n              ]))\n            ])\n          ]),\n          _createElementVNode(\"main\", _hoisted_10, [\n            _createVNode(_component_router_view)\n          ])\n        ]))\n      : (_openBlock(), _createBlock($setup[\"LoginForm\"], { key: 1 })),\n    _createVNode($setup[\"ToastStack\"])\n  ], 64 /* STABLE_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/App.vue?type=script\";import \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/App.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/App.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/App.vue\";script.__scopeId = \"data-v-c335db12\";export default script;","import \"@webhare/frontend/src/init\";import \"/opt/wh/whtree/modules/publisher/js/internal/polyfills/all\";\nimport \"/opt/whdata/installedmodules/nudam.20260707T164004.935Z/webdesigns/beheer/frontend/frontend\";const aps = globalThis.whAssetPacks ||= {}; aps[\"nudam:beheer\"]=\"2026-09-23T12:13:51.076Z\";"],"mappings":"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AAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,IAAI,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,KAAK,GAAG,GAAG,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,KAAK,GAAG,KAAK,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,KAAK,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,MAAM,GAAG,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,IAAI,KAAK,IAAI,KAAK,KAAK,EAAE,IAAI,EAE1jDC,GAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,KAAK,EAAE,EAAE,GAAG,MAAM,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KA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EAActuB,EAAG,WACjB,CAAE,aAAAuuB,EAAc,cAAAC,EAAe,aAAAC,EAAc,YAAAC,CAAY,EAAInc,EACnE,GAAIic,EACFjc,EAAS,cAAgB8b,EACrBppB,GAAgBopB,EAAWG,CAAa,GAC1CzkB,EACEykB,EACAH,EACA9b,EAAS,gBACT,KACApS,EACAoS,EACAlS,EACAC,EACAC,CACF,EACIgS,EAAS,MAAQ,EACnBA,EAAS,QAAQ,EACRkc,IACJC,IACH3kB,EACEwkB,EACAD,EACAruB,EACAC,EACAC,EACA,KAEAE,EACAC,EACAC,CACF,EACA6tB,GAAgB7b,EAAU+b,CAAW,MAIzC/b,EAAS,UAAYkb,KACjBiB,GACFnc,EAAS,YAAc,GACvBA,EAAS,aAAeic,GAExBpsB,EAAQosB,EAAeruB,EAAiBoS,CAAQ,EAElDA,EAAS,KAAO,EAChBA,EAAS,QAAQ,OAAS,EAC1BA,EAAS,gBAAkBpB,EAAc,KAAK,EAC1Csd,GACF1kB,EACE,KACAskB,EACA9b,EAAS,gBACT,KACApS,EACAoS,EACAlS,EACAC,EACAC,CACF,EACIgS,EAAS,MAAQ,EACnBA,EAAS,QAAQ,GAEjBxI,EACEwkB,EACAD,EACAruB,EACAC,EACAC,EACA,KAEAE,EACAC,EACAC,CACF,EACA6tB,GAAgB7b,EAAU+b,CAAW,IAE9BC,GAAgBtpB,GAAgBopB,EAAWE,CAAY,GAChExkB,EACEwkB,EACAF,EACApuB,EACAC,EACAC,EACAoS,EACAlS,EACAC,EACAC,CACF,EACAgS,EAAS,QAAQ,EAAI,IAErBxI,EACE,KACAskB,EACA9b,EAAS,gBACT,KACApS,EACAoS,EACAlS,EACAC,EACAC,CACF,EACIgS,EAAS,MAAQ,GACnBA,EAAS,QAAQ,YAKnBgc,GAAgBtpB,GAAgBopB,EAAWE,CAAY,EACzDxkB,EACEwkB,EACAF,EACApuB,EACAC,EACAC,EACAoS,EACAlS,EACAC,EACAC,CACF,EACA6tB,GAAgB7b,EAAU8b,CAAS,UAEnCL,GAAahuB,EAAI,WAAW,EAC5BuS,EAAS,cAAgB8b,EACrBA,EAAU,UAAY,IAC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","names":["require_shared_cjs_prod","__commonJSMin","exports","makeMap","str","map","key","val","EMPTY_OBJ","EMPTY_ARR","NOOP","NO","isOn","isModelListener","extend","remove","arr","el","i","hasOwnProperty","hasOwn","isArray","isMap","toTypeString","isSet","isDate","isRegExp","isFunction","isString","isSymbol","isObject","isPromise","objectToString","value","toRawType","isPlainObject","isIntegerKey","isReservedProp","isBuiltInDirective","cacheStringFunction","fn","cache","camelizeRE","camelize","_","c","hyphenateRE","hyphenate","capitalize","toHandlerKey","hasChanged","oldValue","invokeArrayFns","fns","arg","def","obj","writable","looseToNumber","n","toNumber","_globalThis","getGlobalThis","identRE","genPropsAccessExp","name","genCacheKey","source","options","PatchFlags","PatchFlagNames","ShapeFlags","SlotFlags","slotFlagsText","GLOBALS_ALLOWED","isGloballyAllowed","isGloballyWhitelisted","range","generateCodeFrame","start","end","lines","newlineSequences","idx","count","res","j","line","lineLength","newLineSeqLength","pad","length","normalizeStyle","item","normalized","parseStringStyle","listDelimiterRE","propertyDelimiterRE","styleCommentRE","cssText","ret","tmp","stringifyStyle","styles","normalizedKey","normalizeClass","normalizeProps","props","klass","style","HTML_TAGS","SVG_TAGS","MATH_TAGS","VOID_TAGS","isHTMLTag","isSVGTag","isMathMLTag","isVoidTag","specialBooleanAttrs","isSpecialBooleanAttr","isBooleanAttr","includeBooleanAttr","unsafeAttrCharRE","attrValidationCache","isSSRSafeAttrName","isUnsafe","propsToAttrMap","isKnownHtmlAttr","isKnownSvgAttr","isKnownMathMLAttr","isRenderableAttrValue","type","escapeRE","escapeHtml","string","match","html","escaped","index","lastIndex","commentStripRE","escapeHtmlComment","src","cssVarNameEscapeSymbolsRE","getEscapedCssVarName","doubleEscape","s","looseCompareArrays","a","b","equal","looseEqual","aValidType","bValidType","aKeysCount","bKeysCount","aHasKey","bHasKey","looseIndexOf","isRef","toDisplayString","replacer","_key","entries","val2","stringifySymbol","v","_a","normalizeCssVarValue","require_shared","__commonJSMin","exports","module","exports","c","exports","c","decodeMap","exports","_a","codePoint","output","replaceCodePoint","decodeCodePoint","decode_data_html_js_1","__importDefault","exports","decode_data_xml_js_1","decode_codepoint_js_1","__importStar","decode_codepoint_js_2","CharCodes","TO_LOWER_BIT","BinTrieFlags","isNumber","code","isHexadecimalCharacter","isAsciiAlphaNumeric","isEntityInAttributeInvalidEnd","EntityDecoderState","DecodingMode","EntityDecoder","decodeTree","emitCodePoint","errors","decodeMode","str","offset","start","end","base","digitCount","startIdx","char","lastCp","expectedLength","_a","current","valueLength","determineBranch","_b","result","consumed","getDecoder","ret","decoder","lastIndex","len","nodeIdx","branchCount","jumpOffset","value","lo","hi","mid","midVal","htmlDecoder","xmlDecoder","decodeHTML","mode","decodeHTMLAttribute","decodeHTMLStrict","decodeXML","Position","constructor","line","col","index","column","SourceLocation","start","end","filename","identifierName","createPositionWithColumnOffset","position","columnOffset","code","ModuleErrors","ImportMetaOutsideModule","message","ImportOutsideModule","NodeDescriptions","ArrayPattern","AssignmentExpression","AssignmentPattern","ArrowFunctionExpression","ConditionalExpression","CatchClause","ForOfStatement","ForInStatement","ForStatement","FormalParameters","Identifier","ImportSpecifier","ImportDefaultSpecifier","ImportNamespaceSpecifier","ObjectPattern","ParenthesizedExpression","RestElement","UpdateExpression","true","false","VariableDeclarator","YieldExpression","toNodeDescription","node","type","prefix","StandardErrors","AccessorIsGenerator","kind","ArgumentsInClass","AsyncFunctionInSingleStatementContext","AwaitBindingIdentifier","AwaitBindingIdentifierInStaticBlock","AwaitExpressionFormalParameter","AwaitUsingNotInAsyncContext","AwaitNotInAsyncContext","BadGetterArity","BadSetterArity","BadSetterRestParameter","ConstructorClassField","ConstructorClassPrivateField","ConstructorIsAccessor","ConstructorIsAsync","ConstructorIsGenerator","DeclarationMissingInitializer","DecoratorArgumentsOutsideParentheses","DecoratorBeforeExport","DecoratorsBeforeAfterExport","DecoratorConstructor","DecoratorExportClass","DecoratorSemicolon","DecoratorStaticBlock","DeferImportRequiresNamespace","DeletePrivateField","DestructureNamedImport","DuplicateConstructor","DuplicateDefaultExport","DuplicateExport","exportName","DuplicateProto","DuplicateRegExpFlags","ElementAfterRest","EscapedCharNotAnIdentifier","ExportBindingIsString","localName","ExportDefaultFromAsIdentifier","ForInOfLoopInitializer","ForInUsing","ForOfAsync","ForOfLet","GeneratorInSingleStatementContext","IllegalBreakContinue","IllegalLanguageModeDirective","IllegalReturn","ImportAttributesUseAssert","ImportBindingIsString","importName","ImportCallArity","ImportCallNotNewExpression","ImportCallSpreadArgument","ImportJSONBindingNotDefault","ImportReflectionHasAssertion","ImportReflectionNotBinding","IncompatibleRegExpUVFlags","InvalidBigIntLiteral","InvalidCodePoint","InvalidCoverDiscardElement","InvalidCoverInitializedName","InvalidDecimal","InvalidDigit","radix","InvalidEscapeSequence","InvalidEscapeSequenceTemplate","InvalidEscapedReservedWord","reservedWord","InvalidIdentifier","InvalidLhs","ancestor","InvalidLhsBinding","InvalidLhsOptionalChaining","InvalidNumber","InvalidOrMissingExponent","InvalidOrUnexpectedToken","unexpected","InvalidParenthesizedAssignment","InvalidPrivateFieldResolution","InvalidPropertyBindingPattern","InvalidRecordProperty","InvalidRestAssignmentPattern","LabelRedeclaration","labelName","LetInLexicalBinding","LineTerminatorBeforeArrow","MalformedRegExpFlags","MissingClassName","MissingEqInAssignment","MissingSemicolon","MissingPlugin","missingPlugin","map","name","JSON","stringify","join","MissingOneOfPlugins","MissingUnicodeEscape","MixingCoalesceWithLogical","ModuleAttributeDifferentFromType","ModuleAttributeInvalidValue","ModuleAttributesWithDuplicateKeys","key","ModuleExportNameHasLoneSurrogate","surrogateCharCode","toString","ModuleExportUndefined","MultipleDefaultsInSwitch","NewlineAfterThrow","NoCatchOrFinally","NumberIdentifier","NumericSeparatorInEscapeSequence","ObsoleteAwaitStar","OptionalChainingNoNew","OptionalChainingNoTemplate","OverrideOnConstructor","ParamDupe","PatternHasAccessor","PatternHasMethod","PrivateInExpectedIn","PrivateNameRedeclaration","RecordExpressionBarIncorrectEndSyntaxType","RecordExpressionBarIncorrectStartSyntaxType","RecordExpressionHashIncorrectStartSyntaxType","RecordNoProto","RestTrailingComma","SloppyFunction","SloppyFunctionAnnexB","SourcePhaseImportRequiresDefault","StaticPrototype","SuperNotAllowed","SuperPrivateField","TrailingDecorator","TupleExpressionBarIncorrectEndSyntaxType","TupleExpressionBarIncorrectStartSyntaxType","TupleExpressionHashIncorrectStartSyntaxType","UnexpectedArgumentPlaceholder","UnexpectedAwaitAfterPipelineBody","UnexpectedDigitAfterHash","UnexpectedImportExport","UnexpectedKeyword","keyword","UnexpectedLeadingDecorator","UnexpectedLexicalDeclaration","UnexpectedNewTarget","UnexpectedNumericSeparator","UnexpectedPrivateField","UnexpectedReservedWord","UnexpectedSuper","UnexpectedToken","expected","UnexpectedTokenUnaryExponentiation","UnexpectedUsingDeclaration","UnexpectedVoidPattern","UnsupportedBind","UnsupportedDecoratorExport","UnsupportedDefaultExport","UnsupportedImport","UnsupportedMetaProperty","target","onlyValidPropertyName","UnsupportedParameterDecorator","UnsupportedPropertyDecorator","UnsupportedSuper","UnterminatedComment","UnterminatedRegExp","UnterminatedString","UnterminatedTemplate","UsingDeclarationExport","UsingDeclarationHasBindingPattern","VarRedeclaration","VoidPatternCatchClauseParam","VoidPatternInitializer","YieldBindingIdentifier","YieldInParameter","YieldNotInGeneratorFunction","ZeroDigitNumericSeparator","StrictModeErrors","StrictDelete","StrictEvalArguments","referenceName","StrictEvalArgumentsBinding","bindingName","StrictFunction","StrictNumericEscape","StrictOctalLiteral","StrictWith","ParseExpressionErrors","ParseExpressionEmptyInput","ParseExpressionExpectsEOF","String","fromCodePoint","UnparenthesizedPipeBodyDescriptions","Set","Object","assign","PipeBodyIsTighter","PipeTopicRequiresHackPipes","PipeTopicUnbound","PipeTopicUnconfiguredToken","token","PipeTopicUnused","PipeUnparenthesizedBody","PipelineBodyNoArrow","PipelineBodySequenceExpression","PipelineHeadSequenceExpression","PipelineTopicUnused","PrimaryTopicNotAllowed","PrimaryTopicRequiresSmartPipeline","defineHidden","obj","value","defineProperty","enumerable","configurable","toParseErrorConstructor","toMessage","reasonCode","syntaxPlugin","hasMissingPlugin","oldReasonCodes","AccessorCannotDeclareThisParameter","AccessorCannotHaveTypeParameters","ConstInitializerMustBeStringOrNumericLiteralOrLiteralEnumReference","SetAccessorCannotHaveOptionalParameter","SetAccessorCannotHaveRestParameter","SetAccessorCannotHaveReturnType","loc","details","error","SyntaxError","pos","overrides","_overrides$loc","get","set","writable","ParseErrorEnum","argument","Array","isArray","parseErrorTemplates","ParseErrorConstructors","keys","template","_ref","rest","_objectWithoutPropertiesLoose","_excluded","Errors","PipelineOperatorErrors","createDefaultOptions","sourceType","sourceFilename","undefined","startIndex","startColumn","startLine","allowAwaitOutsideFunction","allowReturnOutsideFunction","allowNewTargetOutsideFunction","allowImportExportEverywhere","allowSuperOutsideMethod","allowUndeclaredExports","allowYieldOutsideFunction","plugins","strictMode","ranges","tokens","createImportExpressions","createParenthesizedExpressions","errorRecovery","attachComment","annexB","getOptions","opts","options","Error","toUnenumerable","object","toESTreeLocation","estree","superClass","parse","file","optionFlags","parseRegExpLiteral","pattern","flags","regex","RegExp","estreeParseLiteral","parseBigIntLiteral","bigInt","BigInt","bigint","parseDecimalLiteral","decimal","parseLiteral","parseStringLiteral","parseNumericLiteral","parseNullLiteral","parseBooleanLiteral","estreeParseChainExpression","endLoc","chain","startNodeAtNode","expression","finishNodeAt","directiveToStmt","directive","castNodeTo","raw","extra","expressionValue","stmt","rawValue","fillOptionalPropertiesForTSESLint","cloneEstreeStringLiteral","range","cloned","create","prototype","initFunction","isAsync","checkDeclaration","isObjectProperty","getObjectOrClassMethodParams","method","params","isValidDirective","_stmt$expression$extr","parenthesized","parseBlockBody","allowDirectives","topLevel","afterBlockParse","directiveStatements","directives","d","body","concat","parsePrivateName","getPluginOption","convertPrivateNameToPrivateIdentifier","getPrivateNameSV","id","isPrivateName","parseFunctionBody","allowExpression","isMethod","parseMethod","isGenerator","isConstructor","allowDirectSuper","inClassScope","funcNode","startNode","typeParameters","resetStartLocationFromNode","valueNode","computed","shorthand","finishNode","nameIsConstructor","parseClassProperty","args","propertyNode","parseClassPrivateProperty","parseClassAccessorProperty","accessorPropertyNode","abstract","hasPlugin","parseObjectProperty","prop","startLoc","isPattern","refExpressionErrors","finishObjectProperty","isValidLVal","isUnparenthesizedInAssign","binding","isAssignable","isBinding","toAssignable","isLHS","classScope","usePrivateName","toAssignableObjectExpressionProp","isLast","raise","finishCallExpression","unfinished","optional","callee","source","arguments","_ref2","attributes","toReferencedArguments","parseExport","decorators","exportStartLoc","state","lastTokStartLoc","exported","specifiers","length","_declaration$decorato","declaration","resetStartLocation","stopParseSubscript","base","optionalChainMember","parseMember","isOptionalMemberExpression","hasPropertyAsPrivateName","isObjectMethod","result","cloneIdentifier","cloneStringLiteral","resetEndLocation","lastTokEndLoc","TokContext","preserveSpace","types","brace","j_oTag","j_cTag","j_expr","beforeExpr","startsExpr","isLoop","isAssign","postfix","ExportedTokenType","label","conf","rightAssociative","binop","updateContext","keywords","Map","createKeyword","createToken","createBinop","tokenTypeCounter","tokenTypes","tokenLabels","tokenBinops","tokenBeforeExprs","tokenStartsExprs","tokenPrefixes","_options$binop","_options$beforeExpr","_options$startsExpr","_options$prefix","push","createKeywordLike","_options$binop2","_options$beforeExpr2","_options$startsExpr2","_options$prefix2","tt","bracketL","bracketHashL","bracketBarL","bracketR","bracketBarR","braceL","braceBarL","braceHashL","braceR","braceBarR","parenL","parenR","comma","semi","colon","doubleColon","dot","question","questionDot","arrow","ellipsis","backQuote","dollarBraceL","templateTail","templateNonTail","at","hash","interpreterDirective","eq","slashAssign","xorAssign","moduloAssign","incDec","bang","tilde","doubleCaret","doubleAt","pipeline","nullishCoalescing","logicalOR","logicalAND","bitwiseOR","bitwiseXOR","bitwiseAND","equality","lt","gt","relational","bitShift","bitShiftL","bitShiftR","plusMin","modulo","star","slash","exponent","_in","_instanceof","_break","_case","_catch","_continue","_debugger","_default","_else","_finally","_function","_if","_return","_switch","_throw","_try","_var","_const","_with","_new","_this","_super","_class","_extends","_export","_import","_null","_true","_false","_typeof","_void","_delete","_do","_for","_while","_as","_assert","_async","_await","_defer","_from","_get","_let","_meta","_of","_sent","_set","_source","_static","_using","_yield","_asserts","_checks","_exports","_global","_implements","_intrinsic","_infer","_is","_mixins","_proto","_require","_satisfies","_keyof","_readonly","_unique","_abstract","_declare","_enum","_module","_namespace","_interface","_type","_opaque","placeholder","string","num","regexp","privateName","eof","jsxName","jsxText","jsxTagStart","jsxTagEnd","tokenIsIdentifier","tokenKeywordOrIdentifierIsKeyword","tokenIsKeywordOrIdentifier","tokenIsLiteralPropertyName","tokenComesBeforeExpression","tokenCanStartExpression","tokenIsAssignment","tokenIsFlowInterfaceOrTypeOrOpaque","tokenIsLoop","tokenIsKeyword","tokenIsOperator","tokenIsPostfix","tokenIsPrefix","tokenIsTSTypeOperator","tokenIsTSDeclarationStart","tokenLabelName","tokenOperatorPrecedence","tokenIsRightAssociative","tokenIsTemplate","getExportedToken","context","pop","tc","nonASCIIidentifierStartChars","nonASCIIidentifierChars","nonASCIIidentifierStart","nonASCIIidentifier","astralIdentifierStartCodes","astralIdentifierCodes","isInAstralSet","i","isIdentifierStart","test","fromCharCode","isIdentifierChar","reservedWords","strict","strictBind","reservedWordsStrictSet","reservedWordsStrictBindSet","isReservedWord","word","inModule","isStrictReservedWord","has","isStrictBindOnlyReservedWord","isStrictBindReservedWord","isKeyword","isIteratorStart","current","next","next2","reservedWordLikeSet","canBeReservedWord","Scope","names","firstLexicalName","ScopeHandler","parser","scopeStack","undefinedExports","inTopLevel","currentScope","inFunction","currentVarScopeFlags","allowSuper","currentThisScopeFlags","allowNewTarget","inClass","inClassAndNotInNonArrowFunction","inStaticBlock","ScopeFlag","inNonArrowFunction","inBareCaseStatement","treatFunctionsAsVar","treatFunctionsAsVarInScope","createScope","enter","exit","scope","declareName","bindingType","checkRedeclarationInScope","maybeExportDefined","delete","isRedeclaredInScope","checkLocalExport","FlowScope","declareFunctions","FlowScopeHandler","add","reservedTypes","FlowErrors","AmbiguousConditionalArrow","AmbiguousDeclareModuleKind","AssignReservedType","reservedType","DeclareClassElement","DeclareClassFieldInitializer","DuplicateDeclareModuleExports","EnumBooleanMemberNotInitialized","memberName","enumName","EnumDuplicateMemberName","EnumInconsistentMemberValues","EnumInvalidExplicitType","invalidEnumType","EnumInvalidExplicitTypeUnknownSupplied","EnumInvalidMemberInitializerPrimaryType","explicitType","EnumInvalidMemberInitializerSymbolType","EnumInvalidMemberInitializerUnknownType","EnumInvalidMemberName","suggestion","EnumNumberMemberNotInitialized","EnumStringMemberInconsistentlyInitialized","GetterMayNotHaveThisParam","ImportReflectionHasImportType","ImportTypeShorthandOnlyInPureImport","InexactInsideExact","InexactInsideNonObject","InexactVariance","InvalidNonTypeImportInDeclareModule","MissingTypeParamDefault","NestedDeclareModule","NestedFlowComment","PatternIsOptional","SetterMayNotHaveThisParam","SpreadVariance","ThisParamAnnotationRequired","ThisParamBannedInConstructor","ThisParamMayNotBeOptional","ThisParamMustBeFirst","ThisParamNoDefault","TypeBeforeInitializer","TypeCastInPattern","UnexpectedExplicitInexactInObject","UnexpectedReservedType","UnexpectedReservedUnderscore","UnexpectedSpaceBetweenModuloChecks","UnexpectedSpreadType","UnexpectedSubtractionOperand","UnexpectedTokenAfterTypeParameter","UnexpectedTypeParameterBeforeAsyncArrowFunction","UnsupportedDeclareExportKind","unsupportedExportKind","UnsupportedStatementInDeclareModule","UnterminatedFlowComment","isEsModuleType","bodyElement","hasTypeImportKind","importKind","exportSuggestions","const","let","interface","partition","list","list1","list2","FLOW_PRAGMA_REGEX","flow","flowPragma","getScopeHandler","shouldParseTypes","finishToken","val","addComment","comment","matches","exec","flowParseTypeInitialiser","tok","oldInType","inType","expect","flowParseType","flowParsePredicate","moduloLoc","expectContextual","eat","parseExpression","flowParseTypeAndPredicateInitialiser","predicate","match","flowParseDeclareClass","flowParseInterfaceish","flowParseDeclareFunction","parseIdentifier","typeNode","typeContainer","flowParseTypeParameterDeclaration","tmp","flowParseFunctionTypeParams","this","returnType","typeAnnotation","semicolon","flowParseDeclare","insideModule","flowParseDeclareVariable","eatContextual","flowParseDeclareModuleExports","flowParseDeclareModule","isContextual","flowParseDeclareTypeAlias","flowParseDeclareOpaqueType","flowParseDeclareInterface","flowParseDeclareExportDeclaration","flowParseTypeAnnotatableIdentifier","parseExprAtom","bodyNode","parseImport","hasModuleExport","forEach","default","isLet","exportKind","flowParseTypeAnnotation","finished","flowParseTypeAlias","flowParseOpaqueType","isClass","flowParseRestrictedIdentifier","extends","flowParseInterfaceExtends","implements","mixins","flowParseObjectType","allowStatic","allowExact","allowSpread","allowProto","allowInexact","flowParseQualifiedTypeIdentifier","flowParseTypeParameterInstantiation","flowParseInterface","checkNotUnderscore","checkReservedType","liberal","right","declare","supertype","impltype","flowParseTypeParameter","requireDefault","nodeStartLoc","variance","flowParseVariance","ident","bound","defaultRequired","typeParameter","flowInTopLevelContext","cb","curContext","oldContext","flowParseTypeParameterInstantiationInExpression","reScan_lt","oldNoAnonFunctionType","noAnonFunctionType","reScan_lt_gt","flowParseTypeParameterInstantiationCallOrNew","flowParseTypeOrImplicitInstantiation","flowParseInterfaceType","flowParseObjectPropertyKey","flowParseObjectTypeIndexer","isStatic","static","lookahead","flowParseObjectTypeInternalSlot","flowParseObjectTypeMethodish","startNodeAt","flowParseFunctionTypeParam","flowParseObjectTypeCallProperty","nodeStart","callProperties","properties","indexers","internalSlots","endDelim","exact","inexact","protoStartLoc","inexactStartLoc","propOrInexact","flowParseObjectTypeProperty","flowObjectTypeSemicolon","out","proto","flowCheckGetterSetterParams","property","paramCount","node2","qualification","flowParseGenericType","flowParseTypeofType","flowParsePrimaryType","flowParseTupleType","first","lh","isThis","reinterpretTypeAsFunctionTypeParam","flowIdentToTypeAnnotation","isGroupedType","parseLiteralAtNode","createIdentifier","flowParsePostfixType","seenOptionalIndexedAccess","canInsertSemicolon","elementType","objectType","indexType","flowParsePrefixType","flowParseAnonFunctionWithoutParens","param","flowParseIntersectionType","flowParseUnionType","allowPrimitiveOverride","typeCastToParameter","allowExpressionBody","forwardNoArrowParamsConversionAt","parseFunctionBodyAndFinish","parseStatementLike","flowParseEnumDeclaration","parseExpressionStatement","expr","shouldParseExportDeclaration","containsEsc","isExportDefaultSpecifier","parseExportDefaultExpression","parseConditional","maybeInArrowParameters","nextCh","lookaheadCharCode","setOptionalParametersError","clone","originalNoArrowAt","noArrowAt","consequent","failed","tryParseConditionalConsequent","valid","invalid","getArrowLikeExpressions","alternate","parseMaybeAssign","noArrowParamsConversionAt","parseMaybeAssignAllowIn","disallowInvalid","stack","arrows","finishArrowValidation","every","_node$extra","toAssignableList","trailingCommaLoc","checkParams","includes","offsetToSourcePos","parseParenItem","newNode","typeCastNode","assertModuleNodeAllowed","parseExportDeclaration","declarationNode","parseExportSpecifiers","parseExportFrom","eatExportStar","maybeParseExportNamespaceSpecifier","hasNamespace","parseClassId","isStatement","optionalId","parseClassMember","classBody","member","parseClassMemberFromModifier","isIterator","readIterator","readWord1","fullWord","curPosition","getTokenFromCode","input","charCodeAt","finishOp","left","exprList","toReferencedList","isParenthesizedExpr","_expr$extra","parseArrayLike","close","canBePattern","isTuple","elements","isParenthesized","isClassMethod","isClassProperty","isNonstaticConstructor","pushClassMethod","allowsDirectSuper","isThisParam","pushClassPrivateMethod","parseClassSuper","superTypeParameters","implemented","checkGetterSetterParams","parsePropertyNamePrefixOperator","parseObjPropValue","isAccessor","parseFunctionParamType","parseMaybeDefault","checkImportReflection","module","parseImportSpecifierLocal","specifier","local","finishImportSpecifier","isPotentialImportPhase","isExport","ch","applyImportPhase","phase","parseImportSpecifier","importedIsString","isInTypeOnlyImport","isMaybeTypeOnly","firstIdent","imported","specifierTypeKind","isLookaheadContextual","as_ident","specifierIsTypeImport","checkReservedWord","parseBindingAtom","parseFunctionParams","parseVarId","decl","parseAsyncArrowFromCallExpression","call","shouldParseAsyncArrow","afterLeftParse","_jsx","jsx","tryParse","currentContext","_jsx2","_jsx3","abort","_arrowExpression$extr","arrowExpression","maybeUnwrapTypeCastExpression","aborted","async","failState","thrown","parseArrow","shouldParseArrow","setArrowFunctionParameters","allowDuplicates","isArrowFunction","strictModeChanged","parseParenAndDistinguishExpression","canBeArrow","sourceToOffsetPos","parseSubscripts","noCalls","parseCallExpressionArguments","parseAsyncArrowWithTypeParameters","parseSubscript","subscriptState","isLookaheadToken_lt","stop","typeArguments","parseNewCallee","targs","parseArrowExpression","readToken_mult_modulo","hasFlowComment","nextToken","readToken_pipe_amp","parseTopLevel","program","fileNode","skipBlockComment","skipFlowComment","hasFlowCommentCompletion","commentSkip","shiftToFirstNonWhiteSpace","ch2","ch3","slice","indexOf","flowEnumErrorBooleanMemberNotInitialized","flowEnumErrorInvalidMemberInitializer","enumContext","flowEnumErrorNumberMemberNotInitialized","flowEnumErrorStringMemberInconsistentlyInitialized","flowEnumMemberInit","endOfInit","literal","flowEnumMemberRaw","init","flowEnumCheckExplicitTypeMismatch","expectedType","flowEnumMembers","seenNames","members","booleanMembers","numberMembers","stringMembers","defaultedMembers","hasUnknownMembers","memberNode","toUpperCase","flowEnumStringMembers","initializedMembers","flowEnumParseExplicitType","flowEnumBody","nameLoc","empty","boolsLen","numsLen","strsLen","defaultedLen","jsxParseOpeningElementAfterName","nextTokenStart","afterNext","readToken_lt","readToken_gt","entities","__proto__","quot","amp","apos","nbsp","iexcl","cent","pound","curren","yen","brvbar","sect","uml","copy","ordf","laquo","not","shy","reg","macr","deg","plusmn","sup2","sup3","acute","micro","para","middot","cedil","sup1","ordm","raquo","frac14","frac12","frac34","iquest","Agrave","Aacute","Acirc","Atilde","Auml","Aring","AElig","Ccedil","Egrave","Eacute","Ecirc","Euml","Igrave","Iacute","Icirc","Iuml","ETH","Ntilde","Ograve","Oacute","Ocirc","Otilde","Ouml","times","Oslash","Ugrave","Uacute","Ucirc","Uuml","Yacute","THORN","szlig","agrave","aacute","acirc","atilde","auml","aring","aelig","ccedil","egrave","eacute","ecirc","euml","igrave","iacute","icirc","iuml","eth","ntilde","ograve","oacute","ocirc","otilde","ouml","divide","oslash","ugrave","uacute","ucirc","uuml","yacute","thorn","yuml","OElig","oelig","Scaron","scaron","Yuml","fnof","circ","Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega","alpha","beta","gamma","delta","epsilon","zeta","eta","theta","iota","kappa","lambda","mu","nu","xi","omicron","pi","rho","sigmaf","sigma","tau","upsilon","phi","chi","psi","omega","thetasym","upsih","piv","ensp","emsp","thinsp","zwnj","zwj","lrm","rlm","ndash","mdash","lsquo","rsquo","sbquo","ldquo","rdquo","bdquo","dagger","Dagger","bull","hellip","permil","prime","Prime","lsaquo","rsaquo","oline","frasl","euro","image","weierp","real","trade","alefsym","larr","uarr","rarr","darr","harr","crarr","lArr","uArr","rArr","dArr","hArr","forall","part","exist","nabla","isin","notin","ni","prod","sum","minus","lowast","radic","infin","ang","and","or","cap","cup","int","there4","sim","cong","asymp","ne","equiv","le","ge","sub","sup","nsub","sube","supe","oplus","otimes","perp","sdot","lceil","rceil","lfloor","rfloor","lang","rang","loz","spades","clubs","hearts","diams","lineBreak","lineBreakG","isNewLine","hasNewLine","skipWhiteSpace","skipWhiteSpaceInLine","isWhitespace","JsxErrors","AttributeIsEmpty","MissingClosingTagElement","openingTagName","MissingClosingTagFragment","UnexpectedSequenceExpression","HTMLEntity","UnsupportedJsxValue","UnterminatedJsxContent","UnwrappedAdjacentJSXElements","isFragment","getQualifiedJSXName","namespace","jsxReadToken","chunkStart","canStartJSXElement","jsxReadEntity","jsxReadNewLine","normalizeCRLF","curLine","lineStart","jsxReadString","quote","startPos","codePointAtPos","codePoint","readInt","count","desc","entity","XHTMLEntities","jsxReadWord","jsxParseIdentifier","jsxParseNamespacedName","jsxParseElementName","jsxParseAttributeValue","setContext","jsxParseExpressionContainer","jsxParseEmptyExpression","jsxParseSpreadChild","previousContext","jsxParseAttribute","jsxParseOpeningElementAt","selfClosing","jsxParseClosingElementAt","jsxParseElementAt","children","openingElement","closingElement","contents","openingFragment","closingFragment","jsxParseElement","newContext","replaceToken","skipSpace","prevType","splice","TypeScriptScope","tsNames","TypeScriptScopeHandler","importsStack","hasImport","allowShadow","len","isConst","wasConst","ProductionParameterHandler","stacks","currentFlags","hasAwait","hasYield","hasReturn","hasIn","functionFlags","BaseParser","sawUnambiguousESM","ambiguousScriptDifferentAst","sourcePos","offsetPos","pluginConfig","pluginName","pluginOptions","actualOptions","plugin","_this$plugins$get","setTrailingComments","comments","trailingComments","unshift","setLeadingComments","leadingComments","setInnerComments","innerComments","adjustInnerComments","commentWS","lastElement","CommentsParser","commentsLen","processComment","commentStack","commentStackLength","lastCommentWS","leadingNode","commentEnd","containingNode","finalizeComment","trailingNode","_node$options","commentStart","finalizeRemainingComments","resetPreviousNodeTrailingComments","takeSurroundingComments","State","errors","potentialArrowAt","topicContext","maxNumOfResolvableTopics","maxTopicIndex","labels","ct","firstInvalidTemplateEscapePos","strictErrors","tokensLength","v","isAmbientContext","inAbstractClass","inDisallowConditionalTypesContext","soloAwait","inFSharpPipelineDirectBody","hasTopLevelAwait","forbiddenNumericSeparatorSiblings","decBinOct","hex","isAllowedNumericSeparatorSibling","bin","oct","dec","readStringContents","initialPos","initialLineStart","initialCurLine","firstInvalidLoc","unterminated","isStringEnd","res","readEscapedChar","str","containsInvalid","inTemplate","throwOnInvalid","readHexChar","readCodePoint","strictNumericEscape","octalStr","octal","parseInt","forceLen","n","invalidEscapeSequence","allowNumSeparator","bailOnError","forbiddenSiblings","isAllowedSibling","total","e","Infinity","prev","Number","isNaN","unexpectedNumericSeparator","numericSeparatorInEscapeSequence","_isDigit","invalidDigit","invalidCodePoint","buildPosition","VALID_REGEX_FLAGS","Token","Tokenizer","isLookahead","errorHandlers_readInt","errorBuilder","errorHandlers_readCodePoint","errorHandlers_readStringContents_string","recordStrictModeErrors","errorHandlers_readStringContents_template","pushToken","checkKeywordEscapes","createLookaheadState","old","curr","nextTokenStartSince","lastIndex","lookaheadCharCodeSince","nextTokenInLineStart","nextTokenInLineStartSince","lookaheadInLineCharCode","cp","trail","setStrict","toParseError","clear","skipLineComment","startSkip","spaceStart","loop","commentWhitespace","readToken_numberSign","readToken_interpreter","nextPos","expectPlugin","readToken_dot","readNumber","readToken_slash","width","readToken_caret","proposal","topicToken","codePointAt","readToken_atSign","readToken_plus_min","size","readToken_eq_excl","readToken_question","readTemplateToken","readRadixNumber","readString","readWord","readRegexp","escaped","content","mods","char","isBigInt","replace","startsWithDot","isFloat","hasExponent","isOctal","hasLeadingZero","integer","underscorePos","isDecimal","parseFloat","readTemplateContinuation","opening","firstCode","escStart","identifierCheck","esc","keywordTypes","raiseOverwrite","expectOnePlugin","pluginNames","some","ClassScope","privateNames","loneAccessors","undefinedPrivateNames","ClassScopeHandler","oldClassScope","from","declarePrivateName","redefined","accessor","oldStatic","newStatic","oldKind","newKind","ExpressionScope","canBeArrowParameterDeclaration","isCertainlyParameterDeclaration","ArrowHeadParsingScope","declarationErrors","recordDeclarationError","ParsingErrorClass","clearDeclarationError","iterateErrors","iterator","ExpressionScopeHandler","recordParameterInitializerError","origin","recordArrowParameterBindingError","recordAsyncArrowParametersError","validateAsPattern","newParameterDeclarationScope","newArrowHeadScope","newAsyncArrowScope","newExpressionScope","UtilParser","addExtra","isUnparsedContextual","nameStart","startsWith","hasPrecedingLineBreak","hasFollowingLineBreak","isLineTerminator","allowAsi","fn","oldState","abortSignal","checkExpressionErrors","andThrow","shorthandAssignLoc","doubleProtoLoc","privateKeyLoc","optionalParametersLoc","voidPatternLoc","hasErrors","isLiteralPropertyName","initializeScopes","oldLabels","oldExportedIdentifiers","exportedIdentifiers","oldInModule","oldScope","oldProdParam","prodParam","oldExpressionScope","expressionScope","enterInitialScopes","paramFlags","isCommonJS","scopeFlags","checkDestructuringPrivate","ExpressionErrors","Node","NodePrototype","__clone","NodeUtils","locationNode","unwrapParenthesizedExpression","LValParser","_node$extra3","last","_node$extra2","operator","arg","checkToRestConversion","elt","toAssignableListItem","element","toReferencedListDeep","parseSpread","parseRestBinding","parseBindingList","ParseBindingListFlags","parseObjectLike","parseVoidPattern","closeCharCode","allowEmpty","elts","checkCommaAfterRest","parseDecorator","parseBindingElement","parseBindingRestProperty","parseBindingProperty","parsePropertyName","checkLVal","checkClashes","hasParenthesizedAncestor","_expression$extra","checkIdentifier","validity","ParseErrorClass","isParenthesizedExpression","nextAncestor","child","declareNameFromIdentifier","identifier","allowPattern","nonNull","x","assert","TSErrors","AbstractMethodHasImplementation","methodName","AbstractPropertyHasInitializer","propertyName","AccessorCannotBeOptional","ClassMethodHasDeclare","ClassMethodHasReadonly","ConstructorHasTypeParameters","DeclareAccessor","DeclareClassFieldHasInitializer","DeclareFunctionHasImplementation","DuplicateAccessibilityModifier","modifier","DuplicateModifier","EmptyHeritageClauseType","EmptyTypeArguments","EmptyTypeParameters","ExpectedAmbientAfterExportDeclare","ImportAliasHasImportType","IncompatibleModifiers","modifiers","IndexSignatureHasAbstract","IndexSignatureHasAccessibility","IndexSignatureHasDeclare","IndexSignatureHasOverride","IndexSignatureHasStatic","InitializerNotAllowedInAmbientContext","InvalidHeritageClauseType","InvalidModifierOnAwaitUsingDeclaration","InvalidModifierOnTypeMember","InvalidModifierOnTypeParameter","InvalidModifierOnTypeParameterPositions","InvalidModifierOnUsingDeclaration","InvalidModifiersOrder","orderedModifiers","InvalidPropertyAccessAfterInstantiationExpression","InvalidTupleMemberLabel","MissingInterfaceName","NonAbstractClassHasAbstractMethod","NonClassMethodPropertyHasAbstractModifier","OptionalTypeBeforeRequired","OverrideNotInSubClass","PrivateElementHasAbstract","PrivateElementHasAccessibility","ReadonlyForMethodSignature","ReservedArrowTypeParam","ReservedTypeAssertion","SingleTypeParameterWithoutTrailingComma","typeParameterName","StaticBlockCannotHaveModifier","TupleOptionalAfterType","TypeAnnotationAfterAssign","TypeImportCannotSpecifyDefaultAndNamed","TypeModifierIsUsedInTypeExports","TypeModifierIsUsedInTypeImports","UnexpectedParameterModifier","UnexpectedReadonly","UnexpectedTypeAnnotation","UnexpectedTypeCastInParameter","UnsupportedImportTypeArgument","UnsupportedParameterPropertyKind","UnsupportedSignatureParameterKind","UsingDeclarationInAmbientContext","keywordTypeFromName","tsIsAccessModifier","tsIsVarianceAnnotations","typescript","tsParseInOutModifiers","tsParseModifiers","bind","allowedModifiers","disallowedModifiers","errorTemplate","tsParseConstModifier","tsParseInOutConstModifiers","tsIsIdentifier","tsTokenCanFollowModifier","tsNextTokenOnSameLineAndCanFollowModifier","tsNextTokenCanFollowModifier","tsParseModifier","stopOnStartOfClassStaticBlock","hasSeenStaticModifier","tsIsStartOfStaticBlocks","tsTryParse","modified","enforceOrder","before","after","incompatible","mod1","mod2","accessibility","hasOwnProperty","tsIsListTerminator","tsParseList","parseElement","tsParseDelimitedList","refTrailingCommaPos","tsParseDelimitedListWorker","expectSuccess","trailingCommaPos","tsParseBracketedList","bracket","skipFirstToken","tsParseImportType","tsParseImportTypeOptions","qualifier","tsParseEntityName","tsParseEntityNameFlags","tsParseTypeArguments","withProperty","tsParseImportTypeWithPropertyValue","parsePropertyDefinition","tsParseTypeReference","typeName","tsParseThisTypePredicate","lhs","parameterName","tsParseTypeAnnotation","asserts","tsParseThisTypeNode","tsParseTypeQuery","exprName","tsParseTypeParameter","parseModifiers","tsParseTypeParameterName","constraint","tsEatThenParseType","tsTryParseTypeParameters","tsParseTypeParameters","tsFillSignature","returnToken","signature","returnTokenRequired","paramsKey","returnTypeKey","tsParseBindingListForSignature","tsParseTypeOrTypePredicateAnnotation","tsParseTypeMemberSemicolon","tsParseSignatureMember","tsIsUnambiguouslyIndexSignature","tsTryParseIndexSignature","tsLookAhead","parameters","tsTryParseTypeAnnotation","tsParsePropertyOrMethodSignature","readonly","firstParameter","tsParseTypeMember","idx","tsParseTypeLiteral","tsParseObjectTypeMembers","tsIsStartOfMappedType","tsParseMappedType","tsExpectThenParseType","nameType","tsParseType","tsTryParseType","tsParseTupleType","elementTypes","tsParseTupleElementType","seenOptionalElement","elementNode","restStartLoc","labeled","chAfterWord","wordName","typeOrLabel","tsParseNonArrayType","labeledNode","optionalTypeNode","restNode","tsParseParenthesizedType","tsParseFunctionOrConstructorType","tsInAllowConditionalTypesContext","tsParseLiteralTypeNode","tsParseTemplateLiteralType","parseTemplate","parseTemplateSubstitution","tsParseThisTypeOrThisTypePredicate","thisKeyword","parseMaybeUnary","nodeType","tsParseArrayTypeOrHigher","tsParseTypeOperator","tsParseTypeOperatorOrHigher","tsCheckTypeAnnotationForReadOnly","tsParseInferType","tsParseConstraintForInferType","tsInDisallowConditionalTypesContext","tsParseUnionOrIntersectionType","parseConstituentType","hasLeadingOperator","tsParseIntersectionTypeOrHigher","tsParseUnionTypeOrHigher","tsIsStartOfFunctionType","tsIsUnambiguouslyStartOfFunctionType","tsSkipParameterStart","previousErrorCount","tsInType","t","tsParseTypePredicateAsserts","thisTypePredicate","typePredicateVariable","tsParseTypePredicatePrefix","tsTryParseTypeOrTypePredicateAnnotation","eatColon","tsParseNonConditionalType","checkType","extendsType","trueType","falseType","isAbstractConstructorSignature","tsParseTypeAssertion","tsParseHeritageClause","originalStartLoc","delimitedList","tsParseInterfaceDeclaration","tsParseTypeAliasDeclaration","tsInTopLevelContext","oldInDisallowConditionalTypesContext","tsNextThenParseType","tsParseEnumMember","initializer","tsParseEnumDeclaration","tsParseEnumBody","tsParseModuleBlock","parseBlockOrModuleBlockBody","tsParseModuleOrNamespaceDeclaration","nested","inner","tsParseAmbientExternalModuleDeclaration","global","tsParseImportEqualsDeclaration","maybeDefaultIdentifier","moduleReference","tsParseModuleReference","tsIsExternalModuleReference","tsParseExternalModuleReference","f","tsTryParseAndCatch","tsTryParseDeclare","startType","tsInAmbientContext","parseFunctionStatement","parseClass","parseVarStatement","isUsing","isAwaitUsing","tsParseDeclaration","tsTryParseExportDeclaration","tsParseExpressionStatement","mod","tsCheckLineTerminator","tsParseAbstractDeclaration","tsTryParseGenericAsyncArrowFunction","oldMaybeInArrowParameters","tsParseTypeArgumentsInExpression","tsIsDeclarationStart","override","pp","parameter","isSimpleParameter","tsDisallowOptionalPattern","bodilessType","registerFunctionStatementId","tsCheckForInvalidTypeCasts","items","isInParens","nonNullExpression","isOptionalCall","missingParenErrorLoc","atPossibleAsyncArrow","asyncArrowFn","parseTaggedTemplateExpression","tokenType","_callee$extra","parseExprOp","leftStartLoc","minPrec","isSatisfies","checkKeywords","checkDuplicateExports","importNode","parseMaybeImportPhase","parseImportSpecifiersAndAfter","nodeImportEquals","isAbstractClass","cls","allowMissingInitializer","declarations","isValidAmbientConstInitializer","parseStatementContent","parseAccessModifier","tsHasSomeModifiers","callParseClassMemberWithIsStatic","parseClassStaticBlock","parseClassMemberWithIsStatic","hadSuperClass","parsePostMemberNameModifiers","methodOrProp","isDeclare","parseClassPropertyAnnotation","definite","declareClassPrivateMethodInScope","_typeCast","_typeCast2","typeCast","_typeParameters","reportReservedArrowTypeParam","trailingComma","sawUnary","toAssignableParenthesizedExpression","parseMaybeDecoratorArguments","canHaveLeadingDecorator","getGetterSetterExpectedParamCount","baseCount","firstParam","parseCatchClauseParam","oldIsAmbientContext","oldStrict","oldInAbstractClass","maybeTakeDecorators","shouldParseAsAmbientContext","getExpression","parseExportSpecifier","isString","isInTypeExport","parseTypeOnlyImportExportSpecifier","isImport","isInTypeOnlyImportExport","leftOfAsKey","rightOfAsKey","leftOfAs","rightOfAs","hasTypeSpecifier","canParseAsKeyword","firstAs","secondAs","parseModuleExportName","kindKey","_node$directive","_node$decorators","_node$optional","_node$typeAnnotation","_node$accessibility","_node$decorators2","_node$override","_node$readonly","_node$static","_node$declare","_node$returnType","_node$typeParameters","_node$optional2","_node$optional3","_node$accessibility2","_node$readonly2","_node$static2","_node$declare2","_node$definite","_node$readonly3","_node$typeAnnotation2","_node$accessibility3","_node$decorators3","_node$override2","_node$optional4","_node$id","_node$abstract","_node$declare3","_node$decorators4","_node$implements","_node$superTypeArgume","_node$typeParameters2","_node$declare4","_node$definite2","_node$const","_node$declare5","_node$computed","_node$qualifier","_node$declare6","_node$extends","_node$declare7","_node$global","_node$const2","_node$in","_node$out","superTypeArguments","in","isPossiblyLiteralEnum","expressions","isUncomputedMemberExpressionChain","isNumber","isNegativeNumber","PlaceholderErrors","ClassNameIsRequired","UnexpectedSpace","placeholders","parsePlaceholder","expectedNode","assertNoSpace","finishPlaceholder","chStartsBindingIdentifier","verifyBreakContinue","isBreak","parseStatementOrSloppyAnnexBFunctionDeclaration","stmtPlaceholder","parseBlock","createNewLexicalScope","parseFunctionId","requireId","parseClassBody","maybeParseExportDefaultSpecifier","_specifiers","checkExport","filter","maybeParseStarImportSpecifier","parseNamedImportSpecifiers","parseImportSource","v8intrinsic","parseV8Intrinsic","v8IntrinsicStartLoc","parseIdentifierName","PIPELINE_PROPOSALS","TOPIC_TOKENS","validatePlugins","pluginsMap","decoratorsBeforeExport","allowCallParenthesized","_pluginsMap$get2","proposalList","p","tokenList","_pluginsMap$get","syntaxType","version","deprecatedAssertSyntax","RECORD_AND_TUPLE_SYNTAX_TYPES","missingPlugins","mixinPlugins","mixinPluginNames","ExpressionParser","checkProto","isRecord","sawProto","shouldExitDescending","disallowIn","disallowInAnd","parseExpressionBase","allowInAnd","parseMaybeAssignDisallowIn","isYield","parseYield","ownExpressionErrors","parseMaybeConditional","isAmbiguousPrefixOrIdentifier","parseExprOps","parseMaybeUnaryOrPrivate","op","prec","checkPipelineAtInfixOperator","logical","coalesce","parseExprOpRightExpr","finishedNode","nextOp","withTopicBindingContext","parseHackPipeBody","withSoloAwaitPermittingContext","parseFSharpPipelineBody","parseSmartPipelineBodyInStyle","parseExprOpBaseRightExpr","_body$extra","topicReferenceWasUsedInCurrentContext","checkExponentialAfterUnary","isAwait","recordAwaitIfAllowed","parseAwait","update","isDelete","parseUpdate","updateExpressionNode","parseExprSubscripts","maybeAsyncArrow","parseBind","parseCoverCallAndAsyncArrowHead","parseNoCallExpr","tag","quasi","allowPlaceholder","nodeForExtra","oldInFSharpPipelineDirectBody","addTrailingCommaExtraToNode","parseExprListItem","_call$extra","parseSuper","parseImportMetaPropertyOrPhaseCall","parseImportCall","parseDo","parseFunctionOrFunctionSent","parseDecorators","parseNewOrNewTarget","parseTopicReferenceThenEqualsSign","parseTopicReference","pipeProposal","lookaheadCh","parseModuleExpression","parseAsyncFunctionExpression","parseAsyncArrowUnaryFunction","topicTokenType","topicTokenValue","finishTopicReference","testTopicReferenceConfiguration","topicReferenceIsAllowedInCurrentContext","registerTopicReference","meta","parseMetaProperty","parseFunction","isSource","createIdentifierAt","innerStartLoc","spreadStartLoc","optionalCommaStartLoc","spreadNodeStartLoc","parseMaybeAssignAllowInOrVoidPattern","innerEndLoc","arrowNode","wrapParenthesis","parenExpression","metaProp","parseNew","parseExprList","parseTemplateElement","isTagged","elemStart","elem","isTail","endOffset","elemEnd","cooked","tail","curElt","quasis","substitutions","maybeAsyncOrAccessorProp","keyName","_params","parseObjectMethod","finishedProp","generator","isExpression","hasStrictModeDirective","nonSimple","isSimpleParamList","formalParameters","isAwaitAllowed","delegating","delegate","childExpr","isSimpleReference","checkSmartPipeTopicBodyEarlyErrors","callback","outerContextTopicState","withSmartMixTopicForbiddingContext","outerContextSoloAwaitState","ParamKind","ret","revertScopes","parseProgram","nextCode","loopLabel","switchLabel","loneSurrogate","keywordRelationalOperator","babel7CompatTokens","hashEndPos","hashEndLoc","backquoteEnd","backquoteEndLoc","startToken","templateValue","templateElementEnd","templateElementEndLoc","endToken","StatementParser","interpreter","parseInterpreterDirective","finishedProgram","stmtToDirective","directiveLiteral","hasFollowingBindingAtom","isForUsing","nextCharAfterOf","endCh","chStartsBindingPattern","hasInLineFollowingBindingIdentifierOrBrace","allowsUsing","parseModuleItem","ParseStatementFlag","parseStatementListItem","allowLabeledFunction","parseStatement","allowDeclaration","allowFunctionDeclaration","parseBreakContinueStatement","parseDebuggerStatement","parseDoWhileStatement","parseForStatement","parseIfStatement","parseReturnStatement","parseSwitchStatement","parseThrowStatement","parseTryStatement","parseWhileStatement","parseWithStatement","parseEmptyStatement","nextTokenCharCode","isAsyncFunction","maybeName","parseLabeledStatement","decoratorsEnabledBeforeExport","maybeDecorators","classNode","exportNode","_classNode$decorators","allowExport","paramsStartLoc","lab","parseHeaderExpression","awaitAt","parseFor","startsWithLet","startsWithAwaitUsing","starsWithUsingDeclaration","isLetOrUsing","initNode","parseVar","isForIn","parseForIn","startsWithAsync","isForOf","isHangingDeclaration","ParseFunctionFlag","discriminant","cases","cur","sawDefault","isCase","block","handler","clause","finalizer","statementStart","parsedNonDirective","await","isFor","hangingDeclaration","isDeclaration","hadConstructor","publicMethod","privateMethod","publicProp","privateProp","accessorProp","publicMember","parseClassElementName","maybeContextualKw","isPrivate","maybeQuestionTokenStartLoc","pushClassPrivateProperty","pushClassProperty","pushClassAccessorProperty","_member$decorators","parseInitializer","hasDefault","parseAfterDefault","hasStar","parseAfterNamespace","isFromRequired","hasSpecifiers","maybeParseExportNamedSpecifiers","hasDeclaration","maybeParseExportDeclaration","_node2$declaration","_ref$specifiers","isTypeExport","assertions","nextChar","hasFrom","nextAfterFrom","maybeParseImportAttributes","checkJSONModuleImport","checkNames","isDefault","isFrom","_node$specifiers","_declaration$extra","nodes","surrogate","isJSONModuleImport","singleBindingType","_node$assertions","nonDefaultNamedSpecifier","find","phaseIdentifier","phaseIdentifierName","isPrecedingIdImportPhase","parseImportSourceAndAttributes","parseNext","maybeParseDefaultImportSpecifier","_node$specifiers2","parseImportAttributes","attrs","attrNames","parseModuleAttributes","useWith","importSpecifier","Parser","_options","getParser","ast","moduleError","generateExportedTokenTypes","internalTokenTypes","tokTypes","getParserClass","parserClassCache","pluginList","require_estree_walker","__commonJSMin","exports","module","global","factory","WalkerBase","node","parent","prop","index","SyncWalker","enter","leave","_should_skip","_should_remove","_replacement","skipped","removed","key","value","i","AsyncWalker","walk","ast","asyncWalk","require_base64","__commonJSMin","exports","intToCharMap","number","charCode","bigA","bigZ","littleA","littleZ","zero","nine","plus","slash","littleOffset","numberOffset","require_base64_vlq","__commonJSMin","exports","base64","VLQ_BASE_SHIFT","VLQ_BASE","VLQ_BASE_MASK","VLQ_CONTINUATION_BIT","toVLQSigned","aValue","fromVLQSigned","isNegative","shifted","encoded","digit","vlq","aStr","aIndex","aOutParam","strLen","result","shift","continuation","require_util","__commonJSMin","exports","getArg","aArgs","aName","aDefaultValue","urlRegexp","dataUrlRegexp","urlParse","aUrl","match","urlGenerate","aParsedUrl","url","MAX_CACHED_INPUTS","lruMemoize","f","cache","input","i","temp","result","normalize","aPath","path","isAbsolute","parts","start","part","up","join","aRoot","aPathUrl","aRootUrl","joined","relative","level","index","supportsNullProto","obj","identity","toSetString","aStr","isProtoString","fromSetString","length","compareByOriginalPositions","mappingA","mappingB","onlyCompareOriginal","cmp","strcmp","compareByOriginalPositionsNoSource","compareByGeneratedPositionsDeflated","onlyCompareGenerated","compareByGeneratedPositionsDeflatedNoLine","aStr1","aStr2","compareByGeneratedPositionsInflated","parseSourceMapInput","str","computeSourceURL","sourceRoot","sourceURL","sourceMapURL","parsed","require_array_set","__commonJSMin","exports","util","has","hasNativeMap","ArraySet","aArray","aAllowDuplicates","set","len","aStr","sStr","isDuplicate","idx","aIdx","require_mapping_list","__commonJSMin","exports","util","generatedPositionAfter","mappingA","mappingB","lineA","lineB","columnA","columnB","MappingList","aCallback","aThisArg","aMapping","require_source_map_generator","__commonJSMin","exports","base64VLQ","util","ArraySet","MappingList","SourceMapGenerator","aArgs","aSourceMapConsumer","generatorOps","sourceRoot","generator","mapping","newMapping","sourceFile","sourceRelative","content","generated","original","source","name","aSourceFile","aSourceContent","aSourceMapPath","newSources","newNames","aGenerated","aOriginal","aSource","aName","message","previousGeneratedColumn","previousGeneratedLine","previousOriginalColumn","previousOriginalLine","previousName","previousSource","result","next","nameIdx","sourceIdx","mappings","i","len","aSources","aSourceRoot","key","map","require_binary_search","__commonJSMin","exports","recursiveSearch","aLow","aHigh","aNeedle","aHaystack","aCompare","aBias","mid","cmp","index","require_quick_sort","__commonJSMin","exports","SortTemplate","comparator","swap","ary","x","y","temp","randomIntInRange","low","high","doQuickSort","p","r","pivotIndex","i","pivot","j","q","cloneSort","template","sortCache","start","require_source_map_consumer","__commonJSMin","exports","util","binarySearch","ArraySet","base64VLQ","quickSort","SourceMapConsumer","aSourceMap","aSourceMapURL","sourceMap","IndexedSourceMapConsumer","BasicSourceMapConsumer","aStr","index","c","aSourceRoot","aCallback","aContext","aOrder","context","order","mappings","sourceRoot","boundCallback","names","sources","sourceMapURL","i","n","mapping","source","aArgs","line","needle","originalLine","originalColumn","version","sourcesContent","file","s","aSource","relativeSource","smc","generatedMappings","destGeneratedMappings","destOriginalMappings","length","srcMapping","destMapping","Mapping","compareGenerated","sortGenerated","array","start","l","a","b","j","generatedLine","previousGeneratedColumn","previousOriginalLine","previousOriginalColumn","previousSource","previousName","cachedSegments","temp","originalMappings","str","segment","end","value","subarrayStart","currentSource","aNeedle","aMappings","aLineName","aColumnName","aComparator","aBias","nextMapping","name","sc","nullOnMissing","url","fileUriAbsPath","sections","lastOffset","offset","offsetLine","offsetColumn","sectionIndex","section","cmp","content","generatedPosition","ret","sectionMappings","adjustedMapping","require_source_node","__commonJSMin","exports","SourceMapGenerator","util","REGEX_NEWLINE","NEWLINE_CODE","isSourceNode","SourceNode","aLine","aColumn","aSource","aChunks","aName","aGeneratedCode","aSourceMapConsumer","aRelativePath","node","remainingLines","remainingLinesIndex","shiftNextLine","lineContents","getNextLine","newLine","lastGeneratedLine","lastGeneratedColumn","lastMapping","mapping","addMappingWithCode","nextLine","code","sourceFile","content","source","aChunk","chunk","i","aFn","len","aSep","newChildren","aPattern","aReplacement","lastChild","aSourceFile","aSourceContent","sources","str","aArgs","generated","map","sourceMappingActive","lastOriginalSource","lastOriginalLine","lastOriginalColumn","lastOriginalName","original","idx","length","sourceContent","require_source_map","__commonJSMin","exports","require_compiler_core_cjs_prod","__commonJSMin","exports","shared","decode_js","parser","estreeWalker","sourceMapJs","FRAGMENT","TELEPORT","SUSPENSE","KEEP_ALIVE","BASE_TRANSITION","OPEN_BLOCK","CREATE_BLOCK","CREATE_ELEMENT_BLOCK","CREATE_VNODE","CREATE_ELEMENT_VNODE","CREATE_COMMENT","CREATE_TEXT","CREATE_STATIC","RESOLVE_COMPONENT","RESOLVE_DYNAMIC_COMPONENT","RESOLVE_DIRECTIVE","RESOLVE_FILTER","WITH_DIRECTIVES","RENDER_LIST","RENDER_SLOT","CREATE_SLOTS","TO_DISPLAY_STRING","MERGE_PROPS","NORMALIZE_CLASS","NORMALIZE_STYLE","NORMALIZE_PROPS","GUARD_REACTIVE_PROPS","TO_HANDLERS","CAMELIZE","CAPITALIZE","TO_HANDLER_KEY","SET_BLOCK_TRACKING","PUSH_SCOPE_ID","POP_SCOPE_ID","WITH_CTX","UNREF","IS_REF","WITH_MEMO","IS_MEMO_SAME","helperNameMap","registerRuntimeHelpers","helpers","s","Namespaces","NodeTypes","ElementTypes","ConstantTypes","locStub","createRoot","children","source","createVNodeCall","context","tag","props","patchFlag","dynamicProps","directives","isBlock","disableTracking","isComponent","loc","getVNodeBlockHelper","getVNodeHelper","createArrayExpression","elements","createObjectExpression","properties","createObjectProperty","key","value","createSimpleExpression","content","isStatic","constType","createInterpolation","createCompoundExpression","createCallExpression","callee","args","createFunctionExpression","params","returns","newline","isSlot","createConditionalExpression","test","consequent","alternate","createCacheExpression","index","needPauseTracking","inVOnce","createBlockStatement","body","createTemplateLiteral","createIfStatement","createAssignmentExpression","left","right","createSequenceExpression","expressions","createReturnStatement","ssr","convertToBlock","node","helper","removeHelper","inSSR","defaultDelimitersOpen","defaultDelimitersClose","isTagStartChar","c","isWhitespace","isEndOfTagSection","toCharCodes","str","ret","i","Sequences","Tokenizer","stack","cbs","cp","consumed","line","column","newlineIndex","start","isEnd","endOfText","actualIndex","cc","sequence","offset","quote","length","input","endIndex","CompilerDeprecationTypes","deprecationData","getCompatValue","compatConfig","isCompatEnabled","mode","checkCompatEnabled","warnDeprecation","message","link","msg","err","defaultOnError","error","defaultOnWarn","createCompilerError","code","messages","additionalMessage","errorMessages","ErrorCodes","walkIdentifiers","root","onIdentifier","includeAll","parentStack","knownIds","rootExp","parent","TS_NODE_TYPES","isLocal","isRefed","isReferencedIdentifier","isFunctionType","id","markKnownIds","walkFunctionParams","markScopeIdentifier","walkBlockDeclarations","extractIdentifiers","isForStatement","walkForStatement","isReferenced","isInDestructureAssignment","p","isInNewExpression","onIdent","block","stmt","decl","isVar","variable","param","nodes","object","prop","element","name","child","isStaticProperty","isStaticPropertyKey","grandparent","unwrapTSNode","isStaticExp","isCoreComponent","nonIdentifierRE","isSimpleIdentifier","validFirstIdentCharRE","validIdentCharRE","whitespaceRE","getExpSource","exp","isMemberExpressionBrowser","path","state","stateStack","currentOpenBracketCount","currentOpenParensCount","currentStringType","char","isMemberExpressionNode","isMemberExpression","fnExpRE","isFnExpressionBrowser","isFnExpressionNode","isFnExpression","advancePositionWithClone","pos","numberOfCharacters","advancePositionWithMutation","linesCount","lastNewLinePos","assert","condition","findDir","allowEmpty","findProp","dynamicOnly","isStaticArgOf","arg","hasDynamicKeyVBind","isText$1","isVPre","isVSlot","isTemplateNode","isSlotOutlet","propsHelperSet","getUnnormalizedProps","callPath","injectProp","propsWithInjection","parentCall","first","hasProp","result","propKeyName","toValidAssetId","type","searchValue","replaceValue","hasScopeRef","ids","b","getMemoedVNodeCall","forAliasRE","defaultParserOptions","currentOptions","currentRoot","currentInput","currentOpenTag","currentProp","currentAttrValue","currentAttrStartIndex","currentAttrEndIndex","inPre","inVPre","currentVPreBoundary","tokenizer","emitError","end","onText","getSlice","innerStart","innerEnd","addNode","createExp","getLoc","endOpenTag","found","j","el","onCloseTag","backTrack","raw","dirToAttr","setLocEnd","mod","condense","expParseMode","parseForExpression","syncIndex","forIteratorRE","stripParensRE","inMatch","LHS","RHS","createAliasExpression","asParam","valueContent","trimmedOffset","iteratorMatch","keyContent","keyOffset","indexContent","ns","lastNode","isImplied","lookAhead","isFragmentTemplate","condenseWhitespace","inlineTemplateProp","specialTemplateDir","isUpperCase","windowsNewlineRE","shouldCondense","removedWhitespace","isAllWhitespace","prev","next","hasNewlineChar","prevCharIsWhitespace","cloneLoc","dir","attr","parseMode","plugins","options","e","reset","baseParse","delimiters","cacheStatic","walk","getSingleElementRoot","x","doNotHoistNode","inFor","toCache","constantType","getConstantType","codegenNode","flag","getGeneratedPropsConstantType","getNodeProps","i2","cachedAsArray","slotCacheKeys","getCacheExpression","slot","getSlotNode","slotName","node2","constantCache","cached","returnType2","generatedPropsType","childType","expType","returnType","allowHoistedHelperSet","getConstantTypeOfHelperCall","keyType","valueType","createTransformContext","filename","prefixIdentifiers","hoistStatic","hmr","cacheHandlers","nodeTransforms","directiveTransforms","transformHoist","isBuiltInComponent","isCustomElement","expressionPlugins","scopeId","slotted","ssrCssVars","bindingMetadata","inline","isTS","onError","onWarn","nameMatch","count","currentCount","list","removalIndex","addId","removeId","identifier","isVNode","cacheExp","identifiers","transform","traverseNode","createRootCodegen","singleElementRootChild","traverseChildren","nodeRemoved","exitFns","onExit","createStructuralDirectiveTransform","fn","matches","n","PURE_ANNOTATION","aliasHelper","createCodegenContext","ast","sourceMap","optimizeImports","runtimeGlobalName","runtimeModuleName","ssrRuntimeModuleName","addMapping","withoutNewLine","_names","_mappings","generate","push","indent","deindent","hasHelpers","useWithBlock","genScopeId","isSetupInlined","preambleContext","genModulePreamble","genFunctionPreamble","functionName","signature","genAssets","genNode","VueBinding","staticHelpers","genHoists","genImports","assets","resolver","maybeSelfReference","hoists","importsOptions","imports","isText","genNodeListAsArray","multilines","genNodeList","comma","genText","genExpression","genInterpolation","genCompoundExpression","genComment","genVNodeCall","genCallExpression","genObjectExpression","genArrayExpression","genFunctionExpression","genConditionalExpression","genCacheExpression","genTemplateLiteral","genIfStatement","genAssignmentExpression","genSequenceExpression","genReturnStatement","pure","genExpressionAsPropertyKey","text","patchFlagString","callHelper","genNullableArgs","needNewline","needsParens","isNested","needArraySpread","l","isLiteralWhitelisted","transformExpression","processExpression","memo","asParams","asRawStatements","localVars","rewriteIdentifier","isAssignmentLVal","isUpdateArg","isDestructureAssignment","isNewExpression","wrapWithUnref","raw2","wrapped","isConst","rVal","operator","rExp","rawExp","rExpString","stringifyExpression","isPrefix","prefix","postfix","isScopeVarReference","isAllowedGlobal","isLiteral","needPrefix","canPrefix","a","last","leadingText","transformIf","processIf","ifNode","branch","isRoot","siblings","sibling","createCodegenNodeForBranch","parentCondition","getParentCondition","processCodegen","createIfBranch","userKey","isSameKey","isTemplateIf","keyIndex","createChildrenCodegenNode","keyProperty","firstChild","vnodeCall","branchExp","transformBind","_node","modifiers","transformBindShorthand","injectPrefix","propName","transformFor","processFor","forNode","renderExp","isTemplate","keyProp","isDirKey","keyExp","isStableFragment","fragmentFlag","childBlock","needFragmentWrapper","slotOutlet","loop","createForLoopParams","parseResult","finalizeForParseResult","addIdentifiers","removeIdentifiers","scopes","memoArgs","createParamsList","defaultFallback","trackSlotScopes","vSlot","slotProps","trackVForSlotScopes","vFor","buildClientSlotFn","_vForExp","buildSlots","buildSlotFn","slotsProperties","dynamicSlots","hasDynamicSlots","onComponentSlot","hasTemplateSlots","hasNamedDefaultSlot","implicitDefaultChildren","seenSlotNames","conditionalBranchIndex","slotElement","slotDir","slotChildren","slotLoc","dirLoc","staticSlotName","slotFunction","vIf","vElse","buildDynamicSlot","isNonWhitespaceContent","conditional","buildDefaultSlotProperty","children2","slotFlag","hasForwardedSlots","slots","directiveImportMap","transformElement","vnodeTag","resolveComponentType","isDynamicComponent","vnodeProps","vnodeChildren","vnodeDynamicProps","dynamicPropNames","vnodeDirectives","shouldUseBlock","propsBuildResult","buildProps","buildDirectiveArgs","hasDynamicTextChild","stringifyDynamicPropNames","isExplicitDynamic","isComponentTag","isProp","builtIn","fromSetup","resolveSetupReference","dotIndex","bindings","camelName","PascalName","checkType","fromConst","fromMaybeRef","fromProps","elementLoc","mergeArgs","runtimeDirectives","hasChildren","hasRef","hasClassBinding","hasStyleBinding","hasHydrationEventBinding","hasDynamicKeys","hasVnodeHook","pushMergeArg","dedupeProperties","pushRefVForMarker","analyzePatchFlag","isEventHandler","nameLoc","binding","isVBind","isVOn","directiveTransform","props2","needRuntime","propsExpression","classKeyIndex","styleKeyIndex","hasDynamicKey","classProp","styleProp","knownProps","deduped","existing","mergeAsArray","incoming","dirArgs","runtime","trueExpression","modifier","propsNamesString","transformSlotOutlet","processSlotOutlet","slotArgs","expectedLen","nonNameProps","transformOn","augmentor","eventName","rawName","eventString","shouldCache","isMemberExp","isInlineStatement","hasMultipleStatements","transformText","currentContainer","hasText","callArgs","seen$1","transformOnce","cur","transformModel","createTransformProps","expString","bindingType","maybeRef","assignmentExp","eventArg","altAssignment","m","modifiersKey","validDivisionCharRE","transformFilter","rewriteFilter","parseFilter","inSingle","inDouble","inTemplateString","inRegex","curly","square","paren","lastFilterIndex","expression","filters","pushFilter","wrapFilter","filter","seen","transformMemo","getBaseTransformPreset","baseCompile","isModuleMode","resolvedOptions","BindingTypes","noopDirectiveTransform","require_compiler_core","__commonJSMin","exports","module","require_compiler_dom_cjs_prod","__commonJSMin","exports","compilerCore","shared","V_MODEL_RADIO","V_MODEL_CHECKBOX","V_MODEL_TEXT","V_MODEL_SELECT","V_MODEL_DYNAMIC","V_ON_WITH_MODIFIERS","V_ON_WITH_KEYS","V_SHOW","TRANSITION","TRANSITION_GROUP","parserOptions","tag","parent","rootNamespace","ns","a","transformStyle","node","p","i","parseInlineCSS","cssText","loc","normalized","createDOMCompilerError","code","DOMErrorMessages","DOMErrorCodes","transformVHtml","dir","context","exp","transformVText","transformModel","baseResult","isCustomElement","directiveToUse","isInvalidType","type","isEventOptionModifier","isNonKeyModifier","maybeKeyModifier","isKeyboardEvent","resolveModifiers","key","modifiers","keyModifiers","nonKeyModifiers","eventOptionModifiers","modifier","transformClick","event","transformOn","handlerExp","modifierPostfix","transformShow","expReplaceRE","stringifyStatic","children","isParentCached","nc","ec","currentChunk","stringifyCurrentChunk","currentIndex","staticCall","stringifyNode","deleteCount","cacheIndex","i2","c","child","getCachedNode","result","analyzeNode","dataAriaRE","isStringifiableAttr","name","isNonStringifiable","bailed","bail","walk","node2","isOptionTag","stringifyElement","evaluateConstant","res","innerHTML","evaluated","arg","ignoreSideEffectTags","DOMNodeTransforms","DOMDirectiveTransforms","compile","src","options","parse","template","k","require_compiler_dom","__commonJSMin","exports","module","require_reactivity_cjs_prod","__commonJSMin","exports","shared","activeEffectScope","EffectScope","detached","i","l","fn","currentEffectScope","fromParent","last","effectScope","getCurrentScope","onScopeDispose","failSilently","activeSub","EffectFlags","pausedQueueEffects","ReactiveEffect","batch","cleanupEffect","prepareDeps","prevEffect","prevShouldTrack","shouldTrack","cleanupDeps","link","removeSub","isDirty","batchDepth","batchedSub","batchedComputed","sub","isComputed","startBatch","endBatch","next","error","err","head","tail","prev","removeDep","refreshComputed","computed","globalVersion","dep","prevSub","value","soft","nextSub","prevDep","nextDep","effect","options","e","runner","stop","trackStack","pauseTracking","enableTracking","resetTracking","onEffectCleanup","cleanup","Link","Dep","debugInfo","addSub","currentTail","targetMap","ITERATE_KEY","MAP_KEY_ITERATE_KEY","ARRAY_ITERATE_KEY","track","target","type","key","depsMap","trigger","newValue","oldValue","oldTarget","run","targetIsArray","isArrayIndex","newLength","key2","getDepFromReactive","object","depMap","reactiveReadArray","array","raw","toRaw","isShallow","toReactive","shallowReadArray","arr","arrayInstrumentations","iterator","args","x","thisArg","apply","v","searchProxy","separator","noTracking","reduce","comparer","self","method","wrapValue","iter","result","arrayProto","wrappedRetFn","needsWrap","methodFn","result2","wrappedFn","item","index","acc","res","isProxy","isNonTrackableKeys","builtInSymbols","hasOwnProperty","obj","BaseReactiveHandler","_isReadonly","_isShallow","receiver","isReadonly2","isShallow2","shallowReadonlyMap","readonlyMap","shallowReactiveMap","reactiveMap","isRef","readonly","reactive","MutableReactiveHandler","isOldValueReadonly","isReadonly","hadKey","ReadonlyReactiveHandler","mutableHandlers","readonlyHandlers","shallowReactiveHandlers","shallowReadonlyHandlers","toShallow","getProto","createIterableMethod","rawTarget","targetIsMap","isPair","isKeyOnly","innerIterator","wrap","toReadonly","done","createReadonlyMethod","createInstrumentations","shallow","instrumentations","rawKey","has","callback","observed","get","hadItems","createInstrumentationGetter","mutableCollectionHandlers","shallowCollectionHandlers","readonlyCollectionHandlers","shallowReadonlyCollectionHandlers","targetTypeMap","rawType","getTargetType","createReactiveObject","shallowReactive","shallowReadonly","baseHandlers","collectionHandlers","proxyMap","targetType","existingProxy","proxy","isReactive","markRaw","r","ref","createRef","shallowRef","rawValue","RefImpl","useDirectValue","triggerRef","ref2","unref","toValue","source","shallowUnwrapHandlers","proxyRefs","objectWithRefs","CustomRefImpl","factory","set","newVal","customRef","toRefs","ret","propertyToRef","ObjectRefImpl","_object","_key","_defaultValue","val","GetterRefImpl","_getter","toRef","defaultValue","ComputedRefImpl","setter","isSSR","getterOrOptions","debugOptions","getter","TrackOpTypes","TriggerOpTypes","ReactiveFlags","WatchErrorCodes","INITIAL_WATCHER_VALUE","cleanupMap","activeWatcher","getCurrentWatcher","onWatcherCleanup","cleanupFn","owner","cleanups","watch","cb","immediate","deep","once","scheduler","augmentJob","call","reactiveGetter","source2","traverse","boundCleanup","forceTrigger","isMultiSource","s","currentEffect","baseGetter","depth","scope","watchHandle","_cb","job","immediateFirstRun","currentWatcher","cleanup2","seen","require_reactivity","__commonJSMin","exports","module","require_runtime_core_cjs_prod","__commonJSMin","exports","reactivity","shared","pushWarningContext","vnode","popWarningContext","assertNumber","val","type","ErrorCodes","ErrorTypeStrings$1","callWithErrorHandling","fn","instance","args","err","handleError","callWithAsyncErrorHandling","res","values","i","throwInDev","contextVNode","errorHandler","throwUnhandledErrorInProduction","cur","exposedInstance","errorInfo","errorCapturedHooks","logError","throwInProd","queue","flushIndex","pendingPostFlushCbs","activePostFlushCbs","postFlushIndex","resolvedPromise","currentFlushPromise","nextTick","p","findInsertionIndex","id","start","end","middle","middleJob","middleJobId","getId","queueJob","job","jobId","lastJob","queueFlush","flushJobs","queuePostFlushCb","cb","flushPreFlushCbs","seen","flushPostFlushCbs","deduped","a","b","currentRenderingInstance","currentScopeId","setCurrentRenderingInstance","prev","pushScopeId","popScopeId","withScopeId","_id","withCtx","ctx","isNonScopedSlot","renderFnWithContext","setBlockTracking","prevInstance","withDirectives","directives","getComponentPublicInstance","bindings","dir","value","arg","modifiers","invokeDirectiveHook","prevVNode","name","oldBindings","binding","hook","TeleportEndKey","isTeleport","isTeleportDisabled","props","isTeleportDeferred","isTargetSVG","target","isTargetMathML","resolveTarget","select","targetSelector","TeleportImpl","n1","n2","container","anchor","parentComponent","parentSuspense","namespace","slotScopeIds","optimized","internals","mountChildren","patchChildren","patchBlockChildren","insert","querySelector","createText","createComment","disabled","shapeFlag","children","dynamicChildren","placeholder","mainAnchor","mount","container2","anchor2","mountToTarget","targetAnchor","prepareAnchor","updateCssVars","queuePostRenderEffect","wasDisabled","currentContainer","currentAnchor","traverseStaticChildren","moveTeleport","nextTarget","unmount","hostRemove","doRemove","targetStart","shouldRemove","child","hydrateTeleport","parentAnchor","move","moveType","el","isReorder","node","nextSibling","parentNode","hydrateChildren","targetNode","Teleport","isDisabled","leaveCbKey","enterCbKey","useTransitionState","state","onMounted","onBeforeUnmount","TransitionHookValidator","BaseTransitionPropsValidators","recursiveGetSubtree","subTree","BaseTransitionImpl","slots","getCurrentInstance","getTransitionRawChildren","findNonCommentChild","rawProps","mode","emptyPlaceholder","innerChild","getInnerChild$1","enterHooks","resolveTransitionHooks","hooks","Comment","setTransitionHooks","oldInnerChild","isSameVNodeType","leavingHooks","earlyRemove","delayedLeave","leavingVNodesCache","getLeavingNodesForType","c","BaseTransition","leavingVNodes","postClone","appear","persisted","onBeforeEnter","onEnter","onAfterEnter","onEnterCancelled","onBeforeLeave","onLeave","onAfterLeave","onLeaveCancelled","onBeforeAppear","onAppear","onAfterAppear","onAppearCancelled","key","callHook","callAsyncHook","done","hook2","leavingVNode","afterHook","cancelHook","called","cancelled","remove","key2","vnode2","hooks2","isKeepAlive","cloneVNode","keepComment","parentKey","ret","keyedFragmentCount","Fragment","defineComponent","options","extraOptions","useId","markAsyncBoundary","useTemplateRef","r","refs","setRef","rawRef","oldRawRef","isUnmount","isAsyncWrapper","refValue","owner","ref","oldRef","setupState","rawSetupState","canSetSetupRef","_isString","_isRef","doSet","existing","hasLoggedMismatchError","logMismatchError","isSVGContainer","isMathMLContainer","getContainerType","isComment","createHydrationFunctions","rendererInternals","mountComponent","patch","patchProp","hydrate","hydrateNode","isFragmentStart","onMismatch","handleMismatch","patchFlag","domType","nextNode","Text","isTemplateNode","replaceNode","Static","needToAdoptContent","hydrateFragment","hydrateElement","locateClosingAnchor","createVNode","createTextVNode","dirs","transition","forcePatch","needCallTransitionHooks","needTransition","content","cls","next","isMismatchAllowed","clientText","isCustomElement","vnodeHooks","invokeVNodeHook","queueEffectWithSuspense","parentVNode","l","normalizeVNode","isText","fragmentSlotScopeIds","isFragment","next2","updateHOCHostEl","open","close","match","newNode","oldNode","parentNode2","parent","allowMismatchAttr","MismatchTypeString","allowedType","allowedAttr","list","requestIdleCallback","cancelIdleCallback","hydrateOnIdle","timeout","elementIsVisibleInViewport","top","left","bottom","right","innerHeight","innerWidth","hydrateOnVisible","opts","forEach","ob","entries","e","hydrateOnMediaQuery","query","mql","hydrateOnInteraction","interactions","hasHydrated","doHydrate","teardown","forEachElement","depth","defineAsyncComponent","source","loader","loadingComponent","errorComponent","delay","hydrateStrategy","suspensible","userOnError","pendingRequest","resolvedComp","retries","retry","load","thisRequest","resolve","reject","comp","patched","performHydrate","currentInstance","createInnerComp","onError","isInSSRComponentSetup","loaded","error","delayed","ref2","ce","KeepAliveImpl","sharedContext","cache","keys","current","_unmount","createElement","storageContainer","instance2","vnodeHook","invalidateMount","resetShapeFlag","pruneCache","filter","getComponentName","pruneCacheEntry","cached","watch","include","exclude","matches","pendingCacheKey","cacheSubtree","isSuspense","getInnerChild","onUpdated","suspense","da","rawVNode","isVNode","max","cachedVNode","KeepAlive","pattern","onActivated","registerKeepAliveHook","onDeactivated","wrappedHook","injectHook","injectToKeepAliveRoot","keepAliveRoot","injected","onUnmounted","prepend","reset","setCurrentInstance","createHook","lifecycle","onBeforeMount","onBeforeUpdate","onServerPrefetch","onRenderTriggered","onRenderTracked","onErrorCaptured","COMPONENTS","DIRECTIVES","resolveComponent","maybeSelfReference","resolveAsset","NULL_DYNAMIC_COMPONENT","resolveDynamicComponent","component","resolveDirective","warnMissing","Component","selfName","registry","renderList","renderItem","index","sourceIsArray","sourceIsReactiveArray","needsWrap","isReadonlySource","item","createSlots","dynamicSlots","slot","j","renderSlot","fallback","noSlotted","openBlock","createBlock","validSlotContent","ensureValidVNode","slotKey","rendered","vnodes","toHandlers","obj","preserveCaseIfNecessary","getPublicInstance","isStatefulComponent","publicPropertiesMap","resolveMergedOptions","instanceWatch","hasSetupBinding","PublicInstanceProxyHandlers","data","accessCache","appContext","normalizedProps","n","shouldCacheAccess","publicGetter","cssModule","globalProperties","propsOptions","descriptor","RuntimeCompiledPublicInstanceProxyHandlers","_","defineProps","defineEmits","defineExpose","exposed","defineOptions","defineSlots","defineModel","withDefaults","defaults","useSlots","getContext","useAttrs","calledFunctionName","createSetupContext","normalizePropsOrEmits","normalized","mergeDefaults","raw","opt","mergeModels","createPropsRestProxy","excludedKeys","withAsyncContext","getAwaitable","awaitable","unsetCurrentInstance","applyOptions","publicThis","dataOptions","computedOptions","methods","watchOptions","provideOptions","injectOptions","created","beforeMount","mounted","beforeUpdate","updated","activated","deactivated","beforeDestroy","beforeUnmount","destroyed","unmounted","render","renderTracked","renderTriggered","errorCaptured","serverPrefetch","expose","inheritAttrs","components","filters","resolveInjections","methodHandler","get","set","computed","v","createWatcher","provides","provide","registerLifecycleHook","register","_hook","checkDuplicateProperties","normalizeInject","inject","h","getter","createPathGetter","handler","base","mixins","extendsOptions","globalMixins","optionMergeStrategies","resolved","m","mergeOptions","to","from","strats","asMixin","strat","internalOptionMergeStrats","mergeDataFn","mergeEmitsOrPropsOptions","mergeObjectOptions","mergeAsArray","mergeWatchOptions","mergeInject","merged","createAppContext","uid$1","createAppAPI","rootComponent","rootProps","context","installedPlugins","pluginCleanupFns","isMounted","app","version","plugin","mixin","directive","rootContainer","isHydrate","cleanupFn","lastApp","currentApp","parentProvides","defaultValue","treatDefaultAsFactory","hasInjectionContext","internalObjectProto","createInternalObject","isInternalObject","initProps","isStateful","isSSR","attrs","setFullProps","updateProps","rawPrevProps","rawCurrentProps","hasAttrsChanged","propsToUpdate","isEmitListener","camelizedKey","resolvePropValue","kebabKey","needCastKeys","rawCastValues","camelKey","castValues","isAbsent","hasDefault","propsDefaults","mixinPropsCache","normalizePropsOptions","hasExtends","extendProps","raw2","normalizedKey","validatePropName","prop","propType","shouldCast","shouldCastTrue","typeName","isInternalKey","normalizeSlotValue","normalizeSlot","rawSlot","normalizeObjectSlots","rawSlots","normalizeVNodeSlots","assignSlots","initSlots","cacheIndexes","updateSlots","needDeletionCheck","deletionComparisonTarget","createRenderer","baseCreateRenderer","createHydrationRenderer","createHydrationFns","hostInsert","hostPatchProp","hostCreateElement","hostCreateText","hostCreateComment","hostSetText","hostSetElementText","hostParentNode","hostNextSibling","hostSetScopeId","hostInsertStaticContent","getNextHostNode","processText","processCommentNode","mountStaticNode","processFragment","processElement","processComponent","moveStaticNode","removeStaticNode","mountElement","patchElement","resolveChildrenNamespace","setScopeId","scopeId","cloneIfMounted","oldProps","newProps","toggleRecurse","patchProps","oldChildren","newChildren","fallbackContainer","oldVNode","newVNode","fragmentStartAnchor","fragmentEndAnchor","updateComponent","initialVNode","createComponentInstance","setupComponent","setupRenderEffect","shouldUpdateComponent","updateComponentPreRender","componentUpdateFn","bu","u","nonHydratedAsyncRoot","locateNonHydratedAsyncRoot","originNext","nextTree","renderComponentRoot","prevTree","bm","root","isAsyncWrapperVNode","hydrateSubTree","scopedInitialVNode","effect","update","nextVNode","prevProps","c1","prevShapeFlag","c2","patchKeyedChildren","patchUnkeyedChildren","unmountChildren","oldLength","newLength","commonLength","nextChild","l2","e1","e2","nextPos","s1","s2","keyToNewIndexMap","toBePatched","moved","maxNewIndexSoFar","newIndexToOldIndexMap","prevChild","newIndex","increasingNewIndexSequence","getSequence","nextIndex","anchorVNode","leave","delayLeave","afterLeave","remove2","performLeave","cacheIndex","shouldInvokeDirs","shouldInvokeVnodeHook","unmountComponent","removeFragment","performRemove","bum","scope","um","slotCacheKeys","teleportEnd","isFlushing","currentNamespace","allowed","shallow","ch1","ch2","arr","result","len","arrI","subComponent","ssrContextKey","useSSRContext","watchEffect","doWatch","watchPostEffect","watchSyncEffect","immediate","deep","flush","once","baseWatchOptions","runsImmediately","ssrCleanup","watchStopHandle","isPre","isFirstRun","watchHandle","path","segments","useModel","camelizedName","hyphenatedName","getModelModifiers","track","trigger","localValue","prevSetValue","prevEmittedValue","propValue","emittedValue","i2","modelName","emit","event","rawArgs","isModelListener","handlerName","onceHandler","normalizeEmitsOptions","extendEmits","normalizedFromExtend","proxy","withProxy","renderCache","fallthroughAttrs","proxyToUse","thisProxy","render2","getFunctionalFallthrough","blockStack","filterModelListeners","filterSingleRoot","recurse","singleRoot","prevChildren","nextProps","nextChildren","emits","hasPropsChanged","dynamicProps","emitsOptions","nextKeys","suspenseId","SuspenseImpl","mountSuspense","patchSuspense","hydrateSuspense","normalizeSuspenseChildren","Suspense","triggerEvent","eventListener","hiddenContainer","createSuspenseBoundary","setActiveBranch","newBranch","newFallback","activeBranch","pendingBranch","isInFallback","isHydrating","pendingId","parentSuspenseId","isSuspensible","isVNodeSuspensible","initialAnchor","resume","sync","effects","parentComponent2","delayEnter","hasUnresolvedAncestor","fallbackVNode","namespace2","mountFallback","optimized2","isInPendingSuspense","hydratedEl","asyncSetupResult","handleSetupResult","parentSuspense2","isSlotChildren","normalizeSuspenseSlot","block","trackBlock","isBlockTreeEnabled","currentBlock","closeBlock","branch","disableTracking","inVOnce","setupBlock","createElementBlock","createBaseVNode","transformVNodeArgs","transformer","normalizeKey","normalizeRef","ref_key","ref_for","isBlockNode","needFullChildrenNormalization","normalizeChildren","_createVNode","cloned","isClassComponent","guardReactiveProps","klass","style","extraProps","mergeRef","cloneTransition","mergedProps","mergeProps","text","flag","createStaticVNode","numberOfNodes","createCommentVNode","asBlock","slotFlag","toMerge","incoming","emptyAppContext","uid","internalSetCurrentInstance","setInSSRSetupState","g","registerGlobalSetter","setter","setters","setupResult","setupStatefulComponent","setup","setupContext","isAsyncSetup","resolvedResult","finishComponentSetup","compile","installWithProxy","registerRuntimeCompiler","_compile","isRuntimeOnly","skipOptions","template","compilerOptions","delimiters","componentCompilerOptions","finalCompilerOptions","attrsProxyHandlers","includeInferred","getterOrOptions","debugOptions","propsOrChildren","initCustomFormatter","withMemo","memo","isMemoSame","warn$1","ErrorTypeStrings","devtools","setDevtoolsHook","_ssrUtils","ssrUtils","resolveFilter","compatUtils","DeprecationTypes","require_runtime_core","__commonJSMin","exports","module","require_runtime_dom_cjs_prod","__commonJSMin","exports","runtimeCore","shared","policy","tt","val","unsafeToTrustedHTML","svgNS","mathmlNS","doc","templateContainer","nodeOps","child","parent","anchor","tag","namespace","is","props","el","text","node","selector","id","content","start","end","before","template","wrapper","TRANSITION","ANIMATION","vtcKey","DOMTransitionPropsValidators","TransitionPropsValidators","decorate$1","t","Transition","slots","resolveTransitionProps","callHook","hook","args","h2","hasExplicitCallback","rawProps","baseProps","key","name","type","duration","enterFromClass","enterActiveClass","enterToClass","appearFromClass","appearActiveClass","appearToClass","leaveFromClass","leaveActiveClass","leaveToClass","durations","normalizeDuration","enterDuration","leaveDuration","onBeforeEnter","onEnter","onEnterCancelled","onLeave","onLeaveCancelled","onBeforeAppear","onAppear","onAppearCancelled","finishEnter","isAppear","done","isCancelled","removeTransitionClass","finishLeave","makeEnterHook","resolve","nextFrame","addTransitionClass","whenTransitionEnds","forceReflow","NumberOf","n","cls","c","_vtc","cb","endId","expectedType","explicitTimeout","resolveIfNotStale","timeout","propCount","getTransitionInfo","endEvent","ended","onEnd","e","styles","getStyleProperties","transitionDelays","transitionDurations","transitionTimeout","getTimeout","animationDelays","animationDurations","animationTimeout","hasTransform","delays","d","i","toMs","patchClass","value","isSVG","transitionClasses","vShowOriginalDisplay","vShowHidden","vShow","transition","setDisplay","oldValue","initVShowForSSR","CSS_VAR_TEXT","useCssVars","getter","displayRE","patchStyle","prev","next","style","isCssString","hasControlledDisplay","prevStyle","setStyle","cssVarText","importantRE","v","prefixed","autoPrefix","prefixes","prefixCache","rawName","cached","xlinkNS","patchAttr","instance","isBoolean","patchDOMProp","parentComponent","attrName","newValue","needRemove","addEventListener","event","handler","options","removeEventListener","veiKey","patchEvent","prevValue","nextValue","invokers","existingInvoker","parseName","invoker","createInvoker","optionsModifierRE","m","cachedNow","p","getNow","initialValue","patchStopImmediatePropagation","originalStop","fn","e2","isNativeOn","patchProp","shouldSetAsProp","REMOVAL","defineCustomElement","extraOptions","_createApp","Comp","VueCustomElement","VueElement","initialProps","defineSSRCustomElement","createSSRApp","BaseClass","_VueElement","_def","_props","createApp","mutations","def","isAsync","numberProps","opt","asyncDef","exposed","declaredPropKeys","has","camelKey","shouldReflect","shouldUpdate","ob","vnode","render","dispatch","owner","nonce","s","slotName","outlets","scopeId","o","walker","comp","useHost","caller","useShadowRoot","useCssModule","modules","mod","positionMap","newPositionMap","moveCbKey","enterCbKey","decorate","TransitionGroupImpl","state","prevChildren","children","moveClass","hasCSSTransform","callPendingCbs","recordPosition","movedChildren","applyTranslation","cssTransitionProps","TransitionGroup","oldPos","newPos","dx","dy","root","clone","container","getModelAssigner","onCompositionStart","onCompositionEnd","target","assignKey","vModelText","lazy","trim","number","castToNumber","domValue","elValue","vModelCheckbox","_","modelValue","elementValue","getValue","checked","assign","index","found","filtered","cloned","getCheckboxValue","setChecked","binding","vModelRadio","vModelSelect","isSetModel","selectedVal","setSelected","_binding","isMultiple","isArrayValue","l","option","optionValue","optionType","vModelDynamic","callModelHook","prevVNode","resolveDynamicModel","tagName","initVModelForSSR","modelToUse","systemModifiers","modifierGuards","modifiers","withModifiers","cache","cacheKey","guard","keyNames","withKeys","eventKey","k","rendererOptions","renderer","enabledHydration","ensureRenderer","ensureHydrationRenderer","hydrate","app","mount","containerOrSelector","normalizeContainer","component","proxy","resolveRootNamespace","ssrDirectiveInitialized","initDirectivesForSSR","require_runtime_dom","__commonJSMin","exports","module","require_vue_cjs_prod","__commonJSMin","exports","compilerDom","runtimeDom","shared","_interopNamespaceDefault","e","n","k","runtimeDom__namespace","compileCache","compileToFunction","template","options","key","cached","el","opts","tag","code","render","require_vue","__commonJSMin","exports","module","require_vue_router_prod","__commonJSMin","exports","vue","isBrowser","isRouteComponent","component","isESModule","obj","assign","applyToParams","fn","params","newParams","key","value","isArray","noop","HASH_RE","AMPERSAND_RE","SLASH_RE","EQUAL_RE","IM_RE","PLUS_RE","ENC_BRACKET_OPEN_RE","ENC_BRACKET_CLOSE_RE","ENC_CARET_RE","ENC_BACKTICK_RE","ENC_CURLY_OPEN_RE","ENC_PIPE_RE","ENC_CURLY_CLOSE_RE","ENC_SPACE_RE","commonEncode","text","encodeHash","encodeQueryValue","encodeQueryKey","encodePath","encodeParam","decode","TRAILING_SLASH_RE","removeTrailingSlash","path","parseURL","parseQuery","location","currentLocation","query","searchString","hash","hashPos","searchPos","resolveRelativePath","stringifyURL","stringifyQuery","stripBase","pathname","base","isSameRouteLocation","a","b","aLastIndex","bLastIndex","isSameRouteRecord","isSameRouteLocationParams","isSameRouteLocationParamsValue","isEquivalentArray","i","to","from","fromSegments","toSegments","lastToSegment","position","toPosition","segment","START_LOCATION_NORMALIZED","NavigationType","NavigationDirection","START","normalizeBase","baseEl","BEFORE_HASH_RE","createHref","getElementPosition","el","offset","docRect","elRect","computeScrollPosition","scrollToPosition","scrollToOptions","positionEl","isIdSelector","getScrollKey","delta","scrollPositions","saveScrollPosition","scrollPosition","getSavedScrollPosition","scroll","createBaseLocation","createCurrentLocation","search","slicePos","pathFromHash","useHistoryListeners","historyState","replace","listeners","teardowns","pauseState","popStateHandler","state","fromState","listener","pauseListeners","listen","callback","teardown","index","beforeUnloadListener","history","destroy","buildState","back","current","forward","replaced","computeScroll","useHistoryStateNavigation","changeLocation","hashIndex","url","err","data","push","currentState","createWebHistory","historyNavigation","historyListeners","go","triggerListeners","routerHistory","createMemoryHistory","queue","setLocation","direction","info","shouldTrigger","createWebHashHistory","isRouteLocation","route","isRouteName","name","NavigationFailureSymbol","NavigationFailureType","ErrorTypeMessages","stringifyRoute","createRouterError","type","isNavigationFailure","error","propertiesToLog","BASE_PARAM_PATTERN","BASE_PATH_PARSER_OPTIONS","REGEX_CHARS_RE","tokensToParser","segments","extraOptions","options","score","pattern","keys","segmentScores","tokenIndex","token","subSegmentScore","repeatable","optional","regexp","re","subPattern","parse","match","stringify","avoidDuplicatedSlash","param","compareScoreArray","diff","comparePathParserScore","aScore","bScore","comp","isLastScoreNegative","last","ROOT_TOKEN","VALID_PARAM_RE","tokenizePath","crash","message","buffer","previousState","tokens","finalizeSegment","char","customRe","consumeBuffer","addCharToBuffer","createRouteRecordMatcher","record","parent","parser","matcher","createRouterMatcher","routes","globalOptions","matchers","matcherMap","mergeOptions","getRecordMatcher","addRoute","originalRecord","isRootAdd","mainNormalizedRecord","normalizeRouteRecord","normalizedRecords","aliases","alias","originalMatcher","normalizedRecord","parentPath","connectingSlash","isAliasRecord","removeRoute","isMatchable","insertMatcher","children","matcherRef","getRoutes","findInsertionIndex","resolve","paramsFromLocation","k","m","matched","parentMatcher","mergeMetaFields","clearRoutes","normalized","normalizeRecordProps","propsObject","props","meta","defaults","partialOptions","lower","upper","mid","insertionAncestor","getInsertionAncestor","ancestor","searchParams","searchParam","eqPos","currentValue","v","normalizeQuery","normalizedQuery","matchedRouteKey","viewDepthKey","routerKey","routeLocationKey","routerViewLocationKey","useCallbacks","handlers","add","handler","reset","registerGuard","guard","removeFromList","onBeforeRouteLeave","leaveGuard","activeRecord","onBeforeRouteUpdate","updateGuard","guardToPromiseFn","runWithContext","enterCallbackArray","reject","next","valid","guardReturn","guardCall","extractComponentsGuards","guardType","guards","rawComponent","componentPromise","resolved","resolvedComponent","loadRouteLocation","promises","useLink","router","currentRoute","activeRecordIndex","length","routeMatched","currentMatched","parentRecordPath","getOriginalPath","isActive","includesParams","isExactActive","navigate","e","guardEvent","p","preferSingleVNode","vnodes","RouterLinkImpl","slots","link","elClass","getLinkClass","RouterLink","target","outer","inner","innerValue","outerValue","propClass","globalClass","defaultClass","RouterViewImpl","attrs","injectedRoute","routeToDisplay","injectedDepth","depth","initialDepth","matchedRoute","matchedRouteRef","viewRef","instance","oldInstance","oldName","currentName","ViewComponent","normalizeSlot","routePropsOption","routeProps","onVnodeUnmounted","vnode","slot","slotContent","RouterView","createRouter","parseQuery$1","stringifyQuery$1","beforeGuards","beforeResolveGuards","afterGuards","pendingLocation","normalizeParams","paramValue","encodeParams","decodeParams","parentOrRoute","recordMatcher","routeMatcher","hasRoute","rawLocation","locationNormalized","href","matcherLocation","targetParams","fullPath","locationAsObject","checkCanceledNavigation","pushWithRedirect","handleRedirectRecord","lastMatched","redirect","newTargetLocation","redirectedFrom","targetLocation","force","shouldRedirect","toLocation","failure","handleScroll","markAsReady","triggerError","finalizeNavigation","triggerAfterEach","checkCanceledNavigationAndReject","app","installedApps","leavingRecords","updatingRecords","enteringRecords","extractChangingRecords","canceledNavigationCheck","runGuardQueue","beforeEnter","isPush","isFirstNavigation","removeHistoryListener","setupListeners","_from","readyHandlers","errorListeners","ready","list","isReady","scrollBehavior","started","reactiveRoute","unmountApp","promise","len","recordFrom","recordTo","useRouter","useRoute","_name","require_vue_router","__commonJSMin","exports","module","settingschangedcallbacks","globalDebugFlags","localDebugFlags","debugFlagsOverridesCB","DebugFlagsProxyHandler","debugFlagsOverridesCB","localDebugFlags","globalDebugFlags","target","p","record","keys","key","newValue","toModify","runSettingsCallbacks","value","debugFlags","formatForConsoleLogs","cb","settingschangedcallbacks","dtapStage","isLive","backendBase","dtapstage","dtapStage","islive","isLive","initEnv","setDtapStage","setBackendBase","dtapStage","isLive","backendBase","dtapstage","islive","getBrowserDebugFlags","varname","flags","urldebugvar","debugcookie","debugcookievalue","flag","sessionDebug","qR","node_or_selector","selector","matches","qSA","isElement","node","isHTMLElement","parseLanguageTag","languageTag","match","getLang","node","tag","getWHType","obj","isCrossRealm","value","isMoney","isTemporalInstant","isTemporalPlainDateTime","isTemporalPlainDate","isTemporalPlainTime","isTemporalZonedDateTime","isDate","isBlob","isFile","stdTypeOf","value","t","isMoney","isBlob","isFile","isDate","isTemporalInstant","isTemporalPlainTime","isTemporalPlainDate","isTemporalPlainDateTime","isTemporalZonedDateTime","stripUnneededDecimals","num","decimals","isneg","toText","amount","decimalpoint","mindecimals","isnegative","astext","splitValue","money","split","sign","joinPrice","parts","adjustDecimals","requiredecimals","toadd","multiplier","idx","__add","lhs","rhs","requiredecimals","adjustDecimals","add","amount1","amount2","joinPrice","splitValue","subtract","amount","tosubtract","__multiply","multiply","cmp","diff","getPercentageOfAmount","perc","result","normalize","__roundIntegerToMultiple","value","roundunit","mode","roundToMultiple","unit","split_value","splitValue","split_unit","requiredecimals","adjustDecimals","result","joinPrice","min","amount","amounts","val","cmp","max","getNonNegativePowerOf10","exp","retval","running_exp","divide","divisor","lhs","rhs","mul10exp","mulfactor","test","lhs","relation","rhs","compareresult","cmp","stripUnneededDecimals","num","decimals","isneg","splitValue","money","split","sign","toText","amount","decimalpoint","mindecimals","thousandpoint","isnegative","astext","beforepoint","afterpoint","Money","_Money","value","intvalue","param","isMoney","left","right","sum","item","add","subtract","roundto","mode","roundToMultiple","lhs","rhs","cmp","relation","test","multiply","percentage","getPercentageOfAmount","numerator","divisor","divide","amounts","min","max","format","escapeRegExp","text","options","mask","isHTMLUnrepresentableChar","curch","encodeEntities","str","html","s","char","stringify","arg","options","usereplacer","key","value","origvalue","type","stdTypeOf","lhs","rhs","result","encodeEntities","parseTyped","input","Money","omit","value","keys","elt","ret","key","val","unlock","LocalMutex","defer","LocalLock","mutex","config","siteroot","dtapStage","whconfigel","parsedConfig","omit","initEnv","flag","getBrowserDebugFlags","debugFlags","frontendConfig","getLang","prop","getFrontendData","dataObject","allowMissing","retval","resolve","reject","_resolve","_reject","items","callbackfn","retval","idx","item","key","list","IteratorPrototype","ArrayIteratorPrototype","OriginalIteratorPrototype","callback","it","value","next_value","real_value","max_count","values","limit","remaining","index","mapper","mapped","reducer","initial_value","acc","count","string","final","first","iterables","others","it_array","e","finished","partition1","partition2","i","max","min","isObject","t","GetIteratorFlattenable","obj","method","iterator","Iterator","WrappedIterator","#iterator","args","returnMethod","Iterator_from","submitForm","action","values","method","form","item","input","navigateTo","navigation","debugFlags","CustomEvent","dispatchCustomEvent","node","event","params","prop","evt","CustomEvent","defaultaction","stop","event","addDocEventListener","node","type","listener","options","locallocks","modallocked","uiwatcher","installedanticancelhandler","currentbusymodaldialog","currentbusymodaluserdialog","busymodalcontent","mylockmgr","getLockmgr","getParentLockManager","LockManager","anyModalLocks","l","scheduleCheckUIFree","checkUIFree","toggleBusyModal","lockmgr","isDialogElement","el","checkCancelEvent","evt","show","dispatchCustomEvent","dialog","toembed","lock","pos","debugFlags","BusyLock","options","lockmgr","getLockmgr","locallocks","modallocked","toggleBusyModal","debugFlags","lockpos","scheduleCheckUIFree","flagUIBusy","options","BusyLock","getParentLockManager","debugFlags","locallocks","l","lockmgr","getLockmgr","locallockmgr","LockManager","lock","mylockmgr","isDomReady","onDomReady","callback","components","map","isNodeCompletelyInDom","node","processRegistration","item","reg","domready","list","applyRegistration","startnode","isDomReady","items","e","register","selector","handler","options","newreg","components","isDomReady","onDomReady","registerMissed","applyRegistration","startnode","item","getCookie","key","value","escapeRegExp","parseUserAgent","ua","UA","platform","name","version","device","browser","parseUserAgent","getBrowser","config","forwardPublisherNavigation","event","isHTMLElement","navaction","desturl","origin","configureForCMS","e","import_vue","UNKNOWN_FUNCTION","parse","stackString","lines","stack","line","parseResult","parseChrome","parseWinjs","parseGecko","parseNode","parseJSC","chromeRe","chromeEvalRe","parts","isNative","isEval","submatch","winjsRe","geckoRe","geckoEvalRe","javaScriptCoreRe","nodeRe","parseTrace","e","parse","i","formatTrace","trace","prependStackTrace","error","stacklines","tracelines","isAbsolute","url","getBaseURL","backendBase","ControlledCall","client","method","stack","options","callurl","fetchoptions","fetchpromise","requestStack","response","exception","retryafter","resolve","jsonresponse","parseTyped","logitem","omit","err","prependStackTrace","RPCClient","debugFlags","error","params","stringify","parseTrace","ServiceProxy","target","prop","receiver","newoptions","rpc","args","service","servicematch","rpcclient","PublicCookieSuffix","authOptions","getCookieName","getFrontendData","getAuthLocalData","c","parseTyped","getCookie","PublicCookieSuffix","submitLoginForm","node","event","_stack","stop","username","password","site","returnto","persistentlogin","login","lock","__using","flagUIBusy","loginresult","refreshLoginStatus","navigateTo","failLogin","_","_error","_hasError","__callDispose","loggedIn","isLoggedIn","setupWRDAuth","options","register","addDocEventListener","evt","handleLogoutClick","doLogout","logout","onDomReady","message","response","form","evtdetail","dispatchCustomEvent","loginfield","qR","getUserInfo","getLoginTweaks","tweaks","getLang","urlvars","cookieName","result","rpc","getBrowser","postRenderChecks","log","logtext","onDomReady","import_vue_router","import_vue","import_vue","PageHeader_default","_defineComponent","__props","__expose","__returned__","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_createCommentVNode","_renderSlot","PageHeader_default","render","api","rpc","eurFormat","numFormat","formatEur","value","formatNumber","formatDate","iso","match","MONTH_NAMES","formatMonth","yearMonth","name","formatDateObj","date","pad","n","initials","part","import_vue","items","nextId","toasts","showToast","severity","text","timeoutMs","id","dismissToast","item","import_vue","conceptCount","refreshConceptCount","result","api","loading","loadingDemo","data","load","api","error","showToast","loadDemo","result","refreshConceptCount","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_createVNode","_createElementVNode","_toDisplayString","_renderList","row","DashboardView_default","render","import_vue","import_vue","__emit","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createBlock","_Teleport","_createVNode","_Transition","_withCtx","_createElementBlock","_withModifiers","$event","_withKeys","_createElementVNode","_normalizeStyle","_toDisplayString","_renderSlot","_createCommentVNode","ModalShell_default","render","__emit","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createBlock","_Teleport","_createVNode","_Transition","_withCtx","_createElementBlock","_withModifiers","$event","_withKeys","_createElementVNode","_toDisplayString","_normalizeClass","_createCommentVNode","ConfirmDialog_default","render","roundCents","value","addMonths","date","months","targetMonth","lastDay","endOfMonth","toIsoDate","pad","n","parseIsoDate","iso","match","calculateContractFee","contract","usage","total","agent","getContractPayments","fee","firstPayment","secondPayment","props","__props","emit","__emit","loading","saving","confirmDelete","isConcept","source","options","errors","emptyDraft","toIsoDate","draft","open","key","api","result","_id","concept","contractSource","agent","officeWorker","fields","error","showToast","supplierPaymentModel","supplier","numberOr0","value","fee","calculateContractFee","schedule","closeDate","parseIsoDate","getContractPayments","validate","save","data","removeContract","refreshConceptCount","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_44","_hoisted_45","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_createVNode","$event","_withCtx","_createCommentVNode","_createElementVNode","_toDisplayString","_withDirectives","_normalizeClass","_vModelText","_renderList","option","_vModelSelect","payment","index","ContractModal_default","render","loading","rows","modalOpen","editingId","load","result","api","error","showToast","openNew","openEdit","id","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_createVNode","_withCtx","_createElementVNode","_renderList","row","$event","_toDisplayString","_normalizeClass","ContractenView_default","render","import_vue","loading","reading","approvingId","rows","modalOpen","editingId","load","result","api","refreshConceptCount","error","showToast","readMailbox","approve","row","openEdit","id","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_createVNode","_withCtx","_createElementVNode","_toDisplayString","_createTextVNode","_renderList","row","$event","_normalizeClass","_withModifiers","ConceptenView_default","render","import_vue","import_vue","props","__props","emit","__emit","saving","confirmDelete","errors","emptyDraft","draft","open","key","validate","save","api","showToast","error","removeClient","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_createVNode","$event","_withCtx","_createCommentVNode","_createElementVNode","_toDisplayString","_withDirectives","_normalizeClass","_vModelText","ClientModal_default","render","loading","rows","modalOpen","editingId","editingClient","load","result","api","error","showToast","openNew","openEdit","row","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_createVNode","_withCtx","_createElementVNode","_renderList","row","$event","_toDisplayString","KlantenView_default","render","import_vue","loading","suppliers","agents","workers","savingModelId","confirmReset","resetting","contractTypeLabel","type","load","result","api","error","showToast","setPaymentModel","supplier","model","resetDemo","refreshConceptCount","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_createVNode","_createElementVNode","_renderList","supplier","_toDisplayString","$event","person","_createCommentVNode","InstellingenView_default","render","routes","DashboardView_default","ContractenView_default","ConceptenView_default","KlantenView_default","InstellingenView_default","router","import_vue","import_vue_router","import_vue","import_vue","emit","__emit","visible","inputEl","onInput","event","__expose","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","_normalizeClass","$event","PasswordInput_default","render","DEV_EMAIL","DEV_PASSWORD","EMAIL_STORAGE_KEY","REMEMBER_STORAGE_KEY","MIN_LOGIN_BUSY_MS","LOGIN_SAFETY_MS","isDev","readStored","key","writeStored","value","email","password","rememberMe","errorMessage","loggingIn","loginSubmittedAt","failTimer","safetyTimer","clearTimers","onLoginSubmit","onLoginFailed","event","message","wait","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","_createCommentVNode","_toDisplayString","_withDirectives","$event","_vModelText","_createVNode","_vModelCheckbox","LoginForm_default","render","import_vue","_hoisted_1","_hoisted_2","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createBlock","_Teleport","_createElementVNode","_createVNode","_TransitionGroup","_withCtx","_createElementBlock","_Fragment","_renderList","toast","_normalizeClass","$event","_toDisplayString","ToastStack_default","render","import_vue","LOGGED_IN_CLASS","useWrdAuthState","isLoggedIn","observer","read","route","isLoggedIn","useWrdAuthState","navItems","userName","info","getUserInfo","userEmail","userInitials","initials","loggedIn","refreshConceptCount","handleLogout","logout","error","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","render","_ctx","_cache","$props","$setup","$data","$options","_component_RouterLink","_resolveComponent","_component_router_view","_openBlock","_createElementBlock","_Fragment","_createElementVNode","_renderList","item","_createVNode","_normalizeClass","_withCtx","_toDisplayString","_createCommentVNode","_createBlock","App_default","render","onDomReady","app","App_default","router","setupWRDAuth","aps"]}