@sanity/workflow-engine-test 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../node_modules/.pnpm/groq-js@1.30.2/node_modules/groq-js/dist/_chunks-es/shared.mjs","../../../node_modules/.pnpm/groq-js@1.30.2/node_modules/groq-js/dist/_chunks-es/evaluator.mjs","../../../node_modules/.pnpm/ms@2.1.3/node_modules/ms/index.js","../../../node_modules/.pnpm/debug@4.4.3_supports-color@8.1.1/node_modules/debug/src/common.js","../../../node_modules/.pnpm/debug@4.4.3_supports-color@8.1.1/node_modules/debug/src/browser.js","../../../node_modules/.pnpm/supports-color@8.1.1/node_modules/supports-color/browser.js","../../../node_modules/.pnpm/debug@4.4.3_supports-color@8.1.1/node_modules/debug/src/node.js","../../../node_modules/.pnpm/debug@4.4.3_supports-color@8.1.1/node_modules/debug/src/index.js","../../../node_modules/.pnpm/groq-js@1.30.2/node_modules/groq-js/dist/1.mjs","../../../node_modules/.pnpm/@sanity-labs+client-fake-for-test@0.5.0/node_modules/@sanity-labs/client-fake-for-test/dist/index.js","../src/constants.ts","../src/guard-eval.ts","../src/access.ts","../src/engine-wrappers.ts","../src/guard-helpers.ts","../src/query-helpers.ts","../src/read-helpers.ts","../src/index.ts"],"sourcesContent":["function escapeRegExp(string) {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\nfunction pathRegExp(pattern) {\n const re = [];\n for (const part of pattern.split(\".\"))\n part === \"*\" ? re.push(\"[^.]+\") : part === \"**\" ? re.push(\".*\") : re.push(escapeRegExp(part));\n return new RegExp(`^${re.join(\".\")}$`);\n}\nclass Path {\n pattern;\n patternRe;\n constructor(pattern) {\n this.pattern = pattern, this.patternRe = pathRegExp(pattern);\n }\n matches(str) {\n return this.patternRe.test(str);\n }\n toJSON() {\n return this.pattern;\n }\n}\nconst RFC3339_REGEX = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(Z|([-+]\\d{2}:\\d{2}))$/;\nfunction parseRFC3339(str) {\n return RFC3339_REGEX.test(str) ? new Date(str) : null;\n}\nfunction formatRFC3339(d) {\n const year = addLeadingZero(d.getUTCFullYear(), 4), month = addLeadingZero(d.getUTCMonth() + 1, 2), day = addLeadingZero(d.getUTCDate(), 2), hour = addLeadingZero(d.getUTCHours(), 2), minute = addLeadingZero(d.getUTCMinutes(), 2), second = addLeadingZero(d.getUTCSeconds(), 2);\n let fractionalSecond = \"\";\n const millis = d.getMilliseconds();\n return millis != 0 && (fractionalSecond = `.${addLeadingZero(millis, 3)}`), `${year}-${month}-${day}T${hour}:${minute}:${second}${fractionalSecond}Z`;\n}\nfunction addLeadingZero(num, targetLength) {\n let str = num.toString();\n for (; str.length < targetLength; )\n str = `0${str}`;\n return str;\n}\nclass StaticValue {\n data;\n type;\n constructor(data, type) {\n this.data = data, this.type = type;\n }\n isArray() {\n return this.type === \"array\";\n }\n // eslint-disable-next-line require-await\n async get() {\n return this.data;\n }\n asStatic() {\n return this;\n }\n [Symbol.asyncIterator]() {\n if (Array.isArray(this.data))\n return (function* (data) {\n for (const element of data)\n yield fromJS(element);\n })(this.data);\n throw new Error(`Cannot iterate over: ${this.type}`);\n }\n}\nconst NULL_VALUE = new StaticValue(null, \"null\"), TRUE_VALUE = new StaticValue(!0, \"boolean\"), FALSE_VALUE = new StaticValue(!1, \"boolean\");\nclass DateTime {\n date;\n constructor(date) {\n this.date = date;\n }\n static parseToValue(str) {\n const date = parseRFC3339(str);\n return date ? new StaticValue(new DateTime(date), \"datetime\") : NULL_VALUE;\n }\n equals(other) {\n return this.date.getTime() == other.date.getTime();\n }\n add(secs) {\n const copy = new Date(this.date.getTime());\n return copy.setTime(copy.getTime() + secs * 1e3), new DateTime(copy);\n }\n difference(other) {\n return (this.date.getTime() - other.date.getTime()) / 1e3;\n }\n compareTo(other) {\n return this.date.getTime() - other.date.getTime();\n }\n toString() {\n return formatRFC3339(this.date);\n }\n toJSON() {\n return this.toString();\n }\n}\nfunction fromNumber(num) {\n return Number.isFinite(num) ? new StaticValue(num, \"number\") : NULL_VALUE;\n}\nfunction fromString(str) {\n return new StaticValue(str, \"string\");\n}\nfunction fromDateTime(dt) {\n return new StaticValue(dt, \"datetime\");\n}\nfunction fromPath(path) {\n return new StaticValue(path, \"path\");\n}\nfunction isIterator(obj) {\n return obj && typeof obj.next == \"function\";\n}\nfunction fromArray(val) {\n return new StaticValue(val, \"array\");\n}\nfunction fromJS(val) {\n return isIterator(val) ? new StreamValue(async function* () {\n for await (const value of val)\n yield fromJS(value);\n }) : val == null ? NULL_VALUE : new StaticValue(val, getType(val));\n}\nfunction toJS(val) {\n const normalized = maybeNormalize(val.data);\n return normalized === void 0 ? val.data : normalized;\n}\nfunction maybeNormalize(data) {\n if (!(data === null || typeof data > \"u\")) {\n if (Array.isArray(data)) {\n let result;\n for (let i = 0; i < data.length; i++) {\n let normalized = maybeNormalize(data[i]);\n normalized !== void 0 && result === void 0 && (result = data.slice(0, i)), result !== void 0 && (normalized === void 0 && (normalized = data[i]), result.push(normalized));\n }\n return result;\n }\n if (typeof data == \"object\") {\n if (\"toJSON\" in data && typeof data.toJSON == \"function\")\n return data.toJSON();\n const entries = Object.entries(data);\n let result;\n for (let i = 0; i < entries.length; i++) {\n const [key, value] = entries[i];\n let normalized = maybeNormalize(value);\n normalized !== void 0 && result === void 0 && (result = Object.fromEntries(entries.slice(0, i))), result !== void 0 && (normalized === void 0 && (normalized = value), result[key] = normalized);\n }\n return result;\n }\n }\n}\nfunction getType(data) {\n return data === null || typeof data > \"u\" ? \"null\" : Array.isArray(data) ? \"array\" : data instanceof Path ? \"path\" : data instanceof DateTime ? \"datetime\" : typeof data;\n}\nclass StreamValue {\n type = \"stream\";\n generator;\n ticker;\n isDone;\n data;\n constructor(generator) {\n this.generator = generator, this.ticker = null, this.isDone = !1, this.data = [];\n }\n // eslint-disable-next-line class-methods-use-this\n isArray() {\n return !0;\n }\n async get() {\n const result = [];\n for await (const value of this)\n result.push(await value.get());\n return result;\n }\n async asStatic() {\n return new StaticValue(await this.get(), \"array\");\n }\n async *[Symbol.asyncIterator]() {\n let i = 0;\n for (; ; ) {\n for (; i < this.data.length; i++)\n yield this.data[i];\n if (this.isDone)\n return;\n await this._nextTick();\n }\n }\n _nextTick() {\n if (this.ticker)\n return this.ticker;\n let currentResolver, currentRejector;\n const setupTicker = () => {\n this.ticker = new Promise((resolve, reject) => {\n currentResolver = resolve, currentRejector = reject;\n });\n }, tick = () => {\n currentResolver(), setupTicker();\n }, fetch = async () => {\n try {\n for await (const value of this.generator())\n this.data.push(value), tick();\n this.isDone = !0, tick();\n } catch (error) {\n currentRejector(error);\n }\n };\n return setupTicker(), fetch(), this.ticker;\n }\n}\nfunction isSelectorNode(node) {\n return [\n \"AccessAttribute\",\n \"SelectorFuncCall\",\n \"Group\",\n \"Tuple\",\n \"ArrayCoerce\",\n \"Filter\",\n \"SelectorNested\"\n ].includes(node.type);\n}\nfunction isSelectorNested(node) {\n return [\"AccessAttribute\", \"ArrayCoerce\", \"Filter\", \"Group\", \"Tuple\", \"SelectorNested\"].includes(\n node.type\n );\n}\nconst CHARS = /([^!@#$%^&*(),\\\\/?\";:{}|[\\]+<>\\s-])+/g, CHARS_WITH_WILDCARD = /([^!@#$%^&(),\\\\/?\";:{}|[\\]+<>\\s-])+/g, EDGE_CHARS = /(\\b\\.+|\\.+\\b)/g;\nfunction matchText(tokens, patterns) {\n return tokens.length === 0 || patterns.length === 0 ? !1 : patterns.every((pattern) => pattern(tokens));\n}\nfunction matchTokenize(text) {\n return text.replace(EDGE_CHARS, \"\").match(CHARS) || [];\n}\nfunction matchAnalyzePattern(text) {\n return matchPatternRegex(text).map((re) => (tokens) => tokens.some((token) => re.test(token)));\n}\nfunction matchPatternRegex(text) {\n return (text.replace(EDGE_CHARS, \"\").match(CHARS_WITH_WILDCARD) || []).map(\n (term) => new RegExp(`^${term.slice(0, 1024).replace(/\\*/g, \".*\")}$`, \"i\")\n );\n}\nfunction gatherText(value, flatMap) {\n if (value.type === \"string\")\n return { parts: flatMap(value.data), success: !0 };\n if (value.type === \"array\") {\n let success = !0;\n const parts = [];\n for (const part of value.data)\n typeof part == \"string\" ? parts.push(...flatMap(part)) : success = !1;\n return { parts, success };\n }\n return value.type === \"stream\" ? (async () => {\n let success = !0;\n const parts = [];\n for await (const part of value)\n part.type === \"string\" ? parts.push(...flatMap(part.data)) : success = !1;\n return { parts, success };\n })() : { parts: [], success: !1 };\n}\nfunction canConstantEvaluate(node) {\n switch (node.type) {\n case \"Group\":\n return canConstantEvaluate(node.base);\n case \"Value\":\n case \"Parameter\":\n return !0;\n case \"Pos\":\n case \"Neg\":\n return canConstantEvaluate(node.base);\n case \"OpCall\":\n switch (node.op) {\n case \"+\":\n case \"-\":\n case \"*\":\n case \"/\":\n case \"%\":\n case \"**\":\n return canConstantEvaluate(node.left) && canConstantEvaluate(node.right);\n default:\n return !1;\n }\n default:\n return !1;\n }\n}\nfunction tryConstantEvaluate(node) {\n return canConstantEvaluate(node) ? constantEvaluate(node) : null;\n}\nfunction isRecord(val) {\n return val.constructor === Object || val.constructor === void 0;\n}\nfunction staticFromJS(val) {\n return val == null ? NULL_VALUE : typeof val == \"boolean\" ? val ? TRUE_VALUE : FALSE_VALUE : typeof val == \"number\" ? fromNumber(val) : typeof val == \"string\" ? fromString(val) : Array.isArray(val) ? fromArray(val) : typeof val == \"object\" && isRecord(val) ? new StaticValue(val, \"object\") : NULL_VALUE;\n}\nfunction constantEvaluate(node) {\n switch (node.type) {\n case \"Value\":\n return staticFromJS(node.value);\n case \"Parameter\":\n return NULL_VALUE;\n case \"Group\":\n return constantEvaluate(node.base);\n case \"Pos\": {\n const base = constantEvaluate(node.base);\n return base.type !== \"number\" ? NULL_VALUE : fromNumber(base.data);\n }\n case \"Neg\": {\n const base = constantEvaluate(node.base);\n return base.type !== \"number\" ? NULL_VALUE : fromNumber(-base.data);\n }\n case \"OpCall\": {\n const left = constantEvaluate(node.left), right = constantEvaluate(node.right);\n switch (node.op) {\n case \"+\":\n return left.type === \"number\" && right.type === \"number\" ? fromNumber(left.data + right.data) : left.type === \"string\" && right.type === \"string\" ? fromString(left.data + right.data) : left.type === \"array\" && right.type === \"array\" ? fromArray(left.data.concat(right.data)) : left.type === \"object\" && right.type === \"object\" ? new StaticValue({ ...left.data, ...right.data }, \"object\") : NULL_VALUE;\n case \"-\":\n return left.type === \"number\" && right.type === \"number\" ? fromNumber(left.data - right.data) : NULL_VALUE;\n case \"*\":\n return left.type === \"number\" && right.type === \"number\" ? fromNumber(left.data * right.data) : NULL_VALUE;\n case \"/\":\n return left.type === \"number\" && right.type === \"number\" ? fromNumber(left.data / right.data) : NULL_VALUE;\n case \"%\":\n return left.type === \"number\" && right.type === \"number\" ? fromNumber(left.data % right.data) : NULL_VALUE;\n case \"**\":\n return left.type === \"number\" && right.type === \"number\" ? fromNumber(Math.pow(left.data, right.data)) : NULL_VALUE;\n default:\n return NULL_VALUE;\n }\n }\n default:\n return NULL_VALUE;\n }\n}\nconst namespaceRegistry = {\n global: {\n anywhere: { arity: 1 },\n coalesce: {},\n count: { arity: 1 },\n dateTime: { arity: 1 },\n defined: { arity: 1 },\n identity: { arity: 0 },\n length: { arity: 1 },\n path: { arity: 1 },\n string: { arity: 1 },\n references: { arity: (c) => c >= 1 },\n round: { arity: (count) => count >= 1 && count <= 2 },\n now: { arity: 0 },\n boost: { arity: 2 },\n lower: { arity: 1 },\n upper: { arity: 1 }\n },\n string: {\n lower: { arity: 1 },\n upper: { arity: 1 },\n split: { arity: 2 },\n startsWith: { arity: 2 }\n },\n array: {\n join: { arity: 2 },\n compact: { arity: 1 },\n unique: { arity: 1 },\n intersects: { arity: 2 }\n },\n pt: {\n text: { arity: 1 }\n },\n delta: {\n operation: {},\n changedAny: { arity: 1, mode: \"delta\" },\n changedOnly: { arity: 1, mode: \"delta\" }\n },\n diff: {\n changedAny: { arity: 3 },\n changedOnly: { arity: 3 }\n },\n media: {\n aspect: { arity: 2 }\n },\n sanity: {\n projectId: {},\n dataset: {},\n versionOf: { arity: 1 },\n partOfRelease: { arity: 1 }\n },\n math: {\n min: { arity: 1 },\n max: { arity: 1 },\n sum: { arity: 1 },\n avg: { arity: 1 }\n },\n dateTime: {\n now: { arity: 0 }\n },\n releases: {\n all: { arity: 0 }\n },\n text: {\n query: { arity: 1 },\n semanticSimilarity: { arity: 1 }\n },\n geo: {\n latLng: {},\n contains: {},\n intersects: {},\n distance: {}\n },\n documents: {\n get: {},\n incomingRefCount: {},\n incomingGlobalDocumentReferenceCount: {}\n },\n user: {\n attributes: {}\n }\n}, pipeFunctionRegistry = {\n order: { arity: (count) => count >= 1 },\n score: { arity: (count) => count >= 1 }\n};\nexport {\n DateTime,\n FALSE_VALUE,\n NULL_VALUE,\n Path,\n StreamValue,\n TRUE_VALUE,\n fromArray,\n fromDateTime,\n fromJS,\n fromNumber,\n fromPath,\n fromString,\n gatherText,\n getType,\n isSelectorNested,\n isSelectorNode,\n matchAnalyzePattern,\n matchPatternRegex,\n matchText,\n matchTokenize,\n namespaceRegistry,\n pipeFunctionRegistry,\n toJS,\n tryConstantEvaluate\n};\n//# sourceMappingURL=shared.mjs.map\n","import { NULL_VALUE, getType, fromString, fromJS, TRUE_VALUE, FALSE_VALUE, fromDateTime, DateTime, isSelectorNode, fromArray, fromNumber, fromPath, Path, gatherText, matchTokenize, matchPatternRegex, StreamValue, matchText, matchAnalyzePattern } from \"./shared.mjs\";\nfunction isEqual(a, b) {\n return a.type === \"string\" && b.type === \"string\" || a.type === \"boolean\" && b.type === \"boolean\" || a.type === \"null\" && b.type === \"null\" || a.type === \"number\" && b.type === \"number\" ? a.data === b.data : a.type === \"datetime\" && b.type === \"datetime\" ? a.data.equals(b.data) : !1;\n}\nfunction deepEqual(a, b) {\n if (a === null || b === null) return a === b;\n const typeOfA = typeof a, typeOfB = typeof b;\n if (typeOfA === \"undefined\" && typeOfB === \"undefined\") return !0;\n if (typeOfA === \"function\" && typeOfB === \"function\") return a === b;\n if (typeOfA === \"object\" && typeOfB === \"object\") {\n const keysOfA = Object.keys(a), keysOfB = Object.keys(b);\n if (keysOfA.length !== keysOfB.length) return !1;\n for (const key of keysOfA)\n if (!deepEqual(a[key], b[key])) return !1;\n return !0;\n }\n return a === b;\n}\nconst array = {};\narray.join = mappedExecutor(\n (args) => args,\n (_, arr, sep) => {\n if (arr.type !== \"array\")\n return NULL_VALUE;\n if (sep.type !== \"string\")\n return NULL_VALUE;\n let buf = \"\", needSep = !1;\n for (const elem of arr.data) {\n switch (needSep && (buf += sep.data), getType(elem)) {\n case \"number\":\n case \"string\":\n case \"boolean\":\n case \"datetime\":\n buf += `${elem}`;\n break;\n default:\n return NULL_VALUE;\n }\n needSep = !0;\n }\n return fromString(buf);\n }\n);\narray.compact = arrayExecutor(\n ([array2]) => ({ array: array2 }),\n function* (_, item) {\n item !== null && (yield item);\n }\n);\narray.unique = arrayExecutor(\n (args) => ({ array: args[0], state: /* @__PURE__ */ new Set() }),\n function* (_node, iter, _inner, added) {\n switch (getType(iter)) {\n case \"number\":\n case \"string\":\n case \"boolean\":\n case \"datetime\":\n added.has(iter) || (added.add(iter), yield iter);\n break;\n default:\n yield iter;\n }\n }\n);\narray.intersects = mappedExecutor(\n (args) => args,\n (_, arr1, arr2) => {\n if (arr1.type !== \"array\" || arr2.type !== \"array\")\n return NULL_VALUE;\n for (const v1 of arr1.data)\n for (const v2 of arr2.data)\n if (isEqual(fromJS(v1), fromJS(v2)))\n return TRUE_VALUE;\n return FALSE_VALUE;\n }\n);\nconst dateTime = {};\ndateTime.now = constantExecutor(\n (_, scope) => fromDateTime(new DateTime(scope.context.timestamp))\n);\nasync function valueAtPath(arg, keyPath) {\n function tryAccessor(arg2, accessor) {\n try {\n return arg2[accessor];\n } catch {\n return;\n }\n }\n let current = await arg.get();\n for (const part of keyPath)\n if (current = tryAccessor(current, part), !current) break;\n return current;\n}\nfunction startsWith(keyPath, prefix) {\n return prefix.every((item, index) => keyPath[index] === item);\n}\nasync function* diffKeyPaths(before, after) {\n const currPaths = [[]];\n for (; currPaths.length > 0; ) {\n const currPath = currPaths.shift() || [], b = fromJS(await valueAtPath(before, currPath)), a = fromJS(await valueAtPath(after, currPath));\n if (a.type !== b.type)\n yield currPath;\n else if (a.type === \"string\" && b.type === \"string\" || a.type === \"boolean\" && b.type === \"boolean\" || a.type === \"null\" && b.type === \"null\" || a.type === \"number\" && b.type === \"number\")\n a.data !== b.data && (yield currPath);\n else if (a.type === \"datetime\" && b.type === \"datetime\")\n a.data.equals(b.data) || (yield currPath);\n else if (a.type === \"object\" && b.type === \"object\") {\n if (!deepEqual(a.data, b.data)) {\n const aKeys = Object.keys(a.data), bKeys = Object.keys(b.data);\n new Set(aKeys.concat(bKeys)).forEach((key) => {\n currPaths.push([...currPath, key]);\n });\n }\n } else if (a.type === \"array\" && b.type === \"array\") {\n if (a.data.length !== b.data.length)\n yield currPath;\n else if (!deepEqual(a.data, b.data))\n for (let i = 0; i < b.data.length; i++)\n currPaths.push([...currPath, i]);\n } else if (a.type === \"stream\" && b.type === \"stream\") {\n const arrayA = await a.get(), arrayB = await b.get();\n if (arrayA.length !== arrayB.length)\n yield currPath;\n else if (!deepEqual(arrayA, arrayB))\n for (let i = 0; i < arrayB.length; i++)\n currPaths.push([...currPath, i]);\n }\n }\n}\nasync function evaluateSelector(node, value, scope) {\n switch (node.type) {\n case \"Group\":\n return await evaluateSelector(node.base, value, scope);\n case \"Tuple\":\n const tuplePaths = [];\n for (const member of node.members) {\n const memberPaths = await evaluateSelector(member, value, scope);\n tuplePaths.push(...memberPaths);\n }\n return tuplePaths;\n case \"AccessAttribute\":\n return node.base ? (await evaluateSelector(node.base, value, scope)).map((path) => [...path, node.name]) : [[node.name]];\n case \"ArrayCoerce\": {\n const paths = await evaluateSelector(node.base, value, scope), arrayPaths = [];\n for (const keyPath of paths) {\n const innerValue = await valueAtPath(value, keyPath);\n if (Array.isArray(innerValue))\n for (let i = 0; i < innerValue.length; i++)\n arrayPaths.push([...keyPath, i]);\n }\n return arrayPaths;\n }\n case \"Filter\": {\n const paths = await evaluateSelector(node.base, value, scope), filter = {\n ...node,\n base: { type: \"This\" }\n }, arrayPaths = [];\n for (const keyPath of paths) {\n const innerValue = await valueAtPath(value, keyPath);\n if (Array.isArray(innerValue))\n for (let i = 0; i < innerValue.length; i++) {\n const item = innerValue[i], nestedScope = scope.createNested(fromJS([item]));\n (await (await evaluate(filter, nestedScope)).get()).length > 0 && arrayPaths.push([...keyPath, i]);\n }\n }\n return arrayPaths;\n }\n case \"SelectorFuncCall\":\n return anywhere(node.arg, scope.createHidden(value));\n case \"SelectorNested\": {\n const { base, nested: expr } = node, paths = await evaluateSelector(base, value, scope), nestedPaths = [];\n for (const keyPath of paths) {\n const innerValue = await valueAtPath(value, keyPath);\n switch (expr.type) {\n case \"AccessAttribute\":\n case \"ArrayCoerce\":\n case \"Filter\":\n const accessPaths = await evaluateSelector(expr, fromJS(innerValue), scope);\n for (let i = 0; i < accessPaths.length; i++)\n nestedPaths.push([...keyPath, ...accessPaths[i]]);\n break;\n case \"Group\":\n const innerResult = await evaluateSelector(expr.base, fromJS(innerValue), scope);\n for (const innerKeyPath of innerResult)\n nestedPaths.push([...keyPath, ...innerKeyPath]);\n break;\n case \"Tuple\":\n for (const inner of expr.members) {\n const innerResult2 = await evaluateSelector(inner, fromJS(innerValue), scope);\n for (const innerKeyPath of innerResult2)\n nestedPaths.push([...keyPath, ...innerKeyPath]);\n }\n }\n }\n return nestedPaths;\n }\n }\n}\nasync function anywhere(expr, scope, base = []) {\n const value = scope.value, pathList = [];\n if (value.isArray()) {\n const arr = await value.get();\n for (let i = 0; i < arr.length; i++) {\n const subPaths = await anywhere(expr, scope.createHidden(fromJS(arr[i])), [...base, i]);\n pathList.push(...subPaths);\n }\n } else if (value.type === \"object\") {\n const result = await evaluate(expr, scope);\n result.type === \"boolean\" && result.data === !0 && pathList.push(base);\n for (const key of Object.keys(value.data)) {\n const subPaths = await anywhere(expr, scope.createHidden(fromJS(value.data[key])), [\n ...base,\n key\n ]);\n pathList.push(...subPaths);\n }\n }\n return pathList;\n}\nasync function changedAny(before, after, selector, scope) {\n const beforeSelectorScope = scope.createHidden(before), beforePaths = await evaluateSelector(\n selector,\n beforeSelectorScope.value,\n beforeSelectorScope\n ), afterSelectorScope = scope.createHidden(after), afterPaths = await evaluateSelector(selector, afterSelectorScope.value, afterSelectorScope);\n if (beforePaths.length !== afterPaths.length)\n return TRUE_VALUE;\n for (const path of beforePaths) {\n for (let i = 0; i < path.length; i++)\n if (typeof path[i] == \"number\") {\n const slice = path.slice(0, i), beforeArr = await valueAtPath(before, slice), afterArr = await valueAtPath(after, slice);\n if (!Array.isArray(beforeArr) || !Array.isArray(afterArr) || beforeArr.length !== afterArr.length)\n return TRUE_VALUE;\n }\n const beforeValue = await valueAtPath(before, path), afterValue = await valueAtPath(after, path);\n if (!deepEqual(beforeValue, afterValue))\n return TRUE_VALUE;\n }\n return FALSE_VALUE;\n}\nasync function changedOnly(before, after, selector, scope) {\n const beforeSelectorScope = scope.createHidden(before), selectedPaths = await evaluateSelector(\n selector,\n beforeSelectorScope.value,\n beforeSelectorScope\n );\n for await (const diffPath of diffKeyPaths(before, after)) {\n let found = !1;\n for (const selectedPath of selectedPaths)\n if (startsWith(diffPath, selectedPath)) {\n found = !0;\n break;\n }\n if (!found)\n return FALSE_VALUE;\n }\n return TRUE_VALUE;\n}\nconst diff = {};\ndiff.changedAny = asyncOnlyExecutor(async (args, scope) => {\n const lhs = args[0], rhs = args[1], selector = args[2];\n if (!isSelectorNode(selector)) throw new Error(\"changedAny third argument must be a selector\");\n const before = await executeAsync(lhs, scope), after = await executeAsync(rhs, scope);\n return changedAny(before, after, selector, scope);\n});\ndiff.changedOnly = asyncOnlyExecutor(async (args, scope) => {\n const lhs = args[0], rhs = args[1], selector = args[2];\n if (!isSelectorNode(selector)) throw new Error(\"changedOnly third argument must be a selector\");\n const before = await executeAsync(lhs, scope), after = await executeAsync(rhs, scope);\n return changedOnly(before, after, selector, scope);\n});\nconst delta = {};\ndelta.operation = constantExecutor((_, scope) => {\n const hasBefore = scope.context.before !== null, hasAfter = scope.context.after !== null;\n return hasBefore && hasAfter ? fromString(\"update\") : hasAfter ? fromString(\"create\") : hasBefore ? fromString(\"delete\") : NULL_VALUE;\n});\ndelta.changedAny = asyncOnlyExecutor(async (args, scope) => {\n const before = scope.context.before || NULL_VALUE, after = scope.context.after || NULL_VALUE, selector = args[0];\n if (!isSelectorNode(selector)) throw new Error(\"changedAny first argument must be a selector\");\n return changedAny(before, after, selector, scope);\n});\ndelta.changedOnly = asyncOnlyExecutor(async (args, scope) => {\n const before = scope.context.before || NULL_VALUE, after = scope.context.after || NULL_VALUE, selector = args[0];\n if (!isSelectorNode(selector)) throw new Error(\"changedOnly first argument must be a selector\");\n return changedOnly(before, after, selector, scope);\n});\nconst documents = {};\ndocuments.get = constantExecutor(() => {\n throw new Error(\"not implemented\");\n});\ndocuments.incomingRefCount = constantExecutor(() => {\n throw new Error(\"not implemented\");\n});\ndocuments.incomingGlobalDocumentReferenceCount = constantExecutor(() => {\n throw new Error(\"not implemented\");\n});\nconst geo = {};\ngeo.latLng = constantExecutor(() => {\n throw new Error(\"not implemented\");\n});\ngeo.contains = constantExecutor(() => {\n throw new Error(\"not implemented\");\n});\ngeo.intersects = constantExecutor(() => {\n throw new Error(\"not implemented\");\n});\ngeo.distance = constantExecutor(() => {\n throw new Error(\"not implemented\");\n});\nconst string = {};\nstring.lower = mappedExecutor(\n (args) => args,\n (_, value) => value.type !== \"string\" ? NULL_VALUE : fromString(value.data.toLowerCase())\n);\nstring.upper = mappedExecutor(\n (args) => args,\n (_, value) => value.type !== \"string\" ? NULL_VALUE : fromString(value.data.toUpperCase())\n);\nstring.split = mappedExecutor(\n (args) => args,\n (_, str, sep) => str.type !== \"string\" ? NULL_VALUE : sep.type !== \"string\" ? NULL_VALUE : str.data.length === 0 ? fromArray([]) : sep.data.length === 0 ? fromArray(Array.from(str.data)) : fromArray(str.data.split(sep.data))\n);\nstring.startsWith = mappedExecutor(\n (args) => args,\n (_, str, prefix) => str.type !== \"string\" ? NULL_VALUE : prefix.type !== \"string\" ? NULL_VALUE : str.data.startsWith(prefix.data) ? TRUE_VALUE : FALSE_VALUE\n);\nconst _global = {};\n_global.anywhere = constantExecutor(() => {\n throw new Error(\"not implemented\");\n});\n_global.coalesce = {\n async executeAsync(args, scope) {\n for (const arg of args) {\n const value = await executeAsync(arg, scope);\n if (value.type !== \"null\")\n return value;\n }\n return NULL_VALUE;\n },\n executeSync(args, scope) {\n for (const arg of args) {\n const value = executeSync(arg, scope);\n if (value.type !== \"null\")\n return value;\n }\n return NULL_VALUE;\n }\n};\n_global.count = arrayReducerExecutor(\n (args) => ({ array: args[0] }),\n () => 0,\n (_, count) => count + 1,\n fromNumber\n);\n_global.dateTime = mappedExecutor(\n (args) => args,\n (_, val) => val.type === \"datetime\" ? val : val.type !== \"string\" ? NULL_VALUE : DateTime.parseToValue(val.data)\n);\n_global.defined = mappedExecutor(\n (args) => args,\n (_, inner) => inner.type === \"null\" ? FALSE_VALUE : TRUE_VALUE\n);\n_global.identity = constantExecutor((_args, scope) => fromString(scope.context.identity));\n_global.length = mappedExecutor(\n (args) => args,\n (_, inner) => inner.type === \"string\" ? fromNumber(countUTF8(inner.data)) : inner.type === \"array\" ? fromNumber(inner.data.length) : NULL_VALUE\n);\n_global.path = mappedExecutor(\n (args) => args,\n (_, inner) => inner.type !== \"string\" ? NULL_VALUE : fromPath(new Path(inner.data))\n);\n_global.string = mappedExecutor(\n (args) => args,\n (_, value) => {\n switch (value.type) {\n case \"number\":\n case \"string\":\n case \"boolean\":\n case \"datetime\":\n return fromString(`${value.data}`);\n default:\n return NULL_VALUE;\n }\n }\n);\n_global.references = mappedExecutor(\n (args) => [{ type: \"This\" }, ...args],\n (_, scopeValue, ...args) => {\n const pathSet = /* @__PURE__ */ new Set();\n for (const path of args)\n if (path.type === \"string\")\n pathSet.add(path.data);\n else if (path.type === \"array\")\n for (const elem of path.data)\n typeof elem == \"string\" && pathSet.add(elem);\n return pathSet.size === 0 ? FALSE_VALUE : hasReference(scopeValue, pathSet) ? TRUE_VALUE : FALSE_VALUE;\n }\n);\n_global.round = mappedExecutor(\n (args) => args,\n (_, value, precValue) => {\n if (value.type !== \"number\")\n return NULL_VALUE;\n const num = value.data;\n let prec = 0;\n if (precValue) {\n if (precValue.type !== \"number\" || precValue.data < 0 || !Number.isInteger(precValue.data))\n return NULL_VALUE;\n prec = precValue.data;\n }\n return prec === 0 ? num < 0 ? fromNumber(-Math.round(-num)) : fromNumber(Math.round(num)) : fromNumber(Number(num.toFixed(prec)));\n }\n);\n_global.now = constantExecutor((_args, scope) => fromString(scope.context.timestamp.toISOString()));\n_global.boost = constantExecutor(() => {\n throw new Error(\"unexpected boost call\");\n});\n_global.lower = string.lower;\n_global.upper = string.upper;\nfunction countUTF8(str) {\n let count = 0;\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n code >= 55296 && code <= 56319 || count++;\n }\n return count;\n}\nfunction hasReference(value, pathSet) {\n switch (getType(value)) {\n case \"array\":\n for (const v of value)\n if (hasReference(v, pathSet))\n return !0;\n break;\n case \"object\":\n if (value._ref)\n return pathSet.has(value._ref);\n for (const v of Object.values(value))\n if (hasReference(v, pathSet))\n return !0;\n break;\n }\n return !1;\n}\nconst math = {};\nmath.min = arrayReducerExecutor(\n (args) => ({ array: args[0] }),\n () => {\n },\n (_, n, item) => item === null ? n : typeof item != \"number\" ? STOP_ITERATOR : n === void 0 || item < n ? item : n,\n (n) => n === void 0 ? NULL_VALUE : fromNumber(n)\n);\nmath.max = arrayReducerExecutor(\n (args) => ({ array: args[0] }),\n () => {\n },\n (_, n, item) => item === null ? n : typeof item != \"number\" ? STOP_ITERATOR : n === void 0 || item > n ? item : n,\n (n) => n === void 0 ? NULL_VALUE : fromNumber(n)\n);\nmath.sum = arrayReducerExecutor(\n (args) => ({ array: args[0] }),\n () => 0,\n (_, n, item) => item === null ? n : typeof item != \"number\" ? STOP_ITERATOR : n + item,\n fromNumber\n);\nmath.avg = arrayReducerExecutor(\n (args) => ({ array: args[0] }),\n () => ({ count: 0, sum: 0 }),\n (_, { count, sum }, item) => item === null ? { count, sum } : typeof item != \"number\" ? STOP_ITERATOR : { count: count + 1, sum: sum + item },\n ({ count, sum }) => count === 0 ? NULL_VALUE : fromNumber(sum / count)\n);\nconst media = {};\nmedia.aspect = constantExecutor(() => {\n throw new Error(\"not implemented\");\n});\nfunction portableTextContent(value) {\n if (value.type === \"object\")\n return blockText(value.data);\n if (value.type === \"array\") {\n const texts = arrayText(value.data);\n if (texts.length > 0)\n return texts.join(`\n\n`);\n }\n return null;\n}\nfunction arrayText(value, result = []) {\n for (const block of value)\n if (Array.isArray(block))\n arrayText(block, result);\n else if (typeof block == \"object\" && block) {\n const text2 = blockText(block);\n text2 !== null && result.push(text2);\n }\n return result;\n}\nfunction blockText(obj) {\n if (typeof obj._type != \"string\") return null;\n const children = obj.children;\n if (!Array.isArray(children)) return null;\n let result = \"\";\n for (const child of children)\n child && typeof child == \"object\" && typeof child._type == \"string\" && child._type === \"span\" && typeof child.text == \"string\" && (result += child.text);\n return result;\n}\nconst pt = {};\npt.text = mappedExecutor(\n (args) => args,\n (_, value) => {\n const text2 = portableTextContent(value);\n return text2 === null ? NULL_VALUE : fromString(text2);\n }\n);\nconst releases = {};\nreleases.all = arrayExecutor(\n () => ({ array: { type: \"Everything\" } }),\n function* (_, value) {\n typeof value == \"object\" && value && \"_type\" in value && value._type === \"system.release\" && (yield value);\n }\n);\nconst sanity = {};\nsanity.projectId = constantExecutor((_, scope) => scope.context.sanity ? fromString(scope.context.sanity.projectId) : NULL_VALUE);\nsanity.dataset = constantExecutor((_, scope) => scope.context.sanity ? fromString(scope.context.sanity.dataset) : NULL_VALUE);\nsanity.versionOf = mappedExecutor(\n ([value]) => [value, { type: \"This\" }],\n (_, value, val) => {\n if (value.type !== \"string\") return NULL_VALUE;\n const baseId = value.data;\n if (val.type !== \"object\") return NULL_VALUE;\n if (typeof val.data._id != \"string\") return NULL_VALUE;\n if (val.data._id === baseId) return TRUE_VALUE;\n const components = val.data._id.split(\".\");\n return components.length >= 2 && components[0] === \"drafts\" && components.slice(1).join(\".\") === baseId ? TRUE_VALUE : components.length >= 3 && components[0] === \"versions\" && components.slice(2).join(\".\") === baseId ? TRUE_VALUE : FALSE_VALUE;\n }\n);\nsanity.partOfRelease = mappedExecutor(\n (args) => [args[0], { type: \"This\" }],\n (_, value, val) => {\n if (value.type !== \"string\") return NULL_VALUE;\n const baseId = value.data;\n if (val.type !== \"object\") return NULL_VALUE;\n if (typeof val.data._id != \"string\") return NULL_VALUE;\n const components = val.data._id.split(\".\");\n return components.length >= 3 && components[0] === \"versions\" && components[1] === baseId ? TRUE_VALUE : FALSE_VALUE;\n }\n);\nconst text = {};\ntext.query = constantExecutor(() => {\n throw new Error(\"not implemented\");\n});\ntext.semanticSimilarity = constantExecutor(() => {\n throw new Error(\"not implemented\");\n});\nconst user = {};\nuser.attributes = constantExecutor(() => {\n throw new Error(\"not implemented\");\n});\nconst TYPE_ORDER = {\n datetime: 1,\n number: 2,\n string: 3,\n boolean: 4\n};\nfunction partialCompare(a, b) {\n const aType = getType(a), bType = getType(b);\n if (aType !== bType)\n return null;\n switch (aType) {\n case \"number\":\n case \"boolean\":\n return a - b;\n case \"string\":\n return a < b ? -1 : a > b ? 1 : 0;\n case \"datetime\":\n return a.compareTo(b);\n default:\n return null;\n }\n}\nfunction totalCompare(a, b) {\n const aType = getType(a), bType = getType(b), aTypeOrder = TYPE_ORDER[aType] || 100, bTypeOrder = TYPE_ORDER[bType] || 100;\n if (aTypeOrder !== bTypeOrder)\n return aTypeOrder - bTypeOrder;\n let result = partialCompare(a, b);\n return result === null && (result = 0), result;\n}\nclass Scope {\n params;\n source;\n value;\n parent;\n context;\n isHidden = !1;\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n constructor(params, source, value, context, parent) {\n this.params = params, this.source = source, this.value = value, this.context = context, this.parent = parent;\n }\n createNested(value) {\n return this.isHidden ? new Scope(this.params, this.source, value, this.context, this.parent) : new Scope(this.params, this.source, value, this.context, this);\n }\n createHidden(value) {\n const result = this.createNested(value);\n return result.isHidden = !0, result;\n }\n}\nconst BM25k = 1.2;\nasync function evaluateScoreAsync(node, scope) {\n if (node.type === \"OpCall\" && node.op === \"match\")\n return evaluateMatchScoreAsync(node.left, node.right, scope);\n if (node.type === \"FuncCall\" && node.name === \"boost\") {\n const innerScore = await evaluateScoreAsync(node.args[0], scope), boost = await executeAsync(node.args[1], scope);\n return boost.type === \"number\" && innerScore > 0 ? innerScore + boost.data : 0;\n }\n switch (node.type) {\n case \"Or\": {\n const leftScore = await evaluateScoreAsync(node.left, scope), rightScore = await evaluateScoreAsync(node.right, scope);\n return leftScore + rightScore;\n }\n case \"And\": {\n const leftScore = await evaluateScoreAsync(node.left, scope), rightScore = await evaluateScoreAsync(node.right, scope);\n return leftScore === 0 || rightScore === 0 ? 0 : leftScore + rightScore;\n }\n default: {\n const res = await executeAsync(node, scope);\n return res.type === \"boolean\" && res.data === !0 ? 1 : 0;\n }\n }\n}\nfunction evaluateScoreSync(node, scope) {\n if (node.type === \"OpCall\" && node.op === \"match\")\n return evaluateMatchScoreSync(node.left, node.right, scope);\n if (node.type === \"FuncCall\" && node.name === \"boost\") {\n const innerScore = evaluateScoreSync(node.args[0], scope), boost = executeSync(node.args[1], scope);\n return boost.type === \"number\" && innerScore > 0 ? innerScore + boost.data : 0;\n }\n switch (node.type) {\n case \"Or\": {\n const leftScore = evaluateScoreSync(node.left, scope), rightScore = evaluateScoreSync(node.right, scope);\n return leftScore + rightScore;\n }\n case \"And\": {\n const leftScore = evaluateScoreSync(node.left, scope), rightScore = evaluateScoreSync(node.right, scope);\n return leftScore === 0 || rightScore === 0 ? 0 : leftScore + rightScore;\n }\n default: {\n const res = executeSync(node, scope);\n return res.type === \"boolean\" && res.data === !0 ? 1 : 0;\n }\n }\n}\nfunction evaluateMatchScoreSync(left, right, scope) {\n const text2 = executeSync(left, scope), pattern = executeSync(right, scope), result = processMatchScore(text2, pattern);\n if (typeof result == \"number\") return result;\n throw new Error(\"Found synchronous value in match()\");\n}\nasync function evaluateMatchScoreAsync(left, right, scope) {\n const text2 = await executeAsync(left, scope), pattern = await executeAsync(right, scope);\n return processMatchScore(text2, pattern);\n}\nfunction processMatchScore(text2, pattern) {\n const tokens = gatherText(text2, (part) => matchTokenize(part)), terms = gatherText(pattern, (part) => matchPatternRegex(part)), process = (tokens2, terms2) => {\n if (!terms2.success || tokens2.parts.length === 0 || terms2.parts.length === 0)\n return 0;\n let score = 0;\n for (const re of terms2.parts) {\n const freq = tokens2.parts.reduce((c, token) => c + (re.test(token) ? 1 : 0), 0);\n score += freq * (BM25k + 1) / (freq + BM25k);\n }\n return score;\n };\n return \"then\" in tokens || \"then\" in terms ? (async () => process(await tokens, await terms))() : process(tokens, terms);\n}\nfunction extractOrderArgs(args) {\n const mappers = [], directions = [];\n for (let mapper of args) {\n let direction = \"asc\";\n mapper.type === \"Desc\" ? (direction = \"desc\", mapper = mapper.base) : mapper.type === \"Asc\" && (mapper = mapper.base), mappers.push(mapper), directions.push(direction);\n }\n return { mappers, directions };\n}\nfunction sortArray(aux, directions) {\n return aux.sort((aTuple, bTuple) => {\n for (let i = 0; i < directions.length; i++) {\n let c = totalCompare(aTuple[i + 2], bTuple[i + 2]);\n if (directions[i] === \"desc\" && (c = -c), c !== 0)\n return c;\n }\n return aTuple[1] - bTuple[1];\n }), aux.map((v) => v[0]);\n}\nconst pipeFunctions = {};\npipeFunctions.order = {\n executeSync({ base, args }, scope) {\n const { mappers, directions } = extractOrderArgs(args), aux = [];\n let idx = 0;\n const n = directions.length;\n for (const value of base.data) {\n const newScope = scope.createNested(fromJS(value)), tuple = [value, idx];\n for (let i = 0; i < n; i++) {\n const result = executeSync(mappers[i], newScope);\n tuple.push(result.data);\n }\n aux.push(tuple), idx++;\n }\n return fromArray(sortArray(aux, directions));\n },\n async executeAsync({ base, args }, scope) {\n const { mappers, directions } = extractOrderArgs(args), aux = [];\n let idx = 0;\n const n = directions.length;\n for await (const value of base) {\n const newScope = scope.createNested(value), tuple = [await value.get(), idx];\n for (let i = 0; i < n; i++) {\n const result = await executeAsync(mappers[i], newScope);\n tuple.push(await result.get());\n }\n aux.push(tuple), idx++;\n }\n return fromArray(sortArray(aux, directions));\n }\n};\npipeFunctions.score = {\n async executeAsync({ base, args }, scope) {\n const unknown = [], scored = [];\n for await (const value of base) {\n if (value.type !== \"object\") {\n unknown.push(await value.get());\n continue;\n }\n const newScope = scope.createNested(value);\n let valueScore = typeof value.data._score == \"number\" ? value.data._score : 0;\n for (const arg of args)\n valueScore += await evaluateScoreAsync(arg, newScope);\n const newObject = Object.assign({}, value.data, { _score: valueScore });\n scored.push(newObject);\n }\n return scored.sort((a, b) => b._score - a._score), fromJS(scored);\n },\n executeSync({ base, args }, scope) {\n const scored = [];\n for (const value of base.data) {\n if (getType(value) !== \"object\")\n continue;\n const valueObj = value, newScope = scope.createNested(fromJS(value));\n let valueScore = typeof valueObj._score == \"number\" ? valueObj._score : 0;\n for (const arg of args)\n valueScore += evaluateScoreSync(arg, newScope);\n const newObject = Object.assign({}, valueObj, { _score: valueScore });\n scored.push(newObject);\n }\n return scored.sort((a, b) => b._score - a._score), fromArray(scored);\n }\n};\nconst namespaces = {\n global: _global,\n string,\n array,\n pt,\n delta,\n diff,\n media,\n sanity,\n math,\n dateTime,\n releases,\n text,\n geo,\n documents,\n user\n}, operators = {\n \"==\": function(left, right) {\n return isEqual(left, right) ? TRUE_VALUE : FALSE_VALUE;\n },\n \"!=\": function(left, right) {\n return isEqual(left, right) ? FALSE_VALUE : TRUE_VALUE;\n },\n \">\": function(left, right) {\n if (left.type === \"stream\" || right.type === \"stream\") return NULL_VALUE;\n const result = partialCompare(left.data, right.data);\n return result === null ? NULL_VALUE : result > 0 ? TRUE_VALUE : FALSE_VALUE;\n },\n \">=\": function(left, right) {\n if (left.type === \"stream\" || right.type === \"stream\") return NULL_VALUE;\n const result = partialCompare(left.data, right.data);\n return result === null ? NULL_VALUE : result >= 0 ? TRUE_VALUE : FALSE_VALUE;\n },\n \"<\": function(left, right) {\n if (left.type === \"stream\" || right.type === \"stream\") return NULL_VALUE;\n const result = partialCompare(left.data, right.data);\n return result === null ? NULL_VALUE : result < 0 ? TRUE_VALUE : FALSE_VALUE;\n },\n \"<=\": function(left, right) {\n if (left.type === \"stream\" || right.type === \"stream\") return NULL_VALUE;\n const result = partialCompare(left.data, right.data);\n return result === null ? NULL_VALUE : result <= 0 ? TRUE_VALUE : FALSE_VALUE;\n },\n // eslint-disable-next-line func-name-matching\n in: function(left, right) {\n if (right.type === \"path\")\n return left.type !== \"string\" ? NULL_VALUE : right.data.matches(left.data) ? TRUE_VALUE : FALSE_VALUE;\n if (right.type === \"array\") {\n for (const b of right.data)\n if (isEqual(left, fromJS(b)))\n return TRUE_VALUE;\n return FALSE_VALUE;\n }\n return right.type === \"stream\" ? (async () => {\n for await (const b of right)\n if (isEqual(left, b))\n return TRUE_VALUE;\n return FALSE_VALUE;\n })() : NULL_VALUE;\n },\n match: function(left, right) {\n const tokens = gatherText(left, (part) => matchTokenize(part)), patterns = gatherText(right, (part) => matchAnalyzePattern(part)), process = (tokens2, patterns2) => patterns2.success ? matchText(tokens2.parts, patterns2.parts) ? TRUE_VALUE : FALSE_VALUE : FALSE_VALUE;\n return \"then\" in tokens || \"then\" in patterns ? (async () => process(await tokens, await patterns))() : process(tokens, patterns);\n },\n \"+\": function(left, right) {\n return left.type === \"datetime\" && right.type === \"number\" ? fromDateTime(left.data.add(right.data)) : left.type === \"number\" && right.type === \"datetime\" ? fromDateTime(right.data.add(left.data)) : left.type === \"number\" && right.type === \"number\" ? fromNumber(left.data + right.data) : left.type === \"string\" && right.type === \"string\" ? fromString(left.data + right.data) : left.type === \"object\" && right.type === \"object\" ? fromJS({ ...left.data, ...right.data }) : left.type === \"array\" && right.type === \"array\" ? fromJS(left.data.concat(right.data)) : left.isArray() && right.isArray() ? new StreamValue(async function* () {\n for await (const val of left)\n yield val;\n for await (const val of right)\n yield val;\n }) : NULL_VALUE;\n },\n \"-\": function(left, right) {\n return left.type === \"datetime\" && right.type === \"number\" ? fromDateTime(left.data.add(-right.data)) : left.type === \"datetime\" && right.type === \"datetime\" ? fromNumber(left.data.difference(right.data)) : left.type === \"number\" && right.type === \"number\" ? fromNumber(left.data - right.data) : NULL_VALUE;\n },\n \"*\": numericOperator((a, b) => a * b),\n \"/\": numericOperator((a, b) => a / b),\n \"%\": numericOperator((a, b) => a % b),\n \"**\": numericOperator((a, b) => Math.pow(a, b))\n};\nfunction numericOperator(impl) {\n return function(left, right) {\n if (left.type === \"number\" && right.type === \"number\") {\n const result = impl(left.data, right.data);\n return fromNumber(result);\n }\n return NULL_VALUE;\n };\n}\nfunction evaluate(node, scope) {\n return executeAsync(node, scope);\n}\nfunction executeSync(node, scope) {\n return EXECUTORS[node.type].executeSync(node, scope);\n}\nfunction executeAsync(node, scope) {\n return EXECUTORS[node.type].executeAsync(node, scope);\n}\nfunction asyncOnlyExecutor(executeAsync2) {\n return {\n executeSync() {\n throw new Error(\"executeSync not supported\");\n },\n executeAsync: executeAsync2\n };\n}\nfunction constantExecutor(fn) {\n return {\n executeSync(node, scope) {\n const value = fn(node, scope);\n if (value.type === \"stream\") throw new Error(\"Stream encountered in evaluateSync\");\n return value;\n },\n async executeAsync(node, scope) {\n return fn(node, scope);\n }\n };\n}\nfunction mappedExecutor(map, reduce) {\n return {\n executeSync(node, scope) {\n const values = map(node).map((node2) => executeSync(node2, scope)), value = reduce(node, ...values);\n if (value.type === \"stream\")\n throw new Error(\"Stream/iterator not supported in synchronous mode\");\n return value;\n },\n async executeAsync(node, scope) {\n const nodes = map(node), values = await Promise.all(\n nodes.map((node2) => executeAsync(node2, scope).then((value) => value.asStatic()))\n );\n return reduce(node, ...values);\n }\n };\n}\nconst STOP_ITERATOR = /* @__PURE__ */ Symbol();\nfunction arrayReducerExecutor(map, init, reduce, wrap) {\n return {\n executeSync(node, scope) {\n const { array: arrayNode, args: argNodes = [] } = map(node), arr = executeSync(arrayNode, scope);\n if (arr.type !== \"array\") return NULL_VALUE;\n const args = argNodes.map((node2) => executeSync(node2, scope));\n let state = init(node, ...args);\n for (const item of arr.data) {\n const result = reduce(node, state, item, ...args);\n if (result === STOP_ITERATOR) return NULL_VALUE;\n state = result;\n }\n return wrap(state);\n },\n async executeAsync(node, scope) {\n const { array: arrayNode, args: argNodes = [] } = map(node), arr = await executeAsync(arrayNode, scope);\n if (arr.type !== \"array\" && arr.type !== \"stream\") return NULL_VALUE;\n const args = await Promise.all(\n argNodes.map((node2) => executeAsync(node2, scope).then((v) => v.asStatic()))\n );\n let state = init(node, ...args);\n if (arr.type === \"stream\")\n for await (const item of arr) {\n const result = reduce(node, state, await item.get(), ...args);\n if (result === STOP_ITERATOR) return NULL_VALUE;\n state = result;\n }\n else\n for (const item of arr.data) {\n const result = reduce(node, state, item, ...args);\n if (result === STOP_ITERATOR) return NULL_VALUE;\n state = result;\n }\n return wrap(state);\n }\n };\n}\nfunction arrayExecutor(map, reduce, { hidden = !1 } = {}) {\n return {\n executeSync(node, scope) {\n const mapping = map(node), arr = executeSync(mapping.array, scope);\n if (arr.type !== \"array\") return NULL_VALUE;\n const result = [];\n for (const item of arr.data) {\n let inner;\n if (mapping.inner) {\n const newScope = hidden ? scope.createHidden(fromJS(item)) : scope.createNested(fromJS(item));\n inner = executeSync(mapping.inner, newScope).data;\n }\n for (const entry of reduce(node, item, inner, mapping.state))\n result.push(entry);\n }\n return fromArray(result);\n },\n async executeAsync(node, scope) {\n const mapping = map(node), arr = await executeAsync(mapping.array, scope);\n return arr.isArray() ? new StreamValue(async function* () {\n for await (const item of arr) {\n let inner;\n if (mapping.inner) {\n const newScope = hidden ? scope.createHidden(item) : scope.createNested(item);\n inner = await (await executeAsync(mapping.inner, newScope)).get();\n }\n for (const entry of reduce(node, await item.get(), inner, mapping.state))\n yield fromJS(entry);\n }\n }) : NULL_VALUE;\n }\n };\n}\nconst EXECUTORS = {\n This: constantExecutor((_, scope) => scope.value),\n SelectorNested: constantExecutor(() => {\n throw new Error(\"Unexpected node type: SelectorNested\");\n }),\n SelectorFuncCall: constantExecutor(() => {\n throw new Error(\"Unexpected node type: SelectorFuncCall\");\n }),\n Everything: constantExecutor((_, scope) => scope.source),\n Parameter: constantExecutor(({ name }, scope) => fromJS(scope.params[name])),\n Context: constantExecutor(({ key }, scope) => {\n if (key === \"before\" || key === \"after\")\n return scope.context[key] || NULL_VALUE;\n throw new Error(`unknown context key: ${key}`);\n }),\n Parent: constantExecutor(({ n }, scope) => {\n let current = scope;\n for (let i = 0; i < n; i++) {\n if (!current.parent)\n return NULL_VALUE;\n current = current.parent;\n }\n return current.value;\n }),\n OpCall: {\n async executeAsync({ op, left, right }, scope) {\n const func = operators[op];\n if (!func)\n throw new Error(`Unknown operator: ${op}`);\n const leftValue = await executeAsync(left, scope), rightValue = await executeAsync(right, scope);\n return func(leftValue, rightValue);\n },\n executeSync({ op, left, right }, scope) {\n const func = operators[op];\n if (!func)\n throw new Error(`Unknown operator: ${op}`);\n const leftValue = executeSync(left, scope), rightValue = executeSync(right, scope), result = func(leftValue, rightValue);\n if (\"then\" in result || result.type === \"stream\")\n throw new Error(`Operator ${op} not possible in evaluteSync`);\n return result;\n }\n },\n Select: {\n executeSync({ alternatives, fallback }, scope) {\n for (const alt of alternatives) {\n const altCond = executeSync(alt.condition, scope);\n if (altCond.type === \"boolean\" && altCond.data === !0)\n return executeSync(alt.value, scope);\n }\n return fallback ? executeSync(fallback, scope) : NULL_VALUE;\n },\n async executeAsync({ alternatives, fallback }, scope) {\n for (const alt of alternatives) {\n const altCond = await executeAsync(alt.condition, scope);\n if (altCond.type === \"boolean\" && altCond.data === !0)\n return executeAsync(alt.value, scope);\n }\n return fallback ? executeAsync(fallback, scope) : NULL_VALUE;\n }\n },\n InRange: mappedExecutor(\n ({ base, left, right }) => [base, left, right],\n ({ isInclusive }, value, leftValue, rightValue) => {\n const leftCmp = partialCompare(value.data, leftValue.data);\n if (leftCmp === null)\n return NULL_VALUE;\n const rightCmp = partialCompare(value.data, rightValue.data);\n return rightCmp === null ? NULL_VALUE : isInclusive ? leftCmp >= 0 && rightCmp <= 0 ? TRUE_VALUE : FALSE_VALUE : leftCmp >= 0 && rightCmp < 0 ? TRUE_VALUE : FALSE_VALUE;\n }\n ),\n Filter: arrayExecutor(\n ({ base, expr }) => ({ array: base, inner: expr }),\n function* (_, elem, inner) {\n inner === !0 && (yield elem);\n }\n ),\n Projection: {\n executeSync({ base, expr }, scope) {\n const baseValue = executeSync(base, scope);\n if (baseValue.type !== \"object\")\n return NULL_VALUE;\n const newScope = scope.createNested(baseValue);\n return executeSync(expr, newScope);\n },\n async executeAsync({ base, expr }, scope) {\n const baseValue = await executeAsync(base, scope);\n if (baseValue.type !== \"object\")\n return NULL_VALUE;\n const newScope = scope.createNested(baseValue);\n return executeAsync(expr, newScope);\n }\n },\n FuncCall: {\n executeAsync({ namespace, name, args }, scope) {\n const func = namespaces[namespace]?.[name];\n if (!func) throw new Error(`Unknown function: ${namespace}::${name}`);\n return func.executeAsync(args, scope);\n },\n executeSync({ namespace, name, args }, scope) {\n const func = namespaces[namespace]?.[name];\n if (!func) throw new Error(`Unknown function: ${namespace}::${name}`);\n return func.executeSync(args, scope);\n }\n },\n PipeFuncCall: {\n async executeAsync({ name, base, args }, scope) {\n const func = pipeFunctions[name];\n if (!func) throw new Error(`Unknown pipe function: ${name}`);\n const baseValue = await executeAsync(base, scope);\n return baseValue.type !== \"stream\" && baseValue.type !== \"array\" ? NULL_VALUE : func.executeAsync({ base: baseValue, args }, scope);\n },\n executeSync({ name, base, args }, scope) {\n const func = pipeFunctions[name];\n if (!func) throw new Error(`Unknown pipe function: ${name}`);\n const baseValue = executeSync(base, scope);\n return baseValue.type !== \"array\" ? NULL_VALUE : func.executeSync({ base: baseValue, args }, scope);\n }\n },\n AccessAttribute: mappedExecutor(\n ({ base }) => [base || { type: \"This\" }],\n ({ name }, value) => value.type === \"object\" && value.data.hasOwnProperty(name) ? fromJS(value.data[name]) : NULL_VALUE\n ),\n AccessElement: mappedExecutor(\n ({ base }) => [base],\n ({ index }, baseValue) => {\n if (baseValue.type !== \"array\") return NULL_VALUE;\n const data = baseValue.data, finalIndex = index < 0 ? index + data.length : index;\n return fromJS(data[finalIndex]);\n }\n ),\n Slice: mappedExecutor(\n ({ base }) => [base],\n ({ left, right, isInclusive }, baseValue) => {\n if (baseValue.type !== \"array\")\n return NULL_VALUE;\n const array2 = baseValue.data;\n let leftIdx = left, rightIdx = right;\n return leftIdx < 0 && (leftIdx = array2.length + leftIdx), rightIdx < 0 && (rightIdx = array2.length + rightIdx), isInclusive && rightIdx++, leftIdx < 0 && (leftIdx = 0), rightIdx < 0 && (rightIdx = 0), fromArray(array2.slice(leftIdx, rightIdx));\n }\n ),\n Deref: {\n executeSync({ base }, scope) {\n const value = executeSync(base, scope);\n if (value.type !== \"object\")\n return NULL_VALUE;\n const id = value.data._ref;\n if (typeof id != \"string\")\n return NULL_VALUE;\n if (scope.context.dereference) {\n const value2 = scope.context.dereference({ _ref: id });\n if (value2 && typeof value2 == \"object\" && \"then\" in value2)\n throw new Error(\"Dereference returned promise in synchronous mode\");\n return fromJS(value2);\n }\n if (scope.source.type !== \"array\")\n return NULL_VALUE;\n for (const doc of scope.source.data)\n if (doc && typeof doc == \"object\" && \"_id\" in doc && id === doc._id)\n return fromJS(doc);\n return NULL_VALUE;\n },\n async executeAsync({ base }, scope) {\n const value = await executeAsync(base, scope);\n if (!scope.source.isArray())\n return NULL_VALUE;\n if (value.type !== \"object\")\n return NULL_VALUE;\n const id = value.data._ref;\n if (typeof id != \"string\")\n return NULL_VALUE;\n if (scope.context.dereference)\n return fromJS(await scope.context.dereference({ _ref: id }));\n for await (const doc of scope.source)\n if (doc.type === \"object\" && id === doc.data._id)\n return doc;\n return NULL_VALUE;\n }\n },\n Value: constantExecutor(({ value }) => fromJS(value)),\n Group: {\n executeSync({ base }, scope) {\n return executeSync(base, scope);\n },\n executeAsync({ base }, scope) {\n return executeAsync(base, scope);\n }\n },\n Object: {\n executeSync({ attributes }, scope) {\n const result = {};\n for (const attr of attributes) {\n const attrType = attr.type;\n switch (attr.type) {\n case \"ObjectAttributeValue\": {\n const value = executeSync(attr.value, scope);\n result[attr.name] = value.data;\n break;\n }\n case \"ObjectConditionalSplat\": {\n const cond = executeSync(attr.condition, scope);\n if (cond.type !== \"boolean\" || cond.data === !1)\n continue;\n const value = executeSync(attr.value, scope);\n value.type === \"object\" && Object.assign(result, value.data);\n break;\n }\n case \"ObjectSplat\": {\n const value = executeSync(attr.value, scope);\n value.type === \"object\" && Object.assign(result, value.data);\n break;\n }\n default:\n throw new Error(`Unknown node type: ${attrType}`);\n }\n }\n return fromJS(result);\n },\n async executeAsync({ attributes }, scope) {\n const result = {};\n for (const attr of attributes) {\n const attrType = attr.type;\n switch (attr.type) {\n case \"ObjectAttributeValue\": {\n const value = await executeAsync(attr.value, scope);\n result[attr.name] = await value.get();\n break;\n }\n case \"ObjectConditionalSplat\": {\n const cond = await executeAsync(attr.condition, scope);\n if (cond.type !== \"boolean\" || cond.data === !1)\n continue;\n const value = await executeAsync(attr.value, scope);\n value.type === \"object\" && Object.assign(result, value.data);\n break;\n }\n case \"ObjectSplat\": {\n const value = await executeAsync(attr.value, scope);\n value.type === \"object\" && Object.assign(result, value.data);\n break;\n }\n default:\n throw new Error(`Unknown node type: ${attrType}`);\n }\n }\n return fromJS(result);\n }\n },\n Array: {\n executeSync({ elements }, scope) {\n const result = [];\n for (const element of elements) {\n const value = executeSync(element.value, scope);\n if (element.isSplat) {\n if (value.type === \"array\")\n for (const v of value.data)\n result.push(v);\n } else\n result.push(value.data);\n }\n return fromArray(result);\n },\n async executeAsync({ elements }, scope) {\n return new StreamValue(async function* () {\n for (const element of elements) {\n const value = await executeAsync(element.value, scope);\n if (element.isSplat) {\n if (value.isArray())\n for await (const v of value)\n yield v;\n } else\n yield value;\n }\n });\n }\n },\n Tuple: constantExecutor(() => {\n throw new Error(\"tuples can not be evaluated\");\n }),\n Or: mappedExecutor(\n ({ left, right }) => [left, right],\n (_, leftValue, rightValue) => leftValue.type === \"boolean\" && leftValue.data === !0 ? TRUE_VALUE : rightValue.type === \"boolean\" && rightValue.data === !0 ? TRUE_VALUE : leftValue.type !== \"boolean\" || rightValue.type !== \"boolean\" ? NULL_VALUE : FALSE_VALUE\n ),\n And: mappedExecutor(\n ({ left, right }) => [left, right],\n (_, leftValue, rightValue) => leftValue.type === \"boolean\" && leftValue.data === !1 ? FALSE_VALUE : rightValue.type === \"boolean\" && rightValue.data === !1 ? FALSE_VALUE : leftValue.type !== \"boolean\" || rightValue.type !== \"boolean\" ? NULL_VALUE : TRUE_VALUE\n ),\n Not: mappedExecutor(\n ({ base }) => [base],\n (_, value) => value.type !== \"boolean\" ? NULL_VALUE : value.data ? FALSE_VALUE : TRUE_VALUE\n ),\n Neg: mappedExecutor(\n ({ base }) => [base],\n (_, value) => value.type !== \"number\" ? NULL_VALUE : fromNumber(-value.data)\n ),\n Pos: mappedExecutor(\n ({ base }) => [base],\n (_, value) => value.type !== \"number\" ? NULL_VALUE : fromNumber(value.data)\n ),\n Asc: constantExecutor(() => NULL_VALUE),\n Desc: constantExecutor(() => NULL_VALUE),\n ArrayCoerce: {\n executeSync({ base }, scope) {\n const value = executeSync(base, scope);\n return value.isArray() ? value : NULL_VALUE;\n },\n async executeAsync({ base }, scope) {\n const value = await executeAsync(base, scope);\n return value.isArray() ? value : NULL_VALUE;\n }\n },\n Map: arrayExecutor(\n ({ base, expr }) => ({ array: base, inner: expr }),\n function* (_, _item, inner) {\n yield inner;\n },\n { hidden: !0 }\n ),\n FlatMap: arrayExecutor(\n ({ base, expr }) => ({ array: base, inner: expr }),\n function* (_, _item, inner) {\n if (Array.isArray(inner))\n for (const innerInner of inner)\n yield innerInner;\n else\n yield inner;\n },\n { hidden: !0 }\n )\n};\nfunction evaluateQuery(tree, options = {}) {\n return executeAsync(tree, scopeFromOptions(options));\n}\nfunction evaluateQuerySync(tree, options = {}) {\n return executeSync(tree, scopeFromOptions(options));\n}\nfunction scopeFromOptions(options) {\n const root = fromJS(options.root), dataset = fromJS(options.dataset), params = { ...options.params };\n return new Scope(\n params,\n dataset,\n root,\n {\n timestamp: options.timestamp || /* @__PURE__ */ new Date(),\n identity: options.identity === void 0 ? \"me\" : options.identity,\n sanity: options.sanity,\n after: options.after ? fromJS(options.after) : null,\n before: options.before ? fromJS(options.before) : null,\n dereference: options.dereference\n },\n null\n );\n}\nexport {\n evaluateQuery,\n evaluateQuerySync\n};\n//# sourceMappingURL=evaluator.mjs.map\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","/* eslint-env browser */\n'use strict';\n\nfunction getChromeVersion() {\n\tconst matches = /(Chrome|Chromium)\\/(?<chromeVersion>\\d+)\\./.exec(navigator.userAgent);\n\n\tif (!matches) {\n\t\treturn;\n\t}\n\n\treturn Number.parseInt(matches.groups.chromeVersion, 10);\n}\n\nconst colorSupport = getChromeVersion() >= 69 ? {\n\tlevel: 1,\n\thasBasic: true,\n\thas256: false,\n\thas16m: false\n} : false;\n\nmodule.exports = {\n\tstdout: colorSupport,\n\tstderr: colorSupport\n};\n","/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = ` ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n","/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n","import { evaluateQuery, evaluateQuerySync } from \"./_chunks-es/evaluator.mjs\";\nimport { pipeFunctionRegistry, namespaceRegistry, tryConstantEvaluate, isSelectorNested, matchTokenize, matchAnalyzePattern, matchText } from \"./_chunks-es/shared.mjs\";\nimport { DateTime, Path, isSelectorNode, toJS } from \"./_chunks-es/shared.mjs\";\nimport { unparse } from \"./experimental.mjs\";\nimport debug from \"debug\";\nclass MarkProcessor {\n _string;\n marks;\n index;\n customFunctions;\n parseOptions;\n allowBoost = !1;\n constructor(string, marks, customFunctions, parseOptions) {\n this._string = string, this.marks = marks, this.customFunctions = customFunctions, this.index = 0, this.parseOptions = parseOptions;\n }\n hasMark(pos = 0) {\n return this.index + pos < this.marks.length;\n }\n getMark(pos = 0) {\n return this.marks[this.index + pos];\n }\n shift() {\n this.index += 1;\n }\n process(visitor) {\n const mark = this.marks[this.index];\n this.shift();\n const func = visitor[mark.name];\n if (!func)\n throw new Error(`Unknown handler: ${mark.name}`);\n return func.call(visitor, this, mark);\n }\n processString() {\n return this.shift(), this.processStringEnd();\n }\n processStringEnd() {\n const prev = this.marks[this.index - 1], curr = this.marks[this.index];\n return this.shift(), this.string.slice(prev.position, curr.position);\n }\n slice(len) {\n const pos = this.marks[this.index].position;\n return this.string.slice(pos, pos + len);\n }\n get string() {\n return this._string;\n }\n}\nconst WS = /^([\\t\\n\\v\\f\\r \\u0085\\u00A0]|(\\/\\/[^\\n]*\\n))+/, NUM = /^\\d+/, IDENT = /^[a-zA-Z_][a-zA-Z_0-9]*/;\nfunction parse$1(str) {\n let pos = 0;\n pos = skipWS(str, pos);\n let customFunctions = {};\n for (; pos < str.length && str.substring(pos, pos + 2) === \"fn\"; ) {\n let funcResult = parseFunctionDeclaration(str, pos);\n if (funcResult.type === \"error\") return funcResult;\n customFunctions[`${funcResult.namespace}::${funcResult.name}`] = funcResult, pos = skipWS(str, funcResult.position);\n }\n let result = parseExpr(str, pos, 0);\n return result.type === \"error\" ? result : (pos = skipWS(str, result.position), pos !== str.length ? (result.failPosition && (pos = result.failPosition - 1), { type: \"error\", message: \"Unexpected end of query\", position: pos }) : (delete result.position, delete result.failPosition, result.customFunctions = customFunctions, result));\n}\nfunction parseExpr(str, pos, level) {\n let startPos = pos, token = str[pos], marks;\n switch (token) {\n case \"+\": {\n let rhs = parseExpr(str, skipWS(str, pos + 1), 10);\n if (rhs.type === \"error\") return rhs;\n marks = [{ name: \"pos\", position: startPos }].concat(rhs.marks), pos = rhs.position;\n break;\n }\n case \"-\": {\n let rhs = parseExpr(str, skipWS(str, pos + 1), 8);\n if (rhs.type === \"error\") return rhs;\n marks = [{ name: \"neg\", position: startPos }].concat(rhs.marks), pos = rhs.position;\n break;\n }\n case \"(\": {\n let result = parseGroupOrTuple(str, pos);\n if (result.type === \"error\") return result;\n pos = result.position, marks = result.marks;\n break;\n }\n case \"!\": {\n let rhs = parseExpr(str, skipWS(str, pos + 1), 10);\n if (rhs.type === \"error\") return rhs;\n marks = [{ name: \"not\", position: startPos }].concat(rhs.marks), pos = rhs.position;\n break;\n }\n case \"{\": {\n let result = parseObject(str, pos);\n if (result.type === \"error\") return result;\n marks = result.marks, pos = result.position;\n break;\n }\n case \"[\":\n if (marks = [{ name: \"array\", position: pos }], pos = skipWS(str, pos + 1), str[pos] !== \"]\")\n for (; ; ) {\n str.slice(pos, pos + 3) === \"...\" && (marks.push({ name: \"array_splat\", position: pos }), pos = skipWS(str, pos + 3));\n let res = parseExpr(str, pos, 0);\n if (res.type === \"error\") return res;\n if (marks = marks.concat(res.marks), pos = res.position, pos = skipWS(str, pos), str[pos] !== \",\" || (pos = skipWS(str, pos + 1), str[pos] === \"]\")) break;\n }\n if (str[pos] === \"]\")\n pos++, marks.push({ name: \"array_end\", position: pos });\n else\n return { type: \"error\", message: 'Expected \"]\" after array expression', position: pos };\n break;\n case \"'\":\n case '\"': {\n let result = parseString(str, pos);\n if (result.type === \"error\") return result;\n marks = result.marks, pos = result.position;\n break;\n }\n case \"^\": {\n for (pos++, marks = []; str[pos] === \".\" && str[pos + 1] === \"^\"; )\n marks.push({ name: \"dblparent\", position: startPos }), pos += 2;\n marks.push({ name: \"parent\", position: startPos });\n break;\n }\n case \"@\":\n marks = [{ name: \"this\", position: startPos }], pos++;\n break;\n case \"*\":\n marks = [{ name: \"everything\", position: startPos }], pos++;\n break;\n case \"$\": {\n let identLen = parseRegex(str, pos + 1, IDENT);\n identLen && (pos += 1 + identLen, marks = [\n { name: \"param\", position: startPos },\n { name: \"ident\", position: startPos + 1 },\n { name: \"ident_end\", position: pos }\n ]);\n break;\n }\n default: {\n let numLen = parseRegex(str, pos, NUM);\n if (numLen) {\n pos += numLen;\n let name = \"integer\";\n if (str[pos] === \".\") {\n let fracLen = parseRegex(str, pos + 1, NUM);\n fracLen && (name = \"float\", pos += 1 + fracLen);\n }\n if (str[pos] === \"e\" || str[pos] === \"E\") {\n name = \"sci\", pos++, (str[pos] === \"+\" || str[pos] === \"-\") && pos++;\n let expLen = parseRegex(str, pos, NUM);\n if (!expLen) return { type: \"error\", message: \"Exponent must be a number\", position: pos };\n pos += expLen;\n }\n marks = [\n { name, position: startPos },\n { name: name + \"_end\", position: pos }\n ];\n break;\n }\n let identLen = parseRegex(str, pos, IDENT);\n if (identLen) {\n switch (pos += identLen, str[pos]) {\n case \":\":\n case \"(\": {\n let result = parseFuncCall(str, startPos, pos);\n if (result.type === \"error\") return result;\n marks = result.marks, pos = result.position;\n break;\n }\n default:\n marks = [\n { name: \"this_attr\", position: startPos },\n { name: \"ident\", position: startPos },\n { name: \"ident_end\", position: pos }\n ];\n }\n break;\n }\n }\n }\n if (!marks)\n return { type: \"error\", message: \"Expected expression\", position: pos };\n let lhsLevel = 12, trav;\n loop: for (; ; ) {\n let innerPos = skipWS(str, pos);\n if (innerPos === str.length) {\n pos = innerPos;\n break;\n }\n if (trav = parseTraversal(str, innerPos), trav.type === \"success\") {\n for (marks.unshift({ name: \"traverse\", position: startPos }); trav.type === \"success\"; )\n marks = marks.concat(trav.marks), pos = trav.position, trav = parseTraversal(str, skipWS(str, pos));\n marks.push({ name: \"traversal_end\", position: pos });\n continue;\n }\n switch (str[innerPos]) {\n case \"=\": {\n switch (str[innerPos + 1]) {\n case \">\": {\n if (level > 1 || lhsLevel <= 1) break loop;\n let rhs = parseExpr(str, skipWS(str, innerPos + 2), 1);\n if (rhs.type === \"error\") return rhs;\n marks = marks.concat(rhs.marks), marks.unshift({ name: \"pair\", position: startPos }), pos = rhs.position, lhsLevel = 1;\n break;\n }\n case \"=\": {\n if (level > 4 || lhsLevel <= 4) break loop;\n let rhs = parseExpr(str, skipWS(str, innerPos + 2), 5);\n if (rhs.type === \"error\") return rhs;\n marks.unshift({ name: \"comp\", position: startPos }), marks.push({ name: \"op\", position: innerPos }, { name: \"op_end\", position: innerPos + 2 }), marks = marks.concat(rhs.marks), pos = rhs.position, lhsLevel = 4;\n break;\n }\n default:\n break loop;\n }\n break;\n }\n case \"+\": {\n if (level > 6 || lhsLevel < 6) break loop;\n let rhs = parseExpr(str, skipWS(str, innerPos + 1), 7);\n if (rhs.type === \"error\") return rhs;\n marks = marks.concat(rhs.marks), marks.unshift({ name: \"add\", position: startPos }), pos = rhs.position, lhsLevel = 6;\n break;\n }\n case \"-\": {\n if (level > 6 || lhsLevel < 6) break loop;\n let rhs = parseExpr(str, skipWS(str, innerPos + 1), 7);\n if (rhs.type === \"error\") return rhs;\n marks = marks.concat(rhs.marks), marks.unshift({ name: \"sub\", position: startPos }), pos = rhs.position, lhsLevel = 6;\n break;\n }\n case \"*\": {\n if (str[innerPos + 1] === \"*\") {\n if (level > 8 || lhsLevel <= 8) break loop;\n let rhs2 = parseExpr(str, skipWS(str, innerPos + 2), 8);\n if (rhs2.type === \"error\") return rhs2;\n marks = marks.concat(rhs2.marks), marks.unshift({ name: \"pow\", position: startPos }), pos = rhs2.position, lhsLevel = 8;\n break;\n }\n if (level > 7 || lhsLevel < 7) break loop;\n let rhs = parseExpr(str, skipWS(str, innerPos + 1), 8);\n if (rhs.type === \"error\") return rhs;\n marks = marks.concat(rhs.marks), marks.unshift({ name: \"mul\", position: startPos }), pos = rhs.position, lhsLevel = 7;\n break;\n }\n case \"/\": {\n if (level > 7 || lhsLevel < 7) break loop;\n let rhs = parseExpr(str, skipWS(str, innerPos + 1), 8);\n if (rhs.type === \"error\") return rhs;\n marks = marks.concat(rhs.marks), marks.unshift({ name: \"div\", position: startPos }), pos = rhs.position, lhsLevel = 7;\n break;\n }\n case \"%\": {\n if (level > 7 || lhsLevel < 7) break loop;\n let rhs = parseExpr(str, skipWS(str, innerPos + 1), 8);\n if (rhs.type === \"error\") return rhs;\n marks = marks.concat(rhs.marks), marks.unshift({ name: \"mod\", position: startPos }), pos = rhs.position, lhsLevel = 7;\n break;\n }\n case \"<\":\n case \">\": {\n if (level > 4 || lhsLevel <= 4) break loop;\n let nextPos = innerPos + 1;\n str[nextPos] === \"=\" && nextPos++;\n let rhs = parseExpr(str, skipWS(str, nextPos), 5);\n if (rhs.type === \"error\") return rhs;\n marks.unshift({ name: \"comp\", position: startPos }), marks.push({ name: \"op\", position: innerPos }, { name: \"op_end\", position: nextPos }), marks = marks.concat(rhs.marks), pos = rhs.position, lhsLevel = 4;\n break;\n }\n case \"|\": {\n if (str[innerPos + 1] === \"|\") {\n if (level > 2 || lhsLevel < 2) break loop;\n let rhs = parseExpr(str, skipWS(str, innerPos + 2), 3);\n if (rhs.type === \"error\") return rhs;\n marks = marks.concat(rhs.marks), marks.unshift({ name: \"or\", position: startPos }), pos = rhs.position, lhsLevel = 2;\n } else {\n if (level > 11 || lhsLevel < 11) break loop;\n let identPos = skipWS(str, innerPos + 1), identLen = parseRegex(str, identPos, IDENT);\n if (!identLen) return { type: \"error\", message: \"Expected identifier\", position: identPos };\n if (pos = identPos + identLen, str[pos] === \"(\" || str[pos] === \":\") {\n let result = parseFuncCall(str, identPos, pos);\n if (result.type === \"error\") return result;\n marks = marks.concat(result.marks), marks.unshift({ name: \"pipecall\", position: startPos }), pos = result.position, lhsLevel = 11;\n }\n }\n break;\n }\n case \"&\": {\n if (str[innerPos + 1] != \"&\" || level > 3 || lhsLevel < 3) break loop;\n let rhs = parseExpr(str, skipWS(str, innerPos + 2), 4);\n if (rhs.type === \"error\") return rhs;\n marks = marks.concat(rhs.marks), marks.unshift({ name: \"and\", position: startPos }), pos = rhs.position, lhsLevel = 3;\n break;\n }\n case \"!\": {\n if (str[innerPos + 1] !== \"=\" || level > 4 || lhsLevel <= 4) break loop;\n let rhs = parseExpr(str, skipWS(str, innerPos + 2), 5);\n if (rhs.type === \"error\") return rhs;\n marks.unshift({ name: \"comp\", position: startPos }), marks.push({ name: \"op\", position: innerPos }, { name: \"op_end\", position: innerPos + 2 }), marks = marks.concat(rhs.marks), pos = rhs.position, lhsLevel = 4;\n break;\n }\n case \"d\": {\n if (str.slice(innerPos, innerPos + 4) !== \"desc\" || level > 4 || lhsLevel < 4) break loop;\n marks.unshift({ name: \"desc\", position: startPos }), pos = innerPos + 4, lhsLevel = 4;\n break;\n }\n case \"a\": {\n if (str.slice(innerPos, innerPos + 3) !== \"asc\" || level > 4 || lhsLevel < 4) break loop;\n marks.unshift({ name: \"asc\", position: startPos }), pos = innerPos + 3, lhsLevel = 4;\n break;\n }\n default:\n switch (parseRegexStr(str, innerPos, IDENT)) {\n case \"in\": {\n if (level > 4 || lhsLevel <= 4) break loop;\n pos = skipWS(str, innerPos + 2);\n let isGroup = !1;\n str[pos] === \"(\" && (isGroup = !0, pos = skipWS(str, pos + 1));\n let rangePos = pos, result = parseExpr(str, pos, 5);\n if (result.type === \"error\") return result;\n if (pos = skipWS(str, result.position), str[pos] === \".\" && str[pos + 1] === \".\") {\n let type = \"inc_range\";\n str[pos + 2] === \".\" ? (type = \"exc_range\", pos = skipWS(str, pos + 3)) : pos = skipWS(str, pos + 2);\n let rhs = parseExpr(str, pos, 5);\n if (rhs.type === \"error\") return rhs;\n marks.unshift({ name: \"in_range\", position: startPos }), marks = marks.concat({ name: type, position: rangePos }, result.marks, rhs.marks), pos = rhs.position;\n } else\n marks.unshift({ name: \"comp\", position: startPos }), marks.push({ name: \"op\", position: innerPos }, { name: \"op_end\", position: innerPos + 2 }), marks = marks.concat(result.marks);\n if (isGroup) {\n if (pos = skipWS(str, pos), str[pos] !== \")\")\n return { type: \"error\", message: 'Expected \")\" in group', position: pos };\n pos++;\n }\n lhsLevel = 4;\n break;\n }\n case \"match\": {\n if (level > 4 || lhsLevel <= 4) break loop;\n let rhs = parseExpr(str, skipWS(str, innerPos + 5), 5);\n if (rhs.type === \"error\") return rhs;\n marks.unshift({ name: \"comp\", position: startPos }), marks.push({ name: \"op\", position: innerPos }, { name: \"op_end\", position: innerPos + 5 }), marks = marks.concat(rhs.marks), pos = rhs.position, lhsLevel = 4;\n break;\n }\n default:\n break loop;\n }\n }\n }\n let failPosition = trav?.type === \"error\" && trav.position;\n return { type: \"success\", marks, position: pos, failPosition };\n}\nfunction parseGroupOrTuple(str, pos) {\n const startPos = pos;\n let marks, rhs = parseExpr(str, skipWS(str, pos + 1), 0);\n if (rhs.type === \"error\") return rhs;\n switch (pos = skipWS(str, rhs.position), str[pos]) {\n case \",\": {\n for (marks = [{ name: \"tuple\", position: startPos }].concat(rhs.marks), pos = skipWS(str, pos + 1); ; ) {\n if (rhs = parseExpr(str, pos, 0), rhs.type === \"error\") return rhs;\n if (marks.push(...rhs.marks), pos = skipWS(str, rhs.position), str[pos] !== \",\") break;\n pos = skipWS(str, pos + 1);\n }\n if (str[pos] !== \")\")\n return { type: \"error\", message: 'Expected \")\" after tuple expression', position: pos };\n pos++, marks.push({ name: \"tuple_end\", position: pos });\n break;\n }\n case \")\": {\n pos++, marks = [{ name: \"group\", position: startPos }].concat(rhs.marks);\n break;\n }\n default:\n return { type: \"error\", message: `Unexpected character \"${str[pos]}\"`, position: pos };\n }\n return { type: \"success\", marks, position: pos };\n}\nfunction parseTraversal(str, pos) {\n let startPos = pos;\n switch (str[pos]) {\n case \".\": {\n if (pos = skipWS(str, pos + 1), str[pos] === \"(\")\n return parseGroupOrTuple(str, pos);\n let identStart = pos, identLen2 = parseRegex(str, pos, IDENT);\n return identLen2 ? (pos += identLen2, {\n type: \"success\",\n marks: [\n { name: \"attr_access\", position: startPos },\n { name: \"ident\", position: identStart },\n { name: \"ident_end\", position: pos }\n ],\n position: pos\n }) : { type: \"error\", message: 'Expected identifier after \".\"', position: pos };\n }\n case \"-\":\n if (str[pos + 1] !== \">\")\n return { type: \"error\", message: 'Expected \">\" in reference', position: pos };\n let marks = [{ name: \"deref\", position: startPos }];\n pos += 2;\n let identPos = skipWS(str, pos), identLen = parseRegex(str, identPos, IDENT);\n return identLen && (pos = identPos + identLen, marks.push(\n { name: \"deref_attr\", position: identPos },\n { name: \"ident\", position: identPos },\n { name: \"ident_end\", position: pos }\n )), {\n type: \"success\",\n marks,\n position: pos\n };\n case \"[\": {\n if (pos = skipWS(str, pos + 1), str[pos] === \"]\")\n return {\n type: \"success\",\n marks: [{ name: \"array_postfix\", position: startPos }],\n position: pos + 1\n };\n let rangePos = pos, result = parseExpr(str, pos, 0);\n if (result.type === \"error\") return result;\n if (pos = skipWS(str, result.position), str[pos] === \".\" && str[pos + 1] === \".\") {\n let type = \"inc_range\";\n str[pos + 2] === \".\" ? (type = \"exc_range\", pos += 3) : pos += 2, pos = skipWS(str, pos);\n let rhs = parseExpr(str, pos, 0);\n return rhs.type === \"error\" ? rhs : (pos = skipWS(str, rhs.position), str[pos] !== \"]\" ? { type: \"error\", message: 'Expected \"]\" after array expression', position: pos } : {\n type: \"success\",\n marks: [\n { name: \"slice\", position: startPos },\n { name: type, position: rangePos }\n ].concat(result.marks, rhs.marks),\n position: pos + 1\n });\n }\n return str[pos] !== \"]\" ? { type: \"error\", message: 'Expected \"]\" after array expression', position: pos } : {\n type: \"success\",\n marks: [{ name: \"square_bracket\", position: startPos }].concat(result.marks),\n position: pos + 1\n };\n }\n case \"|\": {\n if (pos = skipWS(str, pos + 1), str[pos] === \"{\") {\n let result = parseObject(str, pos);\n return result.type === \"error\" || result.marks.unshift({ name: \"projection\", position: startPos }), result;\n }\n break;\n }\n case \"{\": {\n let result = parseObject(str, pos);\n return result.type === \"error\" || result.marks.unshift({ name: \"projection\", position: startPos }), result;\n }\n }\n return { type: \"error\", message: \"Unexpected character in traversal\", position: pos };\n}\nfunction parseFuncCall(str, startPos, pos) {\n let marks = [];\n if (marks.push({ name: \"func_call\", position: startPos }), str[pos] === \":\" && str[pos + 1] === \":\") {\n marks.push({ name: \"namespace\", position: startPos }), marks.push({ name: \"ident\", position: startPos }, { name: \"ident_end\", position: pos }), pos = skipWS(str, pos + 2);\n let nameLen = parseRegex(str, pos, IDENT);\n if (!nameLen) return { type: \"error\", message: \"Expected function name\", position: pos };\n if (marks.push({ name: \"ident\", position: pos }, { name: \"ident_end\", position: pos + nameLen }), pos = skipWS(str, pos + nameLen), str[pos] !== \"(\")\n return { type: \"error\", message: 'Expected \"(\" after function name', position: pos };\n pos++, pos = skipWS(str, pos);\n } else\n marks.push({ name: \"ident\", position: startPos }, { name: \"ident_end\", position: pos }), pos = skipWS(str, pos + 1);\n let lastPos = pos;\n if (str[pos] !== \")\")\n for (; ; ) {\n let result = parseExpr(str, pos, 0);\n if (result.type === \"error\") return result;\n if (marks = marks.concat(result.marks), lastPos = result.position, pos = skipWS(str, result.position), str[pos] !== \",\" || (pos = skipWS(str, pos + 1), str[pos] === \")\")) break;\n }\n return str[pos] !== \")\" ? { type: \"error\", message: 'Expected \")\" after function arguments', position: pos } : (marks.push({ name: \"func_args_end\", position: lastPos }), {\n type: \"success\",\n marks,\n position: pos + 1\n });\n}\nfunction parseObject(str, pos) {\n let marks = [{ name: \"object\", position: pos }];\n for (pos = skipWS(str, pos + 1); str[pos] !== \"}\"; ) {\n let pairPos = pos;\n if (str.slice(pos, pos + 3) === \"...\")\n if (pos = skipWS(str, pos + 3), str[pos] !== \"}\" && str[pos] !== \",\") {\n let expr = parseExpr(str, pos, 0);\n if (expr.type === \"error\") return expr;\n marks.push({ name: \"object_splat\", position: pairPos }), marks = marks.concat(expr.marks), pos = expr.position;\n } else\n marks.push({ name: \"object_splat_this\", position: pairPos });\n else {\n let expr = parseExpr(str, pos, 0);\n if (expr.type === \"error\") return expr;\n let nextPos = skipWS(str, expr.position);\n if (expr.marks[0].name === \"str\" && str[nextPos] === \":\") {\n let value = parseExpr(str, skipWS(str, nextPos + 1), 0);\n if (value.type === \"error\") return value;\n marks.push({ name: \"object_pair\", position: pairPos }), marks = marks.concat(expr.marks, value.marks), pos = value.position;\n } else\n marks = marks.concat({ name: \"object_expr\", position: pos }, expr.marks), pos = expr.position;\n }\n if (pos = skipWS(str, pos), str[pos] !== \",\") break;\n pos = skipWS(str, pos + 1);\n }\n return str[pos] !== \"}\" ? { type: \"error\", message: 'Expected \"}\" after object', position: pos } : (pos++, marks.push({ name: \"object_end\", position: pos }), { type: \"success\", marks, position: pos });\n}\nfunction parseString(str, pos) {\n let token = str[pos];\n pos = pos + 1;\n const marks = [{ name: \"str\", position: pos }];\n str: for (; ; pos++) {\n if (pos > str.length) return { type: \"error\", message: \"Unexpected end of query\", position: pos };\n switch (str[pos]) {\n case token: {\n marks.push({ name: \"str_end\", position: pos }), pos++;\n break str;\n }\n case \"\\\\\":\n marks.push({ name: \"str_pause\", position: pos }), str[pos + 1] === \"u\" ? str[pos + 2] === \"{\" ? (marks.push({ name: \"unicode_hex\", position: pos + 3 }), pos = str.indexOf(\"}\", pos + 3), marks.push({ name: \"unicode_hex_end\", position: pos })) : (marks.push({ name: \"unicode_hex\", position: pos + 2 }), marks.push({ name: \"unicode_hex_end\", position: pos + 6 }), pos += 5) : (marks.push({ name: \"single_escape\", position: pos + 1 }), pos += 1), marks.push({ name: \"str_start\", position: pos + 1 });\n }\n }\n return { type: \"success\", marks, position: pos };\n}\nfunction skipWS(str, pos) {\n return pos + parseRegex(str, pos, WS);\n}\nfunction parseRegex(str, pos, re) {\n let m = re.exec(str.slice(pos));\n return m ? m[0].length : 0;\n}\nfunction parseRegexStr(str, pos, re) {\n let m = re.exec(str.slice(pos));\n return m ? m[0] : null;\n}\nfunction parseFunctionDeclaration(str, startPos) {\n let pos = startPos, marks = [], namespace = \"\", name = \"\";\n if (str.substring(pos, pos + 2) !== \"fn\")\n return {\n type: \"success\",\n position: pos,\n marks\n };\n marks.push({ name: \"func_decl\", position: startPos }), pos = skipWS(str, pos + 2);\n let identStart = pos;\n if (namespace = parseRegexStr(str, pos, IDENT), !namespace)\n return { type: \"error\", message: \"Expected function name\", position: pos };\n if (marks.push(\n { name: \"ident\", position: identStart },\n { name: \"ident_end\", position: pos + namespace.length }\n ), pos = skipWS(str, pos + namespace.length), str.substring(pos, pos + 2) !== \"::\")\n return { type: \"error\", message: 'Expected \"::\" after namespace', position: pos };\n if (pos = skipWS(str, pos + 2), name = parseRegexStr(str, pos, IDENT), !name)\n return { type: \"error\", message: \"Expected function name\", position: pos };\n if (marks.push({ name: \"ident\", position: pos }, { name: \"ident_end\", position: pos + name.length }), pos = skipWS(str, pos + name.length), str[pos] !== \"(\")\n return { type: \"error\", message: 'Expected \"(\"', position: pos };\n for (pos = skipWS(str, pos + 1); pos < str.length && str[pos] !== \")\"; ) {\n if (str[pos] !== \"$\")\n return { type: \"error\", message: 'Parameter should start with \"$\"', position: pos };\n const startPos2 = pos;\n pos++;\n const paramName = parseRegexStr(str, pos, IDENT);\n if (!paramName)\n return { type: \"error\", message: \"Expected function name\", position: pos };\n if (pos += paramName.length, marks.push(\n { name: \"param\", position: startPos2 },\n { name: \"ident\", position: startPos2 + 1 },\n { name: \"ident_end\", position: pos }\n ), pos = skipWS(str, pos), str[pos] === \",\")\n pos = skipWS(str, pos + 1);\n else if (str[pos] !== \")\")\n return { type: \"error\", message: 'Expected \",\" or \")\"', position: pos };\n }\n if (str[pos] !== \")\")\n return { type: \"error\", message: 'Expected \")\"', position: pos };\n if (marks.push({ name: \"func_params_end\", position: pos }), pos = skipWS(str, pos + 1), str[pos] !== \"=\")\n return { type: \"error\", message: 'Expected \"=\"', position: pos };\n pos = skipWS(str, pos + 1);\n let bodyResult = parseExpr(str, pos, 0);\n return bodyResult.type === \"error\" ? bodyResult : (marks = marks.concat(bodyResult.marks), pos = skipWS(str, bodyResult.position), str[pos] !== \";\" ? { type: \"error\", message: 'Expected \";\" after function declaration', position: pos } : (pos++, {\n type: \"success\",\n position: pos,\n marks,\n namespace,\n name\n }));\n}\nfunction join(a, b) {\n return (base) => b(a(base));\n}\nfunction map(inner) {\n return (base) => ({ type: \"Map\", base, expr: inner({ type: \"This\" }) });\n}\nfunction flatMap(inner) {\n return (base) => ({ type: \"FlatMap\", base, expr: inner({ type: \"This\" }) });\n}\nfunction traverseArray(build, right) {\n if (!right)\n return {\n type: \"a-a\",\n build\n };\n switch (right.type) {\n case \"a-a\":\n return {\n type: \"a-a\",\n build: join(build, right.build)\n };\n case \"a-b\":\n return {\n type: \"a-b\",\n build: join(build, right.build)\n };\n case \"b-b\":\n return {\n type: \"a-a\",\n build: join(build, map(right.build))\n };\n case \"b-a\":\n return {\n type: \"a-a\",\n build: join(build, flatMap(right.build))\n };\n default:\n throw new Error(`unknown type: ${right.type}`);\n }\n}\nfunction traversePlain(mapper, right) {\n if (!right)\n return {\n type: \"b-b\",\n build: mapper\n };\n switch (right.type) {\n case \"a-a\":\n case \"b-a\":\n return {\n type: \"b-a\",\n build: join(mapper, right.build)\n };\n case \"a-b\":\n case \"b-b\":\n return {\n type: \"b-b\",\n build: join(mapper, right.build)\n };\n default:\n throw new Error(`unknown type: ${right.type}`);\n }\n}\nfunction traverseElement(mapper, right) {\n if (!right)\n return {\n type: \"a-b\",\n build: mapper\n };\n switch (right.type) {\n case \"a-a\":\n case \"b-a\":\n return {\n type: \"a-a\",\n build: join(mapper, right.build)\n };\n case \"a-b\":\n case \"b-b\":\n return {\n type: \"a-b\",\n build: join(mapper, right.build)\n };\n default:\n throw new Error(`unknown type: ${right.type}`);\n }\n}\nfunction traverseProjection(mapper, right) {\n if (!right)\n return {\n type: \"b-b\",\n build: mapper\n };\n switch (right.type) {\n case \"a-a\":\n return {\n type: \"a-a\",\n build: join(map(mapper), right.build)\n };\n case \"a-b\":\n return {\n type: \"a-b\",\n build: join(map(mapper), right.build)\n };\n case \"b-a\":\n return {\n type: \"b-a\",\n build: join(mapper, right.build)\n };\n case \"b-b\":\n return {\n type: \"b-b\",\n build: join(mapper, right.build)\n };\n default:\n throw new Error(`unknown type: ${right.type}`);\n }\n}\nfunction walkValidateCustomFunction(node, level = 0) {\n switch (node.type) {\n case \"Projection\":\n return {\n ...node,\n base: walkValidateCustomFunction(node.base, level),\n expr: walkValidateCustomFunction(node.expr, level + 1)\n };\n case \"Filter\":\n return {\n ...node,\n base: walkValidateCustomFunction(node.base, level),\n expr: walkValidateCustomFunction(node.expr, level + 1)\n };\n case \"Parent\": {\n if (level - node.n < 0)\n throw new Error(\n `Invalid use of parent operator (^). No parent n ${node.n} at level ${level}.`\n );\n return node;\n }\n case \"Parameter\":\n throw new Error(\n `Function parameters are not allowed outside function declarations: ${node.name}`\n );\n case \"Array\":\n return {\n ...node,\n elements: node.elements.map((el) => ({\n ...el,\n value: walkValidateCustomFunction(el.value, level)\n }))\n };\n case \"PipeFuncCall\":\n return {\n ...node,\n base: walkValidateCustomFunction(node.base, level),\n args: node.args.map((arg) => walkValidateCustomFunction(arg, level))\n };\n case \"Object\":\n return {\n ...node,\n attributes: node.attributes.map((attr) => {\n switch (attr.type) {\n case \"ObjectAttributeValue\":\n return {\n ...attr,\n value: walkValidateCustomFunction(attr.value, level)\n };\n case \"ObjectConditionalSplat\":\n return {\n ...attr,\n condition: walkValidateCustomFunction(attr.condition, level),\n value: walkValidateCustomFunction(attr.value, level)\n };\n case \"ObjectSplat\":\n return {\n ...attr,\n value: walkValidateCustomFunction(attr.value, level)\n };\n default:\n return attr;\n }\n })\n };\n case \"FlatMap\":\n case \"Map\":\n return {\n ...node,\n expr: walkValidateCustomFunction(node.expr, level),\n base: walkValidateCustomFunction(node.base, level)\n };\n case \"FuncCall\":\n return {\n ...node,\n args: node.args.map((arg) => walkValidateCustomFunction(arg, level))\n };\n case \"Tuple\":\n return {\n ...node,\n members: node.members.map((member) => walkValidateCustomFunction(member, level))\n };\n case \"Select\": {\n const alternatives = node.alternatives.map((alt) => ({\n ...alt,\n condition: walkValidateCustomFunction(alt.condition, level),\n value: walkValidateCustomFunction(alt.value, level)\n }));\n return node.fallback ? {\n ...node,\n alternatives,\n fallback: walkValidateCustomFunction(node.fallback, level)\n } : {\n ...node,\n alternatives\n };\n }\n case \"SelectorNested\":\n return {\n ...node,\n base: walkValidateCustomFunction(node.base, level),\n nested: walkValidateCustomFunction(node.nested, level)\n };\n case \"SelectorFuncCall\":\n return {\n ...node,\n arg: walkValidateCustomFunction(node.arg, level)\n };\n case \"AccessAttribute\":\n case \"AccessElement\":\n case \"ArrayCoerce\":\n case \"Asc\":\n case \"Desc\":\n case \"Deref\":\n case \"Group\":\n case \"Neg\":\n case \"Not\":\n case \"Slice\":\n case \"Pos\":\n return node.base ? {\n ...node,\n base: walkValidateCustomFunction(node.base, level)\n } : node;\n case \"InRange\":\n return {\n ...node,\n base: walkValidateCustomFunction(node.base, level),\n left: walkValidateCustomFunction(node.left, level),\n right: walkValidateCustomFunction(node.right, level)\n };\n case \"OpCall\":\n case \"And\":\n case \"Or\":\n return {\n ...node,\n left: walkValidateCustomFunction(node.left, level),\n right: walkValidateCustomFunction(node.right, level)\n };\n case \"Parameter\":\n case \"Everything\":\n case \"This\":\n case \"Value\":\n case \"Context\":\n return node;\n default:\n throw new Error(`Handle all cases: ${node.type}`);\n }\n}\nconst ESCAPE_SEQUENCE = {\n \"'\": \"'\",\n '\"': '\"',\n \"\\\\\": \"\\\\\",\n \"/\": \"/\",\n b: \"\\b\",\n f: \"\\f\",\n n: `\n`,\n r: \"\\r\",\n t: \"\t\"\n};\nfunction expandHex(str) {\n const charCode = parseInt(str, 16);\n return String.fromCharCode(charCode);\n}\nclass GroqQueryError extends Error {\n name = \"GroqQueryError\";\n}\nfunction createExpressionBuilder(parseOptions, recursion = /* @__PURE__ */ new Set()) {\n const exprBuilder = {\n group(p) {\n return {\n type: \"Group\",\n base: p.process(exprBuilder)\n };\n },\n everything() {\n return { type: \"Everything\" };\n },\n this() {\n return { type: \"This\" };\n },\n parent() {\n return {\n type: \"Parent\",\n n: 1\n };\n },\n dblparent(p) {\n return {\n type: \"Parent\",\n n: p.process(exprBuilder).n + 1\n };\n },\n traverse(p) {\n const base = p.process(exprBuilder), traversalList = [];\n for (; p.getMark().name !== \"traversal_end\"; )\n traversalList.push(p.process(TRAVERSE_BUILDER));\n p.shift();\n let traversal = null;\n for (let i = traversalList.length - 1; i >= 0; i--)\n traversal = traversalList[i](traversal);\n if ((base.type === \"Everything\" || base.type === \"Array\" || base.type === \"PipeFuncCall\") && (traversal = traverseArray((val) => val, traversal)), traversal === null) throw new Error(\"BUG: unexpected empty traversal\");\n return traversal.build(base);\n },\n this_attr(p) {\n const name = p.processString();\n return name === \"null\" ? { type: \"Value\", value: null } : name === \"true\" ? { type: \"Value\", value: !0 } : name === \"false\" ? { type: \"Value\", value: !1 } : {\n type: \"AccessAttribute\",\n name\n };\n },\n neg(p) {\n return {\n type: \"Neg\",\n base: p.process(exprBuilder)\n };\n },\n pos(p) {\n return {\n type: \"Pos\",\n base: p.process(exprBuilder)\n };\n },\n add(p) {\n const left = p.process(exprBuilder), right = p.process(exprBuilder);\n return {\n type: \"OpCall\",\n op: \"+\",\n left,\n right\n };\n },\n sub(p) {\n const left = p.process(exprBuilder), right = p.process(exprBuilder);\n return {\n type: \"OpCall\",\n op: \"-\",\n left,\n right\n };\n },\n mul(p) {\n const left = p.process(exprBuilder), right = p.process(exprBuilder);\n return {\n type: \"OpCall\",\n op: \"*\",\n left,\n right\n };\n },\n div(p) {\n const left = p.process(exprBuilder), right = p.process(exprBuilder);\n return {\n type: \"OpCall\",\n op: \"/\",\n left,\n right\n };\n },\n mod(p) {\n const left = p.process(exprBuilder), right = p.process(exprBuilder);\n return {\n type: \"OpCall\",\n op: \"%\",\n left,\n right\n };\n },\n pow(p) {\n const left = p.process(exprBuilder), right = p.process(exprBuilder);\n return {\n type: \"OpCall\",\n op: \"**\",\n left,\n right\n };\n },\n comp(p) {\n const left = p.process(exprBuilder), op = p.processString(), right = p.process(exprBuilder);\n return {\n type: \"OpCall\",\n op,\n left,\n right\n };\n },\n in_range(p) {\n const base = p.process(exprBuilder), isInclusive = p.getMark().name === \"inc_range\";\n p.shift();\n const left = p.process(exprBuilder), right = p.process(exprBuilder);\n return {\n type: \"InRange\",\n base,\n left,\n right,\n isInclusive\n };\n },\n str(p) {\n let value = \"\";\n loop: for (; p.hasMark(); ) {\n const mark = p.getMark();\n switch (mark.name) {\n case \"str_end\":\n value += p.processStringEnd();\n break loop;\n case \"str_pause\":\n value += p.processStringEnd();\n break;\n case \"str_start\":\n p.shift();\n break;\n case \"single_escape\": {\n const char = p.slice(1);\n p.shift(), value += ESCAPE_SEQUENCE[char];\n break;\n }\n case \"unicode_hex\":\n p.shift(), value += expandHex(p.processStringEnd());\n break;\n default:\n throw new Error(`unexpected mark: ${mark.name}`);\n }\n }\n return { type: \"Value\", value };\n },\n integer(p) {\n const strValue = p.processStringEnd();\n return {\n type: \"Value\",\n value: Number(strValue)\n };\n },\n float(p) {\n const strValue = p.processStringEnd();\n return {\n type: \"Value\",\n value: Number(strValue)\n };\n },\n sci(p) {\n const strValue = p.processStringEnd();\n return {\n type: \"Value\",\n value: Number(strValue)\n };\n },\n object(p) {\n const attributes = [];\n for (; p.getMark().name !== \"object_end\"; )\n attributes.push(p.process(OBJECT_BUILDER));\n return p.shift(), {\n type: \"Object\",\n attributes\n };\n },\n array(p) {\n const elements = [];\n for (; p.getMark().name !== \"array_end\"; ) {\n let isSplat = !1;\n p.getMark().name === \"array_splat\" && (isSplat = !0, p.shift());\n const value = p.process(exprBuilder);\n elements.push({\n type: \"ArrayElement\",\n value,\n isSplat\n });\n }\n return p.shift(), {\n type: \"Array\",\n elements\n };\n },\n tuple(p) {\n const members = [];\n for (; p.getMark().name !== \"tuple_end\"; )\n members.push(p.process(exprBuilder));\n return p.shift(), {\n type: \"Tuple\",\n members\n };\n },\n func_call(p) {\n let namespace = \"global\";\n p.getMark().name === \"namespace\" && (p.shift(), namespace = p.processString());\n const name = p.processString();\n if (namespace === \"global\" && name === \"select\") {\n const result = {\n type: \"Select\",\n alternatives: []\n };\n for (; p.getMark().name !== \"func_args_end\"; )\n if (p.getMark().name === \"pair\") {\n if (result.fallback) throw new GroqQueryError(\"unexpected argument to select()\");\n p.shift();\n const condition = p.process(exprBuilder), value = p.process(exprBuilder);\n result.alternatives.push({\n type: \"SelectAlternative\",\n condition,\n value\n });\n } else {\n if (result.fallback) throw new GroqQueryError(\"unexpected argument to select()\");\n const value = p.process(exprBuilder);\n result.fallback = value;\n }\n return p.shift(), result;\n }\n const args = [];\n for (; p.getMark().name !== \"func_args_end\"; )\n argumentShouldBeSelector(namespace, name, args.length) ? args.push(p.process(SELECTOR_BUILDER)) : args.push(p.process(exprBuilder));\n if (p.shift(), namespace === \"global\" && (name === \"before\" || name === \"after\") && p.parseOptions.mode === \"delta\")\n return {\n type: \"Context\",\n key: name\n };\n if (namespace === \"global\" && name === \"boost\" && !p.allowBoost)\n throw new GroqQueryError(\"unexpected boost\");\n const customFunction = p.customFunctions[`${namespace}::${name}`];\n if (customFunction !== void 0) {\n const FUNCTION_DECL_BUILDER = createFunctionDeclarationBuilder(parseOptions, recursion), funcDecl = new MarkProcessor(\n p.string,\n customFunction.marks,\n p.customFunctions,\n parseOptions\n ).process(FUNCTION_DECL_BUILDER);\n return validateArity(name, funcDecl.params.length, args.length), mapCustomFunction(\n funcDecl.body,\n (body) => walkValidateCustomFunction(body),\n (parameterNode) => resolveFunctionParameter(parameterNode, funcDecl.params, args)\n );\n }\n const funcs = namespaceRegistry[namespace];\n if (!funcs)\n throw new GroqQueryError(`Undefined namespace: ${namespace}`);\n const funcEntry = funcs[name];\n if (!funcEntry)\n throw new GroqQueryError(`Undefined function: ${name}`);\n if (funcEntry.arity !== void 0 && validateArity(name, funcEntry.arity, args.length), funcEntry.mode !== void 0 && funcEntry.mode !== p.parseOptions.mode)\n throw new GroqQueryError(`Undefined function: ${name}`);\n return {\n type: \"FuncCall\",\n namespace,\n name,\n args\n };\n },\n pipecall(p) {\n const base = p.process(exprBuilder);\n p.shift();\n let namespace = \"global\";\n if (p.getMark().name === \"namespace\" && (p.shift(), namespace = p.processString()), namespace !== \"global\")\n throw new GroqQueryError(`Undefined namespace: ${namespace}`);\n const name = p.processString(), args = [], oldAllowBoost = p.allowBoost;\n for (name === \"score\" && (p.allowBoost = !0); ; ) {\n const markName = p.getMark().name;\n if (markName === \"func_args_end\")\n break;\n if (name === \"order\") {\n if (markName === \"asc\") {\n p.shift(), args.push({ type: \"Asc\", base: p.process(exprBuilder) });\n continue;\n } else if (markName === \"desc\") {\n p.shift(), args.push({ type: \"Desc\", base: p.process(exprBuilder) });\n continue;\n }\n }\n args.push(p.process(exprBuilder));\n }\n p.shift(), p.allowBoost = oldAllowBoost;\n const funcEntry = pipeFunctionRegistry[name];\n if (!funcEntry)\n throw new GroqQueryError(`Undefined pipe function: ${name}`);\n return funcEntry.arity && validateArity(name, funcEntry.arity, args.length), {\n type: \"PipeFuncCall\",\n base,\n name,\n args\n };\n },\n pair() {\n throw new GroqQueryError(\"unexpected =>\");\n },\n and(p) {\n const left = p.process(exprBuilder), right = p.process(exprBuilder);\n return {\n type: \"And\",\n left,\n right\n };\n },\n or(p) {\n const left = p.process(exprBuilder), right = p.process(exprBuilder);\n return {\n type: \"Or\",\n left,\n right\n };\n },\n not(p) {\n return {\n type: \"Not\",\n base: p.process(exprBuilder)\n };\n },\n asc() {\n throw new GroqQueryError(\"unexpected asc\");\n },\n desc() {\n throw new GroqQueryError(\"unexpected desc\");\n },\n param(p) {\n const name = p.processString();\n return p.parseOptions.params && p.parseOptions.params.hasOwnProperty(name) ? {\n type: \"Value\",\n value: p.parseOptions.params[name]\n } : {\n type: \"Parameter\",\n name\n };\n }\n }, OBJECT_BUILDER = {\n object_expr(p) {\n if (p.getMark().name === \"pair\") {\n p.shift();\n const condition = p.process(exprBuilder), value2 = p.process(exprBuilder);\n return {\n type: \"ObjectConditionalSplat\",\n condition,\n value: value2\n };\n }\n const value = p.process(exprBuilder);\n return {\n type: \"ObjectAttributeValue\",\n name: extractPropertyKey(value),\n value\n };\n },\n object_pair(p) {\n const name = p.process(exprBuilder);\n if (name.type !== \"Value\") throw new Error(\"name must be string\");\n const value = p.process(exprBuilder);\n return {\n type: \"ObjectAttributeValue\",\n name: name.value,\n value\n };\n },\n object_splat(p) {\n return {\n type: \"ObjectSplat\",\n value: p.process(exprBuilder)\n };\n },\n object_splat_this() {\n return {\n type: \"ObjectSplat\",\n value: { type: \"This\" }\n };\n }\n }, TRAVERSE_BUILDER = {\n square_bracket(p) {\n const expr = p.process(exprBuilder), value = tryConstantEvaluate(expr);\n return value && value.type === \"number\" ? (right) => traverseElement((base) => ({ type: \"AccessElement\", base, index: value.data }), right) : value && value.type === \"string\" ? (right) => traversePlain((base) => ({ type: \"AccessAttribute\", base, name: value.data }), right) : (right) => traverseArray(\n (base) => ({\n type: \"Filter\",\n base,\n expr\n }),\n right\n );\n },\n slice(p) {\n const isInclusive = p.getMark().name === \"inc_range\";\n p.shift();\n const left = p.process(exprBuilder), right = p.process(exprBuilder), leftValue = tryConstantEvaluate(left), rightValue = tryConstantEvaluate(right);\n if (!leftValue || !rightValue || leftValue.type !== \"number\" || rightValue.type !== \"number\")\n throw new GroqQueryError(\"slicing must use constant numbers\");\n return (rhs) => traverseArray(\n (base) => ({\n type: \"Slice\",\n base,\n left: leftValue.data,\n right: rightValue.data,\n isInclusive\n }),\n rhs\n );\n },\n projection(p) {\n const obj = p.process(exprBuilder);\n return (right) => traverseProjection((base) => ({ type: \"Projection\", base, expr: obj }), right);\n },\n attr_access(p) {\n const name = p.processString();\n return (right) => traversePlain((base) => ({ type: \"AccessAttribute\", base, name }), right);\n },\n deref(p) {\n let attr = null;\n p.getMark().name === \"deref_attr\" && (p.shift(), attr = p.processString());\n const wrap = (base) => attr ? { type: \"AccessAttribute\", base, name: attr } : base;\n return (right) => traversePlain(\n (base) => wrap({\n type: \"Deref\",\n base\n }),\n right\n );\n },\n array_postfix() {\n return (right) => traverseArray((base) => ({ type: \"ArrayCoerce\", base }), right);\n }\n }, SELECTOR_BUILDER = {\n group(p) {\n return p.process(SELECTOR_BUILDER);\n },\n everything() {\n throw new Error(\"Invalid selector syntax\");\n },\n this() {\n throw new Error(\"Invalid selector syntax\");\n },\n parent() {\n throw new Error(\"Invalid selector syntax\");\n },\n dblparent() {\n throw new Error(\"Invalid selector syntax\");\n },\n traverse(p) {\n let node = p.process(SELECTOR_BUILDER);\n for (; p.getMark().name !== \"traversal_end\"; )\n if (p.getMark().name === \"array_postfix\")\n p.shift(), node = { type: \"ArrayCoerce\", base: node };\n else if (p.getMark().name === \"square_bracket\") {\n p.shift();\n const expr = p.process(exprBuilder), value = tryConstantEvaluate(expr);\n if (value && value.type === \"number\")\n throw new Error(\"Invalid array access expression\");\n value && value.type === \"string\" ? node = { type: \"AccessAttribute\", base: node, name: value.data } : node = { type: \"Filter\", base: node, expr };\n } else if (p.getMark().name === \"attr_access\") {\n p.shift();\n const name = p.processString();\n node = { type: \"AccessAttribute\", base: node, name };\n } else if (p.getMark().name === \"tuple\" || p.getMark().name === \"group\") {\n const selector = p.process(SELECTOR_BUILDER);\n if (!isSelectorNested(selector))\n throw new Error(`Unexpected result parsing nested selector: ${selector.type}`);\n node = { type: \"SelectorNested\", base: node, nested: selector };\n } else\n throw new Error(\"Invalid selector syntax\");\n return p.shift(), node;\n },\n this_attr(p) {\n return { type: \"AccessAttribute\", name: p.processString() };\n },\n attr_access() {\n throw new Error(\"Invalid selector syntax\");\n },\n neg() {\n throw new Error(\"Invalid selector syntax\");\n },\n pos() {\n throw new Error(\"Invalid selector syntax\");\n },\n add() {\n throw new Error(\"Invalid selector syntax\");\n },\n sub() {\n throw new Error(\"Invalid selector syntax\");\n },\n mul() {\n throw new Error(\"Invalid selector syntax\");\n },\n div() {\n throw new Error(\"Invalid selector syntax\");\n },\n mod() {\n throw new Error(\"Invalid selector syntax\");\n },\n pow() {\n throw new Error(\"Invalid selector syntax\");\n },\n comp() {\n throw new Error(\"Invalid selector syntax\");\n },\n in_range() {\n throw new Error(\"Invalid selector syntax\");\n },\n str() {\n throw new Error(\"Invalid selector syntax\");\n },\n integer() {\n throw new Error(\"Invalid selector syntax\");\n },\n float() {\n throw new Error(\"Invalid selector syntax\");\n },\n sci() {\n throw new Error(\"Invalid selector syntax\");\n },\n object() {\n throw new Error(\"Invalid selector syntax\");\n },\n array() {\n throw new Error(\"Invalid selector syntax\");\n },\n tuple(p) {\n const selectors = [];\n for (; p.getMark().name !== \"tuple_end\"; )\n selectors.push(p.process(SELECTOR_BUILDER));\n return p.shift(), { type: \"Tuple\", members: selectors };\n },\n func_call(p, mark) {\n const func = exprBuilder.func_call(p, mark);\n if (func.name === \"anywhere\" && func.args.length === 1)\n return {\n type: \"SelectorFuncCall\",\n name: \"anywhere\",\n arg: func.args[0]\n };\n throw new Error(\"Invalid selector syntax\");\n },\n pipecall() {\n throw new Error(\"Invalid selector syntax\");\n },\n pair() {\n throw new Error(\"Invalid selector syntax\");\n },\n and() {\n throw new Error(\"Invalid selector syntax\");\n },\n or() {\n throw new Error(\"Invalid selector syntax\");\n },\n not() {\n throw new Error(\"Invalid selector syntax\");\n },\n asc() {\n throw new Error(\"Invalid selector syntax\");\n },\n desc() {\n throw new Error(\"Invalid selector syntax\");\n },\n param() {\n throw new Error(\"Invalid selector syntax\");\n }\n };\n return exprBuilder;\n}\nfunction extractPropertyKey(node) {\n if (node.type === \"AccessAttribute\" && !node.base)\n return node.name;\n if (node.type === \"PipeFuncCall\" || node.type === \"Deref\" || node.type === \"Map\" || node.type === \"FlatMap\" || node.type === \"Projection\" || node.type === \"Slice\" || node.type === \"Filter\" || node.type === \"AccessElement\" || node.type === \"ArrayCoerce\" || node.type === \"Group\")\n return extractPropertyKey(node.base);\n throw new GroqQueryError(`Cannot determine property key for type: ${node.type}`);\n}\nfunction validateArity(name, arity, count) {\n if (typeof arity == \"number\") {\n if (count !== arity)\n throw new GroqQueryError(\n `Incorrect number of arguments to function ${name}(). Expected ${arity}, got ${count}.`\n );\n } else if (arity && !arity(count))\n throw new GroqQueryError(`Incorrect number of arguments to function ${name}().`);\n}\nfunction resolveFunctionParameter(parameter, params, args) {\n if (parameter.type !== \"Parameter\")\n throw new GroqQueryError(`Expected parameter node, got ${parameter.type}`);\n const index = params.findIndex((p) => p.name === parameter.name);\n if (index === -1)\n throw new GroqQueryError(`Missing argument for parameter ${parameter.name} in function call`);\n return args[index];\n}\nfunction mapCustomFunction(body, bodyMapper, parameterMapper = (n) => n) {\n if (body.type === \"Projection\") {\n if (body.base.type === \"Parameter\")\n return {\n type: \"Projection\",\n base: parameterMapper(body.base),\n expr: bodyMapper(body.expr)\n };\n if (body.base.type === \"Deref\" && body.base.base.type === \"Parameter\")\n return {\n type: \"Projection\",\n base: {\n type: \"Deref\",\n base: parameterMapper(body.base.base)\n },\n expr: bodyMapper(body.expr)\n };\n }\n if (body.type === \"Map\" && body.base.type === \"ArrayCoerce\" && body.base.base.type === \"Parameter\")\n return {\n type: \"Map\",\n base: {\n type: \"ArrayCoerce\",\n base: parameterMapper(body.base.base)\n },\n expr: bodyMapper(body.expr)\n };\n throw new GroqQueryError(`Unexpected function body, must be a projection. Got \"${body.type}\"`);\n}\nfunction argumentShouldBeSelector(namespace, functionName, argCount) {\n const functionsRequiringSelectors = [\"changedAny\", \"changedOnly\"];\n return namespace == \"diff\" && argCount == 2 && functionsRequiringSelectors.includes(functionName);\n}\nclass GroqSyntaxError extends Error {\n /**\n * 0-based UTF-16 code unit offset from the start of the query string.\n */\n position;\n /**\n * 1-based line number where the error occurred.\n */\n line;\n /**\n * 1-based column number within the line, in UTF-16 code units.\n */\n column;\n name = \"GroqSyntaxError\";\n constructor(position, query, detail) {\n super(`Syntax error in GROQ query at position ${position}${detail ? `: ${detail}` : \"\"}`), this.position = position;\n let line = 1, lineStart = 0;\n for (let i = 0; i < position && i < query.length; i++)\n query[i] === `\n` && (line++, lineStart = i + 1);\n this.line = line, this.column = position - lineStart + 1;\n }\n}\nfunction parse(input, options = {}) {\n const result = parse$1(input);\n if (result.type === \"error\")\n throw new GroqSyntaxError(result.position, input, result.message);\n validateCustomFunctions(input, result.customFunctions, options);\n const processor = new MarkProcessor(input, result.marks, result.customFunctions, options), exprBuilder = createExpressionBuilder(options);\n return processor.process(exprBuilder);\n}\nfunction createFunctionDeclarationBuilder(parseOptions, recursion = /* @__PURE__ */ new Set()) {\n return {\n func_decl(p) {\n const namespace = p.processString(), name = p.processString(), functionId = `${namespace}::${name}`;\n if (recursion.has(functionId))\n throw new GroqQueryError(`Recursive function definition detected for ${functionId}`);\n const exprBuilder = createExpressionBuilder(parseOptions, /* @__PURE__ */ new Set([...recursion, functionId])), params = [];\n for (; p.getMark().name !== \"func_params_end\"; ) {\n const param = p.process(exprBuilder);\n if (param.type !== \"Parameter\") throw new Error(\"expected parameter\");\n params.push(param);\n }\n if (params.length !== 1)\n throw new GroqQueryError(\"Custom functions can only have one parameter\");\n p.shift();\n const body = p.process(exprBuilder);\n return {\n type: \"FuncDeclaration\",\n namespace,\n name,\n params,\n body\n };\n }\n };\n}\nfunction validateCustomFunctions(query, customFunctions, parseOptions) {\n for (const functionId in customFunctions) {\n if (!customFunctions.hasOwnProperty(functionId)) continue;\n const customFunction = customFunctions[functionId], processor = new MarkProcessor(query, customFunction.marks, customFunctions, parseOptions), FUNCTION_DECL_BUILDER = createFunctionDeclarationBuilder(parseOptions), funcDecl = processor.process(FUNCTION_DECL_BUILDER);\n mapCustomFunction(funcDecl.body, (body) => walkValidateCustomFunction(body));\n }\n}\nconst { compare } = new Intl.Collator(\"en\");\nfunction typeNodesSorter(a, b) {\n return a.type === \"null\" ? 1 : compare(hashField(a), hashField(b));\n}\nconst hashCache = /* @__PURE__ */ new WeakMap();\nfunction hashField(field) {\n if (hashCache.has(field))\n return hashCache.get(field);\n const hash = calculateFieldHash(field);\n return hashCache.set(field, hash), hash;\n}\nfunction calculateFieldHash(field) {\n switch (field.type) {\n case \"number\":\n case \"boolean\":\n return field.value !== void 0 ? `${field.type}(${field.value})` : `${field.type}`;\n case \"string\":\n return isDateTime(field) && field.value !== void 0 ? `${field.type}(${field.value}):datetime` : isDateTime(field) ? `${field.type}:datetime` : field.value !== void 0 ? `${field.type}(${field.value})` : `${field.type}`;\n case \"null\":\n case \"unknown\":\n return field.type;\n case \"array\":\n return `${field.type}(${hashField(field.of)})`;\n case \"object\": {\n const attributes = Object.entries(field.attributes);\n return attributes.sort(([a], [b]) => compare(a, b)), `${field.type}:(${attributes.map(\n ([key, value]) => `${key}:${hashField(value.value)}(${value.optional ? \"optional\" : \"non-optional\"})`\n ).join(\",\")}):ref-${field.dereferencesTo}:${field.rest ? hashField(field.rest) : \"no-rest\"}`;\n }\n case \"union\": {\n const sorted = [...field.of];\n return sorted.sort(typeNodesSorter), `${field.type}(${sorted.map(hashField).join(\",\")})`;\n }\n case \"inline\":\n return `${field.type}(${field.name})`;\n default:\n return field.type;\n }\n}\nfunction removeDuplicateTypeNodes(typeNodes) {\n const seenTypes = /* @__PURE__ */ new Set(), newTypeNodes = [], sortedTypeNodes = [...typeNodes];\n sortedTypeNodes.sort(typeNodesSorter);\n for (const typeNode of sortedTypeNodes) {\n const hash = hashField(typeNode);\n if (hash === null) {\n newTypeNodes.push(typeNode);\n continue;\n }\n seenTypes.has(hash) || (seenTypes.add(hash), newTypeNodes.push(typeNode));\n }\n return newTypeNodes;\n}\nfunction optimizeUnions(field) {\n if (field.type === \"union\") {\n if (field.of.length === 0)\n return field;\n if (field.of = removeDuplicateTypeNodes(field.of), field.of.length === 1)\n return optimizeUnions(field.of[0]);\n for (let idx = 0; field.of.length > idx; idx++) {\n const subField = field.of[idx];\n if (subField.type === \"union\") {\n field.of.splice(idx, 1, ...subField.of), idx--;\n continue;\n }\n field.of[idx] = optimizeUnions(subField);\n }\n return field.of.sort((a, b) => a.type === \"null\" ? 1 : compare(hashField(a), hashField(b))), field;\n }\n if (field.type === \"array\")\n return field.of = optimizeUnions(field.of), field;\n if (field.type === \"object\") {\n for (const idx in field.attributes)\n Object.hasOwn(field.attributes, idx) && (field.attributes[idx].value = optimizeUnions(field.attributes[idx].value));\n return field;\n }\n return field;\n}\nconst STRING_TYPE_DATETIME = /* @__PURE__ */ Symbol(\"groq-js.type.string_datetime\");\nfunction createReferenceTypeNode(name, inArray = !1) {\n const attributes = {\n _ref: {\n type: \"objectAttribute\",\n value: {\n type: \"string\"\n }\n },\n _type: {\n type: \"objectAttribute\",\n value: {\n type: \"string\",\n value: \"reference\"\n }\n },\n _weak: {\n type: \"objectAttribute\",\n value: {\n type: \"boolean\"\n },\n optional: !0\n }\n };\n return inArray && (attributes._key = {\n type: \"objectAttribute\",\n value: {\n type: \"string\"\n }\n }), {\n type: \"object\",\n attributes,\n dereferencesTo: name\n };\n}\nfunction createObjectAttribute(value, optional) {\n return optional === void 0 ? {\n type: \"objectAttribute\",\n value\n } : {\n type: \"objectAttribute\",\n value,\n optional\n };\n}\nfunction nullUnion(node) {\n return node.type === \"union\" ? unionOf(...node.of, { type: \"null\" }) : unionOf(node, { type: \"null\" });\n}\nfunction unionOf(...nodes) {\n return nodes.length === 1 ? nodes[0] : {\n type: \"union\",\n of: nodes\n };\n}\nfunction dateTimeString() {\n return {\n type: \"string\",\n [STRING_TYPE_DATETIME]: !0\n };\n}\nfunction resolveInline(node, scope) {\n if (node.type === \"inline\") {\n const resolvedInline = scope.context.lookupTypeDeclaration(node);\n return resolveInline(resolvedInline, scope);\n }\n return node;\n}\nfunction mapNode(node, scope, mapper, mergeUnions = (nodes) => optimizeUnions({ type: \"union\", of: nodes })) {\n switch (node.type) {\n case \"boolean\":\n case \"array\":\n case \"null\":\n case \"object\":\n case \"string\":\n case \"number\":\n case \"unknown\":\n return mapper(node);\n case \"union\":\n return mergeUnions(node.of.map((inner) => mapNode(inner, scope, mapper), mergeUnions));\n case \"inline\": {\n const resolvedInline = resolveInline(node, scope);\n return mapNode(resolvedInline, scope, mapper, mergeUnions);\n }\n default:\n throw new Error(`Unknown type: ${node.type}`);\n }\n}\nfunction isFuncCall(node, name) {\n return node.type === \"Group\" ? isFuncCall(node.base, name) : node.type === \"FuncCall\" && `${node.namespace}::${node.name}` === name;\n}\nfunction isString(node) {\n return node.type === \"string\" && !node[STRING_TYPE_DATETIME];\n}\nfunction isDateTime(node) {\n return !!(node.type === \"string\" && node[STRING_TYPE_DATETIME]);\n}\nfunction containsDateTime(node) {\n if (isDateTime(node)) return !0;\n if (node.type === \"array\") {\n if (isDateTime(node.of)) return !0;\n if (node.of.type === \"union\")\n return node.of.of.some((member) => isDateTime(member));\n }\n return !1;\n}\nfunction createGeoJson(type = \"Point\") {\n let coordinateAttribute = {\n type: \"array\",\n of: {\n type: \"number\"\n }\n };\n return type === \"LineString\" && (coordinateAttribute = {\n type: \"array\",\n of: {\n type: \"array\",\n of: {\n type: \"number\"\n }\n }\n }), type === \"Polygon\" && (coordinateAttribute = {\n type: \"array\",\n of: {\n type: \"array\",\n of: {\n type: \"array\",\n of: {\n type: \"number\"\n }\n }\n }\n }), {\n type: \"object\",\n attributes: {\n type: {\n type: \"objectAttribute\",\n value: {\n type: \"string\",\n value: type\n }\n },\n coordinates: {\n type: \"objectAttribute\",\n value: coordinateAttribute\n }\n }\n };\n}\nfunction booleanValue(node, scope) {\n switch (node.type) {\n case \"unknown\":\n return { canBeTrue: !0, canBeFalse: !0, canBeNull: !0 };\n case \"boolean\":\n return node.value === !0 ? { canBeTrue: !0, canBeFalse: !1, canBeNull: !1 } : node.value === !1 ? { canBeTrue: !1, canBeFalse: !0, canBeNull: !1 } : { canBeTrue: !0, canBeFalse: !0, canBeNull: !1 };\n case \"union\": {\n const value = { canBeTrue: !1, canBeFalse: !1, canBeNull: !1 };\n for (const sub of node.of) {\n const match2 = booleanValue(sub, scope);\n match2.canBeNull && (value.canBeNull = !0), match2.canBeTrue && (value.canBeTrue = !0), match2.canBeFalse && (value.canBeFalse = !0);\n }\n return value;\n }\n case \"inline\": {\n const resolved = resolveInline(node, scope);\n return booleanValue(resolved, scope);\n }\n case \"null\":\n case \"string\":\n case \"number\":\n case \"object\":\n case \"array\":\n return { canBeTrue: !1, canBeFalse: !1, canBeNull: !0 };\n default:\n throw new Error(`unknown node type ${node.type}`);\n }\n}\nfunction booleanOr(left, right) {\n return left.canBeTrue && !left.canBeFalse && !left.canBeNull ? left : right.canBeTrue && !right.canBeFalse && !right.canBeNull ? right : {\n // Either side can be true for the expression to be true\n canBeTrue: left.canBeTrue || right.canBeTrue,\n // Both sides must be false for the expression to be false\n canBeFalse: left.canBeFalse && right.canBeFalse,\n // if either side can be null, the expression can be null if the other side can't only be true\n canBeNull: left.canBeNull || right.canBeNull\n };\n}\nfunction booleanAnd(left, right) {\n return left.canBeFalse && !left.canBeTrue && !left.canBeNull ? left : right.canBeFalse && !right.canBeTrue && !right.canBeNull ? right : {\n // Both sides must be true for the expression to be true\n canBeTrue: left.canBeTrue && right.canBeTrue,\n // if either side can be false, the expression can be false\n canBeFalse: left.canBeFalse || right.canBeFalse,\n // if either side can be null, the expression can be null\n canBeNull: left.canBeNull || right.canBeNull\n };\n}\nfunction booleanInterpretationToTypeNode(bool) {\n return bool.canBeTrue ? bool.canBeFalse ? bool.canBeNull ? nullUnion({ type: \"boolean\" }) : { type: \"boolean\" } : bool.canBeNull ? nullUnion({ type: \"boolean\", value: !0 }) : { type: \"boolean\", value: !0 } : bool.canBeFalse ? bool.canBeNull ? nullUnion({ type: \"boolean\", value: !1 }) : { type: \"boolean\", value: !1 } : { type: \"null\" };\n}\nfunction unionWithoutNull(unionTypeNode) {\n return unionTypeNode.type === \"union\" ? {\n type: \"union\",\n of: unionTypeNode.of.filter((type) => type.type !== \"null\")\n } : unionTypeNode;\n}\nfunction handleFuncCallNode(node, scope) {\n switch (`${node.namespace}.${node.name}`) {\n case \"array.compact\": {\n const arg = walk({ node: node.args[0], scope });\n return mapNode(arg, scope, (arg2) => {\n if (arg2.type === \"unknown\")\n return nullUnion({ type: \"array\", of: { type: \"unknown\" } });\n if (arg2.type !== \"array\")\n return { type: \"null\" };\n const of = mapNode(arg2.of, scope, (of2) => of2);\n return {\n type: \"array\",\n of: unionWithoutNull(of)\n };\n });\n }\n case \"array.join\": {\n const arrayArg = walk({ node: node.args[0], scope }), sepArg = walk({ node: node.args[1], scope });\n return mapNode(\n arrayArg,\n scope,\n (arrayArg2) => mapNode(sepArg, scope, (sepArg2) => arrayArg2.type === \"unknown\" || sepArg2.type === \"unknown\" ? nullUnion({ type: \"string\" }) : arrayArg2.type !== \"array\" || !isString(sepArg2) ? { type: \"null\" } : mapNode(arrayArg2.of, scope, (of) => of.type === \"unknown\" ? nullUnion({ type: \"string\" }) : of.type !== \"string\" && of.type !== \"number\" && of.type !== \"boolean\" ? { type: \"null\" } : { type: \"string\" }))\n );\n }\n case \"array.unique\": {\n const arg = walk({ node: node.args[0], scope });\n return mapNode(arg, scope, (arg2) => arg2.type === \"unknown\" ? nullUnion({ type: \"array\", of: { type: \"unknown\" } }) : arg2.type !== \"array\" ? { type: \"null\" } : arg2);\n }\n case \"array.intersects\": {\n const arg1 = walk({ node: node.args[0], scope }), arg2 = walk({ node: node.args[1], scope });\n return mapNode(\n arg1,\n scope,\n (arg12) => mapNode(arg2, scope, (arg22) => arg12.type !== \"array\" ? { type: \"null\" } : arg22.type !== \"array\" ? { type: \"null\" } : { type: \"boolean\" })\n );\n }\n case \"global.lower\": {\n const arg = walk({ node: node.args[0], scope });\n return mapNode(arg, scope, (arg2) => arg2.type === \"unknown\" ? nullUnion({ type: \"string\" }) : isString(arg2) ? arg2.value !== void 0 ? {\n type: \"string\",\n value: arg2.value.toLowerCase()\n } : { type: \"string\" } : { type: \"null\" });\n }\n case \"global.upper\": {\n const arg = walk({ node: node.args[0], scope });\n return mapNode(arg, scope, (arg2) => arg2.type === \"unknown\" ? nullUnion({ type: \"string\" }) : isString(arg2) ? arg2.value !== void 0 ? {\n type: \"string\",\n value: arg2.value.toUpperCase()\n } : { type: \"string\" } : { type: \"null\" });\n }\n case \"dateTime.now\":\n return dateTimeString();\n case \"global.now\":\n return { type: \"string\" };\n case \"global.defined\": {\n const arg = walk({ node: node.args[0], scope });\n return mapNode(arg, scope, (node2) => node2.type === \"unknown\" ? { type: \"boolean\" } : { type: \"boolean\", value: node2.type !== \"null\" });\n }\n case \"global.path\": {\n const arg = walk({ node: node.args[0], scope });\n return mapNode(arg, scope, (arg2) => arg2.type === \"unknown\" ? nullUnion({ type: \"string\" }) : arg2.type === \"string\" ? { type: \"string\" } : { type: \"null\" });\n }\n case \"global.coalesce\": {\n if (node.args.length === 0)\n return { type: \"null\" };\n const typeNodes = [];\n let canBeNull = !0;\n for (const arg of node.args) {\n const argNode = optimizeUnions(walk({ node: arg, scope })), allNull = argNode.type === \"null\" || argNode.type === \"union\" && argNode.of.every((t) => t.type === \"null\");\n if (canBeNull = allNull || argNode.type === \"unknown\" || argNode.type === \"union\" && argNode.of.some((t) => t.type === \"null\" || t.type === \"unknown\"), allNull || typeNodes.push(unionWithoutNull(argNode)), !canBeNull)\n break;\n }\n return canBeNull && typeNodes.push({ type: \"null\" }), {\n type: \"union\",\n of: typeNodes\n };\n }\n case \"global.count\": {\n const arg = walk({ node: node.args[0], scope });\n return mapNode(arg, scope, (arg2) => arg2.type === \"unknown\" ? nullUnion({ type: \"string\" }) : arg2.type === \"array\" ? { type: \"number\" } : { type: \"null\" });\n }\n case \"global.dateTime\": {\n const arg = walk({ node: node.args[0], scope });\n return mapNode(arg, scope, (arg2) => arg2.type === \"unknown\" || arg2.type === \"string\" ? nullUnion(dateTimeString()) : { type: \"null\" });\n }\n case \"global.length\": {\n const arg = walk({ node: node.args[0], scope });\n return mapNode(arg, scope, (arg2) => arg2.type === \"unknown\" ? nullUnion({ type: \"number\" }) : arg2.type === \"array\" || isString(arg2) ? { type: \"number\" } : { type: \"null\" });\n }\n case \"global.references\":\n return { type: \"boolean\" };\n case \"global.round\": {\n const numNode = walk({ node: node.args[0], scope });\n return mapNode(numNode, scope, (num) => {\n if (num.type === \"unknown\")\n return nullUnion({ type: \"number\" });\n if (num.type !== \"number\")\n return { type: \"null\" };\n if (node.args.length === 2) {\n const precisionNode = walk({ node: node.args[1], scope });\n return mapNode(precisionNode, scope, (precision) => precision.type === \"unknown\" ? nullUnion({ type: \"number\" }) : precision.type !== \"number\" ? { type: \"null\" } : { type: \"number\" });\n }\n return { type: \"number\" };\n });\n }\n case \"global.string\": {\n const arg = walk({ node: node.args[0], scope });\n return mapNode(arg, scope, (node2) => node2.type === \"unknown\" ? nullUnion({ type: \"string\" }) : node2.type === \"string\" || node2.type === \"number\" || node2.type === \"boolean\" ? node2.value ? {\n type: \"string\",\n value: node2.value.toString()\n } : {\n type: \"string\"\n } : { type: \"null\" });\n }\n case \"math.sum\": {\n const values = walk({ node: node.args[0], scope });\n return mapNode(values, scope, (node2) => node2.type === \"unknown\" ? nullUnion({ type: \"number\" }) : node2.type !== \"array\" ? { type: \"null\" } : mapNode(node2.of, scope, (node3) => node3.type === \"unknown\" ? nullUnion({ type: \"number\" }) : node3.type === \"number\" || node3.type === \"null\" ? { type: \"number\" } : { type: \"null\" }));\n }\n case \"math.avg\": {\n const values = walk({ node: node.args[0], scope });\n return mapNode(values, scope, (node2) => node2.type === \"unknown\" ? nullUnion({ type: \"number\" }) : node2.type !== \"array\" ? { type: \"null\" } : mapNode(node2.of, scope, (node3) => node3.type === \"unknown\" ? nullUnion({ type: \"number\" }) : node3.type === \"number\" ? { type: \"number\" } : { type: \"null\" }));\n }\n case \"math.max\":\n case \"math.min\": {\n const values = walk({ node: node.args[0], scope });\n return mapNode(values, scope, (node2) => node2.type === \"unknown\" ? nullUnion({ type: \"number\" }) : node2.type !== \"array\" ? { type: \"null\" } : mapNode(node2.of, scope, (node3) => node3.type === \"unknown\" ? nullUnion({ type: \"number\" }) : node3.type === \"number\" ? node3 : { type: \"null\" }));\n }\n case \"pt.text\":\n return node.args.length === 0 ? { type: \"null\" } : {\n type: \"string\"\n };\n case \"string.startsWith\": {\n const strTypeNode = walk({ node: node.args[0], scope }), prefixTypeNode = walk({ node: node.args[1], scope });\n return mapNode(strTypeNode, scope, (strNode) => mapNode(prefixTypeNode, scope, (prefixNode) => strNode.type === \"unknown\" || prefixNode.type === \"unknown\" ? nullUnion({ type: \"boolean\" }) : strNode.type !== \"string\" || prefixNode.type !== \"string\" ? { type: \"null\" } : { type: \"boolean\" }));\n }\n case \"string.split\": {\n const strTypeNode = walk({ node: node.args[0], scope }), sepTypeNode = walk({ node: node.args[1], scope });\n return mapNode(strTypeNode, scope, (strNode) => mapNode(sepTypeNode, scope, (sepNode) => strNode.type === \"unknown\" || sepNode.type === \"unknown\" ? nullUnion({ type: \"array\", of: { type: \"string\" } }) : strNode.type !== \"string\" || sepNode.type !== \"string\" ? { type: \"null\" } : { type: \"array\", of: { type: \"string\" } }));\n }\n case \"geo.latLng\": {\n const latTypeNode = walk({ node: node.args[0], scope }), lngTypeNode = walk({ node: node.args[1], scope });\n return mapNode(latTypeNode, scope, (latNode) => mapNode(lngTypeNode, scope, (lngNode) => latNode.type == \"unknown\" || lngNode.type == \"unknown\" ? nullUnion(createGeoJson()) : latNode.type !== \"number\" || lngNode.type !== \"number\" ? { type: \"null\" } : nullUnion(createGeoJson())));\n }\n case \"geo.contains\":\n return nullUnion({ type: \"boolean\" });\n case \"geo.intersects\":\n return nullUnion({ type: \"boolean\" });\n case \"geo.distance\":\n return nullUnion({ type: \"number\" });\n case \"sanity.projectId\":\n case \"sanity.dataset\":\n return nullUnion({ type: \"string\" });\n case \"sanity.versionOf\": {\n const typeNode = walk({ node: node.args[0], scope });\n return mapNode(typeNode, scope, (typeNode2) => typeNode2.type === \"unknown\" ? nullUnion({ type: \"boolean\" }) : typeNode2.type !== \"string\" ? { type: \"null\" } : { type: \"boolean\" });\n }\n case \"sanity.partOfRelease\": {\n const typeNode = walk({ node: node.args[0], scope });\n return mapNode(typeNode, scope, (typeNode2) => typeNode2.type === \"unknown\" ? nullUnion({ type: \"boolean\" }) : typeNode2.type !== \"string\" ? { type: \"null\" } : { type: \"boolean\" });\n }\n case \"documents.get\": {\n const typeNode = walk({ node: node.args[0], scope });\n return mapNode(typeNode, scope, (typeNode2) => typeNode2.type === \"unknown\" ? typeNode2 : typeNode2.type !== \"object\" ? { type: \"null\" } : { type: \"unknown\" });\n }\n case \"documents.incomingRefCount\":\n return { type: \"number\" };\n case \"documents.incomingGlobalDocumentReferenceCount\":\n return { type: \"number\" };\n case \"media.aspect\":\n return mapNode(walk({ node: node.args[0], scope }), scope, (fieldNode) => fieldNode.type === \"null\" ? { type: \"null\" } : mapNode(walk({ node: node.args[1], scope }), scope, (aspectNode) => aspectNode.type !== \"string\" ? { type: \"null\" } : { type: \"unknown\" }));\n case \"user.attributes\":\n return { type: \"unknown\" };\n default:\n return { type: \"unknown\" };\n }\n}\nfunction match(left, right) {\n let tokens = [], patterns = [];\n if (left.type === \"string\") {\n if (left.value === void 0)\n return;\n tokens = tokens.concat(matchTokenize(left.value));\n }\n if (left.type === \"array\") {\n if (left.of.type === \"unknown\")\n return;\n if (left.of.type === \"string\") {\n if (left.of.value === void 0)\n return;\n tokens = tokens.concat(matchTokenize(left.of.value));\n }\n if (left.of.type === \"union\")\n for (const node of left.of.of)\n node.type === \"string\" && node.value !== void 0 && (tokens = tokens.concat(matchTokenize(node.value)));\n }\n if (right.type === \"string\") {\n if (right.value === void 0)\n return;\n patterns = patterns.concat(matchAnalyzePattern(right.value));\n }\n if (right.type === \"array\") {\n if (right.of.type === \"unknown\")\n return;\n if (right.of.type === \"string\") {\n if (right.of.value === void 0)\n return;\n patterns = patterns.concat(matchAnalyzePattern(right.of.value));\n }\n if (right.of.type === \"union\")\n for (const node of right.of.of) {\n if (node.type === \"string\") {\n if (node.value === void 0)\n return;\n patterns = patterns.concat(matchAnalyzePattern(node.value));\n }\n if (node.type !== \"string\")\n return !1;\n }\n }\n return matchText(tokens, patterns);\n}\nfunction extractAttributePath(node) {\n if (node.type === \"AccessAttribute\") {\n if (node.base) {\n const basePath = extractAttributePath(node.base);\n return basePath ? [...basePath, node.name] : null;\n }\n return [node.name];\n }\n return node.type === \"Group\" ? extractAttributePath(node.base) : null;\n}\nfunction extractLiteralType(node) {\n if (node.type === \"Value\") {\n if (typeof node.value == \"string\")\n return { type: \"string\", value: node.value };\n if (typeof node.value == \"number\")\n return { type: \"number\", value: node.value };\n if (typeof node.value == \"boolean\")\n return { type: \"boolean\", value: node.value };\n if (node.value === null)\n return { type: \"null\" };\n }\n return null;\n}\nfunction extractNarrowingAssertions(expr, negated = !1) {\n switch (expr.type) {\n case \"Group\":\n return extractNarrowingAssertions(expr.base, negated);\n case \"Not\":\n return extractNarrowingAssertions(expr.base, !negated);\n case \"And\":\n return negated ? [] : [\n ...extractNarrowingAssertions(expr.left, negated),\n ...extractNarrowingAssertions(expr.right, negated)\n ];\n case \"Or\":\n return negated ? [\n ...extractNarrowingAssertions(expr.left, negated),\n ...extractNarrowingAssertions(expr.right, negated)\n ] : [];\n case \"FuncCall\": {\n if (expr.namespace === \"global\" && expr.name === \"defined\" && expr.args.length === 1) {\n const path = extractAttributePath(expr.args[0]);\n if (path)\n return [\n {\n path,\n action: negated ? \"notDefined\" : \"defined\"\n }\n ];\n }\n return [];\n }\n case \"OpCall\": {\n const leftPath = extractAttributePath(expr.left), rightPath = extractAttributePath(expr.right), leftLiteral = extractLiteralType(expr.left), rightLiteral = extractLiteralType(expr.right);\n if (expr.op === \"==\" || expr.op === \"!=\") {\n const isEquality = expr.op === \"==\", effectiveEquality = negated ? !isEquality : isEquality;\n if (leftPath && rightLiteral?.type === \"null\")\n return [\n {\n path: leftPath,\n action: effectiveEquality ? \"notDefined\" : \"defined\"\n }\n ];\n if (rightPath && leftLiteral?.type === \"null\")\n return [\n {\n path: rightPath,\n action: effectiveEquality ? \"notDefined\" : \"defined\"\n }\n ];\n if (effectiveEquality) {\n if (leftPath && rightLiteral && rightLiteral.type !== \"null\")\n return [\n {\n path: leftPath,\n action: \"equals\",\n value: rightLiteral\n }\n ];\n if (rightPath && leftLiteral && leftLiteral.type !== \"null\")\n return [\n {\n path: rightPath,\n action: \"equals\",\n value: leftLiteral\n }\n ];\n }\n }\n return [];\n }\n default:\n return [];\n }\n}\nfunction applyAssertionsToObject(node, assertions, currentDepth = 0, isOptionalPath = !1) {\n const narrowedAttributes = {};\n let hasChanges = !1;\n for (const [name, attr] of Object.entries(node.attributes)) {\n const matchingAssertions = assertions.filter((a) => a.path[currentDepth] === name);\n if (matchingAssertions.length > 0) {\n const thisPathIsOptional = isOptionalPath || attr.optional === !0, terminalAssertions = matchingAssertions.filter(\n (a) => a.path.length === currentDepth + 1\n ), deeperAssertions = matchingAssertions.filter((a) => a.path.length > currentDepth + 1);\n let newAttr = attr, shouldRemoveAttr = !1;\n for (const assertion of terminalAssertions)\n switch (assertion.action) {\n case \"defined\": {\n if (newAttr.optional && (newAttr = createObjectAttribute(newAttr.value), hasChanges = !0), newAttr.value.type === \"union\") {\n const nonNullTypes = newAttr.value.of.filter((t) => t.type !== \"null\");\n nonNullTypes.length !== newAttr.value.of.length && (newAttr = createObjectAttribute(unionOf(...nonNullTypes)), hasChanges = !0);\n }\n break;\n }\n case \"notDefined\": {\n attr.optional === !0 ? (newAttr = createObjectAttribute({ type: \"null\" }), hasChanges = !0) : (shouldRemoveAttr = !0, hasChanges = !0);\n break;\n }\n case \"equals\": {\n newAttr = createObjectAttribute(assertion.value), hasChanges = !0;\n break;\n }\n default:\n throw new Error(`Unhandled assertion action: ${assertion.action.toString()}`);\n }\n if (deeperAssertions.length > 0) {\n if (attr.optional && (newAttr = createObjectAttribute(newAttr.value), hasChanges = !0), newAttr.value.type === \"object\") {\n const narrowedValue = applyAssertionsToObject(\n newAttr.value,\n deeperAssertions,\n currentDepth + 1,\n thisPathIsOptional\n );\n narrowedValue !== newAttr.value && (newAttr = createObjectAttribute(narrowedValue), hasChanges = !0);\n } else if (newAttr.value.type === \"union\") {\n const originalOf = newAttr.value.of, narrowedOf = originalOf.map((t) => t.type === \"object\" ? applyAssertionsToObject(\n t,\n deeperAssertions,\n currentDepth + 1,\n thisPathIsOptional\n ) : t), nonNullTypes = narrowedOf.filter((t) => t.type !== \"null\");\n thisPathIsOptional && nonNullTypes.length !== narrowedOf.length ? (newAttr = createObjectAttribute(unionOf(...nonNullTypes)), hasChanges = !0) : narrowedOf.some((t, i) => t !== originalOf[i]) && (newAttr = createObjectAttribute(unionOf(...narrowedOf)), hasChanges = !0);\n }\n }\n shouldRemoveAttr || (narrowedAttributes[name] = newAttr);\n } else\n narrowedAttributes[name] = attr;\n }\n return hasChanges ? {\n ...node,\n attributes: narrowedAttributes\n } : node;\n}\nfunction narrowNode(node, assertions) {\n return assertions.length === 0 ? node : node.type === \"object\" ? applyAssertionsToObject(node, assertions) : node.type === \"union\" ? unionOf(...node.of.map((n) => narrowNode(n, assertions))) : node;\n}\nconst $trace$1 = debug(\"typeEvaluator:scope:trace\");\n$trace$1.log = console.log.bind(console);\nclass Context {\n schema;\n constructor(schema) {\n this.schema = schema;\n }\n lookupRef(refTo) {\n for (const val of this.schema)\n if (val.type === \"document\" && val.name === refTo)\n return {\n type: \"object\",\n attributes: val.attributes\n };\n return { type: \"null\" };\n }\n lookupTypeDeclaration(alias) {\n for (const val of this.schema)\n if (val.type === \"type\" && val.name === alias.name)\n return val.value;\n return { type: \"null\" };\n }\n}\nclass Scope {\n value;\n parent;\n context;\n isHidden;\n constructor(value, parent, context) {\n this.value = { type: \"union\", of: value }, this.parent = parent, this.context = context || parent?.context || new Context([]), this.isHidden = !1;\n }\n createNested(value) {\n return this.isHidden ? new Scope(value, this.parent, this.context) : new Scope(value, this, this.context);\n }\n createHidden(value) {\n const result = this.createNested(value);\n return result.isHidden = !0, result;\n }\n}\nconst $trace = debug(\"typeEvaluator:evaluate:trace\");\n$trace.log = console.log.bind(console);\nconst $debug = debug(\"typeEvaluator:evaluate:debug\");\n$debug.log = console.log.bind(console);\nconst $warn = debug(\"typeEvaluator:evaluate:warn\");\nfunction typeEvaluate(ast, schema) {\n $debug(\"evaluateQueryType.ast %O\", ast), $debug(\"evaluateQueryType.schema %O\", schema);\n const parsed = walk({\n node: ast,\n scope: new Scope([], void 0, new Context(schema))\n });\n $trace(\"evaluateQueryType.parsed %O\", parsed);\n const optimized = optimizeUnions(parsed);\n return $debug(\"evaluateQueryType.optimized %O\", optimized), optimized;\n}\nfunction mapDeref(node, scope) {\n return mapNode(node, scope, (base) => {\n if (base.type === \"array\")\n return {\n type: \"array\",\n of: mapDeref(base.of, scope)\n };\n if (base.type === \"object\") {\n if (base.dereferencesTo !== void 0)\n return scope.context.lookupRef(base.dereferencesTo);\n if (base.rest !== void 0)\n return mapDeref(resolveInline(base.rest, scope), scope);\n }\n return { type: \"null\" };\n });\n}\nfunction handleDerefNode(node, scope) {\n $trace(\"deref.node %O\", node);\n const derefedNode = mapDeref(walk({ node: node.base, scope }), scope);\n return $trace(\"deref.derefedNode %O\", derefedNode), derefedNode;\n}\nfunction handleObjectSplatNode(attr, scope) {\n const value = walk({ node: attr.value, scope });\n return $trace(\"object.splat.value %O\", value), mapNode(value, scope, (node) => {\n if (node.type === \"unknown\")\n return { type: \"unknown\" };\n if (node.type !== \"object\")\n return { type: \"object\", attributes: {} };\n const attributes = {};\n for (const name in node.attributes)\n node.attributes.hasOwnProperty(name) && (attributes[name] = node.attributes[name]);\n if (node.rest !== void 0) {\n const resolvedRest = resolveInline(node.rest, scope);\n if (resolvedRest.type === \"unknown\")\n return { type: \"unknown\" };\n if (resolvedRest.type !== \"object\")\n return { type: \"null\" };\n for (const name in resolvedRest.attributes)\n resolvedRest.attributes.hasOwnProperty(name) && (attributes[name] = resolvedRest.attributes[name]);\n }\n return { type: \"object\", attributes };\n });\n}\nfunction handleObjectNode(node, scope) {\n if ($trace(\"object.node %O\", node), node.attributes.length === 0)\n return {\n type: \"object\",\n attributes: {}\n };\n const objectAttributes = [], splatVariants = [], conditionalVariants = [];\n for (const [idx, attr] of node.attributes.entries()) {\n if (attr.type === \"ObjectAttributeValue\") {\n const attributeNode = walk({ node: attr.value, scope });\n objectAttributes.push([\n idx,\n attr.name,\n {\n type: \"objectAttribute\",\n value: attributeNode\n }\n ]);\n continue;\n }\n if (attr.type === \"ObjectSplat\") {\n const attributeNode = handleObjectSplatNode(attr, scope);\n switch ($trace(\"object.splat.result %O\", attributeNode), attributeNode.type) {\n case \"object\": {\n splatVariants.push([idx, attributeNode]);\n continue;\n }\n case \"union\": {\n for (const node2 of attributeNode.of)\n if (node2.type === \"unknown\")\n return node2;\n splatVariants.push([idx, attributeNode]);\n continue;\n }\n default:\n return { type: \"unknown\" };\n }\n }\n if (attr.type === \"ObjectConditionalSplat\") {\n const condition = booleanValue(walk({ node: attr.condition, scope }), scope);\n if ($trace(\"object.conditional.splat.condition %O\", condition), condition.canBeTrue === !1)\n continue;\n const attributeNode = handleObjectSplatNode(attr, scope);\n if ($trace(\"object.conditional.splat.result %O\", attributeNode), condition.canBeFalse === !1 && condition.canBeNull === !1)\n switch (attributeNode.type) {\n case \"object\": {\n splatVariants.push([idx, attributeNode]);\n continue;\n }\n case \"union\": {\n for (const node2 of attributeNode.of)\n if (node2.type !== \"object\")\n return { type: \"unknown\" };\n splatVariants.push([idx, attributeNode]);\n continue;\n }\n default:\n return { type: \"unknown\" };\n }\n const variant = mapNode(attributeNode, scope, (attributeNode2) => ($trace(\"object.conditional.splat.result.concrete %O\", attributeNode2), attributeNode2.type !== \"object\" ? { type: \"unknown\" } : {\n type: \"object\",\n attributes: attributeNode2.attributes\n }));\n if (variant.type === \"union\") {\n for (const node2 of variant.of)\n if (node2.type !== \"object\")\n return { type: \"unknown\" };\n variant.of.push({ type: \"object\", attributes: {} }), conditionalVariants.push([idx, variant]);\n continue;\n }\n if (variant.type !== \"object\")\n return { type: \"unknown\" };\n conditionalVariants.push([\n idx,\n {\n type: \"union\",\n of: [{ type: \"object\", attributes: {} }, variant]\n }\n ]);\n continue;\n }\n throw new Error(`Unknown object attribute type: ${attr.type}`);\n }\n const guaranteedAttributes = [];\n guaranteedAttributes.push(...objectAttributes);\n for (const [idx, splatNode] of splatVariants) {\n if (splatNode.type === \"object\") {\n for (const name in splatNode.attributes) {\n if (!splatNode.attributes.hasOwnProperty(name))\n continue;\n const attribute = splatNode.attributes[name];\n guaranteedAttributes.push([idx, name, attribute]);\n }\n continue;\n }\n conditionalVariants.push([idx, splatNode]);\n }\n if (guaranteedAttributes.sort(([a], [b]) => a - b), conditionalVariants.length === 0)\n return {\n type: \"object\",\n attributes: Object.fromEntries(\n guaranteedAttributes.map(([, name, attribute]) => [name, attribute])\n )\n };\n const matrix = [];\n for (const [unionIdx, union] of conditionalVariants) {\n const unionGuaranteedBefore = [], unionGuaranteedAfter = [];\n for (const [guaranteedIndex, name, attribute] of guaranteedAttributes)\n guaranteedIndex < unionIdx && unionGuaranteedBefore.push([guaranteedIndex, name, attribute]), guaranteedIndex > unionIdx && unionGuaranteedAfter.push([guaranteedIndex, name, attribute]);\n const allVariantsAttributes = [];\n for (const [conditionalVariantIdx, otherUnion] of conditionalVariants) {\n const variantAttributes = [];\n for (const node2 of otherUnion.of)\n variantAttributes.push(node2.attributes);\n allVariantsAttributes.push([conditionalVariantIdx, variantAttributes]);\n }\n for (const node2 of union.of) {\n matrix.push({\n type: \"object\",\n attributes: {\n ...Object.fromEntries(\n unionGuaranteedBefore.map(([, name, attribute]) => [name, attribute])\n ),\n ...node2.attributes,\n ...Object.fromEntries(\n unionGuaranteedAfter.map(([, name, attribute]) => [name, attribute])\n )\n }\n });\n for (const [outerIdx, outerAttributes] of allVariantsAttributes)\n for (const outer of outerAttributes)\n for (const [innerIdx, innerAttributes] of allVariantsAttributes)\n if (outerIdx !== innerIdx)\n for (const inner of innerAttributes) {\n const _before = [...unionGuaranteedBefore], _after = [...unionGuaranteedAfter];\n for (const name in outer)\n outer.hasOwnProperty(name) && outerIdx !== unionIdx && (outerIdx < unionIdx && _before.push([outerIdx, name, outer[name]]), outerIdx > unionIdx && _after.push([outerIdx, name, outer[name]]));\n for (const name in inner)\n inner.hasOwnProperty(name) && outerIdx !== unionIdx && (innerIdx < unionIdx && _before.push([innerIdx, name, inner[name]]), innerIdx > unionIdx && _after.push([innerIdx, name, inner[name]]));\n _before.sort(([a], [b]) => a - b), _after.sort(([a], [b]) => a - b);\n const before = Object.fromEntries(\n _before.map(([, name, attribute]) => [name, attribute])\n ), after = Object.fromEntries(\n _after.map(([, name, attribute]) => [name, attribute])\n );\n matrix.push({\n type: \"object\",\n attributes: {\n ...before,\n ...node2.attributes,\n ...after\n }\n });\n }\n }\n }\n return optimizeUnions({\n type: \"union\",\n of: matrix\n });\n}\nfunction handleOpCallNode(node, scope) {\n $trace(\"opcall.node %O\", node);\n const lhs = walk({ node: node.left, scope }), rhs = walk({ node: node.right, scope });\n return mapNode(\n lhs,\n scope,\n (left) => (\n // eslint-disable-next-line complexity, max-statements\n mapNode(rhs, scope, (right) => {\n switch ($trace('opcall.node.concrete \"%s\" %O', node.op, { left, right }), node.op) {\n case \"==\":\n return left.type === \"unknown\" || right.type === \"unknown\" ? { type: \"boolean\" } : left.type !== right.type ? {\n type: \"boolean\",\n value: !1\n } : left.type === \"null\" ? {\n type: \"boolean\",\n value: !0\n } : !isPrimitiveTypeNode(left) || !isPrimitiveTypeNode(right) ? {\n type: \"boolean\",\n value: !1\n } : {\n type: \"boolean\",\n value: evaluateComparison(node.op, left, right)\n };\n case \"!=\": {\n if (left.type === \"unknown\" || right.type === \"unknown\")\n return { type: \"boolean\" };\n if (left.type !== right.type)\n return {\n type: \"boolean\",\n value: !0\n };\n if (left.type === \"null\")\n return {\n type: \"boolean\",\n value: !1\n };\n if (!isPrimitiveTypeNode(left) || !isPrimitiveTypeNode(right))\n return {\n type: \"boolean\",\n value: !0\n };\n let value = evaluateComparison(\"==\", left, right);\n return value !== void 0 && (value = !value), {\n type: \"boolean\",\n value\n };\n }\n case \">\":\n case \">=\":\n case \"<\":\n case \"<=\":\n return left.type === \"unknown\" || right.type === \"unknown\" ? nullUnion({ type: \"boolean\" }) : left.type !== right.type ? { type: \"null\" } : left.type === \"string\" && right.type === \"string\" && isDateTime(left) !== isDateTime(right) ? { type: \"null\" } : !isPrimitiveTypeNode(left) || !isPrimitiveTypeNode(right) ? { type: \"null\" } : {\n type: \"boolean\",\n value: evaluateComparison(node.op, left, right)\n };\n case \"in\":\n return left.type === \"unknown\" || right.type === \"unknown\" ? nullUnion({ type: \"boolean\" }) : right.type !== \"array\" ? isFuncCall(node.right, \"global::path\") ? { type: \"boolean\" } : { type: \"null\" } : !isPrimitiveTypeNode(left) && left.type !== \"null\" ? {\n type: \"boolean\",\n value: !1\n } : mapNode(right.of, scope, (arrayTypeNode) => arrayTypeNode.type === \"unknown\" ? nullUnion({ type: \"boolean\" }) : left.type === \"null\" ? {\n type: \"boolean\",\n value: arrayTypeNode.type === \"null\"\n } : left.value === void 0 ? {\n type: \"boolean\"\n } : isPrimitiveTypeNode(arrayTypeNode) ? arrayTypeNode.value === void 0 ? {\n type: \"boolean\"\n } : {\n type: \"boolean\",\n value: left.value === arrayTypeNode.value\n } : {\n type: \"boolean\",\n value: !1\n });\n case \"match\":\n return left.type === \"unknown\" || right.type === \"unknown\" ? { type: \"boolean\" } : containsDateTime(left) || containsDateTime(right) ? { type: \"boolean\", value: !1 } : {\n type: \"boolean\",\n value: match(left, right)\n };\n case \"+\":\n return left.type === \"unknown\" || right.type === \"unknown\" ? { type: \"unknown\" } : isDateTime(left) && right.type === \"number\" || left.type === \"number\" && isDateTime(right) ? dateTimeString() : isString(left) && isString(right) ? {\n type: \"string\",\n value: left.value !== void 0 && right.value !== void 0 ? left.value + right.value : void 0\n } : left.type === \"number\" && right.type === \"number\" ? {\n type: \"number\",\n value: left.value !== void 0 && right.value !== void 0 ? left.value + right.value : void 0\n } : left.type === \"array\" && right.type === \"array\" ? {\n type: \"array\",\n of: {\n type: \"union\",\n of: [left.of, right.of]\n }\n } : left.type === \"object\" && right.type === \"object\" ? {\n type: \"object\",\n attributes: { ...left.attributes, ...right.attributes }\n } : { type: \"null\" };\n case \"-\":\n return isDateTime(left) && isDateTime(right) ? { type: \"number\" } : isDateTime(left) && right.type === \"unknown\" ? nullUnion({\n type: \"union\",\n of: [{ type: \"number\" }, dateTimeString()]\n }) : isDateTime(left) && right.type === \"number\" ? dateTimeString() : left.type === \"unknown\" ? nullUnion({\n type: \"union\",\n of: [{ type: \"number\" }, dateTimeString()]\n }) : right.type === \"unknown\" ? nullUnion({ type: \"number\" }) : left.type === \"number\" && right.type === \"number\" ? {\n type: \"number\",\n value: left.value !== void 0 && right.value !== void 0 ? left.value - right.value : void 0\n } : { type: \"null\" };\n case \"*\":\n return left.type === \"unknown\" || right.type === \"unknown\" ? nullUnion({ type: \"number\" }) : left.type === \"number\" && right.type === \"number\" ? {\n type: \"number\",\n value: left.value !== void 0 && right.value !== void 0 ? left.value * right.value : void 0\n } : { type: \"null\" };\n case \"/\":\n return left.type === \"unknown\" || right.type === \"unknown\" ? nullUnion({ type: \"number\" }) : left.type === \"number\" && right.type === \"number\" ? {\n type: \"number\",\n value: left.value !== void 0 && right.value !== void 0 ? left.value / right.value : void 0\n } : { type: \"null\" };\n case \"**\":\n return left.type === \"unknown\" || right.type === \"unknown\" ? nullUnion({ type: \"number\" }) : left.type === \"number\" && right.type === \"number\" ? {\n type: \"number\",\n value: left.value !== void 0 && right.value !== void 0 ? left.value ** right.value : void 0\n } : { type: \"null\" };\n case \"%\":\n return left.type === \"unknown\" || right.type === \"unknown\" ? nullUnion({ type: \"number\" }) : left.type === \"number\" && right.type === \"number\" ? {\n type: \"number\",\n value: left.value !== void 0 && right.value !== void 0 ? left.value % right.value : void 0\n } : { type: \"null\" };\n default:\n return {\n type: \"unknown\"\n };\n }\n })\n )\n );\n}\nfunction handleSelectNode(node, scope) {\n const values = [];\n let guaranteed = !1;\n for (const alternative of node.alternatives) {\n const conditionValue = walk({ node: alternative.condition, scope }), conditionScope = resolveFilter(alternative.condition, scope);\n conditionScope.type === \"union\" && conditionScope.of.length > 0 && values.push(walk({ node: alternative.value, scope: scope.createHidden(conditionScope.of) })), conditionValue.type === \"boolean\" && conditionValue.value === !0 && (guaranteed = !0);\n }\n return node.fallback && !guaranteed && values.push(walk({ node: node.fallback, scope })), values.length === 0 ? { type: \"null\" } : {\n type: \"union\",\n of: values\n };\n}\nfunction handleArrayCoerceNode(node, scope) {\n const base = walk({ node: node.base, scope });\n return $trace(\"arrayCoerce.base %O\", base), mapArray(base, scope, (base2) => base2);\n}\nfunction handleFlatMap(node, scope) {\n const base = walk({ node: node.base, scope });\n return mapArray(base, scope, (base2) => {\n const inner = walk({ node: node.expr, scope: scope.createHidden([base2.of]) });\n return mapNode(\n inner,\n scope,\n (inner2) => inner2.type === \"array\" ? inner2 : { type: \"array\", of: inner2 },\n (nodes) => {\n const inner2 = [];\n for (const node2 of nodes) {\n if (node2.type === \"unknown\") return { type: \"array\", of: node2 };\n if (node2.type !== \"array\") throw new Error(`Unexpected type: ${node2.type}`);\n inner2.push(node2.of);\n }\n return {\n type: \"array\",\n of: optimizeUnions({ type: \"union\", of: inner2 })\n };\n }\n );\n });\n}\nfunction handleMap(node, scope) {\n const base = walk({ node: node.base, scope });\n return $trace(\"map.base %O\", base), mapArray(base, scope, (base2) => ({\n type: \"array\",\n of: walk({ node: node.expr, scope: scope.createHidden([base2.of]) })\n }));\n}\nfunction handleProjectionNode(node, scope) {\n const base = walk({ node: node.base, scope });\n return $trace(\"projection.base %O\", base), mapObject(\n base,\n scope,\n (base2) => walk({ node: node.expr, scope: scope.createNested([base2]) })\n );\n}\nfunction createFilterScope(base, scope) {\n return base.type === \"array\" ? base.of.type === \"union\" ? scope.createNested(base.of.of) : scope.createNested([base.of]) : scope.createNested([base]);\n}\nfunction handleFilterNode(node, scope) {\n const base = walk({ node: node.base, scope });\n return $trace(\"filter.base %O\", base), mapNode(base, scope, (base2) => {\n if ($trace(\"filter.resolving %O\", base2), base2.type === \"null\")\n return base2;\n const resolved = resolveFilter(node.expr, createFilterScope(base2, scope));\n return $trace(\"filter.resolved %O\", resolved), {\n type: \"array\",\n of: resolved\n };\n });\n}\nfunction handleAccessAttributeNode(node, scope) {\n let attributeBase = scope.value;\n return node.base && (attributeBase = walk({ node: node.base, scope })), $trace(\"accessAttribute.base %s %O\", node.name, attributeBase), handleAccessAttributeBase(attributeBase, node.name, scope);\n}\nfunction handleAccessAttributeBase(base, name, scope) {\n return mapObject(base, scope, (base2) => {\n $trace('Looking for attribute \"%s\" in object %O', name, base2);\n const attribute = base2.attributes[name];\n return attribute !== void 0 ? ($debug(`accessAttribute.attribute found ${name} %O`, attribute), attribute.optional ? nullUnion(attribute.value) : attribute.value) : base2.rest ? handleAccessAttributeBase(base2.rest, name, scope) : ($warn(`attribute \"${name}\" not found in object`), { type: \"null\" });\n });\n}\nfunction handleAccessElementNode(node, scope) {\n const base = walk({ node: node.base, scope });\n return $trace(\"accessElement.base %O\", base), mapArray(base, scope, (base2) => nullUnion(base2.of));\n}\nfunction handleArrayNode(node, scope) {\n const of = [];\n for (const el of node.elements) {\n const node2 = walk({ node: el.value, scope });\n if (el.isSplat) {\n if (node2.type !== \"array\")\n continue;\n of.push(node2.of);\n } else\n of.push(node2);\n }\n return {\n type: \"array\",\n of: {\n type: \"union\",\n of\n }\n };\n}\nfunction handleValueNode(node, scope) {\n if (node.value === null)\n return { type: \"null\" };\n switch (typeof node.value) {\n case \"string\":\n return {\n type: \"string\",\n value: node.value\n };\n case \"number\":\n return {\n type: \"number\",\n value: node.value\n };\n case \"boolean\":\n return {\n type: \"boolean\",\n value: node.value\n };\n case \"object\":\n return node.value === null ? { type: \"null\" } : Array.isArray(node.value) ? {\n type: \"array\",\n of: {\n type: \"union\",\n of: node.value.map((value) => walk({ node: { type: \"Value\", value }, scope }))\n }\n } : {\n type: \"object\",\n attributes: Object.fromEntries(\n Object.entries(node.value).map(([key, value]) => [\n key,\n {\n type: \"objectAttribute\",\n value: walk({ node: { type: \"Value\", value }, scope })\n }\n ])\n )\n };\n default:\n return { type: \"unknown\" };\n }\n}\nfunction handleSlice(node, scope) {\n $trace(\"slice.node %O\", node);\n const base = walk({ node: node.base, scope });\n return mapArray(base, scope, (base2) => base2);\n}\nfunction handleParentNode({ n }, scope) {\n $trace(\"handle.parent.currentScope %d %O\", n, scope);\n let current = scope;\n for (let i = 0; i < n; i++) {\n for (; current?.isHidden; )\n current = current.parent;\n current = current?.parent;\n }\n return $trace(\"handle.parent.newScope %d %O\", n, current), current ? current.value.of.length === 0 ? { type: \"null\" } : current.value : { type: \"null\" };\n}\nfunction handleNotNode(node, scope) {\n const base = walk({ node: node.base, scope });\n return mapNode(base, scope, (base2) => base2.type === \"unknown\" ? nullUnion({ type: \"boolean\" }) : base2.type === \"boolean\" ? base2.value !== void 0 ? { type: \"boolean\", value: base2.value === !1 } : { type: \"boolean\" } : { type: \"null\" });\n}\nfunction handleNegNode(node, scope) {\n const base = walk({ node: node.base, scope });\n return mapNode(base, scope, (base2) => base2.type === \"unknown\" ? nullUnion({ type: \"number\" }) : base2.type !== \"number\" ? { type: \"null\" } : base2.value !== void 0 ? { type: \"number\", value: -base2.value } : base2);\n}\nfunction handlePosNode(node, scope) {\n const base = walk({ node: node.base, scope });\n return mapNode(base, scope, (base2) => base2.type === \"unknown\" ? nullUnion({ type: \"number\" }) : base2.type !== \"number\" ? { type: \"null\" } : base2);\n}\nfunction handleEverythingNode(_, scope) {\n return {\n type: \"array\",\n of: {\n type: \"union\",\n of: scope.context.schema.filter((obj) => obj.type === \"document\").map((doc) => ({\n type: \"object\",\n attributes: doc.attributes\n }))\n }\n };\n}\nfunction handleAndNode(node, scope) {\n const left = walk({ node: node.left, scope }), right = walk({ node: node.right, scope });\n return mapNode(\n left,\n scope,\n (lhs) => mapNode(right, scope, (rhs) => {\n const value = booleanAnd(booleanValue(lhs, scope), booleanValue(rhs, scope));\n return booleanInterpretationToTypeNode(value);\n })\n );\n}\nfunction handleOrNode(node, scope) {\n const left = walk({ node: node.left, scope }), right = walk({ node: node.right, scope });\n return mapNode(\n left,\n scope,\n (lhs) => mapNode(right, scope, (rhs) => {\n const value = booleanOr(booleanValue(lhs, scope), booleanValue(rhs, scope));\n return booleanInterpretationToTypeNode(value);\n })\n );\n}\nconst OVERRIDE_TYPE_SYMBOL = /* @__PURE__ */ Symbol(\"groq-js.type\");\nfunction walk({ node, scope }) {\n if (OVERRIDE_TYPE_SYMBOL in node)\n return node[OVERRIDE_TYPE_SYMBOL];\n switch (node.type) {\n // Filtering, traversal & projections\n case \"Map\":\n return handleMap(node, scope);\n case \"Projection\":\n return handleProjectionNode(node, scope);\n case \"Filter\":\n return handleFilterNode(node, scope);\n case \"AccessAttribute\":\n return optimizeUnions(handleAccessAttributeNode(node, scope));\n case \"AccessElement\":\n return handleAccessElementNode(node, scope);\n case \"ArrayCoerce\":\n return handleArrayCoerceNode(node, scope);\n case \"FlatMap\":\n return handleFlatMap(node, scope);\n // Operations\n case \"OpCall\":\n return handleOpCallNode(node, scope);\n case \"And\":\n return handleAndNode(node, scope);\n case \"Or\":\n return handleOrNode(node, scope);\n case \"Select\":\n return handleSelectNode(node, scope);\n case \"PipeFuncCall\":\n return walk({ node: node.base, scope });\n // Values\n case \"Deref\":\n return handleDerefNode(node, scope);\n case \"Object\":\n return handleObjectNode(node, scope);\n case \"Value\":\n return handleValueNode(node, scope);\n case \"Array\":\n return handleArrayNode(node, scope);\n // Special cases\n case \"Everything\":\n return handleEverythingNode(node, scope);\n case \"This\":\n return $trace(\"this %O\", scope.value), scope.value;\n case \"Parent\":\n return handleParentNode(node, scope);\n case \"FuncCall\":\n return handleFuncCallNode(node, scope);\n case \"Group\":\n return walk({ node: node.base, scope });\n case \"Not\":\n return handleNotNode(node, scope);\n case \"Parameter\":\n return {\n type: \"unknown\"\n };\n case \"Slice\":\n return handleSlice(node, scope);\n case \"Neg\":\n return handleNegNode(node, scope);\n case \"Pos\":\n return handlePosNode(node, scope);\n // everything else\n case \"Asc\":\n case \"Desc\":\n case \"Context\":\n case \"Tuple\":\n case \"SelectorFuncCall\":\n case \"SelectorNested\":\n case \"InRange\":\n return { type: \"unknown\" };\n default:\n throw new Error(`unknown node type ${node.type}`);\n }\n}\nfunction isPrimitiveTypeNode(node) {\n return node.type === \"string\" || node.type === \"number\" || node.type === \"boolean\";\n}\nfunction evaluateComparison(opcall, left, right) {\n if (!(left.value === void 0 || right.value === void 0))\n switch (opcall) {\n case \"==\":\n return left.value === right.value;\n case \"<\":\n return left.value < right.value;\n case \"<=\":\n return left.value <= right.value;\n case \">\":\n return left.value > right.value;\n case \">=\":\n return left.value >= right.value;\n default:\n throw new Error(`unknown comparison operator ${opcall}`);\n }\n}\nfunction resolveFilter(expr, scope) {\n $trace(\"resolveFilter.expr %O\", expr);\n const filtered = [], assertions = extractNarrowingAssertions(expr);\n for (const node of scope.value.of) {\n const subScope = scope.createHidden([node]), cond = walk({ node: expr, scope: subScope }), boolResult = booleanValue(cond, subScope);\n if (boolResult.canBeTrue)\n if (boolResult.canBeFalse && assertions.length > 0) {\n const narrowedNode = narrowNode(node, assertions), narrowedScope = scope.createHidden([narrowedNode]), narrowedCond = walk({ node: expr, scope: narrowedScope }), narrowedBoolResult = booleanValue(narrowedCond, narrowedScope);\n narrowedBoolResult.canBeTrue && !narrowedBoolResult.canBeFalse ? filtered.push(narrowedNode) : filtered.push(node);\n } else\n filtered.push(node);\n }\n return $trace(\n `resolveFilter ${expr.type === \"OpCall\" ? `${expr.type}/${expr.op}` : expr.type} %O`,\n filtered\n ), { type: \"union\", of: filtered };\n}\nfunction mapArray(node, scope, mapper) {\n return mapNode(node, scope, (base) => base.type === \"unknown\" ? base : base.type === \"array\" ? mapper(base) : { type: \"null\" });\n}\nfunction mapObject(node, scope, mapper) {\n return mapNode(node, scope, (base) => base.type === \"unknown\" ? base : base.type === \"object\" ? mapper(base) : { type: \"null\" });\n}\nexport {\n DateTime,\n GroqSyntaxError,\n Path,\n createReferenceTypeNode,\n evaluateQuery as evaluate,\n evaluateQuerySync as evaluateSync,\n isSelectorNested,\n isSelectorNode,\n parse,\n toJS,\n typeEvaluate,\n unparse\n};\n//# sourceMappingURL=1.mjs.map\n","import { parse, evaluate } from \"groq-js\";\nconst ERR_PREFIX = \"[client-fake-for-test]\";\nfunction fakeError(message) {\n return new Error(`${ERR_PREFIX} ${message}`);\n}\nclass WriteAccessDeniedError extends Error {\n documentId;\n permission;\n matchingGrants;\n constructor(args) {\n super(\n `Sanity (test): permission denied \\u2014 actor lacks \"${args.permission}\" on document \"${args.documentId}\" (${args.matchingGrants} grant${args.matchingGrants === 1 ? \"\" : \"s\"} matched the document but none included \"${args.permission}\").`\n ), this.name = \"WriteAccessDeniedError\", this.documentId = args.documentId, this.permission = args.permission, this.matchingGrants = args.matchingGrants;\n }\n}\nasync function canAccess(args) {\n return (await evaluateWriteAccess(args)).allowed;\n}\nconst parsedFilters = /* @__PURE__ */ new Map();\nasync function matchesFilter(args) {\n const { document, filter, userId } = args;\n parsedFilters.has(filter) || parsedFilters.set(filter, parse(`*[${filter}]`));\n const ast = parsedFilters.get(filter), data = await (await evaluate(ast, {\n dataset: [document],\n identity: userId\n })).get();\n return Array.isArray(data) && data.length === 1;\n}\nasync function evaluateWriteAccess(args) {\n const { document, grants, permission, userId } = args;\n let matching = 0;\n for (const grant of grants)\n if (await matchesFilter({\n document,\n filter: grant.filter,\n userId\n }) && (matching++, grant.permissions.includes(permission)))\n return { allowed: !0, matchingGrants: matching };\n return { allowed: !1, matchingGrants: matching };\n}\nasync function enforceWriteAccess(args) {\n const { document, grants, permission, userId } = args, { allowed, matchingGrants } = await evaluateWriteAccess({\n document,\n grants,\n permission,\n userId\n });\n if (!allowed)\n throw typeof document._id != \"string\" ? new WriteAccessDeniedError({\n documentId: \"(unknown)\",\n permission,\n matchingGrants\n }) : new WriteAccessDeniedError({\n documentId: document._id,\n permission,\n matchingGrants\n });\n}\nfunction defaultAclPath(projectId, dataset) {\n return `/projects/${projectId}/datasets/${dataset}/acl`;\n}\nfunction makeRequestImpl(accessControl, projectId, dataset) {\n const aclPath = accessControl.aclPath ?? defaultAclPath(projectId, dataset);\n return async (opts) => {\n const path = opts.uri ?? opts.url;\n if (path === \"/users/me\")\n return accessControl.currentUser;\n if (path === aclPath)\n return accessControl.grants;\n throw fakeError(\n `request(): no handler for path \"${path}\". With accessControl configured, the fake only serves \"/users/me\" and \"${aclPath}\". For any other endpoint, register a stub (client.stub(\"request\", fn)) or intercept the HTTP call with a tool like MSW.`\n );\n };\n}\nfunction createTestStore(initial) {\n const docs = /* @__PURE__ */ new Map(), promote2 = (doc) => {\n if (typeof doc._id != \"string\" || doc._id.length === 0)\n throw fakeError(\n `Cannot seed/store a document without a non-empty string \\`_id\\` (got ${JSON.stringify(doc._id)}). This fake never auto-generates ids \\u2014 give every document an explicit _id. Document: ${JSON.stringify(doc)}`\n );\n if (typeof doc._type != \"string\" || doc._type.length === 0)\n throw fakeError(\n `Document \"${doc._id}\" is missing a non-empty string \\`_type\\` (got ${JSON.stringify(doc._type)}). Every Sanity document needs a _type.`\n );\n const now = (/* @__PURE__ */ new Date()).toISOString();\n return {\n ...doc,\n _id: doc._id,\n _type: doc._type,\n _rev: doc._rev ?? cryptoRandomKey(),\n _createdAt: doc._createdAt ?? now,\n _updatedAt: doc._updatedAt ?? now\n };\n }, seed = (documents) => {\n docs.clear();\n for (const d of documents) {\n const promoted = promote2(d);\n docs.set(promoted._id, promoted);\n }\n };\n return initial && seed(initial), {\n seed,\n add: (documents) => {\n for (const d of documents) {\n const promoted = promote2(d);\n docs.set(promoted._id, promoted);\n }\n },\n reset: () => docs.clear(),\n all: () => [...docs.values()],\n get: (id) => docs.get(id),\n put: (doc) => {\n docs.set(doc._id, doc);\n },\n remove: (id) => {\n const doc = docs.get(id);\n return doc && docs.delete(id), doc;\n },\n snapshot: () => [...docs.values()]\n };\n}\nfunction cryptoRandomKey(length = 12) {\n const bytes = new Uint8Array(length);\n return globalThis.crypto.getRandomValues(bytes), [...bytes].map((b) => b.toString(16).padStart(2, \"0\")).join(\"\").slice(0, length);\n}\nfunction describeType(value) {\n return value === null ? \"null\" : Array.isArray(value) ? \"an array\" : `a ${typeof value}`;\n}\nfunction createPatch(documentId, executor) {\n const ops = [];\n let ifRev;\n const handle = {\n set: (props) => (ops.push({ kind: \"set\", props }), handle),\n setIfMissing: (props) => (ops.push({ kind: \"setIfMissing\", props }), handle),\n unset: (paths) => (ops.push({ kind: \"unset\", paths }), handle),\n inc: (props) => (ops.push({ kind: \"inc\", props }), handle),\n dec: (props) => (ops.push({ kind: \"dec\", props }), handle),\n insert: (position, anchor, items) => (ops.push({ kind: \"insert\", position, anchor, items }), handle),\n ifRevisionId: (rev) => (ifRev = rev, handle),\n commit: () => executor.apply(documentId, ops, ifRev),\n toJSON: () => ({\n id: documentId,\n ops: [...ops],\n ...ifRev !== void 0 ? { ifRev } : {}\n })\n };\n return handle;\n}\nfunction applyPatchOps(doc, ops) {\n let next = structuredClone(doc);\n for (const op of ops)\n next = applyOne(next, op);\n return next;\n}\nfunction applyOne(doc, op) {\n switch (op.kind) {\n case \"set\":\n for (const [path, value] of Object.entries(op.props))\n setAtPath(doc, path, value);\n return doc;\n case \"setIfMissing\":\n for (const [path, value] of Object.entries(op.props))\n getAtPath(doc, path) === void 0 && setAtPath(doc, path, value);\n return doc;\n case \"unset\":\n for (const path of op.paths)\n unsetAtPath(doc, path);\n return doc;\n case \"inc\":\n for (const [path, delta] of Object.entries(op.props)) {\n const current = getAtPath(doc, path);\n setAtPath(doc, path, (typeof current == \"number\" ? current : 0) + delta);\n }\n return doc;\n case \"dec\":\n for (const [path, delta] of Object.entries(op.props)) {\n const current = getAtPath(doc, path);\n setAtPath(doc, path, (typeof current == \"number\" ? current : 0) - delta);\n }\n return doc;\n case \"insert\":\n return insertIntoArray(doc, op.position, op.anchor, op.items), doc;\n }\n}\nfunction parsePath(path) {\n const segments = [];\n for (const raw of path.split(\".\")) {\n const match = /^([A-Za-z_$][\\w$]*)(?:\\[(.+)\\])?$/.exec(raw);\n if (!match)\n throw fakeError(\n `Unsupported patch path segment \"${raw}\" (in path \"${path}\"). This fake supports dotted field access (\"a.b.c\"), array index (\"items[0]\"), and keyed lookup (\\`items[_key==\"x\"]\\`). Recursive descent (\"..\") and GROQ filter expressions are not supported.`\n );\n const key = match[1], selectorRaw = match[2];\n if (selectorRaw === void 0) {\n segments.push({ key });\n continue;\n }\n const indexMatch = /^(\\d+)$/.exec(selectorRaw);\n if (indexMatch) {\n segments.push({ key, selector: { kind: \"index\", index: Number(indexMatch[1]) } });\n continue;\n }\n const keyedMatch = /^([A-Za-z_$][\\w$]*)\\s*==\\s*\"([^\"]*)\"$/.exec(selectorRaw);\n if (keyedMatch) {\n segments.push({\n key,\n selector: { kind: \"keyed\", field: keyedMatch[1], value: keyedMatch[2] }\n });\n continue;\n }\n throw fakeError(\n `Unsupported array selector \"[${selectorRaw}]\" in patch path \"${path}\". Supported selectors are a numeric index (e.g. \"[0]\") and a single keyed match (e.g. \\`[_key==\"abc\"]\\`). Multi-key matches and arbitrary GROQ filters are not supported.`\n );\n }\n return segments;\n}\nfunction resolveSelector(array, selector) {\n if (selector.kind === \"index\") return selector.index;\n const idx = array.findIndex(\n (entry) => typeof entry == \"object\" && entry !== null && entry[selector.field] === selector.value\n );\n if (idx === -1)\n throw fakeError(\n `Patch path matched no array entry where ${selector.field}==\"${selector.value}\". The array has ${array.length} item(s); check the key exists (and that you're patching the right document).`\n );\n return idx;\n}\nfunction getAtPath(doc, path) {\n const segments = parsePath(path);\n let cursor = doc;\n for (const seg of segments) {\n if (cursor == null) return;\n if (cursor = cursor[seg.key], seg.selector !== void 0) {\n if (!Array.isArray(cursor)) return;\n const idx = resolveSelector(cursor, seg.selector);\n cursor = cursor[idx];\n }\n }\n return cursor;\n}\nfunction setAtPath(doc, path, value) {\n const segments = parsePath(path);\n if (segments.length === 0)\n throw fakeError(\"Empty patch path \\u2014 a set/setIfMissing op needs a target field.\");\n let cursor = doc;\n for (let i = 0; i < segments.length - 1; i++) {\n const seg = segments[i];\n let next = cursor[seg.key];\n if (next === void 0 && (next = seg.selector?.kind === \"index\" || seg.selector?.kind === \"keyed\" ? [] : {}, cursor[seg.key] = next), seg.selector !== void 0) {\n if (!Array.isArray(next))\n throw fakeError(\n `Patch path \"${path}\" applies an array selector to field \"${seg.key}\", but that field holds ${describeType(next)}, not an array.`\n );\n const idx = resolveSelector(next, seg.selector);\n cursor = next[idx];\n } else\n cursor = next;\n }\n const last = segments[segments.length - 1];\n if (last.selector !== void 0) {\n const arr = cursor[last.key];\n if (!Array.isArray(arr))\n throw fakeError(\n `Patch path \"${path}\" applies an array selector to field \"${last.key}\", but that field holds ${describeType(arr)}, not an array.`\n );\n const idx = resolveSelector(arr, last.selector);\n arr[idx] = value;\n } else\n cursor[last.key] = value;\n}\nfunction unsetAtPath(doc, path) {\n const segments = parsePath(path);\n if (segments.length === 0) return;\n let cursor = doc;\n for (let i = 0; i < segments.length - 1; i++) {\n const seg = segments[i];\n let next = cursor[seg.key];\n if (next == null) return;\n if (seg.selector !== void 0) {\n if (!Array.isArray(next)) return;\n const idx = resolveSelector(next, seg.selector);\n next = next[idx];\n }\n cursor = next;\n }\n const last = segments[segments.length - 1];\n if (last.selector !== void 0) {\n const arr = cursor[last.key];\n if (!Array.isArray(arr)) return;\n const idx = resolveSelector(arr, last.selector);\n arr.splice(idx, 1);\n } else\n delete cursor[last.key];\n}\nfunction insertIntoArray(doc, position, anchor, items) {\n const segments = parsePath(anchor);\n if (segments.length === 0)\n throw fakeError(\"Empty insert anchor \\u2014 insert() needs an array path to anchor against.\");\n const last = segments[segments.length - 1];\n if (last.selector === void 0)\n throw fakeError(\n `Insert anchor \"${anchor}\" must end with an array selector (an index like \"[0]\" or a keyed match like \\`[_key==\"x\"]\\`) so the fake knows where in the array to insert.`\n );\n let cursor = doc;\n for (let i = 0; i < segments.length - 1; i++) {\n const seg = segments[i], next = cursor[seg.key];\n if (next == null)\n throw fakeError(\n `Insert anchor \"${anchor}\" traverses field \"${seg.key}\", which is missing on the document. setIfMissing the parent first, or anchor against an existing array.`\n );\n if (seg.selector !== void 0) {\n if (!Array.isArray(next))\n throw fakeError(\n `Insert anchor \"${anchor}\" applies an array selector to field \"${seg.key}\", but it holds ${describeType(next)}, not an array.`\n );\n cursor = next[resolveSelector(next, seg.selector)];\n } else\n cursor = next;\n }\n const arr = cursor[last.key];\n if (!Array.isArray(arr))\n throw fakeError(\n `Insert anchor \"${anchor}\" targets field \"${last.key}\", but it holds ${describeType(arr)}, not an array.`\n );\n const idx = resolveSelector(arr, last.selector);\n position === \"replace\" ? arr.splice(idx, 1, ...items) : position === \"before\" ? arr.splice(idx, 0, ...items) : arr.splice(idx + 1, 0, ...items);\n}\nconst RELEASE_DOC_PREFIX$1 = \"_.releases.\", VERSIONS_PREFIX$1 = \"versions.\", releaseDocId = (releaseId) => `${RELEASE_DOC_PREFIX$1}${releaseId}`, versionDocId = (releaseId, publishedId) => `${VERSIONS_PREFIX$1}${releaseId}.${publishedId}`;\nfunction parseVersionId(versionId) {\n if (!versionId.startsWith(VERSIONS_PREFIX$1))\n throw fakeError(\n `\"${versionId}\" is not a version document id. Version ids look like \"versions.<releaseId>.<publishedId>\" (e.g. \"versions.summer-drop.product-1\").`\n );\n const rest = versionId.slice(VERSIONS_PREFIX$1.length), dot = rest.indexOf(\".\");\n if (dot === -1)\n throw fakeError(\n `\"${versionId}\" is not a version document id. Version ids look like \"versions.<releaseId>.<publishedId>\" (e.g. \"versions.summer-drop.product-1\").`\n );\n return { releaseId: rest.slice(0, dot), publishedId: rest.slice(dot + 1) };\n}\nfunction getRelease(store, releaseId) {\n const doc = store.get(releaseDocId(releaseId));\n if (doc === void 0)\n throw fakeError(\n `Release \"${releaseId}\" not found. Create it first with client.releases.create({ releaseId: \"${releaseId}\" }) (or a \"sanity.action.release.create\" action) before editing, scheduling, or adding versions to it.`\n );\n return doc;\n}\nfunction maybeRelease(store, releaseId) {\n return store.get(releaseDocId(releaseId));\n}\nfunction nowIso() {\n return (/* @__PURE__ */ new Date()).toISOString();\n}\nfunction promote(doc) {\n const now = nowIso();\n return {\n ...doc,\n _id: doc._id,\n _type: doc._type,\n _rev: cryptoRandomKey(),\n _createdAt: doc._createdAt ?? now,\n _updatedAt: now\n };\n}\nfunction bumpRev(doc, patch) {\n return {\n ...doc,\n ...patch,\n _rev: cryptoRandomKey(),\n _updatedAt: nowIso()\n };\n}\nfunction requireActive(release) {\n if (release.state !== \"active\")\n throw fakeError(\n `Release \"${release.name}\" is \"${release.state}\", but only \"active\" releases accept version writes (create / replace / discard / unpublish). Unschedule or unarchive it back to \"active\" first, or target a different release.`\n );\n}\nfunction applyAction(store, action) {\n switch (action.actionType) {\n case \"sanity.action.release.create\": {\n if (maybeRelease(store, action.releaseId) !== void 0)\n throw fakeError(\n `Release \"${action.releaseId}\" already exists. release.create expects a new releaseId; use release.edit to change its metadata, or pick a different releaseId.`\n );\n const now = nowIso(), metadata = {\n releaseType: \"undecided\",\n ...action.metadata\n }, doc = {\n _id: releaseDocId(action.releaseId),\n _type: \"system.release\",\n _rev: cryptoRandomKey(),\n _createdAt: now,\n _updatedAt: now,\n name: action.releaseId,\n state: \"active\",\n metadata\n };\n return store.put(doc), { transactionId: cryptoRandomKey() };\n }\n case \"sanity.action.release.edit\": {\n const release = getRelease(store, action.releaseId), patchOps = [];\n action.patch.set !== void 0 && patchOps.push({ kind: \"set\", props: action.patch.set }), action.patch.unset !== void 0 && patchOps.push({ kind: \"unset\", paths: action.patch.unset });\n const patched = applyPatchOps(release, patchOps);\n return store.put(bumpRev(patched, {})), { transactionId: cryptoRandomKey() };\n }\n case \"sanity.action.release.schedule\": {\n const release = getRelease(store, action.releaseId);\n if (release.state !== \"active\")\n throw fakeError(\n `Cannot schedule release \"${action.releaseId}\": it is \"${release.state}\", and only \"active\" releases can be scheduled.`\n );\n return store.put(\n bumpRev(release, {\n state: \"scheduled\",\n publishAt: action.publishAt\n })\n ), { transactionId: cryptoRandomKey() };\n }\n case \"sanity.action.release.unschedule\": {\n const release = getRelease(store, action.releaseId);\n if (release.state !== \"scheduled\")\n throw fakeError(\n `Cannot unschedule release \"${action.releaseId}\": it is \"${release.state}\", and only \"scheduled\" releases can be unscheduled.`\n );\n const next = { ...release, state: \"active\" };\n return delete next.publishAt, store.put(bumpRev(next, {})), { transactionId: cryptoRandomKey() };\n }\n case \"sanity.action.release.publish\": {\n const release = getRelease(store, action.releaseId);\n if (release.state === \"published\")\n return { transactionId: cryptoRandomKey() };\n if (release.state !== \"active\" && release.state !== \"scheduled\")\n throw fakeError(\n `Cannot publish release \"${action.releaseId}\": it is \"${release.state}\", and only \"active\" or \"scheduled\" releases can be published.`\n );\n const prefix = `${VERSIONS_PREFIX$1}${action.releaseId}.`, sources = store.all().filter((d) => d._id.startsWith(prefix));\n for (const v of sources) {\n const pubId = v._id.slice(prefix.length);\n if (v._system?.delete === !0)\n store.remove(pubId);\n else {\n const body = {\n ...v,\n _id: pubId\n };\n delete body._originalId, delete body._system;\n const promoted = promote(body), existing = store.get(pubId);\n existing !== void 0 && (promoted._createdAt = existing._createdAt), store.put(promoted);\n }\n store.remove(v._id);\n }\n return store.put(bumpRev(release, { state: \"published\" })), { transactionId: cryptoRandomKey() };\n }\n case \"sanity.action.release.archive\": {\n const release = getRelease(store, action.releaseId);\n if (release.state !== \"active\" && release.state !== \"scheduled\")\n throw fakeError(\n `Cannot archive release \"${action.releaseId}\": it is \"${release.state}\", and only \"active\" or \"scheduled\" releases can be archived.`\n );\n return store.put(bumpRev(release, { state: \"archived\" })), { transactionId: cryptoRandomKey() };\n }\n case \"sanity.action.release.unarchive\": {\n const release = getRelease(store, action.releaseId);\n if (release.state !== \"archived\")\n throw fakeError(\n `Cannot unarchive release \"${action.releaseId}\": it is \"${release.state}\", and only \"archived\" releases can be unarchived.`\n );\n return store.put(bumpRev(release, { state: \"active\" })), { transactionId: cryptoRandomKey() };\n }\n case \"sanity.action.release.delete\": {\n const release = getRelease(store, action.releaseId);\n if (release.state !== \"archived\" && release.state !== \"published\")\n throw fakeError(\n `Cannot delete release \"${action.releaseId}\": it is \"${release.state}\", and only \"archived\" or \"published\" releases can be deleted. Archive it first (sanity.action.release.archive) or publish it.`\n );\n const prefix = `${VERSIONS_PREFIX$1}${action.releaseId}.`;\n for (const v of store.all())\n v._id.startsWith(prefix) && store.remove(v._id);\n return store.remove(release._id), { transactionId: cryptoRandomKey() };\n }\n case \"sanity.action.document.version.create\": {\n const releaseId = action.releaseId ?? (action.document._id !== void 0 ? parseVersionId(action.document._id).releaseId : void 0);\n if (releaseId === void 0)\n throw fakeError(\n 'version.create needs a release to attach to: pass `releaseId`, or a `document._id` shaped \"versions.<releaseId>.<publishedId>\" so the release can be inferred.'\n );\n const release = getRelease(store, releaseId);\n requireActive(release);\n const vid = versionDocId(releaseId, action.publishedId), doc = {\n ...action.document,\n _id: vid\n }, existing = store.get(vid), promoted = promote(doc);\n return existing !== void 0 && (promoted._createdAt = existing._createdAt), store.put(promoted), { transactionId: cryptoRandomKey() };\n }\n case \"sanity.action.document.version.replace\": {\n const id = action.document._id;\n if (typeof id != \"string\")\n throw fakeError(\n 'version.replace needs `document._id` (a version id like \"versions.<releaseId>.<publishedId>\") to identify which version document to replace.'\n );\n const { releaseId } = parseVersionId(id), release = getRelease(store, releaseId);\n requireActive(release);\n const existing = store.get(id), promoted = promote(action.document);\n return existing !== void 0 && (promoted._createdAt = existing._createdAt), store.put(promoted), { transactionId: cryptoRandomKey() };\n }\n case \"sanity.action.document.version.discard\": {\n const { releaseId } = parseVersionId(action.versionId), release = getRelease(store, releaseId);\n return requireActive(release), store.remove(action.versionId), { transactionId: cryptoRandomKey() };\n }\n case \"sanity.action.document.version.unpublish\": {\n const { releaseId } = parseVersionId(action.versionId), release = getRelease(store, releaseId);\n requireActive(release);\n const doc = {\n _id: action.versionId,\n _type: \"stub\",\n _system: { delete: !0 }\n };\n return store.put(promote(doc)), { transactionId: cryptoRandomKey() };\n }\n }\n}\nfunction applyActions(store, actions) {\n const list = Array.isArray(actions) ? actions : [actions], snapshot = /* @__PURE__ */ new Map(), remember = (id) => {\n snapshot.has(id) || snapshot.set(id, store.get(id));\n };\n try {\n let last = { transactionId: cryptoRandomKey() };\n for (const a of list) {\n switch (a.actionType) {\n case \"sanity.action.release.create\":\n case \"sanity.action.release.edit\":\n case \"sanity.action.release.schedule\":\n case \"sanity.action.release.unschedule\":\n case \"sanity.action.release.archive\":\n case \"sanity.action.release.unarchive\":\n case \"sanity.action.release.delete\":\n remember(`${RELEASE_DOC_PREFIX$1}${a.releaseId}`);\n break;\n case \"sanity.action.release.publish\": {\n remember(`${RELEASE_DOC_PREFIX$1}${a.releaseId}`);\n const prefix = `${VERSIONS_PREFIX$1}${a.releaseId}.`;\n for (const d of store.all())\n d._id.startsWith(prefix) && (remember(d._id), remember(d._id.slice(prefix.length)));\n break;\n }\n case \"sanity.action.document.version.create\": {\n const releaseId = a.releaseId ?? (typeof a.document._id == \"string\" ? parseVersionId(a.document._id).releaseId : void 0);\n releaseId !== void 0 && remember(versionDocId(releaseId, a.publishedId));\n break;\n }\n case \"sanity.action.document.version.replace\":\n typeof a.document._id == \"string\" && remember(a.document._id);\n break;\n case \"sanity.action.document.version.discard\":\n case \"sanity.action.document.version.unpublish\":\n remember(a.versionId);\n break;\n }\n last = applyAction(store, a);\n }\n return last;\n } catch (err) {\n for (const [id, doc] of snapshot)\n doc === void 0 ? store.remove(id) : store.put(doc);\n throw err;\n }\n}\nconst DRAFTS_PREFIX = \"drafts.\", VERSIONS_PREFIX = \"versions.\", RELEASE_DOC_PREFIX = \"_.releases.\";\nfunction publishedIdOf(id) {\n if (id.startsWith(DRAFTS_PREFIX)) return id.slice(DRAFTS_PREFIX.length);\n if (id.startsWith(VERSIONS_PREFIX)) {\n const rest = id.slice(VERSIONS_PREFIX.length), dot = rest.indexOf(\".\");\n return dot === -1 ? rest : rest.slice(dot + 1);\n }\n return id;\n}\nfunction releaseNameOf(id) {\n if (!id.startsWith(VERSIONS_PREFIX)) return;\n const rest = id.slice(VERSIONS_PREFIX.length), dot = rest.indexOf(\".\");\n if (dot !== -1)\n return rest.slice(0, dot);\n}\nconst isDraftId = (id) => id.startsWith(DRAFTS_PREFIX), isVersionId = (id) => id.startsWith(VERSIONS_PREFIX), isSystemId = (id) => id.startsWith(\"_.\"), isReleaseDocId = (id) => id.startsWith(RELEASE_DOC_PREFIX);\nfunction applyPerspective(docs, perspective) {\n if (perspective === \"raw\") return [...docs];\n if (perspective === \"published\")\n return docs.filter((d) => !isDraftId(d._id) && !isVersionId(d._id) && !isSystemId(d._id));\n if (perspective === \"drafts\")\n return mergeStack(docs, [], { includeDrafts: !0, includeReleaseDocs: !1 });\n const stack = [];\n let includeDrafts = !1;\n for (const entry of perspective)\n entry === \"drafts\" ? includeDrafts = !0 : stack.push(entry);\n return mergeStack(docs, stack, { includeDrafts, includeReleaseDocs: !0 });\n}\nfunction mergeStack(docs, releaseStack, options) {\n const groups = /* @__PURE__ */ new Map(), systemReleases = [];\n for (const doc of docs) {\n if (isReleaseDocId(doc._id)) {\n options.includeReleaseDocs && systemReleases.push(doc);\n continue;\n }\n if (isSystemId(doc._id)) continue;\n const pubId = publishedIdOf(doc._id);\n let group = groups.get(pubId);\n if (group === void 0 && (group = { versions: /* @__PURE__ */ new Map() }, groups.set(pubId, group)), isDraftId(doc._id))\n group.draft = doc;\n else if (isVersionId(doc._id)) {\n const releaseName = releaseNameOf(doc._id);\n releaseName !== void 0 && group.versions.set(releaseName, doc);\n } else\n group.published = doc;\n }\n const out = [];\n for (const [pubId, group] of groups) {\n let chosen;\n for (const releaseName of releaseStack) {\n const v = group.versions.get(releaseName);\n if (v !== void 0) {\n if (isUnpublishStub(v)) {\n chosen = void 0;\n break;\n }\n chosen = v;\n break;\n }\n }\n chosen === void 0 && options.includeDrafts && group.draft !== void 0 && (chosen = group.draft), chosen === void 0 && group.published !== void 0 && (releaseStack.some((name) => {\n const v = group.versions.get(name);\n return v !== void 0 && isUnpublishStub(v);\n }) || (chosen = group.published)), chosen !== void 0 && out.push(projectToPublishedId(chosen, pubId));\n }\n return [...out, ...systemReleases];\n}\nfunction isUnpublishStub(doc) {\n return doc._system?.delete === !0;\n}\nfunction projectToPublishedId(doc, pubId) {\n return doc._id === pubId ? doc : { ...doc, _id: pubId, _originalId: doc._id };\n}\nfunction resolveDocument(docs, id, perspective) {\n return perspective === \"raw\" ? docs.find((d) => d._id === id) : applyPerspective(docs, perspective).find((d) => d._id === id);\n}\nfunction createTransaction(executor) {\n const mutations = [], handle = {\n create: (doc) => (mutations.push({ kind: \"create\", doc }), handle),\n createOrReplace: (doc) => (mutations.push({ kind: \"createOrReplace\", doc }), handle),\n createIfNotExists: (doc) => (mutations.push({ kind: \"createIfNotExists\", doc }), handle),\n delete: (id) => (mutations.push({ kind: \"delete\", id }), handle),\n patch: (documentIdOrPatch, ops, ifRev) => {\n if (typeof documentIdOrPatch == \"string\")\n mutations.push({\n kind: \"patch\",\n documentId: documentIdOrPatch,\n ops: ops ?? [],\n ...ifRev !== void 0 ? { ifRev } : {}\n });\n else {\n const json = documentIdOrPatch.toJSON();\n mutations.push({\n kind: \"patch\",\n documentId: json.id,\n ops: json.ops,\n ...json.ifRev !== void 0 ? { ifRev: json.ifRev } : {}\n });\n }\n return handle;\n },\n commit: (options) => executor.apply(mutations, options),\n toJSON: () => [...mutations]\n };\n return handle;\n}\nconst ISSUES_URL = \"https://github.com/sanity-labs/client-fake-for-test/issues\", SUPPORTED_SURFACE = [\n \"fetch\",\n \"getDocument\",\n \"getDocuments\",\n \"create\",\n \"createOrReplace\",\n \"createIfNotExists\",\n \"delete\",\n \"patch\",\n \"transaction\",\n \"mutate\",\n \"action\",\n \"releases\",\n \"createVersion\",\n \"unpublishVersion\",\n \"request (only with accessControl)\",\n \"config\",\n \"withConfig\"\n], UNSUPPORTED_MEMBERS = {\n listen: {\n what: \"real-time listener (returns an RxJS Observable of mutation events)\",\n workaround: 'Test your subscription logic in isolation, or register a fake: client.stub(\"listen\", () => myFakeObservable).'\n },\n observable: {\n what: \"the RxJS-flavoured mirror of the client API\",\n workaround: \"Use the Promise-based methods and wrap them with `from()` if you need an Observable.\"\n },\n clone: {\n what: \"clone the client with the same config\",\n workaround: \"Use `withConfig({})` \\u2014 it returns a sibling handle into the same store.\"\n },\n getUrl: {\n what: \"build an absolute API URL for a path\",\n workaround: \"Hard-code the expected URL in your test, or stub it.\"\n },\n getDataUrl: {\n what: \"build an absolute data-API URL\",\n workaround: \"Hard-code the expected URL in your test, or stub it.\"\n },\n assets: {\n what: \"asset upload / metadata namespace\",\n workaround: \"Seed asset documents into the store directly with `seed()` / `add()`.\"\n },\n agent: {\n what: \"Agent Actions namespace (generate / transform / \\u2026)\",\n workaround: 'Stub the call site: client.stub(\"agent\", myFakeAgent).'\n },\n projects: {\n what: \"project-management namespace\",\n workaround: \"Out of scope for a data-plane fake \\u2014 stub the call site.\"\n },\n users: {\n what: \"user-management namespace\",\n workaround: \"Out of scope for a data-plane fake \\u2014 stub the call site.\"\n },\n live: {\n what: \"Live Content API namespace\",\n workaround: \"Out of scope \\u2014 stub the call site or test the consumer separately.\"\n },\n mediaLibrary: {\n what: \"Media Library namespace\",\n workaround: \"Out of scope \\u2014 seed documents directly or stub the call site.\"\n },\n request: {\n what: \"generic HTTP request hook \\u2014 only wired up when accessControl is configured\",\n workaround: \"Create the client with `accessControl` to enable request() (it serves /users/me + the ACL path), or register a stub.\"\n },\n dryRun: {\n what: \"not a method \\u2014 did you mean the `{ dryRun }` mutation option?\",\n workaround: \"Pass `{ dryRun: true }` as the second arg to create / mutate / delete.\"\n }\n}, PROBE_NAMES = /* @__PURE__ */ new Set([\n \"then\",\n \"catch\",\n \"finally\",\n \"toJSON\",\n \"asymmetricMatch\",\n \"$$typeof\",\n \"nodeType\",\n \"_isMockFunction\"\n]);\nfunction guardMessage(path, detail, workaround) {\n return [\n `[client-fake-for-test] \\`client.${path}\\` ${detail}`,\n \"\",\n \"This is an in-memory fake of @sanity/client. It implements:\",\n ` ${SUPPORTED_SURFACE.join(\", \")}.`,\n \"\",\n `\\u2192 ${workaround}`,\n \"\",\n `Register a stub to fill any gap: client.stub(${JSON.stringify(path.split(\".\")[0])}, handler)`,\n `If this should be supported, open an issue: ${ISSUES_URL}`\n ].join(`\n`);\n}\nfunction makeGuard(path, message) {\n const thrower = () => {\n throw new Error(message);\n };\n return new Proxy(thrower, {\n apply: () => thrower(),\n get: (_t, prop) => {\n if (typeof prop == \"symbol\" || PROBE_NAMES.has(prop)) return;\n const childPath = `${path}.${String(prop)}`, top = path.split(\".\")[0], entry = UNSUPPORTED_MEMBERS[top], detail = entry ? `is not implemented (${entry.what}).` : \"is not implemented.\", workaround = entry?.workaround ?? \"Register a stub or use a different test strategy.\";\n return makeGuard(childPath, guardMessage(childPath, detail, workaround));\n }\n });\n}\nfunction wrapRecorded(method, fn, onCall) {\n return (...args) => {\n const settle = onCall(method, args);\n try {\n const out = fn(...args);\n return out !== null && typeof out == \"object\" && typeof out.then == \"function\" ? out.then(\n (result) => (settle({ result }), result),\n (error) => {\n throw settle({ error }), error;\n }\n ) : (settle({ result: out }), out);\n } catch (error) {\n throw settle({ error }), error;\n }\n };\n}\nfunction wrapNamespace(ns, prefix, onCall) {\n return new Proxy(ns, {\n get(target, prop, receiver) {\n const value = Reflect.get(target, prop, receiver);\n return typeof prop == \"string\" && typeof value == \"function\" ? wrapRecorded(`${prefix}.${prop}`, value, onCall) : value;\n }\n });\n}\nfunction wrapWithGuards(client, config) {\n const { getStub, onCall, recorded } = config;\n return new Proxy(client, {\n get(target, prop, receiver) {\n if (typeof prop == \"symbol\") return Reflect.get(target, prop, receiver);\n if (prop in target) {\n const value = Reflect.get(target, prop, receiver);\n if (onCall !== void 0 && recorded?.has(prop) === !0) {\n if (typeof value == \"function\")\n return wrapRecorded(prop, value, onCall);\n if (value !== null && typeof value == \"object\")\n return wrapNamespace(value, prop, onCall);\n }\n return value;\n }\n if (PROBE_NAMES.has(prop)) return;\n const stub = getStub(prop);\n if (stub !== void 0) return stub;\n const entry = UNSUPPORTED_MEMBERS[prop];\n return entry !== void 0 ? makeGuard(\n prop,\n guardMessage(prop, `is not implemented (${entry.what}).`, entry.workaround)\n ) : makeGuard(\n prop,\n guardMessage(\n prop,\n \"is not a method on this fake (unknown member or unimplemented @sanity/client API).\",\n \"Check for a typo, register a stub, or use a different test strategy.\"\n )\n );\n }\n });\n}\nconst RECORDED_METHODS = /* @__PURE__ */ new Set([\n \"fetch\",\n \"getDocument\",\n \"getDocuments\",\n \"create\",\n \"createOrReplace\",\n \"createIfNotExists\",\n \"delete\",\n \"patch\",\n \"transaction\",\n \"mutate\",\n \"action\",\n \"releases\",\n \"createVersion\",\n \"unpublishVersion\",\n \"request\"\n]), DEFAULT_PROJECT_ID = \"test\", DEFAULT_DATASET = \"test\", registryKey = (projectId, dataset) => `${projectId}:${dataset}`, parseRegistryKey = (key) => {\n const [projectId, dataset] = key.split(\":\");\n return { projectId, dataset };\n};\nfunction createTestClient(options = {}) {\n const defaultProjectId = options.projectId ?? DEFAULT_PROJECT_ID, defaultDataset = options.dataset ?? DEFAULT_DATASET, backend = {\n registry: /* @__PURE__ */ new Map(),\n log: [],\n stubs: /* @__PURE__ */ new Map(),\n calls: [],\n concurrentEdits: /* @__PURE__ */ new Map()\n }, registry = backend.registry, ensureStore = (projectId, dataset) => {\n const key = registryKey(projectId, dataset);\n let store = registry.get(key);\n return store === void 0 && (store = createTestStore(), registry.set(key, store)), store;\n };\n if (options.documents && ensureStore(defaultProjectId, defaultDataset).seed(options.documents), options.datasets)\n for (const [key, docs] of Object.entries(options.datasets)) {\n const { projectId, dataset } = parseRegistryKey(key);\n ensureStore(projectId, dataset).seed(docs);\n }\n return makeHandle(\n backend,\n defaultProjectId,\n defaultDataset,\n options.accessControl,\n options.perspective ?? \"raw\",\n options.mutationGuard\n );\n}\nfunction dedupeIds(results) {\n const seen = /* @__PURE__ */ new Set(), out = [];\n for (const r of results)\n seen.has(r.id) || (seen.add(r.id), out.push(r.id));\n return out;\n}\nfunction formatMutationResult(documents, results, transactionId, returnDocuments, returnFirst) {\n return returnDocuments ? returnFirst ? documents[0] : documents : returnFirst ? {\n transactionId,\n documentId: results[0]?.id,\n results\n } : {\n transactionId,\n documentIds: dedupeIds(results),\n results\n };\n}\nfunction toSingleTxnMutation(op) {\n if (\"create\" in op) return { kind: \"create\", doc: op.create };\n if (\"createOrReplace\" in op) return { kind: \"createOrReplace\", doc: op.createOrReplace };\n if (\"createIfNotExists\" in op) return { kind: \"createIfNotExists\", doc: op.createIfNotExists };\n if (\"delete\" in op) return { kind: \"delete\", id: op.delete.id };\n const p = op.patch, ops = [];\n if (p.set !== void 0 && ops.push({ kind: \"set\", props: p.set }), p.setIfMissing !== void 0 && ops.push({ kind: \"setIfMissing\", props: p.setIfMissing }), p.unset !== void 0 && ops.push({ kind: \"unset\", paths: p.unset }), p.inc !== void 0 && ops.push({ kind: \"inc\", props: p.inc }), p.dec !== void 0 && ops.push({ kind: \"dec\", props: p.dec }), p.insert !== void 0) {\n const { before, after, replace, items } = p.insert, position = before !== void 0 ? \"before\" : after !== void 0 ? \"after\" : \"replace\", anchor = before ?? after ?? replace;\n if (anchor === void 0)\n throw fakeError(\n 'mutate(): a `patch.insert` operation must name exactly one anchor \\u2014 `before`, `after`, or `replace` \\u2014 pointing at an array path (e.g. \"tags[-1]\" or `tags[_key==\"x\"]`), alongside `items`. None was set.'\n );\n ops.push({ kind: \"insert\", position, anchor, items });\n }\n return {\n kind: \"patch\",\n documentId: p.id,\n ops,\n ...p.ifRevisionID !== void 0 ? { ifRev: p.ifRevisionID } : {}\n };\n}\nfunction toTxnMutations(operations) {\n if (Array.isArray(operations)) return operations.map(toSingleTxnMutation);\n const json = operations.toJSON();\n return Array.isArray(json) ? json : [\n {\n kind: \"patch\",\n documentId: json.id,\n ops: json.ops,\n ...json.ifRev !== void 0 ? { ifRev: json.ifRev } : {}\n }\n ];\n}\nfunction makeHandle(backend, projectId, dataset, accessControl, perspective, mutationGuard) {\n const { registry } = backend, store = (() => {\n const key = registryKey(projectId, dataset);\n let s = registry.get(key);\n return s === void 0 && (s = createTestStore(), registry.set(key, s)), s;\n })(), concurrentEditKey = (id) => registryKey(projectId, dataset) + \" \" + id, record = (transactionId, mutations) => {\n backend.log.push({ transactionId, projectId, dataset, mutations });\n }, writeResult = (documents, results, transactionId, opts) => formatMutationResult(\n documents,\n results,\n transactionId,\n opts?.returnDocuments ?? !0,\n opts?.returnFirst ?? !0\n ), promote2 = (doc) => {\n const now = (/* @__PURE__ */ new Date()).toISOString();\n if (typeof doc._id != \"string\" || doc._id.length === 0)\n throw fakeError(\n `Cannot store a document without a non-empty string \\`_id\\` (got ${JSON.stringify(doc._id)}). Unlike @sanity/client, this fake never auto-generates ids \\u2014 give every document an explicit _id.`\n );\n if (typeof doc._type != \"string\" || doc._type.length === 0)\n throw fakeError(\n `Document \"${doc._id}\" is missing a non-empty string \\`_type\\` (got ${JSON.stringify(doc._type)}). Every Sanity document needs a _type.`\n );\n return {\n ...doc,\n _id: doc._id,\n _type: doc._type,\n _rev: cryptoRandomKey(),\n _createdAt: doc._createdAt ?? now,\n _updatedAt: now\n };\n }, checkRevision = (id, ifRevisionId) => {\n if (ifRevisionId === void 0) return;\n const editKey = concurrentEditKey(id), pendingEdits = backend.concurrentEdits.get(editKey) ?? 0;\n if (pendingEdits > 0)\n throw backend.concurrentEdits.set(editKey, pendingEdits - 1), fakeError(\n `ifRevisionId check failed: document \"${id}\" was concurrently edited (simulated via simulateConcurrentEdit) \\u2014 the revision-guarded mutation lost the race; re-read and retry. (This mirrors Sanity's optimistic-locking 409.)`\n );\n const existing = store.get(id);\n if (existing === void 0)\n throw fakeError(\n `ifRevisionId check failed: document \"${id}\" does not exist, so its revision cannot match the expected _rev=\"${ifRevisionId}\". Drop ifRevisionId when creating a new document, or seed/create the document before guarding on its revision.`\n );\n if (existing._rev !== ifRevisionId)\n throw fakeError(\n `ifRevisionId check failed: document \"${id}\" is at _rev=\"${existing._rev}\" but the mutation required _rev=\"${ifRevisionId}\". The document changed since you read it \\u2014 re-read it and retry. (This mirrors Sanity's optimistic-locking 409.)`\n );\n }, gate = async (document, permission) => {\n accessControl !== void 0 && await enforceWriteAccess({\n document,\n grants: accessControl.grants,\n permission,\n userId: accessControl.currentUser.id\n });\n }, guardGate = async (action, before, after) => {\n mutationGuard !== void 0 && await mutationGuard({ action, before, after, identity: accessControl?.currentUser.id });\n }, canRead = async (document) => accessControl === void 0 ? !0 : canAccess({\n document,\n grants: accessControl.grants,\n permission: \"read\",\n userId: accessControl.currentUser.id\n }), applyPatch = async (documentId, ops, ifRev) => {\n const existing = store.get(documentId);\n if (existing === void 0)\n throw fakeError(\n `Cannot patch document \"${documentId}\": not found \\u2014 no document with that _id exists in dataset \"${projectId}:${dataset}\". patch() requires the target to already exist; use createOrReplace() / createIfNotExists() to upsert, or seed the document first.`\n );\n checkRevision(documentId, ifRev), await gate(existing, \"update\");\n const patched = applyPatchOps(existing, ops), now = (/* @__PURE__ */ new Date()).toISOString(), next = {\n ...patched,\n _rev: cryptoRandomKey(),\n _updatedAt: now\n };\n return await guardGate(\"update\", existing, next), store.put(next), next;\n }, applyTransaction = async (mutations, txnOptions) => {\n const transactionId = txnOptions?.transactionId ?? cryptoRandomKey(), snapshot = /* @__PURE__ */ new Map(), touchedIds = [], operations = [], remember = (id) => {\n snapshot.has(id) || snapshot.set(id, store.get(id));\n };\n try {\n for (const mut of mutations)\n switch (mut.kind) {\n case \"create\": {\n remember(mut.doc._id);\n const promoted = promote2(mut.doc);\n if (store.get(promoted._id) !== void 0)\n throw fakeError(\n `create() failed: a document with _id \"${promoted._id}\" already exists in dataset \"${projectId}:${dataset}\". Use createOrReplace() to overwrite it, or createIfNotExists() to leave the existing one untouched.`\n );\n await gate(promoted, \"create\"), await guardGate(\"create\", null, promoted), store.put(promoted), touchedIds.push(promoted._id), operations.push({ id: promoted._id, operation: \"create\" });\n break;\n }\n case \"createOrReplace\": {\n remember(mut.doc._id);\n const promoted = promote2(mut.doc), existing = store.get(promoted._id);\n await gate(existing ?? promoted, existing !== void 0 ? \"update\" : \"create\"), await guardGate(\n existing !== void 0 ? \"update\" : \"create\",\n existing ?? null,\n promoted\n );\n const wasPresent = existing !== void 0;\n store.put(promoted), touchedIds.push(promoted._id), operations.push({ id: promoted._id, operation: wasPresent ? \"update\" : \"create\" });\n break;\n }\n case \"createIfNotExists\": {\n if (remember(mut.doc._id), store.get(mut.doc._id) === void 0) {\n const promoted = promote2(mut.doc);\n await gate(promoted, \"create\"), await guardGate(\"create\", null, promoted), store.put(promoted), touchedIds.push(promoted._id), operations.push({ id: promoted._id, operation: \"create\" });\n }\n break;\n }\n case \"delete\": {\n remember(mut.id);\n const existing = store.get(mut.id);\n existing !== void 0 && await gate(existing, \"update\"), existing !== void 0 && await guardGate(\"delete\", existing, null), store.remove(mut.id) && (touchedIds.push(mut.id), operations.push({ id: mut.id, operation: \"delete\" }));\n break;\n }\n case \"patch\": {\n remember(mut.documentId), await applyPatch(mut.documentId, mut.ops, mut.ifRev), touchedIds.push(mut.documentId), operations.push({ id: mut.documentId, operation: \"update\" });\n break;\n }\n }\n } catch (error) {\n for (const [id, doc] of snapshot)\n doc === void 0 ? store.remove(id) : store.put(doc);\n throw error;\n }\n record(transactionId, mutations);\n const documents = touchedIds.map((id) => store.get(id)).filter((d) => d !== void 0);\n return formatMutationResult(\n documents,\n operations,\n transactionId,\n txnOptions?.returnDocuments ?? !1,\n txnOptions?.returnFirst ?? !1\n );\n }, accessVisibleDocs = async () => {\n const all = store.all();\n if (accessControl === void 0) return all;\n const out = [];\n for (const doc of all)\n await canRead(doc) && out.push(doc);\n return out;\n }, visibleDocs = async (override) => {\n const accessible = await accessVisibleDocs();\n return applyPerspective(accessible, override ?? perspective);\n }, client = {\n fetch: async (query, params, opts) => {\n const start = Date.now(), tree = parse(query, params ? { params } : void 0), result = await (await evaluate(tree, {\n dataset: await visibleDocs(opts?.perspective),\n ...params !== void 0 ? { params } : {}\n })).get();\n if (opts?.filterResponse === !1) {\n const ms = Date.now() - start;\n return opts.returnQuery === !1 ? { ms, result } : { query, ms, result };\n }\n return result;\n },\n getDocument: async (id, opts) => {\n const effective = opts?.perspective ?? perspective;\n if (effective === \"raw\") {\n const doc = store.get(id);\n return doc === void 0 || !await canRead(doc) ? void 0 : doc;\n }\n const view = await visibleDocs(effective);\n return resolveDocument(view, id, effective) ?? void 0;\n },\n getDocuments: async (ids, opts) => {\n const effective = opts?.perspective ?? perspective;\n if (effective === \"raw\") {\n const result = [];\n for (const id of ids) {\n const doc = store.get(id);\n doc === void 0 ? result.push(null) : await canRead(doc) ? result.push(doc) : result.push(null);\n }\n return result;\n }\n const view = await visibleDocs(effective);\n return ids.map((id) => resolveDocument(view, id, effective) ?? null);\n },\n create: async (doc, opts) => {\n if (checkRevision(doc._id, opts?.ifRevisionId), store.get(doc._id) !== void 0)\n throw fakeError(\n `create() failed: a document with _id \"${doc._id}\" already exists in dataset \"${projectId}:${dataset}\". Use createOrReplace() to overwrite it, or createIfNotExists() to leave the existing one untouched.`\n );\n const promoted = promote2(doc);\n await gate(promoted, \"create\"), await guardGate(\"create\", null, promoted);\n const transactionId = opts?.transactionId ?? cryptoRandomKey();\n return opts?.dryRun !== !0 && (store.put(promoted), record(transactionId, [{ kind: \"create\", doc }])), writeResult(\n [promoted],\n [{ id: promoted._id, operation: \"create\" }],\n transactionId,\n opts\n );\n },\n createOrReplace: async (doc, opts) => {\n checkRevision(doc._id, opts?.ifRevisionId);\n const promoted = promote2(doc), existing = store.get(doc._id);\n await gate(existing ?? promoted, existing !== void 0 ? \"update\" : \"create\"), await guardGate(existing !== void 0 ? \"update\" : \"create\", existing ?? null, promoted);\n const transactionId = opts?.transactionId ?? cryptoRandomKey();\n opts?.dryRun !== !0 && (store.put(promoted), record(transactionId, [{ kind: \"createOrReplace\", doc }]));\n const operation = existing !== void 0 ? \"update\" : \"create\";\n return writeResult(\n [promoted],\n [{ id: promoted._id, operation }],\n transactionId,\n opts\n );\n },\n createIfNotExists: async (doc, opts) => {\n checkRevision(doc._id, opts?.ifRevisionId);\n const existing = store.get(doc._id), transactionId = opts?.transactionId ?? cryptoRandomKey();\n if (existing !== void 0)\n return writeResult(\n [existing],\n [{ id: existing._id, operation: \"none\" }],\n transactionId,\n opts\n );\n const promoted = promote2(doc);\n return await gate(promoted, \"create\"), await guardGate(\"create\", null, promoted), opts?.dryRun !== !0 && (store.put(promoted), record(transactionId, [{ kind: \"createIfNotExists\", doc }])), writeResult(\n [promoted],\n [{ id: promoted._id, operation: \"create\" }],\n transactionId,\n opts\n );\n },\n delete: async (id, opts) => {\n checkRevision(id, opts?.ifRevisionId);\n const existing = store.get(id);\n existing !== void 0 && await gate(existing, \"update\"), existing !== void 0 && await guardGate(\"delete\", existing, null);\n const transactionId = opts?.transactionId ?? cryptoRandomKey();\n let removed = existing;\n return opts?.dryRun !== !0 && (removed = store.remove(id), removed !== void 0 && record(transactionId, [{ kind: \"delete\", id }])), opts?.returnDocuments === void 0 && opts?.returnFirst === void 0 ? removed !== void 0 ? { _id: id } : null : formatMutationResult(\n removed !== void 0 ? [removed] : [],\n removed !== void 0 ? [{ id, operation: \"delete\" }] : [],\n transactionId,\n opts.returnDocuments ?? !0,\n opts.returnFirst ?? !0\n );\n },\n patch: (documentId) => createPatch(documentId, {\n apply: async (docId, ops, ifRev) => {\n const doc = await applyPatch(docId, ops, ifRev);\n return record(cryptoRandomKey(), [\n { kind: \"patch\", documentId: docId, ops, ...ifRev !== void 0 ? { ifRev } : {} }\n ]), doc;\n }\n }),\n transaction: () => createTransaction({ apply: applyTransaction }),\n mutate: async (operations, options) => applyTransaction(toTxnMutations(operations), options),\n action: async (action) => applyActions(store, action),\n releases: {\n create: async ({ releaseId, metadata }) => {\n const result = applyActions(store, {\n actionType: \"sanity.action.release.create\",\n releaseId,\n ...metadata !== void 0 ? { metadata } : {}\n }), doc = store.get(`_.releases.${releaseId}`);\n return {\n ...result,\n releaseId,\n metadata: doc?.metadata ?? { releaseType: \"undecided\" }\n };\n },\n edit: async ({ releaseId, patch }) => applyActions(store, { actionType: \"sanity.action.release.edit\", releaseId, patch }),\n get: async ({ releaseId }) => store.get(`_.releases.${releaseId}`),\n fetchDocuments: async ({ releaseId }) => {\n const prefix = `versions.${releaseId}.`;\n return store.all().filter((d) => d._id.startsWith(prefix));\n },\n schedule: async ({ releaseId, publishAt }) => applyActions(store, {\n actionType: \"sanity.action.release.schedule\",\n releaseId,\n publishAt\n }),\n unschedule: async ({ releaseId }) => applyActions(store, { actionType: \"sanity.action.release.unschedule\", releaseId }),\n publish: async ({ releaseId }) => applyActions(store, { actionType: \"sanity.action.release.publish\", releaseId }),\n archive: async ({ releaseId }) => applyActions(store, { actionType: \"sanity.action.release.archive\", releaseId }),\n unarchive: async ({ releaseId }) => applyActions(store, { actionType: \"sanity.action.release.unarchive\", releaseId }),\n delete: async ({ releaseId }) => applyActions(store, { actionType: \"sanity.action.release.delete\", releaseId })\n },\n createVersion: async ({ releaseId, publishedId, document }) => applyActions(store, {\n actionType: \"sanity.action.document.version.create\",\n releaseId,\n publishedId,\n document\n }),\n unpublishVersion: async ({ releaseId, publishedId }) => applyActions(store, {\n actionType: \"sanity.action.document.version.unpublish\",\n versionId: `versions.${releaseId}.${publishedId}`,\n publishedId\n }),\n ...accessControl !== void 0 ? { request: makeRequestImpl(accessControl, projectId, dataset) } : {},\n config: () => ({ projectId, dataset, perspective }),\n withConfig: (config) => makeHandle(\n backend,\n config.projectId ?? projectId,\n config.dataset ?? dataset,\n config.accessControl ?? accessControl,\n config.perspective ?? perspective,\n mutationGuard\n ),\n seed: (documents) => store.seed(documents),\n add: (documents) => store.add(documents),\n reset: () => store.reset(),\n snapshot: () => store.snapshot(),\n store: () => store,\n simulateConcurrentEdit: (id, count = 1) => {\n const editKey = concurrentEditKey(id);\n backend.concurrentEdits.set(editKey, (backend.concurrentEdits.get(editKey) ?? 0) + count);\n },\n datasets: () => [...registry.keys()].map(parseRegistryKey),\n stub: (name, handler) => {\n backend.stubs.set(name, handler);\n },\n stubs: () => Object.fromEntries(backend.stubs),\n mutations: () => backend.log.flatMap((entry) => entry.mutations),\n transactions: () => [...backend.log],\n clearLog: () => {\n backend.log.length = 0;\n },\n calls: (method) => method === void 0 ? [...backend.calls] : backend.calls.filter((c) => c.method === method),\n callCount: (method) => method === void 0 ? backend.calls.length : backend.calls.filter((c) => c.method === method).length,\n clearCalls: () => {\n backend.calls.length = 0;\n }\n };\n return wrapWithGuards(client, {\n getStub: (name) => backend.stubs.get(name),\n onCall: (method, args) => {\n const rec = { method, args, projectId, dataset };\n return backend.calls.push(rec), (outcome) => {\n \"error\" in outcome ? rec.error = outcome.error : rec.result = outcome.result;\n };\n },\n recorded: RECORDED_METHODS\n });\n}\nexport {\n ERR_PREFIX,\n SUPPORTED_SURFACE,\n UNSUPPORTED_MEMBERS,\n WriteAccessDeniedError,\n applyPatchOps,\n applyPerspective,\n createPatch,\n createTestClient,\n createTestStore,\n createTransaction,\n defaultAclPath,\n evaluateWriteAccess,\n fakeError,\n isDraftId,\n isReleaseDocId,\n isSystemId,\n isVersionId,\n publishedIdOf,\n releaseNameOf,\n wrapWithGuards\n};\n//# sourceMappingURL=index.js.map\n","import type {Actor, Grant, WorkflowAccess, WorkflowResource} from '@sanity/workflow-engine'\n\n/** Default workflow resource for benches that don't pass one. */\nexport const DEFAULT_WORKFLOW_RESOURCE: WorkflowResource = {\n type: 'dataset',\n id: 'test.test',\n}\n\n/**\n * The default actor used when tests don't specify one. Its `\"*\"` role is an\n * inert placeholder, NOT a wildcard: role matching is literal membership, so\n * this actor satisfies no `Action.roles` gate or `{kind: \"role\"}` assignee on\n * its own — a test that exercises a role gate passes an actor carrying the\n * real role (and the definition's `roleAliases` decide what fulfills it). The\n * bench's all-access default is really {@link WILDCARD_GRANTS}, which feeds\n * `$can`. Production code should never see this id.\n */\nexport const ALL_ACCESS_USER: Actor = {\n kind: 'user',\n id: 'bench-user',\n roles: ['*'],\n}\n\n/**\n * The default grants used when tests don't specify any. A single\n * permissive grant matches every document and confers all permissions.\n */\nexport const WILDCARD_GRANTS: Grant[] = [\n {filter: 'true', permissions: ['create', 'read', 'update']},\n]\n\n/**\n * The bench's default access state — wildcard user + wildcard\n * grants. The bench injects this as the `access` override on every\n * engine call so the underlying TestClient (which has no token, so\n * no `/users/me` resolution path) never needs to do auth resolution.\n *\n * Production code never sees this; pass `createBench({ access })` to\n * test denial paths.\n */\nexport const ALL_ACCESS: WorkflowAccess = {\n actor: ALL_ACCESS_USER,\n grants: WILDCARD_GRANTS,\n}\n","import {\n denyingGuards,\n guardsForResource,\n type MutationGuardAction,\n type MutationGuardDoc,\n} from '@sanity/workflow-engine'\n\ntype DocImage = ({_id: string; _type: string} & Record<string, unknown>) | null\n\n/**\n * Fetch the guards deployed in `client`'s resource and return those that deny a\n * mutation with the given before/after image. The single evaluation path shared\n * by the client write-seam enforcement (`benchMutationGuard`) and the read-only\n * probe (`activeGuardsForDocument`), so the two can't drift in how they fetch\n * guards or feed `denyingGuards`. `client` is a `TestClient`, structurally a\n * `WorkflowClient`.\n */\nexport async function findDenyingGuards(args: {\n client: Parameters<typeof guardsForResource>[0]\n documentId: string\n before: DocImage\n after: DocImage\n action: MutationGuardAction\n identity?: string\n}): Promise<MutationGuardDoc[]> {\n const guards = await guardsForResource(args.client)\n if (guards.length === 0) return []\n const type = args.after?._type ?? args.before?._type\n return denyingGuards({\n guards,\n doc: type !== undefined ? {id: args.documentId, type} : {id: args.documentId},\n context: {\n before: args.before,\n after: args.after,\n action: args.action,\n ...(args.identity !== undefined ? {identity: args.identity} : {}),\n },\n })\n}\n","import type {\n MutationGuard,\n TestClient,\n TestClientAccessControl,\n} from '@sanity-labs/client-fake-for-test'\nimport {createTestClient} from '@sanity-labs/client-fake-for-test'\nimport {\n MutationGuardDeniedError,\n type Actor,\n type Grant,\n type WorkflowAccess,\n} from '@sanity/workflow-engine'\n\nimport {ALL_ACCESS_USER, WILDCARD_GRANTS} from './constants.ts'\nimport {findDenyingGuards} from './guard-eval.ts'\nimport type {AccessShortcuts, StoreDocument} from './types.ts'\n\n/**\n * Simulate the lake's server-side write rejection at the client's write seam.\n *\n * In production the content lake enforces deployed guards itself — it rejects a\n * violating mutation regardless of which client issued it. The bench has no\n * lake, so it reproduces that rejection here: every write through a\n * bench-minted client is gated (not just `bench.editDocument`), and a write any\n * active guard denies throws {@link MutationGuardDeniedError}. `identity` is the\n * client's bound user (its token). No-ops for writes no guard matches (the\n * engine's own instance / guard-doc writes included). `getClient` is late-bound\n * so the guard can read the store off the very client it's installed on.\n *\n * This is WRITE-TIME enforcement. The separate read-time question — \"would a\n * write be denied?\", used to preflight a UI (disable a button, show a lock) —\n * is answered by `activeGuardsForDocument`, a pure read over the same\n * {@link findDenyingGuards} path that works against any client.\n */\nfunction benchMutationGuard(getClient: () => TestClient): MutationGuard {\n return async ({before, after, action, identity}) => {\n const id = after?._id ?? before?._id\n if (id === undefined) return\n const denied = await findDenyingGuards({\n client: getClient(),\n documentId: id,\n before: before ?? null,\n after: after ?? null,\n action,\n ...(identity !== undefined ? {identity} : {}),\n })\n if (denied.length > 0) {\n throw MutationGuardDeniedError.fromGuards({documentId: id, action, guards: denied})\n }\n }\n}\n\n/**\n * Build the TestClient the bench operates against, enforcing the\n * `client` / `accessControl` mutual-exclusion contract: callers either\n * supply their own client or have the bench mint one (optionally wired\n * with lake-side access control), never both. A bench-minted client also\n * SIMULATES the lake's server-side guard rejection at its write seam via\n * {@link benchMutationGuard}.\n *\n * Scope of the seam: this is only about that write-rejection SIMULATION, and it\n * is narrow. The fake client fixes `mutationGuard` at `createTestClient` time\n * and can't add it after, so only a *bare* hand-built `createTestClient()`\n * opts out of enforcement. To share one store across benches WITH enforcement,\n * pass another bench's already-wired client — `createBench({client:\n * other.client})` — the `mutationGuard` rides along (it's inherited by the\n * client's `withConfig` siblings too). `mutation-guards.test.ts` proves a guard\n * deployed in one bench denies writes through a second bench sharing the client.\n * It is NOT a limitation on guards themselves: in production the lake enforces\n * server-side for any client, and the read-side preflight\n * (`activeGuardsForDocument` -> {@link findDenyingGuards}) that predicts denial\n * for a UI is a pure read that works on any client either way.\n */\nexport function resolveBenchClient(options: {\n client?: TestClient\n accessControl?: TestClientAccessControl\n documents?: StoreDocument[]\n}): TestClient {\n if (options.accessControl !== undefined && options.client !== undefined) {\n throw new Error(\n 'createBench: `accessControl` and `client` are mutually exclusive. Either let the bench ' +\n 'build a TestClient configured with the supplied accessControl, or build the client ' +\n 'yourself with `createTestClient({ accessControl })` and pass it in.',\n )\n }\n if (options.client !== undefined) {\n // Used as-is — see the note above on guard enforcement for supplied clients.\n if (options.documents) options.client.add(options.documents)\n return options.client\n }\n let client: TestClient\n client = createTestClient({\n ...(options.accessControl !== undefined ? {accessControl: options.accessControl} : {}),\n mutationGuard: benchMutationGuard(() => client),\n })\n if (options.documents) client.add(options.documents)\n return client\n}\n\n/**\n * Compose the bench-wide access default. Precedence: the canonical\n * `access` shape, then the `currentUser` / `grants` shortcuts, then\n * {@link ALL_ACCESS_USER} + {@link WILDCARD_GRANTS}.\n */\nexport function resolveBenchAccess(options: {\n access?: WorkflowAccess\n currentUser?: Actor\n grants?: Grant[]\n}): WorkflowAccess {\n return (\n options.access ?? {\n actor: options.currentUser ?? ALL_ACCESS_USER,\n grants: options.grants ?? WILDCARD_GRANTS,\n }\n )\n}\n\n/**\n * Resolve the per-call access override against the bench-wide default.\n * A call may tighten or replace access via the canonical `{ access }`\n * field or the `{ actor, grants }` shortcuts.\n *\n * `canTokenResolve` is true when the bench's client was built with\n * `accessControl` — i.e. its `request` hook can resolve grants from\n * the ACL path. In that case an actor-only override (no grants) must\n * NOT inherit the bench's default grants: doing so would gate the\n * per-call actor with the default's (e.g. wildcard) grants instead of\n * that actor's real grants, silently false-greening denial tests. The\n * engine treats verb `access` as `WorkflowAccessOverride`, so the bench\n * hands it `{ actor }` alone and lets the engine token-resolve grants\n * (via the call's `grantsFromPath`) or skip the gate — both faithful to\n * production. Tokenless default benches keep inheriting the default\n * grants, since there is no other source.\n */\nexport function accessFor(\n access: WorkflowAccess,\n args: AccessShortcuts,\n canTokenResolve: boolean,\n): WorkflowAccess {\n if (args.access !== undefined) return args.access\n if (args.actor === undefined && args.grants === undefined) return access\n const inheritedGrants = canTokenResolve ? undefined : access.grants\n const grants = args.grants ?? inheritedGrants\n return {\n actor: args.actor ?? access.actor,\n ...(grants !== undefined ? {grants} : {}),\n }\n}\n\n/**\n * Strip the bench-only access shortcut fields before spreading the rest\n * of a call's args into an engine call, so the composed `access` is the\n * single source of truth.\n */\nexport function stripAccessShortcuts<T extends AccessShortcuts>(\n args: T,\n): Omit<T, 'access' | 'actor' | 'grants'> {\n const rest = {...args}\n delete rest.access\n delete rest.actor\n delete rest.grants\n return rest\n}\n","import {\n workflow,\n type Clock,\n type DeployDefinitionsArgs,\n type DeployDefinitionsResult,\n type DispatchResult,\n type MutationGuardDoc,\n type WorkflowAccess,\n type WorkflowEvaluation,\n type WorkflowInstance,\n} from '@sanity/workflow-engine'\n\nimport {accessFor, stripAccessShortcuts} from './access.ts'\nimport type {\n AccessShortcuts,\n BenchCompleteEffectArgs,\n BenchEditStateArgs,\n BenchEvaluateArgs,\n BenchFireActionArgs,\n BenchStartInstanceArgs,\n BenchTickArgs,\n EngineScope,\n} from './types.ts'\n\n/** Engine-call wrappers that inject the bench-owned client + tag + access. */\nexport type EngineWrappers = {\n deployDefinitions: (\n args: Omit<DeployDefinitionsArgs, 'client' | 'tag' | 'workflowResource'>,\n ) => Promise<DeployDefinitionsResult>\n startInstance: (args: BenchStartInstanceArgs) => Promise<WorkflowInstance>\n fireAction: (args: BenchFireActionArgs) => Promise<DispatchResult>\n editState: (args: BenchEditStateArgs) => Promise<DispatchResult>\n completeEffect: (args: BenchCompleteEffectArgs) => Promise<DispatchResult>\n tick: (args: BenchTickArgs) => Promise<DispatchResult>\n evaluate: (args: BenchEvaluateArgs) => Promise<WorkflowEvaluation>\n guardsForInstance: (instanceId: string) => Promise<MutationGuardDoc[]>\n guardsForDefinition: (definition: string) => Promise<MutationGuardDoc[]>\n}\n\n/**\n * Build the engine-call wrappers. Each access-aware wrapper composes the\n * call's `access` from the bench default plus any per-call override,\n * injects the bench {@link Clock} (so `setNow` / `advance` control time),\n * then spreads the remaining args into the engine with the bench-owned\n * scope. A per-call `clock` in `args` still wins over the bench default.\n */\nexport function createEngineWrappers(\n scope: EngineScope,\n access: WorkflowAccess,\n clock: Clock,\n): EngineWrappers {\n // The fake client only exposes an own `request` hook when built with\n // `accessControl`; that hook is what lets the engine token-resolve\n // grants from the ACL path. A plain bench client has no such hook.\n const canTokenResolve = 'request' in scope.client\n const withAccess = <T extends AccessShortcuts>(args: T) => ({\n ...scope,\n access: accessFor(access, args, canTokenResolve),\n clock,\n ...stripAccessShortcuts(args),\n })\n return {\n deployDefinitions: (args) => workflow.deployDefinitions({...scope, ...args}),\n startInstance: (args) => workflow.startInstance(withAccess(args)),\n fireAction: (args) => workflow.fireAction(withAccess(args)),\n editState: (args) => workflow.editState(withAccess(args)),\n completeEffect: (args) => workflow.completeEffect(withAccess(args)),\n tick: (args) => workflow.tick(withAccess(args)),\n evaluate: (args) => workflow.evaluate(withAccess(args)),\n guardsForInstance: (instanceId) => workflow.guardsForInstance({...scope, instanceId}),\n guardsForDefinition: (definition) => workflow.guardsForDefinition({...scope, definition}),\n }\n}\n","import type {TestClient} from '@sanity-labs/client-fake-for-test'\nimport {\n guardsForResource,\n type Actor,\n type MutationGuardAction,\n type MutationGuardDoc,\n} from '@sanity/workflow-engine'\n\nimport {WILDCARD_GRANTS} from './constants.ts'\nimport {findDenyingGuards} from './guard-eval.ts'\nimport type {StoreDocument} from './types.ts'\n\nexport type GuardHelpers = {\n /** All deployed `temp.system.guard` docs in the store. */\n listGuards: () => Promise<MutationGuardDoc[]>\n\n /**\n * Guards that would deny an arbitrary edit to `documentId` right now (i.e.\n * active locks). Probes by changing every non-system field; a lifted guard\n * (predicate `\"true\"`) returns nothing.\n */\n activeGuardsForDocument: (documentId: string, as?: Actor) => Promise<MutationGuardDoc[]>\n\n /**\n * Write to a document through the client's enforced write seam — the bench\n * client gates the write against deployed guards (incl. `identity()`) and\n * throws `MutationGuardDeniedError` on denial, exactly as the lake would.\n * `as` routes the write through a token-scoped sibling so `identity()`\n * resolves to that actor.\n */\n editDocument: (\n documentId: string,\n patch: Record<string, unknown>,\n options?: {action?: MutationGuardAction; as?: Actor},\n ) => Promise<StoreDocument>\n}\n\n/**\n * Build the lake mutation-guard helpers. `editDocument` writes through the\n * client, whose `mutationGuard` seam enforces deployed guards (see\n * `resolveBenchClient`); `activeGuardsForDocument` is a read-only probe that\n * evaluates guards against a synthetic before/after without writing.\n */\nexport function createGuardHelpers(client: TestClient): GuardHelpers {\n return {\n listGuards: () => guardsForResource(client),\n\n activeGuardsForDocument: async (documentId, as) => {\n const before = await client.getDocument<StoreDocument>(documentId)\n const after: Record<string, unknown> = {...(before ?? {_id: documentId, _type: 'unknown'})}\n for (const key of Object.keys(after)) {\n if (!key.startsWith('_')) after[key] = {__guardProbe: true}\n }\n after.__guardProbe = {__guardProbe: true}\n return findDenyingGuards({\n client,\n documentId,\n before: before ?? null,\n after: after as {_id: string; _type: string},\n action: 'update',\n ...(as ? {identity: as.id} : {}),\n })\n },\n\n editDocument: async (documentId, patch, editOptions) => {\n const action = editOptions?.action ?? 'update'\n const as = editOptions?.as\n // Route through a token-scoped sibling so the client's guard enforcement\n // resolves `identity()` to the acting user; the client throws on denial.\n const writer = as\n ? client.withConfig({\n accessControl: {currentUser: {id: as.id}, grants: WILDCARD_GRANTS},\n })\n : client\n if (action === 'delete') {\n await writer.delete(documentId)\n } else {\n await writer.patch(documentId).set(patch).commit()\n }\n return (await client.getDocument(documentId)) as StoreDocument\n },\n }\n}\n","import {workflow} from '@sanity/workflow-engine'\n\nimport type {EngineScope} from './types.ts'\n\nexport type QueryHelpers = {\n /**\n * Run an arbitrary GROQ query through `workflow.query`. The query MUST\n * filter on the auto-injected `$tag` param (e.g. `*[... && tag == $tag]`)\n * or it throws — the engine refuses to run a query that could read\n * across partitions. Caller is responsible for narrowing the result.\n */\n query: <T = unknown>(groq: string, params?: Record<string, unknown>) => Promise<T>\n\n /**\n * Snapshot-aware GROQ for `instanceId` — runs against the same\n * in-memory view the engine's filters see. Reserved params (`$self`,\n * `$subject`, `$parent`, `$ancestors`, `$now`, `$stage`) auto-bound\n * in GDR URI form. Use to ask \"what does the engine see for this\n * workflow?\" — useful for filter debugging, UIs that mirror engine\n * state, etc.\n */\n queryInScope: <T = unknown>(\n instanceId: string,\n groq: string,\n params?: Record<string, unknown>,\n ) => Promise<T>\n}\n\n/** Build the GROQ passthrough helpers, both tag-scoped via the bench scope. */\nexport function createQueryHelpers(scope: EngineScope): QueryHelpers {\n const withParams = (params?: Record<string, unknown>) => (params !== undefined ? {params} : {})\n return {\n query: <T = unknown>(groq: string, params?: Record<string, unknown>) =>\n workflow.query<T>({...scope, groq, ...withParams(params)}),\n\n queryInScope: <T = unknown>(\n instanceId: string,\n groq: string,\n params?: Record<string, unknown>,\n ) => workflow.queryInScope<T>({...scope, instanceId, groq, ...withParams(params)}),\n }\n}\n","import {\n effectsContextMap,\n tagScopeFilter,\n workflow,\n WORKFLOW_INSTANCE_TYPE,\n type PendingEffect,\n type TaskStatus,\n type WorkflowInstance,\n} from '@sanity/workflow-engine'\n\nimport type {EngineScope, StoreDocument} from './types.ts'\n\nexport type ReadHelpers = {\n /** Read the workflow instance by id. Throws if missing. */\n getInstance: (instanceId: string) => Promise<WorkflowInstance>\n\n /** Current stage name of an instance. */\n currentStage: (instanceId: string) => Promise<string>\n\n /** Pending effects on an instance. */\n pendingEffects: (instanceId: string) => Promise<PendingEffect[]>\n\n /** Status of a single task on an instance, or undefined if missing. */\n taskStatus: (instanceId: string, task: string) => Promise<TaskStatus | undefined>\n\n /** The rendered `$effects` map — context entries keyed by `name`,\n * completed-effect outputs namespaced under the effect's name. */\n effectsContextMap: (instanceId: string) => Promise<Record<string, unknown>>\n\n /**\n * Spawned children of `parentInstanceId`. If `task` is provided,\n * only children spawned by that specific task on the parent.\n *\n * Walks `history.spawned` entries on the parent — this is the durable\n * record. (The per-task `spawnedInstances` field only lives on the\n * open StageEntry's tasks; history survives transitions.)\n *\n * Returns children ordered by `startedAt` ascending.\n */\n children: (parentInstanceId: string, task?: string) => Promise<WorkflowInstance[]>\n\n /**\n * All workflow instances whose `doc.ref` state entry named\n * `entryName` (default `\"subject\"`) matches the given doc id. Useful\n * for \"what workflow is running on this document?\" questions. Pass\n * `entryName` for workflows whose subject entry uses a different name.\n */\n instancesForSubject: (subjectRef: string, entryName?: string) => Promise<WorkflowInstance[]>\n\n /**\n * All instances of `workflowName` currently at `stage`. Includes\n * completed instances (`completedAt != null`) by default; set\n * `{ openOnly: true }` to filter to in-flight only.\n */\n instancesByStage: (\n workflowName: string,\n stage: string,\n options?: {openOnly?: boolean},\n ) => Promise<WorkflowInstance[]>\n\n /** Snapshot of all documents in the store — for inspecting the world. */\n snapshot: () => readonly StoreDocument[]\n}\n\n/**\n * Build the read-side DX helpers. {@link ReadHelpers.getInstance} enforces\n * tag-scoped visibility so every derived read (`currentStage`, `taskStatus`,\n * …) inherits the same isolation the engine's filters apply.\n */\nexport function createReadHelpers(scope: EngineScope): ReadHelpers {\n const {client, tag} = scope\n\n const getInstance = async (instanceId: string): Promise<WorkflowInstance> => {\n const doc = await client.getDocument<WorkflowInstance>(instanceId)\n if (!doc) throw new Error(`Workflow instance ${instanceId} not found`)\n if (doc.tag !== tag) {\n throw new Error(`Workflow instance ${instanceId} not visible to this engine (tag mismatch)`)\n }\n return doc\n }\n\n return {\n getInstance,\n\n currentStage: async (instanceId) => (await getInstance(instanceId)).currentStage,\n\n pendingEffects: async (instanceId) => (await getInstance(instanceId)).pendingEffects,\n\n taskStatus: async (instanceId, task) => {\n const instance = await getInstance(instanceId)\n const stage = instance.stages.find(\n (s) => s.name === instance.currentStage && s.exitedAt === undefined,\n )\n return stage?.tasks.find((t) => t.name === task)?.status\n },\n\n effectsContextMap: async (instanceId) => effectsContextMap(await getInstance(instanceId)),\n\n children: async (parentInstanceId, task) =>\n workflow.children({\n ...scope,\n instanceId: parentInstanceId,\n ...(task !== undefined ? {task} : {}),\n }),\n\n instancesForSubject: async (subjectRef, entryName = 'subject') =>\n // Subjects live on a workflow-scope `doc.ref` state entry. Match\n // instances whose entry's value.id equals the supplied ref. The\n // entry name is conventionally \"subject\" but workflows may name\n // it otherwise.\n client.fetch<WorkflowInstance[]>(\n `*[_type == \"${WORKFLOW_INSTANCE_TYPE}\"\n && state[_type == \"doc.ref\" && name == $entry][0].value.id == $ref\n && ${tagScopeFilter()}] | order(startedAt asc)`,\n {ref: subjectRef, entry: entryName, tag},\n ),\n\n instancesByStage: async (workflowName, stage, queryOptions) => {\n const filter = queryOptions?.openOnly ? ' && completedAt == null' : ''\n return client.fetch<WorkflowInstance[]>(\n `*[_type == \"${WORKFLOW_INSTANCE_TYPE}\" && definition == $wf && currentStage == $stage && ${tagScopeFilter()}${filter}]\n | order(startedAt asc)`,\n {wf: workflowName, stage, tag},\n )\n },\n\n snapshot: () => client.snapshot() as readonly StoreDocument[],\n }\n}\n","/**\n * The bench — a dry-run test harness wrapping `@sanity-labs/client-fake-for-test`.\n *\n * The bench is the **only** place in the package that fabricates an\n * actor identity. The engine itself requires an explicit `actor` on\n * every call; the bench provides a default `ALL_ACCESS_USER` so tests\n * don't have to thread one manually, and exposes wrapper methods that\n * inject `bench.currentUser` + `bench.grants` for every engine call.\n *\n * ```\n * const bench = createBench();\n * await bench.deployDefinitions({ definitions: [definition] });\n * const inst = await bench.startInstance({\n * definition: \"...\",\n * initialState: [{ type: \"doc.ref\", name: \"subject\", value: { id, type } }],\n * });\n * await bench.fireAction({ instanceId: inst._id, task: \"...\", action: \"...\" });\n * expect(await bench.currentStage(inst._id)).toBe(\"ready\");\n * ```\n *\n * For denial-path tests, pass an explicit `currentUser` and/or `grants`:\n *\n * ```\n * const bench = createBench({\n * currentUser: { kind: \"user\", id: \"viewer\", roles: [\"viewer\"] },\n * grants: [{ filter: '_type == \"sanity.workflow.instance\"', permissions: [\"read\"] }],\n * });\n * await expect(bench.fireAction({...})).rejects.toBeInstanceOf(ActionDisabledError);\n * ```\n */\n\nimport type {TestClient, TestClientAccessControl} from '@sanity-labs/client-fake-for-test'\nimport {validateTag} from '@sanity/workflow-engine'\nimport type {Actor, Clock, Grant, WorkflowAccess, WorkflowResource} from '@sanity/workflow-engine'\n\nimport {resolveBenchAccess, resolveBenchClient} from './access.ts'\nimport {DEFAULT_WORKFLOW_RESOURCE} from './constants.ts'\nimport {createEngineWrappers, type EngineWrappers} from './engine-wrappers.ts'\nimport {createGuardHelpers, type GuardHelpers} from './guard-helpers.ts'\nimport {createQueryHelpers, type QueryHelpers} from './query-helpers.ts'\nimport {createReadHelpers, type ReadHelpers} from './read-helpers.ts'\nimport type {StoreDocument} from './types.ts'\n\nexport {\n ALL_ACCESS,\n ALL_ACCESS_USER,\n DEFAULT_WORKFLOW_RESOURCE,\n WILDCARD_GRANTS,\n} from './constants.ts'\n\nexport interface CreateBenchOptions {\n /** Subject documents seeded into the store. */\n documents?: StoreDocument[]\n /**\n * Access state (actor + grants) injected as the engine `access`\n * override on every wrapped call. Defaults to `ALL_ACCESS` —\n * wildcard user + wildcard grants. Pass a restrictive value to\n * test denial paths.\n *\n * Mutually exclusive with the `currentUser` / `grants` shortcuts\n * (which compose into the same shape internally).\n */\n access?: WorkflowAccess\n /** Shortcut for `access.actor`. Composed with `grants`. */\n currentUser?: Actor\n /** Shortcut for `access.grants`. Composed with `currentUser`. */\n grants?: Grant[]\n /**\n * Opt-in: simulate Sanity's hard write-gate inside the TestClient.\n *\n * When set, the bench's underlying TestClient:\n * - Exposes `client.request({ url })` serving `/users/me` + the\n * configured ACL path, so the engine can resolve `WorkflowAccess`\n * from \"the token\" exactly like production.\n * - Rejects writes the grants don't permit with a Sanity-style\n * `WriteAccessDeniedError` — the same 403 a real lake would\n * return.\n *\n * Use this to demonstrate what would happen if the engine's\n * soft-gate were bypassed (or disagreed with) — the lake is still\n * authoritative. The bench's `access` field is the engine-side\n * override; `accessControl` is the lake-side enforcement. They\n * usually carry the same `actor` + `grants` but can be made to\n * disagree to test edge cases.\n *\n * Mutually exclusive with passing a pre-built `client`.\n */\n accessControl?: TestClientAccessControl\n /**\n * Engine-scope environment partition. Defaults to `\"bench\"`. Pass\n * different tags to two benches sharing a `client` to assert partition\n * isolation; pass the same tag to assert visibility through a shared\n * partition.\n *\n * The tag must be ASCII lowercase + digits + dashes, no leading dash,\n * no dots — validated at construction.\n */\n tag?: string\n /**\n * Shared TestClient. If omitted, the bench creates its own — two\n * benches without a shared client are completely isolated, regardless\n * of tag. Pass the same client to two benches to test tag-scoped\n * visibility across a shared store.\n */\n client?: TestClient\n /**\n * Workflow resource the bench's engine operates against. Mirrors\n * `@sanity/client`'s `ClientConfigResource`. Defaults to\n * `{ type: \"dataset\", id: \"test.test\" }` so all bench-minted GDR\n * URIs read as `dataset:test:test:<docId>`.\n */\n workflowResource?: WorkflowResource\n /**\n * Freeze the bench clock at this ISO instant from construction, so\n * `$now` and every engine timestamp are deterministic. Equivalent to\n * calling {@link Bench.setNow} immediately after `createBench`. Omit to\n * start on the wall clock (`advance` / `setNow` can freeze it later).\n */\n now?: string\n}\n\n/** Base bench state, distinct from the engine/read/guard/query helper groups. */\ninterface BenchState {\n /** The fake Sanity client. Passed automatically by bench wrappers. */\n client: TestClient\n /**\n * The access state (actor + grants) the bench injects as the\n * `access` override on every wrapped engine call. Defaults to\n * `ALL_ACCESS`.\n */\n access: WorkflowAccess\n /** Convenience: `access.actor`. */\n currentUser: Actor\n /** Convenience: `access.grants ?? []`. */\n grants: Grant[]\n\n /** Add documents to the store after construction. */\n seedDocuments: (documents: StoreDocument[]) => void\n\n /**\n * Current bench clock reading (ISO). Wall-clock until {@link Bench.setNow}\n * or {@link Bench.advance} freezes it. Handy for computing deadlines\n * relative to frozen time in a test.\n */\n now: () => string\n /**\n * Freeze the bench clock at an explicit ISO instant. Every subsequent\n * engine call (`startInstance` / `fireAction` / `tick` / `completeEffect`\n * / `evaluate`) sees this as `$now` and stamps it on history, so\n * time-based `completeWhen` / `failWhen` / SLA predicates are\n * deterministic.\n */\n setNow: (iso: string) => void\n /**\n * Move the bench clock forward by `ms`, freezing it at\n * `current + ms`. Re-evaluate by calling {@link Bench.tick} — `advance`\n * itself never writes, so the timeline only progresses when you tick.\n */\n advance: (ms: number) => void\n}\n\nexport type Bench = BenchState & EngineWrappers & ReadHelpers & GuardHelpers & QueryHelpers\n\n/**\n * Create a fresh bench. By default the bench is fully isolated — two\n * `createBench()` calls have no shared state. Pass `client` + `tag`\n * to two benches to share a store and exercise tag scoping.\n */\nexport function createBench(options: CreateBenchOptions = {}): Bench {\n const tag = options.tag ?? 'bench'\n validateTag(tag)\n const workflowResource = options.workflowResource ?? DEFAULT_WORKFLOW_RESOURCE\n const client = resolveBenchClient(options)\n const scope = {client, tag, workflowResource}\n\n const access = resolveBenchAccess(options)\n\n // `undefined` ⇒ wall clock; a string ⇒ time is frozen at that instant.\n let frozenNow = options.now !== undefined ? assertIsoInstant(options.now) : undefined\n const clock: Clock = () => frozenNow ?? new Date().toISOString()\n\n return {\n client,\n access,\n currentUser: access.actor,\n grants: access.grants ?? [],\n\n seedDocuments: (documents) => client.add(documents),\n\n now: clock,\n setNow: (iso) => {\n frozenNow = assertIsoInstant(iso)\n },\n advance: (ms) => {\n if (!Number.isFinite(ms))\n throw new Error(`bench.advance: ms must be a finite number, got ${ms}`)\n frozenNow = new Date(Date.parse(frozenNow ?? new Date().toISOString()) + ms).toISOString()\n },\n\n ...createEngineWrappers(scope, access, clock),\n ...createReadHelpers(scope),\n ...createGuardHelpers(client),\n ...createQueryHelpers(scope),\n }\n}\n\n/** Parse + canonicalise an ISO instant, throwing loud on garbage so a\n * typo'd `setNow` fails at the call site, not as a silent NaN later. */\nfunction assertIsoInstant(iso: string): string {\n const ms = Date.parse(iso)\n if (Number.isNaN(ms)) {\n throw new Error(`bench clock: expected an ISO-8601 instant, got ${JSON.stringify(iso)}`)\n }\n return new Date(ms).toISOString()\n}\n"],"names":["string","node","text","flatMap","process","map","node2","parse","ms","require$$0","debug","namespaces","exports","module","require$$1","require$$2","useColors","require$$3","srcModule","document","evaluate","documents","delta","array","guardsForResource","denyingGuards","MutationGuardDeniedError","workflow","effectsContextMap","WORKFLOW_INSTANCE_TYPE","tagScopeFilter","validateTag"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9]}
1
+ {"version":3,"file":"index.cjs","sources":["../../../node_modules/.pnpm/groq-js@1.30.2/node_modules/groq-js/dist/_chunks-es/shared.mjs","../../../node_modules/.pnpm/groq-js@1.30.2/node_modules/groq-js/dist/_chunks-es/evaluator.mjs","../../../node_modules/.pnpm/ms@2.1.3/node_modules/ms/index.js","../../../node_modules/.pnpm/debug@4.4.3_supports-color@8.1.1/node_modules/debug/src/common.js","../../../node_modules/.pnpm/debug@4.4.3_supports-color@8.1.1/node_modules/debug/src/browser.js","../../../node_modules/.pnpm/supports-color@8.1.1/node_modules/supports-color/browser.js","../../../node_modules/.pnpm/debug@4.4.3_supports-color@8.1.1/node_modules/debug/src/node.js","../../../node_modules/.pnpm/debug@4.4.3_supports-color@8.1.1/node_modules/debug/src/index.js","../../../node_modules/.pnpm/groq-js@1.30.2/node_modules/groq-js/dist/1.mjs","../../../node_modules/.pnpm/@sanity-labs+client-fake-for-test@0.5.0/node_modules/@sanity-labs/client-fake-for-test/dist/index.js","../src/constants.ts","../src/guard-eval.ts","../src/access.ts","../src/engine-wrappers.ts","../src/guard-helpers.ts","../src/query-helpers.ts","../src/read-helpers.ts","../src/index.ts"],"sourcesContent":["function escapeRegExp(string) {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\nfunction pathRegExp(pattern) {\n const re = [];\n for (const part of pattern.split(\".\"))\n part === \"*\" ? re.push(\"[^.]+\") : part === \"**\" ? re.push(\".*\") : re.push(escapeRegExp(part));\n return new RegExp(`^${re.join(\".\")}$`);\n}\nclass Path {\n pattern;\n patternRe;\n constructor(pattern) {\n this.pattern = pattern, this.patternRe = pathRegExp(pattern);\n }\n matches(str) {\n return this.patternRe.test(str);\n }\n toJSON() {\n return this.pattern;\n }\n}\nconst RFC3339_REGEX = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(Z|([-+]\\d{2}:\\d{2}))$/;\nfunction parseRFC3339(str) {\n return RFC3339_REGEX.test(str) ? new Date(str) : null;\n}\nfunction formatRFC3339(d) {\n const year = addLeadingZero(d.getUTCFullYear(), 4), month = addLeadingZero(d.getUTCMonth() + 1, 2), day = addLeadingZero(d.getUTCDate(), 2), hour = addLeadingZero(d.getUTCHours(), 2), minute = addLeadingZero(d.getUTCMinutes(), 2), second = addLeadingZero(d.getUTCSeconds(), 2);\n let fractionalSecond = \"\";\n const millis = d.getMilliseconds();\n return millis != 0 && (fractionalSecond = `.${addLeadingZero(millis, 3)}`), `${year}-${month}-${day}T${hour}:${minute}:${second}${fractionalSecond}Z`;\n}\nfunction addLeadingZero(num, targetLength) {\n let str = num.toString();\n for (; str.length < targetLength; )\n str = `0${str}`;\n return str;\n}\nclass StaticValue {\n data;\n type;\n constructor(data, type) {\n this.data = data, this.type = type;\n }\n isArray() {\n return this.type === \"array\";\n }\n // eslint-disable-next-line require-await\n async get() {\n return this.data;\n }\n asStatic() {\n return this;\n }\n [Symbol.asyncIterator]() {\n if (Array.isArray(this.data))\n return (function* (data) {\n for (const element of data)\n yield fromJS(element);\n })(this.data);\n throw new Error(`Cannot iterate over: ${this.type}`);\n }\n}\nconst NULL_VALUE = new StaticValue(null, \"null\"), TRUE_VALUE = new StaticValue(!0, \"boolean\"), FALSE_VALUE = new StaticValue(!1, \"boolean\");\nclass DateTime {\n date;\n constructor(date) {\n this.date = date;\n }\n static parseToValue(str) {\n const date = parseRFC3339(str);\n return date ? new StaticValue(new DateTime(date), \"datetime\") : NULL_VALUE;\n }\n equals(other) {\n return this.date.getTime() == other.date.getTime();\n }\n add(secs) {\n const copy = new Date(this.date.getTime());\n return copy.setTime(copy.getTime() + secs * 1e3), new DateTime(copy);\n }\n difference(other) {\n return (this.date.getTime() - other.date.getTime()) / 1e3;\n }\n compareTo(other) {\n return this.date.getTime() - other.date.getTime();\n }\n toString() {\n return formatRFC3339(this.date);\n }\n toJSON() {\n return this.toString();\n }\n}\nfunction fromNumber(num) {\n return Number.isFinite(num) ? new StaticValue(num, \"number\") : NULL_VALUE;\n}\nfunction fromString(str) {\n return new StaticValue(str, \"string\");\n}\nfunction fromDateTime(dt) {\n return new StaticValue(dt, \"datetime\");\n}\nfunction fromPath(path) {\n return new StaticValue(path, \"path\");\n}\nfunction isIterator(obj) {\n return obj && typeof obj.next == \"function\";\n}\nfunction fromArray(val) {\n return new StaticValue(val, \"array\");\n}\nfunction fromJS(val) {\n return isIterator(val) ? new StreamValue(async function* () {\n for await (const value of val)\n yield fromJS(value);\n }) : val == null ? NULL_VALUE : new StaticValue(val, getType(val));\n}\nfunction toJS(val) {\n const normalized = maybeNormalize(val.data);\n return normalized === void 0 ? val.data : normalized;\n}\nfunction maybeNormalize(data) {\n if (!(data === null || typeof data > \"u\")) {\n if (Array.isArray(data)) {\n let result;\n for (let i = 0; i < data.length; i++) {\n let normalized = maybeNormalize(data[i]);\n normalized !== void 0 && result === void 0 && (result = data.slice(0, i)), result !== void 0 && (normalized === void 0 && (normalized = data[i]), result.push(normalized));\n }\n return result;\n }\n if (typeof data == \"object\") {\n if (\"toJSON\" in data && typeof data.toJSON == \"function\")\n return data.toJSON();\n const entries = Object.entries(data);\n let result;\n for (let i = 0; i < entries.length; i++) {\n const [key, value] = entries[i];\n let normalized = maybeNormalize(value);\n normalized !== void 0 && result === void 0 && (result = Object.fromEntries(entries.slice(0, i))), result !== void 0 && (normalized === void 0 && (normalized = value), result[key] = normalized);\n }\n return result;\n }\n }\n}\nfunction getType(data) {\n return data === null || typeof data > \"u\" ? \"null\" : Array.isArray(data) ? \"array\" : data instanceof Path ? \"path\" : data instanceof DateTime ? \"datetime\" : typeof data;\n}\nclass StreamValue {\n type = \"stream\";\n generator;\n ticker;\n isDone;\n data;\n constructor(generator) {\n this.generator = generator, this.ticker = null, this.isDone = !1, this.data = [];\n }\n // eslint-disable-next-line class-methods-use-this\n isArray() {\n return !0;\n }\n async get() {\n const result = [];\n for await (const value of this)\n result.push(await value.get());\n return result;\n }\n async asStatic() {\n return new StaticValue(await this.get(), \"array\");\n }\n async *[Symbol.asyncIterator]() {\n let i = 0;\n for (; ; ) {\n for (; i < this.data.length; i++)\n yield this.data[i];\n if (this.isDone)\n return;\n await this._nextTick();\n }\n }\n _nextTick() {\n if (this.ticker)\n return this.ticker;\n let currentResolver, currentRejector;\n const setupTicker = () => {\n this.ticker = new Promise((resolve, reject) => {\n currentResolver = resolve, currentRejector = reject;\n });\n }, tick = () => {\n currentResolver(), setupTicker();\n }, fetch = async () => {\n try {\n for await (const value of this.generator())\n this.data.push(value), tick();\n this.isDone = !0, tick();\n } catch (error) {\n currentRejector(error);\n }\n };\n return setupTicker(), fetch(), this.ticker;\n }\n}\nfunction isSelectorNode(node) {\n return [\n \"AccessAttribute\",\n \"SelectorFuncCall\",\n \"Group\",\n \"Tuple\",\n \"ArrayCoerce\",\n \"Filter\",\n \"SelectorNested\"\n ].includes(node.type);\n}\nfunction isSelectorNested(node) {\n return [\"AccessAttribute\", \"ArrayCoerce\", \"Filter\", \"Group\", \"Tuple\", \"SelectorNested\"].includes(\n node.type\n );\n}\nconst CHARS = /([^!@#$%^&*(),\\\\/?\";:{}|[\\]+<>\\s-])+/g, CHARS_WITH_WILDCARD = /([^!@#$%^&(),\\\\/?\";:{}|[\\]+<>\\s-])+/g, EDGE_CHARS = /(\\b\\.+|\\.+\\b)/g;\nfunction matchText(tokens, patterns) {\n return tokens.length === 0 || patterns.length === 0 ? !1 : patterns.every((pattern) => pattern(tokens));\n}\nfunction matchTokenize(text) {\n return text.replace(EDGE_CHARS, \"\").match(CHARS) || [];\n}\nfunction matchAnalyzePattern(text) {\n return matchPatternRegex(text).map((re) => (tokens) => tokens.some((token) => re.test(token)));\n}\nfunction matchPatternRegex(text) {\n return (text.replace(EDGE_CHARS, \"\").match(CHARS_WITH_WILDCARD) || []).map(\n (term) => new RegExp(`^${term.slice(0, 1024).replace(/\\*/g, \".*\")}$`, \"i\")\n );\n}\nfunction gatherText(value, flatMap) {\n if (value.type === \"string\")\n return { parts: flatMap(value.data), success: !0 };\n if (value.type === \"array\") {\n let success = !0;\n const parts = [];\n for (const part of value.data)\n typeof part == \"string\" ? parts.push(...flatMap(part)) : success = !1;\n return { parts, success };\n }\n return value.type === \"stream\" ? (async () => {\n let success = !0;\n const parts = [];\n for await (const part of value)\n part.type === \"string\" ? parts.push(...flatMap(part.data)) : success = !1;\n return { parts, success };\n })() : { parts: [], success: !1 };\n}\nfunction canConstantEvaluate(node) {\n switch (node.type) {\n case \"Group\":\n return canConstantEvaluate(node.base);\n case \"Value\":\n case \"Parameter\":\n return !0;\n case \"Pos\":\n case \"Neg\":\n return canConstantEvaluate(node.base);\n case \"OpCall\":\n switch (node.op) {\n case \"+\":\n case \"-\":\n case \"*\":\n case \"/\":\n case \"%\":\n case \"**\":\n return canConstantEvaluate(node.left) && canConstantEvaluate(node.right);\n default:\n return !1;\n }\n default:\n return !1;\n }\n}\nfunction tryConstantEvaluate(node) {\n return canConstantEvaluate(node) ? constantEvaluate(node) : null;\n}\nfunction isRecord(val) {\n return val.constructor === Object || val.constructor === void 0;\n}\nfunction staticFromJS(val) {\n return val == null ? NULL_VALUE : typeof val == \"boolean\" ? val ? TRUE_VALUE : FALSE_VALUE : typeof val == \"number\" ? fromNumber(val) : typeof val == \"string\" ? fromString(val) : Array.isArray(val) ? fromArray(val) : typeof val == \"object\" && isRecord(val) ? new StaticValue(val, \"object\") : NULL_VALUE;\n}\nfunction constantEvaluate(node) {\n switch (node.type) {\n case \"Value\":\n return staticFromJS(node.value);\n case \"Parameter\":\n return NULL_VALUE;\n case \"Group\":\n return constantEvaluate(node.base);\n case \"Pos\": {\n const base = constantEvaluate(node.base);\n return base.type !== \"number\" ? NULL_VALUE : fromNumber(base.data);\n }\n case \"Neg\": {\n const base = constantEvaluate(node.base);\n return base.type !== \"number\" ? NULL_VALUE : fromNumber(-base.data);\n }\n case \"OpCall\": {\n const left = constantEvaluate(node.left), right = constantEvaluate(node.right);\n switch (node.op) {\n case \"+\":\n return left.type === \"number\" && right.type === \"number\" ? fromNumber(left.data + right.data) : left.type === \"string\" && right.type === \"string\" ? fromString(left.data + right.data) : left.type === \"array\" && right.type === \"array\" ? fromArray(left.data.concat(right.data)) : left.type === \"object\" && right.type === \"object\" ? new StaticValue({ ...left.data, ...right.data }, \"object\") : NULL_VALUE;\n case \"-\":\n return left.type === \"number\" && right.type === \"number\" ? fromNumber(left.data - right.data) : NULL_VALUE;\n case \"*\":\n return left.type === \"number\" && right.type === \"number\" ? fromNumber(left.data * right.data) : NULL_VALUE;\n case \"/\":\n return left.type === \"number\" && right.type === \"number\" ? fromNumber(left.data / right.data) : NULL_VALUE;\n case \"%\":\n return left.type === \"number\" && right.type === \"number\" ? fromNumber(left.data % right.data) : NULL_VALUE;\n case \"**\":\n return left.type === \"number\" && right.type === \"number\" ? fromNumber(Math.pow(left.data, right.data)) : NULL_VALUE;\n default:\n return NULL_VALUE;\n }\n }\n default:\n return NULL_VALUE;\n }\n}\nconst namespaceRegistry = {\n global: {\n anywhere: { arity: 1 },\n coalesce: {},\n count: { arity: 1 },\n dateTime: { arity: 1 },\n defined: { arity: 1 },\n identity: { arity: 0 },\n length: { arity: 1 },\n path: { arity: 1 },\n string: { arity: 1 },\n references: { arity: (c) => c >= 1 },\n round: { arity: (count) => count >= 1 && count <= 2 },\n now: { arity: 0 },\n boost: { arity: 2 },\n lower: { arity: 1 },\n upper: { arity: 1 }\n },\n string: {\n lower: { arity: 1 },\n upper: { arity: 1 },\n split: { arity: 2 },\n startsWith: { arity: 2 }\n },\n array: {\n join: { arity: 2 },\n compact: { arity: 1 },\n unique: { arity: 1 },\n intersects: { arity: 2 }\n },\n pt: {\n text: { arity: 1 }\n },\n delta: {\n operation: {},\n changedAny: { arity: 1, mode: \"delta\" },\n changedOnly: { arity: 1, mode: \"delta\" }\n },\n diff: {\n changedAny: { arity: 3 },\n changedOnly: { arity: 3 }\n },\n media: {\n aspect: { arity: 2 }\n },\n sanity: {\n projectId: {},\n dataset: {},\n versionOf: { arity: 1 },\n partOfRelease: { arity: 1 }\n },\n math: {\n min: { arity: 1 },\n max: { arity: 1 },\n sum: { arity: 1 },\n avg: { arity: 1 }\n },\n dateTime: {\n now: { arity: 0 }\n },\n releases: {\n all: { arity: 0 }\n },\n text: {\n query: { arity: 1 },\n semanticSimilarity: { arity: 1 }\n },\n geo: {\n latLng: {},\n contains: {},\n intersects: {},\n distance: {}\n },\n documents: {\n get: {},\n incomingRefCount: {},\n incomingGlobalDocumentReferenceCount: {}\n },\n user: {\n attributes: {}\n }\n}, pipeFunctionRegistry = {\n order: { arity: (count) => count >= 1 },\n score: { arity: (count) => count >= 1 }\n};\nexport {\n DateTime,\n FALSE_VALUE,\n NULL_VALUE,\n Path,\n StreamValue,\n TRUE_VALUE,\n fromArray,\n fromDateTime,\n fromJS,\n fromNumber,\n fromPath,\n fromString,\n gatherText,\n getType,\n isSelectorNested,\n isSelectorNode,\n matchAnalyzePattern,\n matchPatternRegex,\n matchText,\n matchTokenize,\n namespaceRegistry,\n pipeFunctionRegistry,\n toJS,\n tryConstantEvaluate\n};\n//# sourceMappingURL=shared.mjs.map\n","import { NULL_VALUE, getType, fromString, fromJS, TRUE_VALUE, FALSE_VALUE, fromDateTime, DateTime, isSelectorNode, fromArray, fromNumber, fromPath, Path, gatherText, matchTokenize, matchPatternRegex, StreamValue, matchText, matchAnalyzePattern } from \"./shared.mjs\";\nfunction isEqual(a, b) {\n return a.type === \"string\" && b.type === \"string\" || a.type === \"boolean\" && b.type === \"boolean\" || a.type === \"null\" && b.type === \"null\" || a.type === \"number\" && b.type === \"number\" ? a.data === b.data : a.type === \"datetime\" && b.type === \"datetime\" ? a.data.equals(b.data) : !1;\n}\nfunction deepEqual(a, b) {\n if (a === null || b === null) return a === b;\n const typeOfA = typeof a, typeOfB = typeof b;\n if (typeOfA === \"undefined\" && typeOfB === \"undefined\") return !0;\n if (typeOfA === \"function\" && typeOfB === \"function\") return a === b;\n if (typeOfA === \"object\" && typeOfB === \"object\") {\n const keysOfA = Object.keys(a), keysOfB = Object.keys(b);\n if (keysOfA.length !== keysOfB.length) return !1;\n for (const key of keysOfA)\n if (!deepEqual(a[key], b[key])) return !1;\n return !0;\n }\n return a === b;\n}\nconst array = {};\narray.join = mappedExecutor(\n (args) => args,\n (_, arr, sep) => {\n if (arr.type !== \"array\")\n return NULL_VALUE;\n if (sep.type !== \"string\")\n return NULL_VALUE;\n let buf = \"\", needSep = !1;\n for (const elem of arr.data) {\n switch (needSep && (buf += sep.data), getType(elem)) {\n case \"number\":\n case \"string\":\n case \"boolean\":\n case \"datetime\":\n buf += `${elem}`;\n break;\n default:\n return NULL_VALUE;\n }\n needSep = !0;\n }\n return fromString(buf);\n }\n);\narray.compact = arrayExecutor(\n ([array2]) => ({ array: array2 }),\n function* (_, item) {\n item !== null && (yield item);\n }\n);\narray.unique = arrayExecutor(\n (args) => ({ array: args[0], state: /* @__PURE__ */ new Set() }),\n function* (_node, iter, _inner, added) {\n switch (getType(iter)) {\n case \"number\":\n case \"string\":\n case \"boolean\":\n case \"datetime\":\n added.has(iter) || (added.add(iter), yield iter);\n break;\n default:\n yield iter;\n }\n }\n);\narray.intersects = mappedExecutor(\n (args) => args,\n (_, arr1, arr2) => {\n if (arr1.type !== \"array\" || arr2.type !== \"array\")\n return NULL_VALUE;\n for (const v1 of arr1.data)\n for (const v2 of arr2.data)\n if (isEqual(fromJS(v1), fromJS(v2)))\n return TRUE_VALUE;\n return FALSE_VALUE;\n }\n);\nconst dateTime = {};\ndateTime.now = constantExecutor(\n (_, scope) => fromDateTime(new DateTime(scope.context.timestamp))\n);\nasync function valueAtPath(arg, keyPath) {\n function tryAccessor(arg2, accessor) {\n try {\n return arg2[accessor];\n } catch {\n return;\n }\n }\n let current = await arg.get();\n for (const part of keyPath)\n if (current = tryAccessor(current, part), !current) break;\n return current;\n}\nfunction startsWith(keyPath, prefix) {\n return prefix.every((item, index) => keyPath[index] === item);\n}\nasync function* diffKeyPaths(before, after) {\n const currPaths = [[]];\n for (; currPaths.length > 0; ) {\n const currPath = currPaths.shift() || [], b = fromJS(await valueAtPath(before, currPath)), a = fromJS(await valueAtPath(after, currPath));\n if (a.type !== b.type)\n yield currPath;\n else if (a.type === \"string\" && b.type === \"string\" || a.type === \"boolean\" && b.type === \"boolean\" || a.type === \"null\" && b.type === \"null\" || a.type === \"number\" && b.type === \"number\")\n a.data !== b.data && (yield currPath);\n else if (a.type === \"datetime\" && b.type === \"datetime\")\n a.data.equals(b.data) || (yield currPath);\n else if (a.type === \"object\" && b.type === \"object\") {\n if (!deepEqual(a.data, b.data)) {\n const aKeys = Object.keys(a.data), bKeys = Object.keys(b.data);\n new Set(aKeys.concat(bKeys)).forEach((key) => {\n currPaths.push([...currPath, key]);\n });\n }\n } else if (a.type === \"array\" && b.type === \"array\") {\n if (a.data.length !== b.data.length)\n yield currPath;\n else if (!deepEqual(a.data, b.data))\n for (let i = 0; i < b.data.length; i++)\n currPaths.push([...currPath, i]);\n } else if (a.type === \"stream\" && b.type === \"stream\") {\n const arrayA = await a.get(), arrayB = await b.get();\n if (arrayA.length !== arrayB.length)\n yield currPath;\n else if (!deepEqual(arrayA, arrayB))\n for (let i = 0; i < arrayB.length; i++)\n currPaths.push([...currPath, i]);\n }\n }\n}\nasync function evaluateSelector(node, value, scope) {\n switch (node.type) {\n case \"Group\":\n return await evaluateSelector(node.base, value, scope);\n case \"Tuple\":\n const tuplePaths = [];\n for (const member of node.members) {\n const memberPaths = await evaluateSelector(member, value, scope);\n tuplePaths.push(...memberPaths);\n }\n return tuplePaths;\n case \"AccessAttribute\":\n return node.base ? (await evaluateSelector(node.base, value, scope)).map((path) => [...path, node.name]) : [[node.name]];\n case \"ArrayCoerce\": {\n const paths = await evaluateSelector(node.base, value, scope), arrayPaths = [];\n for (const keyPath of paths) {\n const innerValue = await valueAtPath(value, keyPath);\n if (Array.isArray(innerValue))\n for (let i = 0; i < innerValue.length; i++)\n arrayPaths.push([...keyPath, i]);\n }\n return arrayPaths;\n }\n case \"Filter\": {\n const paths = await evaluateSelector(node.base, value, scope), filter = {\n ...node,\n base: { type: \"This\" }\n }, arrayPaths = [];\n for (const keyPath of paths) {\n const innerValue = await valueAtPath(value, keyPath);\n if (Array.isArray(innerValue))\n for (let i = 0; i < innerValue.length; i++) {\n const item = innerValue[i], nestedScope = scope.createNested(fromJS([item]));\n (await (await evaluate(filter, nestedScope)).get()).length > 0 && arrayPaths.push([...keyPath, i]);\n }\n }\n return arrayPaths;\n }\n case \"SelectorFuncCall\":\n return anywhere(node.arg, scope.createHidden(value));\n case \"SelectorNested\": {\n const { base, nested: expr } = node, paths = await evaluateSelector(base, value, scope), nestedPaths = [];\n for (const keyPath of paths) {\n const innerValue = await valueAtPath(value, keyPath);\n switch (expr.type) {\n case \"AccessAttribute\":\n case \"ArrayCoerce\":\n case \"Filter\":\n const accessPaths = await evaluateSelector(expr, fromJS(innerValue), scope);\n for (let i = 0; i < accessPaths.length; i++)\n nestedPaths.push([...keyPath, ...accessPaths[i]]);\n break;\n case \"Group\":\n const innerResult = await evaluateSelector(expr.base, fromJS(innerValue), scope);\n for (const innerKeyPath of innerResult)\n nestedPaths.push([...keyPath, ...innerKeyPath]);\n break;\n case \"Tuple\":\n for (const inner of expr.members) {\n const innerResult2 = await evaluateSelector(inner, fromJS(innerValue), scope);\n for (const innerKeyPath of innerResult2)\n nestedPaths.push([...keyPath, ...innerKeyPath]);\n }\n }\n }\n return nestedPaths;\n }\n }\n}\nasync function anywhere(expr, scope, base = []) {\n const value = scope.value, pathList = [];\n if (value.isArray()) {\n const arr = await value.get();\n for (let i = 0; i < arr.length; i++) {\n const subPaths = await anywhere(expr, scope.createHidden(fromJS(arr[i])), [...base, i]);\n pathList.push(...subPaths);\n }\n } else if (value.type === \"object\") {\n const result = await evaluate(expr, scope);\n result.type === \"boolean\" && result.data === !0 && pathList.push(base);\n for (const key of Object.keys(value.data)) {\n const subPaths = await anywhere(expr, scope.createHidden(fromJS(value.data[key])), [\n ...base,\n key\n ]);\n pathList.push(...subPaths);\n }\n }\n return pathList;\n}\nasync function changedAny(before, after, selector, scope) {\n const beforeSelectorScope = scope.createHidden(before), beforePaths = await evaluateSelector(\n selector,\n beforeSelectorScope.value,\n beforeSelectorScope\n ), afterSelectorScope = scope.createHidden(after), afterPaths = await evaluateSelector(selector, afterSelectorScope.value, afterSelectorScope);\n if (beforePaths.length !== afterPaths.length)\n return TRUE_VALUE;\n for (const path of beforePaths) {\n for (let i = 0; i < path.length; i++)\n if (typeof path[i] == \"number\") {\n const slice = path.slice(0, i), beforeArr = await valueAtPath(before, slice), afterArr = await valueAtPath(after, slice);\n if (!Array.isArray(beforeArr) || !Array.isArray(afterArr) || beforeArr.length !== afterArr.length)\n return TRUE_VALUE;\n }\n const beforeValue = await valueAtPath(before, path), afterValue = await valueAtPath(after, path);\n if (!deepEqual(beforeValue, afterValue))\n return TRUE_VALUE;\n }\n return FALSE_VALUE;\n}\nasync function changedOnly(before, after, selector, scope) {\n const beforeSelectorScope = scope.createHidden(before), selectedPaths = await evaluateSelector(\n selector,\n beforeSelectorScope.value,\n beforeSelectorScope\n );\n for await (const diffPath of diffKeyPaths(before, after)) {\n let found = !1;\n for (const selectedPath of selectedPaths)\n if (startsWith(diffPath, selectedPath)) {\n found = !0;\n break;\n }\n if (!found)\n return FALSE_VALUE;\n }\n return TRUE_VALUE;\n}\nconst diff = {};\ndiff.changedAny = asyncOnlyExecutor(async (args, scope) => {\n const lhs = args[0], rhs = args[1], selector = args[2];\n if (!isSelectorNode(selector)) throw new Error(\"changedAny third argument must be a selector\");\n const before = await executeAsync(lhs, scope), after = await executeAsync(rhs, scope);\n return changedAny(before, after, selector, scope);\n});\ndiff.changedOnly = asyncOnlyExecutor(async (args, scope) => {\n const lhs = args[0], rhs = args[1], selector = args[2];\n if (!isSelectorNode(selector)) throw new Error(\"changedOnly third argument must be a selector\");\n const before = await executeAsync(lhs, scope), after = await executeAsync(rhs, scope);\n return changedOnly(before, after, selector, scope);\n});\nconst delta = {};\ndelta.operation = constantExecutor((_, scope) => {\n const hasBefore = scope.context.before !== null, hasAfter = scope.context.after !== null;\n return hasBefore && hasAfter ? fromString(\"update\") : hasAfter ? fromString(\"create\") : hasBefore ? fromString(\"delete\") : NULL_VALUE;\n});\ndelta.changedAny = asyncOnlyExecutor(async (args, scope) => {\n const before = scope.context.before || NULL_VALUE, after = scope.context.after || NULL_VALUE, selector = args[0];\n if (!isSelectorNode(selector)) throw new Error(\"changedAny first argument must be a selector\");\n return changedAny(before, after, selector, scope);\n});\ndelta.changedOnly = asyncOnlyExecutor(async (args, scope) => {\n const before = scope.context.before || NULL_VALUE, after = scope.context.after || NULL_VALUE, selector = args[0];\n if (!isSelectorNode(selector)) throw new Error(\"changedOnly first argument must be a selector\");\n return changedOnly(before, after, selector, scope);\n});\nconst documents = {};\ndocuments.get = constantExecutor(() => {\n throw new Error(\"not implemented\");\n});\ndocuments.incomingRefCount = constantExecutor(() => {\n throw new Error(\"not implemented\");\n});\ndocuments.incomingGlobalDocumentReferenceCount = constantExecutor(() => {\n throw new Error(\"not implemented\");\n});\nconst geo = {};\ngeo.latLng = constantExecutor(() => {\n throw new Error(\"not implemented\");\n});\ngeo.contains = constantExecutor(() => {\n throw new Error(\"not implemented\");\n});\ngeo.intersects = constantExecutor(() => {\n throw new Error(\"not implemented\");\n});\ngeo.distance = constantExecutor(() => {\n throw new Error(\"not implemented\");\n});\nconst string = {};\nstring.lower = mappedExecutor(\n (args) => args,\n (_, value) => value.type !== \"string\" ? NULL_VALUE : fromString(value.data.toLowerCase())\n);\nstring.upper = mappedExecutor(\n (args) => args,\n (_, value) => value.type !== \"string\" ? NULL_VALUE : fromString(value.data.toUpperCase())\n);\nstring.split = mappedExecutor(\n (args) => args,\n (_, str, sep) => str.type !== \"string\" ? NULL_VALUE : sep.type !== \"string\" ? NULL_VALUE : str.data.length === 0 ? fromArray([]) : sep.data.length === 0 ? fromArray(Array.from(str.data)) : fromArray(str.data.split(sep.data))\n);\nstring.startsWith = mappedExecutor(\n (args) => args,\n (_, str, prefix) => str.type !== \"string\" ? NULL_VALUE : prefix.type !== \"string\" ? NULL_VALUE : str.data.startsWith(prefix.data) ? TRUE_VALUE : FALSE_VALUE\n);\nconst _global = {};\n_global.anywhere = constantExecutor(() => {\n throw new Error(\"not implemented\");\n});\n_global.coalesce = {\n async executeAsync(args, scope) {\n for (const arg of args) {\n const value = await executeAsync(arg, scope);\n if (value.type !== \"null\")\n return value;\n }\n return NULL_VALUE;\n },\n executeSync(args, scope) {\n for (const arg of args) {\n const value = executeSync(arg, scope);\n if (value.type !== \"null\")\n return value;\n }\n return NULL_VALUE;\n }\n};\n_global.count = arrayReducerExecutor(\n (args) => ({ array: args[0] }),\n () => 0,\n (_, count) => count + 1,\n fromNumber\n);\n_global.dateTime = mappedExecutor(\n (args) => args,\n (_, val) => val.type === \"datetime\" ? val : val.type !== \"string\" ? NULL_VALUE : DateTime.parseToValue(val.data)\n);\n_global.defined = mappedExecutor(\n (args) => args,\n (_, inner) => inner.type === \"null\" ? FALSE_VALUE : TRUE_VALUE\n);\n_global.identity = constantExecutor((_args, scope) => fromString(scope.context.identity));\n_global.length = mappedExecutor(\n (args) => args,\n (_, inner) => inner.type === \"string\" ? fromNumber(countUTF8(inner.data)) : inner.type === \"array\" ? fromNumber(inner.data.length) : NULL_VALUE\n);\n_global.path = mappedExecutor(\n (args) => args,\n (_, inner) => inner.type !== \"string\" ? NULL_VALUE : fromPath(new Path(inner.data))\n);\n_global.string = mappedExecutor(\n (args) => args,\n (_, value) => {\n switch (value.type) {\n case \"number\":\n case \"string\":\n case \"boolean\":\n case \"datetime\":\n return fromString(`${value.data}`);\n default:\n return NULL_VALUE;\n }\n }\n);\n_global.references = mappedExecutor(\n (args) => [{ type: \"This\" }, ...args],\n (_, scopeValue, ...args) => {\n const pathSet = /* @__PURE__ */ new Set();\n for (const path of args)\n if (path.type === \"string\")\n pathSet.add(path.data);\n else if (path.type === \"array\")\n for (const elem of path.data)\n typeof elem == \"string\" && pathSet.add(elem);\n return pathSet.size === 0 ? FALSE_VALUE : hasReference(scopeValue, pathSet) ? TRUE_VALUE : FALSE_VALUE;\n }\n);\n_global.round = mappedExecutor(\n (args) => args,\n (_, value, precValue) => {\n if (value.type !== \"number\")\n return NULL_VALUE;\n const num = value.data;\n let prec = 0;\n if (precValue) {\n if (precValue.type !== \"number\" || precValue.data < 0 || !Number.isInteger(precValue.data))\n return NULL_VALUE;\n prec = precValue.data;\n }\n return prec === 0 ? num < 0 ? fromNumber(-Math.round(-num)) : fromNumber(Math.round(num)) : fromNumber(Number(num.toFixed(prec)));\n }\n);\n_global.now = constantExecutor((_args, scope) => fromString(scope.context.timestamp.toISOString()));\n_global.boost = constantExecutor(() => {\n throw new Error(\"unexpected boost call\");\n});\n_global.lower = string.lower;\n_global.upper = string.upper;\nfunction countUTF8(str) {\n let count = 0;\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n code >= 55296 && code <= 56319 || count++;\n }\n return count;\n}\nfunction hasReference(value, pathSet) {\n switch (getType(value)) {\n case \"array\":\n for (const v of value)\n if (hasReference(v, pathSet))\n return !0;\n break;\n case \"object\":\n if (value._ref)\n return pathSet.has(value._ref);\n for (const v of Object.values(value))\n if (hasReference(v, pathSet))\n return !0;\n break;\n }\n return !1;\n}\nconst math = {};\nmath.min = arrayReducerExecutor(\n (args) => ({ array: args[0] }),\n () => {\n },\n (_, n, item) => item === null ? n : typeof item != \"number\" ? STOP_ITERATOR : n === void 0 || item < n ? item : n,\n (n) => n === void 0 ? NULL_VALUE : fromNumber(n)\n);\nmath.max = arrayReducerExecutor(\n (args) => ({ array: args[0] }),\n () => {\n },\n (_, n, item) => item === null ? n : typeof item != \"number\" ? STOP_ITERATOR : n === void 0 || item > n ? item : n,\n (n) => n === void 0 ? NULL_VALUE : fromNumber(n)\n);\nmath.sum = arrayReducerExecutor(\n (args) => ({ array: args[0] }),\n () => 0,\n (_, n, item) => item === null ? n : typeof item != \"number\" ? STOP_ITERATOR : n + item,\n fromNumber\n);\nmath.avg = arrayReducerExecutor(\n (args) => ({ array: args[0] }),\n () => ({ count: 0, sum: 0 }),\n (_, { count, sum }, item) => item === null ? { count, sum } : typeof item != \"number\" ? STOP_ITERATOR : { count: count + 1, sum: sum + item },\n ({ count, sum }) => count === 0 ? NULL_VALUE : fromNumber(sum / count)\n);\nconst media = {};\nmedia.aspect = constantExecutor(() => {\n throw new Error(\"not implemented\");\n});\nfunction portableTextContent(value) {\n if (value.type === \"object\")\n return blockText(value.data);\n if (value.type === \"array\") {\n const texts = arrayText(value.data);\n if (texts.length > 0)\n return texts.join(`\n\n`);\n }\n return null;\n}\nfunction arrayText(value, result = []) {\n for (const block of value)\n if (Array.isArray(block))\n arrayText(block, result);\n else if (typeof block == \"object\" && block) {\n const text2 = blockText(block);\n text2 !== null && result.push(text2);\n }\n return result;\n}\nfunction blockText(obj) {\n if (typeof obj._type != \"string\") return null;\n const children = obj.children;\n if (!Array.isArray(children)) return null;\n let result = \"\";\n for (const child of children)\n child && typeof child == \"object\" && typeof child._type == \"string\" && child._type === \"span\" && typeof child.text == \"string\" && (result += child.text);\n return result;\n}\nconst pt = {};\npt.text = mappedExecutor(\n (args) => args,\n (_, value) => {\n const text2 = portableTextContent(value);\n return text2 === null ? NULL_VALUE : fromString(text2);\n }\n);\nconst releases = {};\nreleases.all = arrayExecutor(\n () => ({ array: { type: \"Everything\" } }),\n function* (_, value) {\n typeof value == \"object\" && value && \"_type\" in value && value._type === \"system.release\" && (yield value);\n }\n);\nconst sanity = {};\nsanity.projectId = constantExecutor((_, scope) => scope.context.sanity ? fromString(scope.context.sanity.projectId) : NULL_VALUE);\nsanity.dataset = constantExecutor((_, scope) => scope.context.sanity ? fromString(scope.context.sanity.dataset) : NULL_VALUE);\nsanity.versionOf = mappedExecutor(\n ([value]) => [value, { type: \"This\" }],\n (_, value, val) => {\n if (value.type !== \"string\") return NULL_VALUE;\n const baseId = value.data;\n if (val.type !== \"object\") return NULL_VALUE;\n if (typeof val.data._id != \"string\") return NULL_VALUE;\n if (val.data._id === baseId) return TRUE_VALUE;\n const components = val.data._id.split(\".\");\n return components.length >= 2 && components[0] === \"drafts\" && components.slice(1).join(\".\") === baseId ? TRUE_VALUE : components.length >= 3 && components[0] === \"versions\" && components.slice(2).join(\".\") === baseId ? TRUE_VALUE : FALSE_VALUE;\n }\n);\nsanity.partOfRelease = mappedExecutor(\n (args) => [args[0], { type: \"This\" }],\n (_, value, val) => {\n if (value.type !== \"string\") return NULL_VALUE;\n const baseId = value.data;\n if (val.type !== \"object\") return NULL_VALUE;\n if (typeof val.data._id != \"string\") return NULL_VALUE;\n const components = val.data._id.split(\".\");\n return components.length >= 3 && components[0] === \"versions\" && components[1] === baseId ? TRUE_VALUE : FALSE_VALUE;\n }\n);\nconst text = {};\ntext.query = constantExecutor(() => {\n throw new Error(\"not implemented\");\n});\ntext.semanticSimilarity = constantExecutor(() => {\n throw new Error(\"not implemented\");\n});\nconst user = {};\nuser.attributes = constantExecutor(() => {\n throw new Error(\"not implemented\");\n});\nconst TYPE_ORDER = {\n datetime: 1,\n number: 2,\n string: 3,\n boolean: 4\n};\nfunction partialCompare(a, b) {\n const aType = getType(a), bType = getType(b);\n if (aType !== bType)\n return null;\n switch (aType) {\n case \"number\":\n case \"boolean\":\n return a - b;\n case \"string\":\n return a < b ? -1 : a > b ? 1 : 0;\n case \"datetime\":\n return a.compareTo(b);\n default:\n return null;\n }\n}\nfunction totalCompare(a, b) {\n const aType = getType(a), bType = getType(b), aTypeOrder = TYPE_ORDER[aType] || 100, bTypeOrder = TYPE_ORDER[bType] || 100;\n if (aTypeOrder !== bTypeOrder)\n return aTypeOrder - bTypeOrder;\n let result = partialCompare(a, b);\n return result === null && (result = 0), result;\n}\nclass Scope {\n params;\n source;\n value;\n parent;\n context;\n isHidden = !1;\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n constructor(params, source, value, context, parent) {\n this.params = params, this.source = source, this.value = value, this.context = context, this.parent = parent;\n }\n createNested(value) {\n return this.isHidden ? new Scope(this.params, this.source, value, this.context, this.parent) : new Scope(this.params, this.source, value, this.context, this);\n }\n createHidden(value) {\n const result = this.createNested(value);\n return result.isHidden = !0, result;\n }\n}\nconst BM25k = 1.2;\nasync function evaluateScoreAsync(node, scope) {\n if (node.type === \"OpCall\" && node.op === \"match\")\n return evaluateMatchScoreAsync(node.left, node.right, scope);\n if (node.type === \"FuncCall\" && node.name === \"boost\") {\n const innerScore = await evaluateScoreAsync(node.args[0], scope), boost = await executeAsync(node.args[1], scope);\n return boost.type === \"number\" && innerScore > 0 ? innerScore + boost.data : 0;\n }\n switch (node.type) {\n case \"Or\": {\n const leftScore = await evaluateScoreAsync(node.left, scope), rightScore = await evaluateScoreAsync(node.right, scope);\n return leftScore + rightScore;\n }\n case \"And\": {\n const leftScore = await evaluateScoreAsync(node.left, scope), rightScore = await evaluateScoreAsync(node.right, scope);\n return leftScore === 0 || rightScore === 0 ? 0 : leftScore + rightScore;\n }\n default: {\n const res = await executeAsync(node, scope);\n return res.type === \"boolean\" && res.data === !0 ? 1 : 0;\n }\n }\n}\nfunction evaluateScoreSync(node, scope) {\n if (node.type === \"OpCall\" && node.op === \"match\")\n return evaluateMatchScoreSync(node.left, node.right, scope);\n if (node.type === \"FuncCall\" && node.name === \"boost\") {\n const innerScore = evaluateScoreSync(node.args[0], scope), boost = executeSync(node.args[1], scope);\n return boost.type === \"number\" && innerScore > 0 ? innerScore + boost.data : 0;\n }\n switch (node.type) {\n case \"Or\": {\n const leftScore = evaluateScoreSync(node.left, scope), rightScore = evaluateScoreSync(node.right, scope);\n return leftScore + rightScore;\n }\n case \"And\": {\n const leftScore = evaluateScoreSync(node.left, scope), rightScore = evaluateScoreSync(node.right, scope);\n return leftScore === 0 || rightScore === 0 ? 0 : leftScore + rightScore;\n }\n default: {\n const res = executeSync(node, scope);\n return res.type === \"boolean\" && res.data === !0 ? 1 : 0;\n }\n }\n}\nfunction evaluateMatchScoreSync(left, right, scope) {\n const text2 = executeSync(left, scope), pattern = executeSync(right, scope), result = processMatchScore(text2, pattern);\n if (typeof result == \"number\") return result;\n throw new Error(\"Found synchronous value in match()\");\n}\nasync function evaluateMatchScoreAsync(left, right, scope) {\n const text2 = await executeAsync(left, scope), pattern = await executeAsync(right, scope);\n return processMatchScore(text2, pattern);\n}\nfunction processMatchScore(text2, pattern) {\n const tokens = gatherText(text2, (part) => matchTokenize(part)), terms = gatherText(pattern, (part) => matchPatternRegex(part)), process = (tokens2, terms2) => {\n if (!terms2.success || tokens2.parts.length === 0 || terms2.parts.length === 0)\n return 0;\n let score = 0;\n for (const re of terms2.parts) {\n const freq = tokens2.parts.reduce((c, token) => c + (re.test(token) ? 1 : 0), 0);\n score += freq * (BM25k + 1) / (freq + BM25k);\n }\n return score;\n };\n return \"then\" in tokens || \"then\" in terms ? (async () => process(await tokens, await terms))() : process(tokens, terms);\n}\nfunction extractOrderArgs(args) {\n const mappers = [], directions = [];\n for (let mapper of args) {\n let direction = \"asc\";\n mapper.type === \"Desc\" ? (direction = \"desc\", mapper = mapper.base) : mapper.type === \"Asc\" && (mapper = mapper.base), mappers.push(mapper), directions.push(direction);\n }\n return { mappers, directions };\n}\nfunction sortArray(aux, directions) {\n return aux.sort((aTuple, bTuple) => {\n for (let i = 0; i < directions.length; i++) {\n let c = totalCompare(aTuple[i + 2], bTuple[i + 2]);\n if (directions[i] === \"desc\" && (c = -c), c !== 0)\n return c;\n }\n return aTuple[1] - bTuple[1];\n }), aux.map((v) => v[0]);\n}\nconst pipeFunctions = {};\npipeFunctions.order = {\n executeSync({ base, args }, scope) {\n const { mappers, directions } = extractOrderArgs(args), aux = [];\n let idx = 0;\n const n = directions.length;\n for (const value of base.data) {\n const newScope = scope.createNested(fromJS(value)), tuple = [value, idx];\n for (let i = 0; i < n; i++) {\n const result = executeSync(mappers[i], newScope);\n tuple.push(result.data);\n }\n aux.push(tuple), idx++;\n }\n return fromArray(sortArray(aux, directions));\n },\n async executeAsync({ base, args }, scope) {\n const { mappers, directions } = extractOrderArgs(args), aux = [];\n let idx = 0;\n const n = directions.length;\n for await (const value of base) {\n const newScope = scope.createNested(value), tuple = [await value.get(), idx];\n for (let i = 0; i < n; i++) {\n const result = await executeAsync(mappers[i], newScope);\n tuple.push(await result.get());\n }\n aux.push(tuple), idx++;\n }\n return fromArray(sortArray(aux, directions));\n }\n};\npipeFunctions.score = {\n async executeAsync({ base, args }, scope) {\n const unknown = [], scored = [];\n for await (const value of base) {\n if (value.type !== \"object\") {\n unknown.push(await value.get());\n continue;\n }\n const newScope = scope.createNested(value);\n let valueScore = typeof value.data._score == \"number\" ? value.data._score : 0;\n for (const arg of args)\n valueScore += await evaluateScoreAsync(arg, newScope);\n const newObject = Object.assign({}, value.data, { _score: valueScore });\n scored.push(newObject);\n }\n return scored.sort((a, b) => b._score - a._score), fromJS(scored);\n },\n executeSync({ base, args }, scope) {\n const scored = [];\n for (const value of base.data) {\n if (getType(value) !== \"object\")\n continue;\n const valueObj = value, newScope = scope.createNested(fromJS(value));\n let valueScore = typeof valueObj._score == \"number\" ? valueObj._score : 0;\n for (const arg of args)\n valueScore += evaluateScoreSync(arg, newScope);\n const newObject = Object.assign({}, valueObj, { _score: valueScore });\n scored.push(newObject);\n }\n return scored.sort((a, b) => b._score - a._score), fromArray(scored);\n }\n};\nconst namespaces = {\n global: _global,\n string,\n array,\n pt,\n delta,\n diff,\n media,\n sanity,\n math,\n dateTime,\n releases,\n text,\n geo,\n documents,\n user\n}, operators = {\n \"==\": function(left, right) {\n return isEqual(left, right) ? TRUE_VALUE : FALSE_VALUE;\n },\n \"!=\": function(left, right) {\n return isEqual(left, right) ? FALSE_VALUE : TRUE_VALUE;\n },\n \">\": function(left, right) {\n if (left.type === \"stream\" || right.type === \"stream\") return NULL_VALUE;\n const result = partialCompare(left.data, right.data);\n return result === null ? NULL_VALUE : result > 0 ? TRUE_VALUE : FALSE_VALUE;\n },\n \">=\": function(left, right) {\n if (left.type === \"stream\" || right.type === \"stream\") return NULL_VALUE;\n const result = partialCompare(left.data, right.data);\n return result === null ? NULL_VALUE : result >= 0 ? TRUE_VALUE : FALSE_VALUE;\n },\n \"<\": function(left, right) {\n if (left.type === \"stream\" || right.type === \"stream\") return NULL_VALUE;\n const result = partialCompare(left.data, right.data);\n return result === null ? NULL_VALUE : result < 0 ? TRUE_VALUE : FALSE_VALUE;\n },\n \"<=\": function(left, right) {\n if (left.type === \"stream\" || right.type === \"stream\") return NULL_VALUE;\n const result = partialCompare(left.data, right.data);\n return result === null ? NULL_VALUE : result <= 0 ? TRUE_VALUE : FALSE_VALUE;\n },\n // eslint-disable-next-line func-name-matching\n in: function(left, right) {\n if (right.type === \"path\")\n return left.type !== \"string\" ? NULL_VALUE : right.data.matches(left.data) ? TRUE_VALUE : FALSE_VALUE;\n if (right.type === \"array\") {\n for (const b of right.data)\n if (isEqual(left, fromJS(b)))\n return TRUE_VALUE;\n return FALSE_VALUE;\n }\n return right.type === \"stream\" ? (async () => {\n for await (const b of right)\n if (isEqual(left, b))\n return TRUE_VALUE;\n return FALSE_VALUE;\n })() : NULL_VALUE;\n },\n match: function(left, right) {\n const tokens = gatherText(left, (part) => matchTokenize(part)), patterns = gatherText(right, (part) => matchAnalyzePattern(part)), process = (tokens2, patterns2) => patterns2.success ? matchText(tokens2.parts, patterns2.parts) ? TRUE_VALUE : FALSE_VALUE : FALSE_VALUE;\n return \"then\" in tokens || \"then\" in patterns ? (async () => process(await tokens, await patterns))() : process(tokens, patterns);\n },\n \"+\": function(left, right) {\n return left.type === \"datetime\" && right.type === \"number\" ? fromDateTime(left.data.add(right.data)) : left.type === \"number\" && right.type === \"datetime\" ? fromDateTime(right.data.add(left.data)) : left.type === \"number\" && right.type === \"number\" ? fromNumber(left.data + right.data) : left.type === \"string\" && right.type === \"string\" ? fromString(left.data + right.data) : left.type === \"object\" && right.type === \"object\" ? fromJS({ ...left.data, ...right.data }) : left.type === \"array\" && right.type === \"array\" ? fromJS(left.data.concat(right.data)) : left.isArray() && right.isArray() ? new StreamValue(async function* () {\n for await (const val of left)\n yield val;\n for await (const val of right)\n yield val;\n }) : NULL_VALUE;\n },\n \"-\": function(left, right) {\n return left.type === \"datetime\" && right.type === \"number\" ? fromDateTime(left.data.add(-right.data)) : left.type === \"datetime\" && right.type === \"datetime\" ? fromNumber(left.data.difference(right.data)) : left.type === \"number\" && right.type === \"number\" ? fromNumber(left.data - right.data) : NULL_VALUE;\n },\n \"*\": numericOperator((a, b) => a * b),\n \"/\": numericOperator((a, b) => a / b),\n \"%\": numericOperator((a, b) => a % b),\n \"**\": numericOperator((a, b) => Math.pow(a, b))\n};\nfunction numericOperator(impl) {\n return function(left, right) {\n if (left.type === \"number\" && right.type === \"number\") {\n const result = impl(left.data, right.data);\n return fromNumber(result);\n }\n return NULL_VALUE;\n };\n}\nfunction evaluate(node, scope) {\n return executeAsync(node, scope);\n}\nfunction executeSync(node, scope) {\n return EXECUTORS[node.type].executeSync(node, scope);\n}\nfunction executeAsync(node, scope) {\n return EXECUTORS[node.type].executeAsync(node, scope);\n}\nfunction asyncOnlyExecutor(executeAsync2) {\n return {\n executeSync() {\n throw new Error(\"executeSync not supported\");\n },\n executeAsync: executeAsync2\n };\n}\nfunction constantExecutor(fn) {\n return {\n executeSync(node, scope) {\n const value = fn(node, scope);\n if (value.type === \"stream\") throw new Error(\"Stream encountered in evaluateSync\");\n return value;\n },\n async executeAsync(node, scope) {\n return fn(node, scope);\n }\n };\n}\nfunction mappedExecutor(map, reduce) {\n return {\n executeSync(node, scope) {\n const values = map(node).map((node2) => executeSync(node2, scope)), value = reduce(node, ...values);\n if (value.type === \"stream\")\n throw new Error(\"Stream/iterator not supported in synchronous mode\");\n return value;\n },\n async executeAsync(node, scope) {\n const nodes = map(node), values = await Promise.all(\n nodes.map((node2) => executeAsync(node2, scope).then((value) => value.asStatic()))\n );\n return reduce(node, ...values);\n }\n };\n}\nconst STOP_ITERATOR = /* @__PURE__ */ Symbol();\nfunction arrayReducerExecutor(map, init, reduce, wrap) {\n return {\n executeSync(node, scope) {\n const { array: arrayNode, args: argNodes = [] } = map(node), arr = executeSync(arrayNode, scope);\n if (arr.type !== \"array\") return NULL_VALUE;\n const args = argNodes.map((node2) => executeSync(node2, scope));\n let state = init(node, ...args);\n for (const item of arr.data) {\n const result = reduce(node, state, item, ...args);\n if (result === STOP_ITERATOR) return NULL_VALUE;\n state = result;\n }\n return wrap(state);\n },\n async executeAsync(node, scope) {\n const { array: arrayNode, args: argNodes = [] } = map(node), arr = await executeAsync(arrayNode, scope);\n if (arr.type !== \"array\" && arr.type !== \"stream\") return NULL_VALUE;\n const args = await Promise.all(\n argNodes.map((node2) => executeAsync(node2, scope).then((v) => v.asStatic()))\n );\n let state = init(node, ...args);\n if (arr.type === \"stream\")\n for await (const item of arr) {\n const result = reduce(node, state, await item.get(), ...args);\n if (result === STOP_ITERATOR) return NULL_VALUE;\n state = result;\n }\n else\n for (const item of arr.data) {\n const result = reduce(node, state, item, ...args);\n if (result === STOP_ITERATOR) return NULL_VALUE;\n state = result;\n }\n return wrap(state);\n }\n };\n}\nfunction arrayExecutor(map, reduce, { hidden = !1 } = {}) {\n return {\n executeSync(node, scope) {\n const mapping = map(node), arr = executeSync(mapping.array, scope);\n if (arr.type !== \"array\") return NULL_VALUE;\n const result = [];\n for (const item of arr.data) {\n let inner;\n if (mapping.inner) {\n const newScope = hidden ? scope.createHidden(fromJS(item)) : scope.createNested(fromJS(item));\n inner = executeSync(mapping.inner, newScope).data;\n }\n for (const entry of reduce(node, item, inner, mapping.state))\n result.push(entry);\n }\n return fromArray(result);\n },\n async executeAsync(node, scope) {\n const mapping = map(node), arr = await executeAsync(mapping.array, scope);\n return arr.isArray() ? new StreamValue(async function* () {\n for await (const item of arr) {\n let inner;\n if (mapping.inner) {\n const newScope = hidden ? scope.createHidden(item) : scope.createNested(item);\n inner = await (await executeAsync(mapping.inner, newScope)).get();\n }\n for (const entry of reduce(node, await item.get(), inner, mapping.state))\n yield fromJS(entry);\n }\n }) : NULL_VALUE;\n }\n };\n}\nconst EXECUTORS = {\n This: constantExecutor((_, scope) => scope.value),\n SelectorNested: constantExecutor(() => {\n throw new Error(\"Unexpected node type: SelectorNested\");\n }),\n SelectorFuncCall: constantExecutor(() => {\n throw new Error(\"Unexpected node type: SelectorFuncCall\");\n }),\n Everything: constantExecutor((_, scope) => scope.source),\n Parameter: constantExecutor(({ name }, scope) => fromJS(scope.params[name])),\n Context: constantExecutor(({ key }, scope) => {\n if (key === \"before\" || key === \"after\")\n return scope.context[key] || NULL_VALUE;\n throw new Error(`unknown context key: ${key}`);\n }),\n Parent: constantExecutor(({ n }, scope) => {\n let current = scope;\n for (let i = 0; i < n; i++) {\n if (!current.parent)\n return NULL_VALUE;\n current = current.parent;\n }\n return current.value;\n }),\n OpCall: {\n async executeAsync({ op, left, right }, scope) {\n const func = operators[op];\n if (!func)\n throw new Error(`Unknown operator: ${op}`);\n const leftValue = await executeAsync(left, scope), rightValue = await executeAsync(right, scope);\n return func(leftValue, rightValue);\n },\n executeSync({ op, left, right }, scope) {\n const func = operators[op];\n if (!func)\n throw new Error(`Unknown operator: ${op}`);\n const leftValue = executeSync(left, scope), rightValue = executeSync(right, scope), result = func(leftValue, rightValue);\n if (\"then\" in result || result.type === \"stream\")\n throw new Error(`Operator ${op} not possible in evaluteSync`);\n return result;\n }\n },\n Select: {\n executeSync({ alternatives, fallback }, scope) {\n for (const alt of alternatives) {\n const altCond = executeSync(alt.condition, scope);\n if (altCond.type === \"boolean\" && altCond.data === !0)\n return executeSync(alt.value, scope);\n }\n return fallback ? executeSync(fallback, scope) : NULL_VALUE;\n },\n async executeAsync({ alternatives, fallback }, scope) {\n for (const alt of alternatives) {\n const altCond = await executeAsync(alt.condition, scope);\n if (altCond.type === \"boolean\" && altCond.data === !0)\n return executeAsync(alt.value, scope);\n }\n return fallback ? executeAsync(fallback, scope) : NULL_VALUE;\n }\n },\n InRange: mappedExecutor(\n ({ base, left, right }) => [base, left, right],\n ({ isInclusive }, value, leftValue, rightValue) => {\n const leftCmp = partialCompare(value.data, leftValue.data);\n if (leftCmp === null)\n return NULL_VALUE;\n const rightCmp = partialCompare(value.data, rightValue.data);\n return rightCmp === null ? NULL_VALUE : isInclusive ? leftCmp >= 0 && rightCmp <= 0 ? TRUE_VALUE : FALSE_VALUE : leftCmp >= 0 && rightCmp < 0 ? TRUE_VALUE : FALSE_VALUE;\n }\n ),\n Filter: arrayExecutor(\n ({ base, expr }) => ({ array: base, inner: expr }),\n function* (_, elem, inner) {\n inner === !0 && (yield elem);\n }\n ),\n Projection: {\n executeSync({ base, expr }, scope) {\n const baseValue = executeSync(base, scope);\n if (baseValue.type !== \"object\")\n return NULL_VALUE;\n const newScope = scope.createNested(baseValue);\n return executeSync(expr, newScope);\n },\n async executeAsync({ base, expr }, scope) {\n const baseValue = await executeAsync(base, scope);\n if (baseValue.type !== \"object\")\n return NULL_VALUE;\n const newScope = scope.createNested(baseValue);\n return executeAsync(expr, newScope);\n }\n },\n FuncCall: {\n executeAsync({ namespace, name, args }, scope) {\n const func = namespaces[namespace]?.[name];\n if (!func) throw new Error(`Unknown function: ${namespace}::${name}`);\n return func.executeAsync(args, scope);\n },\n executeSync({ namespace, name, args }, scope) {\n const func = namespaces[namespace]?.[name];\n if (!func) throw new Error(`Unknown function: ${namespace}::${name}`);\n return func.executeSync(args, scope);\n }\n },\n PipeFuncCall: {\n async executeAsync({ name, base, args }, scope) {\n const func = pipeFunctions[name];\n if (!func) throw new Error(`Unknown pipe function: ${name}`);\n const baseValue = await executeAsync(base, scope);\n return baseValue.type !== \"stream\" && baseValue.type !== \"array\" ? NULL_VALUE : func.executeAsync({ base: baseValue, args }, scope);\n },\n executeSync({ name, base, args }, scope) {\n const func = pipeFunctions[name];\n if (!func) throw new Error(`Unknown pipe function: ${name}`);\n const baseValue = executeSync(base, scope);\n return baseValue.type !== \"array\" ? NULL_VALUE : func.executeSync({ base: baseValue, args }, scope);\n }\n },\n AccessAttribute: mappedExecutor(\n ({ base }) => [base || { type: \"This\" }],\n ({ name }, value) => value.type === \"object\" && value.data.hasOwnProperty(name) ? fromJS(value.data[name]) : NULL_VALUE\n ),\n AccessElement: mappedExecutor(\n ({ base }) => [base],\n ({ index }, baseValue) => {\n if (baseValue.type !== \"array\") return NULL_VALUE;\n const data = baseValue.data, finalIndex = index < 0 ? index + data.length : index;\n return fromJS(data[finalIndex]);\n }\n ),\n Slice: mappedExecutor(\n ({ base }) => [base],\n ({ left, right, isInclusive }, baseValue) => {\n if (baseValue.type !== \"array\")\n return NULL_VALUE;\n const array2 = baseValue.data;\n let leftIdx = left, rightIdx = right;\n return leftIdx < 0 && (leftIdx = array2.length + leftIdx), rightIdx < 0 && (rightIdx = array2.length + rightIdx), isInclusive && rightIdx++, leftIdx < 0 && (leftIdx = 0), rightIdx < 0 && (rightIdx = 0), fromArray(array2.slice(leftIdx, rightIdx));\n }\n ),\n Deref: {\n executeSync({ base }, scope) {\n const value = executeSync(base, scope);\n if (value.type !== \"object\")\n return NULL_VALUE;\n const id = value.data._ref;\n if (typeof id != \"string\")\n return NULL_VALUE;\n if (scope.context.dereference) {\n const value2 = scope.context.dereference({ _ref: id });\n if (value2 && typeof value2 == \"object\" && \"then\" in value2)\n throw new Error(\"Dereference returned promise in synchronous mode\");\n return fromJS(value2);\n }\n if (scope.source.type !== \"array\")\n return NULL_VALUE;\n for (const doc of scope.source.data)\n if (doc && typeof doc == \"object\" && \"_id\" in doc && id === doc._id)\n return fromJS(doc);\n return NULL_VALUE;\n },\n async executeAsync({ base }, scope) {\n const value = await executeAsync(base, scope);\n if (!scope.source.isArray())\n return NULL_VALUE;\n if (value.type !== \"object\")\n return NULL_VALUE;\n const id = value.data._ref;\n if (typeof id != \"string\")\n return NULL_VALUE;\n if (scope.context.dereference)\n return fromJS(await scope.context.dereference({ _ref: id }));\n for await (const doc of scope.source)\n if (doc.type === \"object\" && id === doc.data._id)\n return doc;\n return NULL_VALUE;\n }\n },\n Value: constantExecutor(({ value }) => fromJS(value)),\n Group: {\n executeSync({ base }, scope) {\n return executeSync(base, scope);\n },\n executeAsync({ base }, scope) {\n return executeAsync(base, scope);\n }\n },\n Object: {\n executeSync({ attributes }, scope) {\n const result = {};\n for (const attr of attributes) {\n const attrType = attr.type;\n switch (attr.type) {\n case \"ObjectAttributeValue\": {\n const value = executeSync(attr.value, scope);\n result[attr.name] = value.data;\n break;\n }\n case \"ObjectConditionalSplat\": {\n const cond = executeSync(attr.condition, scope);\n if (cond.type !== \"boolean\" || cond.data === !1)\n continue;\n const value = executeSync(attr.value, scope);\n value.type === \"object\" && Object.assign(result, value.data);\n break;\n }\n case \"ObjectSplat\": {\n const value = executeSync(attr.value, scope);\n value.type === \"object\" && Object.assign(result, value.data);\n break;\n }\n default:\n throw new Error(`Unknown node type: ${attrType}`);\n }\n }\n return fromJS(result);\n },\n async executeAsync({ attributes }, scope) {\n const result = {};\n for (const attr of attributes) {\n const attrType = attr.type;\n switch (attr.type) {\n case \"ObjectAttributeValue\": {\n const value = await executeAsync(attr.value, scope);\n result[attr.name] = await value.get();\n break;\n }\n case \"ObjectConditionalSplat\": {\n const cond = await executeAsync(attr.condition, scope);\n if (cond.type !== \"boolean\" || cond.data === !1)\n continue;\n const value = await executeAsync(attr.value, scope);\n value.type === \"object\" && Object.assign(result, value.data);\n break;\n }\n case \"ObjectSplat\": {\n const value = await executeAsync(attr.value, scope);\n value.type === \"object\" && Object.assign(result, value.data);\n break;\n }\n default:\n throw new Error(`Unknown node type: ${attrType}`);\n }\n }\n return fromJS(result);\n }\n },\n Array: {\n executeSync({ elements }, scope) {\n const result = [];\n for (const element of elements) {\n const value = executeSync(element.value, scope);\n if (element.isSplat) {\n if (value.type === \"array\")\n for (const v of value.data)\n result.push(v);\n } else\n result.push(value.data);\n }\n return fromArray(result);\n },\n async executeAsync({ elements }, scope) {\n return new StreamValue(async function* () {\n for (const element of elements) {\n const value = await executeAsync(element.value, scope);\n if (element.isSplat) {\n if (value.isArray())\n for await (const v of value)\n yield v;\n } else\n yield value;\n }\n });\n }\n },\n Tuple: constantExecutor(() => {\n throw new Error(\"tuples can not be evaluated\");\n }),\n Or: mappedExecutor(\n ({ left, right }) => [left, right],\n (_, leftValue, rightValue) => leftValue.type === \"boolean\" && leftValue.data === !0 ? TRUE_VALUE : rightValue.type === \"boolean\" && rightValue.data === !0 ? TRUE_VALUE : leftValue.type !== \"boolean\" || rightValue.type !== \"boolean\" ? NULL_VALUE : FALSE_VALUE\n ),\n And: mappedExecutor(\n ({ left, right }) => [left, right],\n (_, leftValue, rightValue) => leftValue.type === \"boolean\" && leftValue.data === !1 ? FALSE_VALUE : rightValue.type === \"boolean\" && rightValue.data === !1 ? FALSE_VALUE : leftValue.type !== \"boolean\" || rightValue.type !== \"boolean\" ? NULL_VALUE : TRUE_VALUE\n ),\n Not: mappedExecutor(\n ({ base }) => [base],\n (_, value) => value.type !== \"boolean\" ? NULL_VALUE : value.data ? FALSE_VALUE : TRUE_VALUE\n ),\n Neg: mappedExecutor(\n ({ base }) => [base],\n (_, value) => value.type !== \"number\" ? NULL_VALUE : fromNumber(-value.data)\n ),\n Pos: mappedExecutor(\n ({ base }) => [base],\n (_, value) => value.type !== \"number\" ? NULL_VALUE : fromNumber(value.data)\n ),\n Asc: constantExecutor(() => NULL_VALUE),\n Desc: constantExecutor(() => NULL_VALUE),\n ArrayCoerce: {\n executeSync({ base }, scope) {\n const value = executeSync(base, scope);\n return value.isArray() ? value : NULL_VALUE;\n },\n async executeAsync({ base }, scope) {\n const value = await executeAsync(base, scope);\n return value.isArray() ? value : NULL_VALUE;\n }\n },\n Map: arrayExecutor(\n ({ base, expr }) => ({ array: base, inner: expr }),\n function* (_, _item, inner) {\n yield inner;\n },\n { hidden: !0 }\n ),\n FlatMap: arrayExecutor(\n ({ base, expr }) => ({ array: base, inner: expr }),\n function* (_, _item, inner) {\n if (Array.isArray(inner))\n for (const innerInner of inner)\n yield innerInner;\n else\n yield inner;\n },\n { hidden: !0 }\n )\n};\nfunction evaluateQuery(tree, options = {}) {\n return executeAsync(tree, scopeFromOptions(options));\n}\nfunction evaluateQuerySync(tree, options = {}) {\n return executeSync(tree, scopeFromOptions(options));\n}\nfunction scopeFromOptions(options) {\n const root = fromJS(options.root), dataset = fromJS(options.dataset), params = { ...options.params };\n return new Scope(\n params,\n dataset,\n root,\n {\n timestamp: options.timestamp || /* @__PURE__ */ new Date(),\n identity: options.identity === void 0 ? \"me\" : options.identity,\n sanity: options.sanity,\n after: options.after ? fromJS(options.after) : null,\n before: options.before ? fromJS(options.before) : null,\n dereference: options.dereference\n },\n null\n );\n}\nexport {\n evaluateQuery,\n evaluateQuerySync\n};\n//# sourceMappingURL=evaluator.mjs.map\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","/* eslint-env browser */\n'use strict';\n\nfunction getChromeVersion() {\n\tconst matches = /(Chrome|Chromium)\\/(?<chromeVersion>\\d+)\\./.exec(navigator.userAgent);\n\n\tif (!matches) {\n\t\treturn;\n\t}\n\n\treturn Number.parseInt(matches.groups.chromeVersion, 10);\n}\n\nconst colorSupport = getChromeVersion() >= 69 ? {\n\tlevel: 1,\n\thasBasic: true,\n\thas256: false,\n\thas16m: false\n} : false;\n\nmodule.exports = {\n\tstdout: colorSupport,\n\tstderr: colorSupport\n};\n","/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = ` ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n","/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n","import { evaluateQuery, evaluateQuerySync } from \"./_chunks-es/evaluator.mjs\";\nimport { pipeFunctionRegistry, namespaceRegistry, tryConstantEvaluate, isSelectorNested, matchTokenize, matchAnalyzePattern, matchText } from \"./_chunks-es/shared.mjs\";\nimport { DateTime, Path, isSelectorNode, toJS } from \"./_chunks-es/shared.mjs\";\nimport { unparse } from \"./experimental.mjs\";\nimport debug from \"debug\";\nclass MarkProcessor {\n _string;\n marks;\n index;\n customFunctions;\n parseOptions;\n allowBoost = !1;\n constructor(string, marks, customFunctions, parseOptions) {\n this._string = string, this.marks = marks, this.customFunctions = customFunctions, this.index = 0, this.parseOptions = parseOptions;\n }\n hasMark(pos = 0) {\n return this.index + pos < this.marks.length;\n }\n getMark(pos = 0) {\n return this.marks[this.index + pos];\n }\n shift() {\n this.index += 1;\n }\n process(visitor) {\n const mark = this.marks[this.index];\n this.shift();\n const func = visitor[mark.name];\n if (!func)\n throw new Error(`Unknown handler: ${mark.name}`);\n return func.call(visitor, this, mark);\n }\n processString() {\n return this.shift(), this.processStringEnd();\n }\n processStringEnd() {\n const prev = this.marks[this.index - 1], curr = this.marks[this.index];\n return this.shift(), this.string.slice(prev.position, curr.position);\n }\n slice(len) {\n const pos = this.marks[this.index].position;\n return this.string.slice(pos, pos + len);\n }\n get string() {\n return this._string;\n }\n}\nconst WS = /^([\\t\\n\\v\\f\\r \\u0085\\u00A0]|(\\/\\/[^\\n]*\\n))+/, NUM = /^\\d+/, IDENT = /^[a-zA-Z_][a-zA-Z_0-9]*/;\nfunction parse$1(str) {\n let pos = 0;\n pos = skipWS(str, pos);\n let customFunctions = {};\n for (; pos < str.length && str.substring(pos, pos + 2) === \"fn\"; ) {\n let funcResult = parseFunctionDeclaration(str, pos);\n if (funcResult.type === \"error\") return funcResult;\n customFunctions[`${funcResult.namespace}::${funcResult.name}`] = funcResult, pos = skipWS(str, funcResult.position);\n }\n let result = parseExpr(str, pos, 0);\n return result.type === \"error\" ? result : (pos = skipWS(str, result.position), pos !== str.length ? (result.failPosition && (pos = result.failPosition - 1), { type: \"error\", message: \"Unexpected end of query\", position: pos }) : (delete result.position, delete result.failPosition, result.customFunctions = customFunctions, result));\n}\nfunction parseExpr(str, pos, level) {\n let startPos = pos, token = str[pos], marks;\n switch (token) {\n case \"+\": {\n let rhs = parseExpr(str, skipWS(str, pos + 1), 10);\n if (rhs.type === \"error\") return rhs;\n marks = [{ name: \"pos\", position: startPos }].concat(rhs.marks), pos = rhs.position;\n break;\n }\n case \"-\": {\n let rhs = parseExpr(str, skipWS(str, pos + 1), 8);\n if (rhs.type === \"error\") return rhs;\n marks = [{ name: \"neg\", position: startPos }].concat(rhs.marks), pos = rhs.position;\n break;\n }\n case \"(\": {\n let result = parseGroupOrTuple(str, pos);\n if (result.type === \"error\") return result;\n pos = result.position, marks = result.marks;\n break;\n }\n case \"!\": {\n let rhs = parseExpr(str, skipWS(str, pos + 1), 10);\n if (rhs.type === \"error\") return rhs;\n marks = [{ name: \"not\", position: startPos }].concat(rhs.marks), pos = rhs.position;\n break;\n }\n case \"{\": {\n let result = parseObject(str, pos);\n if (result.type === \"error\") return result;\n marks = result.marks, pos = result.position;\n break;\n }\n case \"[\":\n if (marks = [{ name: \"array\", position: pos }], pos = skipWS(str, pos + 1), str[pos] !== \"]\")\n for (; ; ) {\n str.slice(pos, pos + 3) === \"...\" && (marks.push({ name: \"array_splat\", position: pos }), pos = skipWS(str, pos + 3));\n let res = parseExpr(str, pos, 0);\n if (res.type === \"error\") return res;\n if (marks = marks.concat(res.marks), pos = res.position, pos = skipWS(str, pos), str[pos] !== \",\" || (pos = skipWS(str, pos + 1), str[pos] === \"]\")) break;\n }\n if (str[pos] === \"]\")\n pos++, marks.push({ name: \"array_end\", position: pos });\n else\n return { type: \"error\", message: 'Expected \"]\" after array expression', position: pos };\n break;\n case \"'\":\n case '\"': {\n let result = parseString(str, pos);\n if (result.type === \"error\") return result;\n marks = result.marks, pos = result.position;\n break;\n }\n case \"^\": {\n for (pos++, marks = []; str[pos] === \".\" && str[pos + 1] === \"^\"; )\n marks.push({ name: \"dblparent\", position: startPos }), pos += 2;\n marks.push({ name: \"parent\", position: startPos });\n break;\n }\n case \"@\":\n marks = [{ name: \"this\", position: startPos }], pos++;\n break;\n case \"*\":\n marks = [{ name: \"everything\", position: startPos }], pos++;\n break;\n case \"$\": {\n let identLen = parseRegex(str, pos + 1, IDENT);\n identLen && (pos += 1 + identLen, marks = [\n { name: \"param\", position: startPos },\n { name: \"ident\", position: startPos + 1 },\n { name: \"ident_end\", position: pos }\n ]);\n break;\n }\n default: {\n let numLen = parseRegex(str, pos, NUM);\n if (numLen) {\n pos += numLen;\n let name = \"integer\";\n if (str[pos] === \".\") {\n let fracLen = parseRegex(str, pos + 1, NUM);\n fracLen && (name = \"float\", pos += 1 + fracLen);\n }\n if (str[pos] === \"e\" || str[pos] === \"E\") {\n name = \"sci\", pos++, (str[pos] === \"+\" || str[pos] === \"-\") && pos++;\n let expLen = parseRegex(str, pos, NUM);\n if (!expLen) return { type: \"error\", message: \"Exponent must be a number\", position: pos };\n pos += expLen;\n }\n marks = [\n { name, position: startPos },\n { name: name + \"_end\", position: pos }\n ];\n break;\n }\n let identLen = parseRegex(str, pos, IDENT);\n if (identLen) {\n switch (pos += identLen, str[pos]) {\n case \":\":\n case \"(\": {\n let result = parseFuncCall(str, startPos, pos);\n if (result.type === \"error\") return result;\n marks = result.marks, pos = result.position;\n break;\n }\n default:\n marks = [\n { name: \"this_attr\", position: startPos },\n { name: \"ident\", position: startPos },\n { name: \"ident_end\", position: pos }\n ];\n }\n break;\n }\n }\n }\n if (!marks)\n return { type: \"error\", message: \"Expected expression\", position: pos };\n let lhsLevel = 12, trav;\n loop: for (; ; ) {\n let innerPos = skipWS(str, pos);\n if (innerPos === str.length) {\n pos = innerPos;\n break;\n }\n if (trav = parseTraversal(str, innerPos), trav.type === \"success\") {\n for (marks.unshift({ name: \"traverse\", position: startPos }); trav.type === \"success\"; )\n marks = marks.concat(trav.marks), pos = trav.position, trav = parseTraversal(str, skipWS(str, pos));\n marks.push({ name: \"traversal_end\", position: pos });\n continue;\n }\n switch (str[innerPos]) {\n case \"=\": {\n switch (str[innerPos + 1]) {\n case \">\": {\n if (level > 1 || lhsLevel <= 1) break loop;\n let rhs = parseExpr(str, skipWS(str, innerPos + 2), 1);\n if (rhs.type === \"error\") return rhs;\n marks = marks.concat(rhs.marks), marks.unshift({ name: \"pair\", position: startPos }), pos = rhs.position, lhsLevel = 1;\n break;\n }\n case \"=\": {\n if (level > 4 || lhsLevel <= 4) break loop;\n let rhs = parseExpr(str, skipWS(str, innerPos + 2), 5);\n if (rhs.type === \"error\") return rhs;\n marks.unshift({ name: \"comp\", position: startPos }), marks.push({ name: \"op\", position: innerPos }, { name: \"op_end\", position: innerPos + 2 }), marks = marks.concat(rhs.marks), pos = rhs.position, lhsLevel = 4;\n break;\n }\n default:\n break loop;\n }\n break;\n }\n case \"+\": {\n if (level > 6 || lhsLevel < 6) break loop;\n let rhs = parseExpr(str, skipWS(str, innerPos + 1), 7);\n if (rhs.type === \"error\") return rhs;\n marks = marks.concat(rhs.marks), marks.unshift({ name: \"add\", position: startPos }), pos = rhs.position, lhsLevel = 6;\n break;\n }\n case \"-\": {\n if (level > 6 || lhsLevel < 6) break loop;\n let rhs = parseExpr(str, skipWS(str, innerPos + 1), 7);\n if (rhs.type === \"error\") return rhs;\n marks = marks.concat(rhs.marks), marks.unshift({ name: \"sub\", position: startPos }), pos = rhs.position, lhsLevel = 6;\n break;\n }\n case \"*\": {\n if (str[innerPos + 1] === \"*\") {\n if (level > 8 || lhsLevel <= 8) break loop;\n let rhs2 = parseExpr(str, skipWS(str, innerPos + 2), 8);\n if (rhs2.type === \"error\") return rhs2;\n marks = marks.concat(rhs2.marks), marks.unshift({ name: \"pow\", position: startPos }), pos = rhs2.position, lhsLevel = 8;\n break;\n }\n if (level > 7 || lhsLevel < 7) break loop;\n let rhs = parseExpr(str, skipWS(str, innerPos + 1), 8);\n if (rhs.type === \"error\") return rhs;\n marks = marks.concat(rhs.marks), marks.unshift({ name: \"mul\", position: startPos }), pos = rhs.position, lhsLevel = 7;\n break;\n }\n case \"/\": {\n if (level > 7 || lhsLevel < 7) break loop;\n let rhs = parseExpr(str, skipWS(str, innerPos + 1), 8);\n if (rhs.type === \"error\") return rhs;\n marks = marks.concat(rhs.marks), marks.unshift({ name: \"div\", position: startPos }), pos = rhs.position, lhsLevel = 7;\n break;\n }\n case \"%\": {\n if (level > 7 || lhsLevel < 7) break loop;\n let rhs = parseExpr(str, skipWS(str, innerPos + 1), 8);\n if (rhs.type === \"error\") return rhs;\n marks = marks.concat(rhs.marks), marks.unshift({ name: \"mod\", position: startPos }), pos = rhs.position, lhsLevel = 7;\n break;\n }\n case \"<\":\n case \">\": {\n if (level > 4 || lhsLevel <= 4) break loop;\n let nextPos = innerPos + 1;\n str[nextPos] === \"=\" && nextPos++;\n let rhs = parseExpr(str, skipWS(str, nextPos), 5);\n if (rhs.type === \"error\") return rhs;\n marks.unshift({ name: \"comp\", position: startPos }), marks.push({ name: \"op\", position: innerPos }, { name: \"op_end\", position: nextPos }), marks = marks.concat(rhs.marks), pos = rhs.position, lhsLevel = 4;\n break;\n }\n case \"|\": {\n if (str[innerPos + 1] === \"|\") {\n if (level > 2 || lhsLevel < 2) break loop;\n let rhs = parseExpr(str, skipWS(str, innerPos + 2), 3);\n if (rhs.type === \"error\") return rhs;\n marks = marks.concat(rhs.marks), marks.unshift({ name: \"or\", position: startPos }), pos = rhs.position, lhsLevel = 2;\n } else {\n if (level > 11 || lhsLevel < 11) break loop;\n let identPos = skipWS(str, innerPos + 1), identLen = parseRegex(str, identPos, IDENT);\n if (!identLen) return { type: \"error\", message: \"Expected identifier\", position: identPos };\n if (pos = identPos + identLen, str[pos] === \"(\" || str[pos] === \":\") {\n let result = parseFuncCall(str, identPos, pos);\n if (result.type === \"error\") return result;\n marks = marks.concat(result.marks), marks.unshift({ name: \"pipecall\", position: startPos }), pos = result.position, lhsLevel = 11;\n }\n }\n break;\n }\n case \"&\": {\n if (str[innerPos + 1] != \"&\" || level > 3 || lhsLevel < 3) break loop;\n let rhs = parseExpr(str, skipWS(str, innerPos + 2), 4);\n if (rhs.type === \"error\") return rhs;\n marks = marks.concat(rhs.marks), marks.unshift({ name: \"and\", position: startPos }), pos = rhs.position, lhsLevel = 3;\n break;\n }\n case \"!\": {\n if (str[innerPos + 1] !== \"=\" || level > 4 || lhsLevel <= 4) break loop;\n let rhs = parseExpr(str, skipWS(str, innerPos + 2), 5);\n if (rhs.type === \"error\") return rhs;\n marks.unshift({ name: \"comp\", position: startPos }), marks.push({ name: \"op\", position: innerPos }, { name: \"op_end\", position: innerPos + 2 }), marks = marks.concat(rhs.marks), pos = rhs.position, lhsLevel = 4;\n break;\n }\n case \"d\": {\n if (str.slice(innerPos, innerPos + 4) !== \"desc\" || level > 4 || lhsLevel < 4) break loop;\n marks.unshift({ name: \"desc\", position: startPos }), pos = innerPos + 4, lhsLevel = 4;\n break;\n }\n case \"a\": {\n if (str.slice(innerPos, innerPos + 3) !== \"asc\" || level > 4 || lhsLevel < 4) break loop;\n marks.unshift({ name: \"asc\", position: startPos }), pos = innerPos + 3, lhsLevel = 4;\n break;\n }\n default:\n switch (parseRegexStr(str, innerPos, IDENT)) {\n case \"in\": {\n if (level > 4 || lhsLevel <= 4) break loop;\n pos = skipWS(str, innerPos + 2);\n let isGroup = !1;\n str[pos] === \"(\" && (isGroup = !0, pos = skipWS(str, pos + 1));\n let rangePos = pos, result = parseExpr(str, pos, 5);\n if (result.type === \"error\") return result;\n if (pos = skipWS(str, result.position), str[pos] === \".\" && str[pos + 1] === \".\") {\n let type = \"inc_range\";\n str[pos + 2] === \".\" ? (type = \"exc_range\", pos = skipWS(str, pos + 3)) : pos = skipWS(str, pos + 2);\n let rhs = parseExpr(str, pos, 5);\n if (rhs.type === \"error\") return rhs;\n marks.unshift({ name: \"in_range\", position: startPos }), marks = marks.concat({ name: type, position: rangePos }, result.marks, rhs.marks), pos = rhs.position;\n } else\n marks.unshift({ name: \"comp\", position: startPos }), marks.push({ name: \"op\", position: innerPos }, { name: \"op_end\", position: innerPos + 2 }), marks = marks.concat(result.marks);\n if (isGroup) {\n if (pos = skipWS(str, pos), str[pos] !== \")\")\n return { type: \"error\", message: 'Expected \")\" in group', position: pos };\n pos++;\n }\n lhsLevel = 4;\n break;\n }\n case \"match\": {\n if (level > 4 || lhsLevel <= 4) break loop;\n let rhs = parseExpr(str, skipWS(str, innerPos + 5), 5);\n if (rhs.type === \"error\") return rhs;\n marks.unshift({ name: \"comp\", position: startPos }), marks.push({ name: \"op\", position: innerPos }, { name: \"op_end\", position: innerPos + 5 }), marks = marks.concat(rhs.marks), pos = rhs.position, lhsLevel = 4;\n break;\n }\n default:\n break loop;\n }\n }\n }\n let failPosition = trav?.type === \"error\" && trav.position;\n return { type: \"success\", marks, position: pos, failPosition };\n}\nfunction parseGroupOrTuple(str, pos) {\n const startPos = pos;\n let marks, rhs = parseExpr(str, skipWS(str, pos + 1), 0);\n if (rhs.type === \"error\") return rhs;\n switch (pos = skipWS(str, rhs.position), str[pos]) {\n case \",\": {\n for (marks = [{ name: \"tuple\", position: startPos }].concat(rhs.marks), pos = skipWS(str, pos + 1); ; ) {\n if (rhs = parseExpr(str, pos, 0), rhs.type === \"error\") return rhs;\n if (marks.push(...rhs.marks), pos = skipWS(str, rhs.position), str[pos] !== \",\") break;\n pos = skipWS(str, pos + 1);\n }\n if (str[pos] !== \")\")\n return { type: \"error\", message: 'Expected \")\" after tuple expression', position: pos };\n pos++, marks.push({ name: \"tuple_end\", position: pos });\n break;\n }\n case \")\": {\n pos++, marks = [{ name: \"group\", position: startPos }].concat(rhs.marks);\n break;\n }\n default:\n return { type: \"error\", message: `Unexpected character \"${str[pos]}\"`, position: pos };\n }\n return { type: \"success\", marks, position: pos };\n}\nfunction parseTraversal(str, pos) {\n let startPos = pos;\n switch (str[pos]) {\n case \".\": {\n if (pos = skipWS(str, pos + 1), str[pos] === \"(\")\n return parseGroupOrTuple(str, pos);\n let identStart = pos, identLen2 = parseRegex(str, pos, IDENT);\n return identLen2 ? (pos += identLen2, {\n type: \"success\",\n marks: [\n { name: \"attr_access\", position: startPos },\n { name: \"ident\", position: identStart },\n { name: \"ident_end\", position: pos }\n ],\n position: pos\n }) : { type: \"error\", message: 'Expected identifier after \".\"', position: pos };\n }\n case \"-\":\n if (str[pos + 1] !== \">\")\n return { type: \"error\", message: 'Expected \">\" in reference', position: pos };\n let marks = [{ name: \"deref\", position: startPos }];\n pos += 2;\n let identPos = skipWS(str, pos), identLen = parseRegex(str, identPos, IDENT);\n return identLen && (pos = identPos + identLen, marks.push(\n { name: \"deref_attr\", position: identPos },\n { name: \"ident\", position: identPos },\n { name: \"ident_end\", position: pos }\n )), {\n type: \"success\",\n marks,\n position: pos\n };\n case \"[\": {\n if (pos = skipWS(str, pos + 1), str[pos] === \"]\")\n return {\n type: \"success\",\n marks: [{ name: \"array_postfix\", position: startPos }],\n position: pos + 1\n };\n let rangePos = pos, result = parseExpr(str, pos, 0);\n if (result.type === \"error\") return result;\n if (pos = skipWS(str, result.position), str[pos] === \".\" && str[pos + 1] === \".\") {\n let type = \"inc_range\";\n str[pos + 2] === \".\" ? (type = \"exc_range\", pos += 3) : pos += 2, pos = skipWS(str, pos);\n let rhs = parseExpr(str, pos, 0);\n return rhs.type === \"error\" ? rhs : (pos = skipWS(str, rhs.position), str[pos] !== \"]\" ? { type: \"error\", message: 'Expected \"]\" after array expression', position: pos } : {\n type: \"success\",\n marks: [\n { name: \"slice\", position: startPos },\n { name: type, position: rangePos }\n ].concat(result.marks, rhs.marks),\n position: pos + 1\n });\n }\n return str[pos] !== \"]\" ? { type: \"error\", message: 'Expected \"]\" after array expression', position: pos } : {\n type: \"success\",\n marks: [{ name: \"square_bracket\", position: startPos }].concat(result.marks),\n position: pos + 1\n };\n }\n case \"|\": {\n if (pos = skipWS(str, pos + 1), str[pos] === \"{\") {\n let result = parseObject(str, pos);\n return result.type === \"error\" || result.marks.unshift({ name: \"projection\", position: startPos }), result;\n }\n break;\n }\n case \"{\": {\n let result = parseObject(str, pos);\n return result.type === \"error\" || result.marks.unshift({ name: \"projection\", position: startPos }), result;\n }\n }\n return { type: \"error\", message: \"Unexpected character in traversal\", position: pos };\n}\nfunction parseFuncCall(str, startPos, pos) {\n let marks = [];\n if (marks.push({ name: \"func_call\", position: startPos }), str[pos] === \":\" && str[pos + 1] === \":\") {\n marks.push({ name: \"namespace\", position: startPos }), marks.push({ name: \"ident\", position: startPos }, { name: \"ident_end\", position: pos }), pos = skipWS(str, pos + 2);\n let nameLen = parseRegex(str, pos, IDENT);\n if (!nameLen) return { type: \"error\", message: \"Expected function name\", position: pos };\n if (marks.push({ name: \"ident\", position: pos }, { name: \"ident_end\", position: pos + nameLen }), pos = skipWS(str, pos + nameLen), str[pos] !== \"(\")\n return { type: \"error\", message: 'Expected \"(\" after function name', position: pos };\n pos++, pos = skipWS(str, pos);\n } else\n marks.push({ name: \"ident\", position: startPos }, { name: \"ident_end\", position: pos }), pos = skipWS(str, pos + 1);\n let lastPos = pos;\n if (str[pos] !== \")\")\n for (; ; ) {\n let result = parseExpr(str, pos, 0);\n if (result.type === \"error\") return result;\n if (marks = marks.concat(result.marks), lastPos = result.position, pos = skipWS(str, result.position), str[pos] !== \",\" || (pos = skipWS(str, pos + 1), str[pos] === \")\")) break;\n }\n return str[pos] !== \")\" ? { type: \"error\", message: 'Expected \")\" after function arguments', position: pos } : (marks.push({ name: \"func_args_end\", position: lastPos }), {\n type: \"success\",\n marks,\n position: pos + 1\n });\n}\nfunction parseObject(str, pos) {\n let marks = [{ name: \"object\", position: pos }];\n for (pos = skipWS(str, pos + 1); str[pos] !== \"}\"; ) {\n let pairPos = pos;\n if (str.slice(pos, pos + 3) === \"...\")\n if (pos = skipWS(str, pos + 3), str[pos] !== \"}\" && str[pos] !== \",\") {\n let expr = parseExpr(str, pos, 0);\n if (expr.type === \"error\") return expr;\n marks.push({ name: \"object_splat\", position: pairPos }), marks = marks.concat(expr.marks), pos = expr.position;\n } else\n marks.push({ name: \"object_splat_this\", position: pairPos });\n else {\n let expr = parseExpr(str, pos, 0);\n if (expr.type === \"error\") return expr;\n let nextPos = skipWS(str, expr.position);\n if (expr.marks[0].name === \"str\" && str[nextPos] === \":\") {\n let value = parseExpr(str, skipWS(str, nextPos + 1), 0);\n if (value.type === \"error\") return value;\n marks.push({ name: \"object_pair\", position: pairPos }), marks = marks.concat(expr.marks, value.marks), pos = value.position;\n } else\n marks = marks.concat({ name: \"object_expr\", position: pos }, expr.marks), pos = expr.position;\n }\n if (pos = skipWS(str, pos), str[pos] !== \",\") break;\n pos = skipWS(str, pos + 1);\n }\n return str[pos] !== \"}\" ? { type: \"error\", message: 'Expected \"}\" after object', position: pos } : (pos++, marks.push({ name: \"object_end\", position: pos }), { type: \"success\", marks, position: pos });\n}\nfunction parseString(str, pos) {\n let token = str[pos];\n pos = pos + 1;\n const marks = [{ name: \"str\", position: pos }];\n str: for (; ; pos++) {\n if (pos > str.length) return { type: \"error\", message: \"Unexpected end of query\", position: pos };\n switch (str[pos]) {\n case token: {\n marks.push({ name: \"str_end\", position: pos }), pos++;\n break str;\n }\n case \"\\\\\":\n marks.push({ name: \"str_pause\", position: pos }), str[pos + 1] === \"u\" ? str[pos + 2] === \"{\" ? (marks.push({ name: \"unicode_hex\", position: pos + 3 }), pos = str.indexOf(\"}\", pos + 3), marks.push({ name: \"unicode_hex_end\", position: pos })) : (marks.push({ name: \"unicode_hex\", position: pos + 2 }), marks.push({ name: \"unicode_hex_end\", position: pos + 6 }), pos += 5) : (marks.push({ name: \"single_escape\", position: pos + 1 }), pos += 1), marks.push({ name: \"str_start\", position: pos + 1 });\n }\n }\n return { type: \"success\", marks, position: pos };\n}\nfunction skipWS(str, pos) {\n return pos + parseRegex(str, pos, WS);\n}\nfunction parseRegex(str, pos, re) {\n let m = re.exec(str.slice(pos));\n return m ? m[0].length : 0;\n}\nfunction parseRegexStr(str, pos, re) {\n let m = re.exec(str.slice(pos));\n return m ? m[0] : null;\n}\nfunction parseFunctionDeclaration(str, startPos) {\n let pos = startPos, marks = [], namespace = \"\", name = \"\";\n if (str.substring(pos, pos + 2) !== \"fn\")\n return {\n type: \"success\",\n position: pos,\n marks\n };\n marks.push({ name: \"func_decl\", position: startPos }), pos = skipWS(str, pos + 2);\n let identStart = pos;\n if (namespace = parseRegexStr(str, pos, IDENT), !namespace)\n return { type: \"error\", message: \"Expected function name\", position: pos };\n if (marks.push(\n { name: \"ident\", position: identStart },\n { name: \"ident_end\", position: pos + namespace.length }\n ), pos = skipWS(str, pos + namespace.length), str.substring(pos, pos + 2) !== \"::\")\n return { type: \"error\", message: 'Expected \"::\" after namespace', position: pos };\n if (pos = skipWS(str, pos + 2), name = parseRegexStr(str, pos, IDENT), !name)\n return { type: \"error\", message: \"Expected function name\", position: pos };\n if (marks.push({ name: \"ident\", position: pos }, { name: \"ident_end\", position: pos + name.length }), pos = skipWS(str, pos + name.length), str[pos] !== \"(\")\n return { type: \"error\", message: 'Expected \"(\"', position: pos };\n for (pos = skipWS(str, pos + 1); pos < str.length && str[pos] !== \")\"; ) {\n if (str[pos] !== \"$\")\n return { type: \"error\", message: 'Parameter should start with \"$\"', position: pos };\n const startPos2 = pos;\n pos++;\n const paramName = parseRegexStr(str, pos, IDENT);\n if (!paramName)\n return { type: \"error\", message: \"Expected function name\", position: pos };\n if (pos += paramName.length, marks.push(\n { name: \"param\", position: startPos2 },\n { name: \"ident\", position: startPos2 + 1 },\n { name: \"ident_end\", position: pos }\n ), pos = skipWS(str, pos), str[pos] === \",\")\n pos = skipWS(str, pos + 1);\n else if (str[pos] !== \")\")\n return { type: \"error\", message: 'Expected \",\" or \")\"', position: pos };\n }\n if (str[pos] !== \")\")\n return { type: \"error\", message: 'Expected \")\"', position: pos };\n if (marks.push({ name: \"func_params_end\", position: pos }), pos = skipWS(str, pos + 1), str[pos] !== \"=\")\n return { type: \"error\", message: 'Expected \"=\"', position: pos };\n pos = skipWS(str, pos + 1);\n let bodyResult = parseExpr(str, pos, 0);\n return bodyResult.type === \"error\" ? bodyResult : (marks = marks.concat(bodyResult.marks), pos = skipWS(str, bodyResult.position), str[pos] !== \";\" ? { type: \"error\", message: 'Expected \";\" after function declaration', position: pos } : (pos++, {\n type: \"success\",\n position: pos,\n marks,\n namespace,\n name\n }));\n}\nfunction join(a, b) {\n return (base) => b(a(base));\n}\nfunction map(inner) {\n return (base) => ({ type: \"Map\", base, expr: inner({ type: \"This\" }) });\n}\nfunction flatMap(inner) {\n return (base) => ({ type: \"FlatMap\", base, expr: inner({ type: \"This\" }) });\n}\nfunction traverseArray(build, right) {\n if (!right)\n return {\n type: \"a-a\",\n build\n };\n switch (right.type) {\n case \"a-a\":\n return {\n type: \"a-a\",\n build: join(build, right.build)\n };\n case \"a-b\":\n return {\n type: \"a-b\",\n build: join(build, right.build)\n };\n case \"b-b\":\n return {\n type: \"a-a\",\n build: join(build, map(right.build))\n };\n case \"b-a\":\n return {\n type: \"a-a\",\n build: join(build, flatMap(right.build))\n };\n default:\n throw new Error(`unknown type: ${right.type}`);\n }\n}\nfunction traversePlain(mapper, right) {\n if (!right)\n return {\n type: \"b-b\",\n build: mapper\n };\n switch (right.type) {\n case \"a-a\":\n case \"b-a\":\n return {\n type: \"b-a\",\n build: join(mapper, right.build)\n };\n case \"a-b\":\n case \"b-b\":\n return {\n type: \"b-b\",\n build: join(mapper, right.build)\n };\n default:\n throw new Error(`unknown type: ${right.type}`);\n }\n}\nfunction traverseElement(mapper, right) {\n if (!right)\n return {\n type: \"a-b\",\n build: mapper\n };\n switch (right.type) {\n case \"a-a\":\n case \"b-a\":\n return {\n type: \"a-a\",\n build: join(mapper, right.build)\n };\n case \"a-b\":\n case \"b-b\":\n return {\n type: \"a-b\",\n build: join(mapper, right.build)\n };\n default:\n throw new Error(`unknown type: ${right.type}`);\n }\n}\nfunction traverseProjection(mapper, right) {\n if (!right)\n return {\n type: \"b-b\",\n build: mapper\n };\n switch (right.type) {\n case \"a-a\":\n return {\n type: \"a-a\",\n build: join(map(mapper), right.build)\n };\n case \"a-b\":\n return {\n type: \"a-b\",\n build: join(map(mapper), right.build)\n };\n case \"b-a\":\n return {\n type: \"b-a\",\n build: join(mapper, right.build)\n };\n case \"b-b\":\n return {\n type: \"b-b\",\n build: join(mapper, right.build)\n };\n default:\n throw new Error(`unknown type: ${right.type}`);\n }\n}\nfunction walkValidateCustomFunction(node, level = 0) {\n switch (node.type) {\n case \"Projection\":\n return {\n ...node,\n base: walkValidateCustomFunction(node.base, level),\n expr: walkValidateCustomFunction(node.expr, level + 1)\n };\n case \"Filter\":\n return {\n ...node,\n base: walkValidateCustomFunction(node.base, level),\n expr: walkValidateCustomFunction(node.expr, level + 1)\n };\n case \"Parent\": {\n if (level - node.n < 0)\n throw new Error(\n `Invalid use of parent operator (^). No parent n ${node.n} at level ${level}.`\n );\n return node;\n }\n case \"Parameter\":\n throw new Error(\n `Function parameters are not allowed outside function declarations: ${node.name}`\n );\n case \"Array\":\n return {\n ...node,\n elements: node.elements.map((el) => ({\n ...el,\n value: walkValidateCustomFunction(el.value, level)\n }))\n };\n case \"PipeFuncCall\":\n return {\n ...node,\n base: walkValidateCustomFunction(node.base, level),\n args: node.args.map((arg) => walkValidateCustomFunction(arg, level))\n };\n case \"Object\":\n return {\n ...node,\n attributes: node.attributes.map((attr) => {\n switch (attr.type) {\n case \"ObjectAttributeValue\":\n return {\n ...attr,\n value: walkValidateCustomFunction(attr.value, level)\n };\n case \"ObjectConditionalSplat\":\n return {\n ...attr,\n condition: walkValidateCustomFunction(attr.condition, level),\n value: walkValidateCustomFunction(attr.value, level)\n };\n case \"ObjectSplat\":\n return {\n ...attr,\n value: walkValidateCustomFunction(attr.value, level)\n };\n default:\n return attr;\n }\n })\n };\n case \"FlatMap\":\n case \"Map\":\n return {\n ...node,\n expr: walkValidateCustomFunction(node.expr, level),\n base: walkValidateCustomFunction(node.base, level)\n };\n case \"FuncCall\":\n return {\n ...node,\n args: node.args.map((arg) => walkValidateCustomFunction(arg, level))\n };\n case \"Tuple\":\n return {\n ...node,\n members: node.members.map((member) => walkValidateCustomFunction(member, level))\n };\n case \"Select\": {\n const alternatives = node.alternatives.map((alt) => ({\n ...alt,\n condition: walkValidateCustomFunction(alt.condition, level),\n value: walkValidateCustomFunction(alt.value, level)\n }));\n return node.fallback ? {\n ...node,\n alternatives,\n fallback: walkValidateCustomFunction(node.fallback, level)\n } : {\n ...node,\n alternatives\n };\n }\n case \"SelectorNested\":\n return {\n ...node,\n base: walkValidateCustomFunction(node.base, level),\n nested: walkValidateCustomFunction(node.nested, level)\n };\n case \"SelectorFuncCall\":\n return {\n ...node,\n arg: walkValidateCustomFunction(node.arg, level)\n };\n case \"AccessAttribute\":\n case \"AccessElement\":\n case \"ArrayCoerce\":\n case \"Asc\":\n case \"Desc\":\n case \"Deref\":\n case \"Group\":\n case \"Neg\":\n case \"Not\":\n case \"Slice\":\n case \"Pos\":\n return node.base ? {\n ...node,\n base: walkValidateCustomFunction(node.base, level)\n } : node;\n case \"InRange\":\n return {\n ...node,\n base: walkValidateCustomFunction(node.base, level),\n left: walkValidateCustomFunction(node.left, level),\n right: walkValidateCustomFunction(node.right, level)\n };\n case \"OpCall\":\n case \"And\":\n case \"Or\":\n return {\n ...node,\n left: walkValidateCustomFunction(node.left, level),\n right: walkValidateCustomFunction(node.right, level)\n };\n case \"Parameter\":\n case \"Everything\":\n case \"This\":\n case \"Value\":\n case \"Context\":\n return node;\n default:\n throw new Error(`Handle all cases: ${node.type}`);\n }\n}\nconst ESCAPE_SEQUENCE = {\n \"'\": \"'\",\n '\"': '\"',\n \"\\\\\": \"\\\\\",\n \"/\": \"/\",\n b: \"\\b\",\n f: \"\\f\",\n n: `\n`,\n r: \"\\r\",\n t: \"\t\"\n};\nfunction expandHex(str) {\n const charCode = parseInt(str, 16);\n return String.fromCharCode(charCode);\n}\nclass GroqQueryError extends Error {\n name = \"GroqQueryError\";\n}\nfunction createExpressionBuilder(parseOptions, recursion = /* @__PURE__ */ new Set()) {\n const exprBuilder = {\n group(p) {\n return {\n type: \"Group\",\n base: p.process(exprBuilder)\n };\n },\n everything() {\n return { type: \"Everything\" };\n },\n this() {\n return { type: \"This\" };\n },\n parent() {\n return {\n type: \"Parent\",\n n: 1\n };\n },\n dblparent(p) {\n return {\n type: \"Parent\",\n n: p.process(exprBuilder).n + 1\n };\n },\n traverse(p) {\n const base = p.process(exprBuilder), traversalList = [];\n for (; p.getMark().name !== \"traversal_end\"; )\n traversalList.push(p.process(TRAVERSE_BUILDER));\n p.shift();\n let traversal = null;\n for (let i = traversalList.length - 1; i >= 0; i--)\n traversal = traversalList[i](traversal);\n if ((base.type === \"Everything\" || base.type === \"Array\" || base.type === \"PipeFuncCall\") && (traversal = traverseArray((val) => val, traversal)), traversal === null) throw new Error(\"BUG: unexpected empty traversal\");\n return traversal.build(base);\n },\n this_attr(p) {\n const name = p.processString();\n return name === \"null\" ? { type: \"Value\", value: null } : name === \"true\" ? { type: \"Value\", value: !0 } : name === \"false\" ? { type: \"Value\", value: !1 } : {\n type: \"AccessAttribute\",\n name\n };\n },\n neg(p) {\n return {\n type: \"Neg\",\n base: p.process(exprBuilder)\n };\n },\n pos(p) {\n return {\n type: \"Pos\",\n base: p.process(exprBuilder)\n };\n },\n add(p) {\n const left = p.process(exprBuilder), right = p.process(exprBuilder);\n return {\n type: \"OpCall\",\n op: \"+\",\n left,\n right\n };\n },\n sub(p) {\n const left = p.process(exprBuilder), right = p.process(exprBuilder);\n return {\n type: \"OpCall\",\n op: \"-\",\n left,\n right\n };\n },\n mul(p) {\n const left = p.process(exprBuilder), right = p.process(exprBuilder);\n return {\n type: \"OpCall\",\n op: \"*\",\n left,\n right\n };\n },\n div(p) {\n const left = p.process(exprBuilder), right = p.process(exprBuilder);\n return {\n type: \"OpCall\",\n op: \"/\",\n left,\n right\n };\n },\n mod(p) {\n const left = p.process(exprBuilder), right = p.process(exprBuilder);\n return {\n type: \"OpCall\",\n op: \"%\",\n left,\n right\n };\n },\n pow(p) {\n const left = p.process(exprBuilder), right = p.process(exprBuilder);\n return {\n type: \"OpCall\",\n op: \"**\",\n left,\n right\n };\n },\n comp(p) {\n const left = p.process(exprBuilder), op = p.processString(), right = p.process(exprBuilder);\n return {\n type: \"OpCall\",\n op,\n left,\n right\n };\n },\n in_range(p) {\n const base = p.process(exprBuilder), isInclusive = p.getMark().name === \"inc_range\";\n p.shift();\n const left = p.process(exprBuilder), right = p.process(exprBuilder);\n return {\n type: \"InRange\",\n base,\n left,\n right,\n isInclusive\n };\n },\n str(p) {\n let value = \"\";\n loop: for (; p.hasMark(); ) {\n const mark = p.getMark();\n switch (mark.name) {\n case \"str_end\":\n value += p.processStringEnd();\n break loop;\n case \"str_pause\":\n value += p.processStringEnd();\n break;\n case \"str_start\":\n p.shift();\n break;\n case \"single_escape\": {\n const char = p.slice(1);\n p.shift(), value += ESCAPE_SEQUENCE[char];\n break;\n }\n case \"unicode_hex\":\n p.shift(), value += expandHex(p.processStringEnd());\n break;\n default:\n throw new Error(`unexpected mark: ${mark.name}`);\n }\n }\n return { type: \"Value\", value };\n },\n integer(p) {\n const strValue = p.processStringEnd();\n return {\n type: \"Value\",\n value: Number(strValue)\n };\n },\n float(p) {\n const strValue = p.processStringEnd();\n return {\n type: \"Value\",\n value: Number(strValue)\n };\n },\n sci(p) {\n const strValue = p.processStringEnd();\n return {\n type: \"Value\",\n value: Number(strValue)\n };\n },\n object(p) {\n const attributes = [];\n for (; p.getMark().name !== \"object_end\"; )\n attributes.push(p.process(OBJECT_BUILDER));\n return p.shift(), {\n type: \"Object\",\n attributes\n };\n },\n array(p) {\n const elements = [];\n for (; p.getMark().name !== \"array_end\"; ) {\n let isSplat = !1;\n p.getMark().name === \"array_splat\" && (isSplat = !0, p.shift());\n const value = p.process(exprBuilder);\n elements.push({\n type: \"ArrayElement\",\n value,\n isSplat\n });\n }\n return p.shift(), {\n type: \"Array\",\n elements\n };\n },\n tuple(p) {\n const members = [];\n for (; p.getMark().name !== \"tuple_end\"; )\n members.push(p.process(exprBuilder));\n return p.shift(), {\n type: \"Tuple\",\n members\n };\n },\n func_call(p) {\n let namespace = \"global\";\n p.getMark().name === \"namespace\" && (p.shift(), namespace = p.processString());\n const name = p.processString();\n if (namespace === \"global\" && name === \"select\") {\n const result = {\n type: \"Select\",\n alternatives: []\n };\n for (; p.getMark().name !== \"func_args_end\"; )\n if (p.getMark().name === \"pair\") {\n if (result.fallback) throw new GroqQueryError(\"unexpected argument to select()\");\n p.shift();\n const condition = p.process(exprBuilder), value = p.process(exprBuilder);\n result.alternatives.push({\n type: \"SelectAlternative\",\n condition,\n value\n });\n } else {\n if (result.fallback) throw new GroqQueryError(\"unexpected argument to select()\");\n const value = p.process(exprBuilder);\n result.fallback = value;\n }\n return p.shift(), result;\n }\n const args = [];\n for (; p.getMark().name !== \"func_args_end\"; )\n argumentShouldBeSelector(namespace, name, args.length) ? args.push(p.process(SELECTOR_BUILDER)) : args.push(p.process(exprBuilder));\n if (p.shift(), namespace === \"global\" && (name === \"before\" || name === \"after\") && p.parseOptions.mode === \"delta\")\n return {\n type: \"Context\",\n key: name\n };\n if (namespace === \"global\" && name === \"boost\" && !p.allowBoost)\n throw new GroqQueryError(\"unexpected boost\");\n const customFunction = p.customFunctions[`${namespace}::${name}`];\n if (customFunction !== void 0) {\n const FUNCTION_DECL_BUILDER = createFunctionDeclarationBuilder(parseOptions, recursion), funcDecl = new MarkProcessor(\n p.string,\n customFunction.marks,\n p.customFunctions,\n parseOptions\n ).process(FUNCTION_DECL_BUILDER);\n return validateArity(name, funcDecl.params.length, args.length), mapCustomFunction(\n funcDecl.body,\n (body) => walkValidateCustomFunction(body),\n (parameterNode) => resolveFunctionParameter(parameterNode, funcDecl.params, args)\n );\n }\n const funcs = namespaceRegistry[namespace];\n if (!funcs)\n throw new GroqQueryError(`Undefined namespace: ${namespace}`);\n const funcEntry = funcs[name];\n if (!funcEntry)\n throw new GroqQueryError(`Undefined function: ${name}`);\n if (funcEntry.arity !== void 0 && validateArity(name, funcEntry.arity, args.length), funcEntry.mode !== void 0 && funcEntry.mode !== p.parseOptions.mode)\n throw new GroqQueryError(`Undefined function: ${name}`);\n return {\n type: \"FuncCall\",\n namespace,\n name,\n args\n };\n },\n pipecall(p) {\n const base = p.process(exprBuilder);\n p.shift();\n let namespace = \"global\";\n if (p.getMark().name === \"namespace\" && (p.shift(), namespace = p.processString()), namespace !== \"global\")\n throw new GroqQueryError(`Undefined namespace: ${namespace}`);\n const name = p.processString(), args = [], oldAllowBoost = p.allowBoost;\n for (name === \"score\" && (p.allowBoost = !0); ; ) {\n const markName = p.getMark().name;\n if (markName === \"func_args_end\")\n break;\n if (name === \"order\") {\n if (markName === \"asc\") {\n p.shift(), args.push({ type: \"Asc\", base: p.process(exprBuilder) });\n continue;\n } else if (markName === \"desc\") {\n p.shift(), args.push({ type: \"Desc\", base: p.process(exprBuilder) });\n continue;\n }\n }\n args.push(p.process(exprBuilder));\n }\n p.shift(), p.allowBoost = oldAllowBoost;\n const funcEntry = pipeFunctionRegistry[name];\n if (!funcEntry)\n throw new GroqQueryError(`Undefined pipe function: ${name}`);\n return funcEntry.arity && validateArity(name, funcEntry.arity, args.length), {\n type: \"PipeFuncCall\",\n base,\n name,\n args\n };\n },\n pair() {\n throw new GroqQueryError(\"unexpected =>\");\n },\n and(p) {\n const left = p.process(exprBuilder), right = p.process(exprBuilder);\n return {\n type: \"And\",\n left,\n right\n };\n },\n or(p) {\n const left = p.process(exprBuilder), right = p.process(exprBuilder);\n return {\n type: \"Or\",\n left,\n right\n };\n },\n not(p) {\n return {\n type: \"Not\",\n base: p.process(exprBuilder)\n };\n },\n asc() {\n throw new GroqQueryError(\"unexpected asc\");\n },\n desc() {\n throw new GroqQueryError(\"unexpected desc\");\n },\n param(p) {\n const name = p.processString();\n return p.parseOptions.params && p.parseOptions.params.hasOwnProperty(name) ? {\n type: \"Value\",\n value: p.parseOptions.params[name]\n } : {\n type: \"Parameter\",\n name\n };\n }\n }, OBJECT_BUILDER = {\n object_expr(p) {\n if (p.getMark().name === \"pair\") {\n p.shift();\n const condition = p.process(exprBuilder), value2 = p.process(exprBuilder);\n return {\n type: \"ObjectConditionalSplat\",\n condition,\n value: value2\n };\n }\n const value = p.process(exprBuilder);\n return {\n type: \"ObjectAttributeValue\",\n name: extractPropertyKey(value),\n value\n };\n },\n object_pair(p) {\n const name = p.process(exprBuilder);\n if (name.type !== \"Value\") throw new Error(\"name must be string\");\n const value = p.process(exprBuilder);\n return {\n type: \"ObjectAttributeValue\",\n name: name.value,\n value\n };\n },\n object_splat(p) {\n return {\n type: \"ObjectSplat\",\n value: p.process(exprBuilder)\n };\n },\n object_splat_this() {\n return {\n type: \"ObjectSplat\",\n value: { type: \"This\" }\n };\n }\n }, TRAVERSE_BUILDER = {\n square_bracket(p) {\n const expr = p.process(exprBuilder), value = tryConstantEvaluate(expr);\n return value && value.type === \"number\" ? (right) => traverseElement((base) => ({ type: \"AccessElement\", base, index: value.data }), right) : value && value.type === \"string\" ? (right) => traversePlain((base) => ({ type: \"AccessAttribute\", base, name: value.data }), right) : (right) => traverseArray(\n (base) => ({\n type: \"Filter\",\n base,\n expr\n }),\n right\n );\n },\n slice(p) {\n const isInclusive = p.getMark().name === \"inc_range\";\n p.shift();\n const left = p.process(exprBuilder), right = p.process(exprBuilder), leftValue = tryConstantEvaluate(left), rightValue = tryConstantEvaluate(right);\n if (!leftValue || !rightValue || leftValue.type !== \"number\" || rightValue.type !== \"number\")\n throw new GroqQueryError(\"slicing must use constant numbers\");\n return (rhs) => traverseArray(\n (base) => ({\n type: \"Slice\",\n base,\n left: leftValue.data,\n right: rightValue.data,\n isInclusive\n }),\n rhs\n );\n },\n projection(p) {\n const obj = p.process(exprBuilder);\n return (right) => traverseProjection((base) => ({ type: \"Projection\", base, expr: obj }), right);\n },\n attr_access(p) {\n const name = p.processString();\n return (right) => traversePlain((base) => ({ type: \"AccessAttribute\", base, name }), right);\n },\n deref(p) {\n let attr = null;\n p.getMark().name === \"deref_attr\" && (p.shift(), attr = p.processString());\n const wrap = (base) => attr ? { type: \"AccessAttribute\", base, name: attr } : base;\n return (right) => traversePlain(\n (base) => wrap({\n type: \"Deref\",\n base\n }),\n right\n );\n },\n array_postfix() {\n return (right) => traverseArray((base) => ({ type: \"ArrayCoerce\", base }), right);\n }\n }, SELECTOR_BUILDER = {\n group(p) {\n return p.process(SELECTOR_BUILDER);\n },\n everything() {\n throw new Error(\"Invalid selector syntax\");\n },\n this() {\n throw new Error(\"Invalid selector syntax\");\n },\n parent() {\n throw new Error(\"Invalid selector syntax\");\n },\n dblparent() {\n throw new Error(\"Invalid selector syntax\");\n },\n traverse(p) {\n let node = p.process(SELECTOR_BUILDER);\n for (; p.getMark().name !== \"traversal_end\"; )\n if (p.getMark().name === \"array_postfix\")\n p.shift(), node = { type: \"ArrayCoerce\", base: node };\n else if (p.getMark().name === \"square_bracket\") {\n p.shift();\n const expr = p.process(exprBuilder), value = tryConstantEvaluate(expr);\n if (value && value.type === \"number\")\n throw new Error(\"Invalid array access expression\");\n value && value.type === \"string\" ? node = { type: \"AccessAttribute\", base: node, name: value.data } : node = { type: \"Filter\", base: node, expr };\n } else if (p.getMark().name === \"attr_access\") {\n p.shift();\n const name = p.processString();\n node = { type: \"AccessAttribute\", base: node, name };\n } else if (p.getMark().name === \"tuple\" || p.getMark().name === \"group\") {\n const selector = p.process(SELECTOR_BUILDER);\n if (!isSelectorNested(selector))\n throw new Error(`Unexpected result parsing nested selector: ${selector.type}`);\n node = { type: \"SelectorNested\", base: node, nested: selector };\n } else\n throw new Error(\"Invalid selector syntax\");\n return p.shift(), node;\n },\n this_attr(p) {\n return { type: \"AccessAttribute\", name: p.processString() };\n },\n attr_access() {\n throw new Error(\"Invalid selector syntax\");\n },\n neg() {\n throw new Error(\"Invalid selector syntax\");\n },\n pos() {\n throw new Error(\"Invalid selector syntax\");\n },\n add() {\n throw new Error(\"Invalid selector syntax\");\n },\n sub() {\n throw new Error(\"Invalid selector syntax\");\n },\n mul() {\n throw new Error(\"Invalid selector syntax\");\n },\n div() {\n throw new Error(\"Invalid selector syntax\");\n },\n mod() {\n throw new Error(\"Invalid selector syntax\");\n },\n pow() {\n throw new Error(\"Invalid selector syntax\");\n },\n comp() {\n throw new Error(\"Invalid selector syntax\");\n },\n in_range() {\n throw new Error(\"Invalid selector syntax\");\n },\n str() {\n throw new Error(\"Invalid selector syntax\");\n },\n integer() {\n throw new Error(\"Invalid selector syntax\");\n },\n float() {\n throw new Error(\"Invalid selector syntax\");\n },\n sci() {\n throw new Error(\"Invalid selector syntax\");\n },\n object() {\n throw new Error(\"Invalid selector syntax\");\n },\n array() {\n throw new Error(\"Invalid selector syntax\");\n },\n tuple(p) {\n const selectors = [];\n for (; p.getMark().name !== \"tuple_end\"; )\n selectors.push(p.process(SELECTOR_BUILDER));\n return p.shift(), { type: \"Tuple\", members: selectors };\n },\n func_call(p, mark) {\n const func = exprBuilder.func_call(p, mark);\n if (func.name === \"anywhere\" && func.args.length === 1)\n return {\n type: \"SelectorFuncCall\",\n name: \"anywhere\",\n arg: func.args[0]\n };\n throw new Error(\"Invalid selector syntax\");\n },\n pipecall() {\n throw new Error(\"Invalid selector syntax\");\n },\n pair() {\n throw new Error(\"Invalid selector syntax\");\n },\n and() {\n throw new Error(\"Invalid selector syntax\");\n },\n or() {\n throw new Error(\"Invalid selector syntax\");\n },\n not() {\n throw new Error(\"Invalid selector syntax\");\n },\n asc() {\n throw new Error(\"Invalid selector syntax\");\n },\n desc() {\n throw new Error(\"Invalid selector syntax\");\n },\n param() {\n throw new Error(\"Invalid selector syntax\");\n }\n };\n return exprBuilder;\n}\nfunction extractPropertyKey(node) {\n if (node.type === \"AccessAttribute\" && !node.base)\n return node.name;\n if (node.type === \"PipeFuncCall\" || node.type === \"Deref\" || node.type === \"Map\" || node.type === \"FlatMap\" || node.type === \"Projection\" || node.type === \"Slice\" || node.type === \"Filter\" || node.type === \"AccessElement\" || node.type === \"ArrayCoerce\" || node.type === \"Group\")\n return extractPropertyKey(node.base);\n throw new GroqQueryError(`Cannot determine property key for type: ${node.type}`);\n}\nfunction validateArity(name, arity, count) {\n if (typeof arity == \"number\") {\n if (count !== arity)\n throw new GroqQueryError(\n `Incorrect number of arguments to function ${name}(). Expected ${arity}, got ${count}.`\n );\n } else if (arity && !arity(count))\n throw new GroqQueryError(`Incorrect number of arguments to function ${name}().`);\n}\nfunction resolveFunctionParameter(parameter, params, args) {\n if (parameter.type !== \"Parameter\")\n throw new GroqQueryError(`Expected parameter node, got ${parameter.type}`);\n const index = params.findIndex((p) => p.name === parameter.name);\n if (index === -1)\n throw new GroqQueryError(`Missing argument for parameter ${parameter.name} in function call`);\n return args[index];\n}\nfunction mapCustomFunction(body, bodyMapper, parameterMapper = (n) => n) {\n if (body.type === \"Projection\") {\n if (body.base.type === \"Parameter\")\n return {\n type: \"Projection\",\n base: parameterMapper(body.base),\n expr: bodyMapper(body.expr)\n };\n if (body.base.type === \"Deref\" && body.base.base.type === \"Parameter\")\n return {\n type: \"Projection\",\n base: {\n type: \"Deref\",\n base: parameterMapper(body.base.base)\n },\n expr: bodyMapper(body.expr)\n };\n }\n if (body.type === \"Map\" && body.base.type === \"ArrayCoerce\" && body.base.base.type === \"Parameter\")\n return {\n type: \"Map\",\n base: {\n type: \"ArrayCoerce\",\n base: parameterMapper(body.base.base)\n },\n expr: bodyMapper(body.expr)\n };\n throw new GroqQueryError(`Unexpected function body, must be a projection. Got \"${body.type}\"`);\n}\nfunction argumentShouldBeSelector(namespace, functionName, argCount) {\n const functionsRequiringSelectors = [\"changedAny\", \"changedOnly\"];\n return namespace == \"diff\" && argCount == 2 && functionsRequiringSelectors.includes(functionName);\n}\nclass GroqSyntaxError extends Error {\n /**\n * 0-based UTF-16 code unit offset from the start of the query string.\n */\n position;\n /**\n * 1-based line number where the error occurred.\n */\n line;\n /**\n * 1-based column number within the line, in UTF-16 code units.\n */\n column;\n name = \"GroqSyntaxError\";\n constructor(position, query, detail) {\n super(`Syntax error in GROQ query at position ${position}${detail ? `: ${detail}` : \"\"}`), this.position = position;\n let line = 1, lineStart = 0;\n for (let i = 0; i < position && i < query.length; i++)\n query[i] === `\n` && (line++, lineStart = i + 1);\n this.line = line, this.column = position - lineStart + 1;\n }\n}\nfunction parse(input, options = {}) {\n const result = parse$1(input);\n if (result.type === \"error\")\n throw new GroqSyntaxError(result.position, input, result.message);\n validateCustomFunctions(input, result.customFunctions, options);\n const processor = new MarkProcessor(input, result.marks, result.customFunctions, options), exprBuilder = createExpressionBuilder(options);\n return processor.process(exprBuilder);\n}\nfunction createFunctionDeclarationBuilder(parseOptions, recursion = /* @__PURE__ */ new Set()) {\n return {\n func_decl(p) {\n const namespace = p.processString(), name = p.processString(), functionId = `${namespace}::${name}`;\n if (recursion.has(functionId))\n throw new GroqQueryError(`Recursive function definition detected for ${functionId}`);\n const exprBuilder = createExpressionBuilder(parseOptions, /* @__PURE__ */ new Set([...recursion, functionId])), params = [];\n for (; p.getMark().name !== \"func_params_end\"; ) {\n const param = p.process(exprBuilder);\n if (param.type !== \"Parameter\") throw new Error(\"expected parameter\");\n params.push(param);\n }\n if (params.length !== 1)\n throw new GroqQueryError(\"Custom functions can only have one parameter\");\n p.shift();\n const body = p.process(exprBuilder);\n return {\n type: \"FuncDeclaration\",\n namespace,\n name,\n params,\n body\n };\n }\n };\n}\nfunction validateCustomFunctions(query, customFunctions, parseOptions) {\n for (const functionId in customFunctions) {\n if (!customFunctions.hasOwnProperty(functionId)) continue;\n const customFunction = customFunctions[functionId], processor = new MarkProcessor(query, customFunction.marks, customFunctions, parseOptions), FUNCTION_DECL_BUILDER = createFunctionDeclarationBuilder(parseOptions), funcDecl = processor.process(FUNCTION_DECL_BUILDER);\n mapCustomFunction(funcDecl.body, (body) => walkValidateCustomFunction(body));\n }\n}\nconst { compare } = new Intl.Collator(\"en\");\nfunction typeNodesSorter(a, b) {\n return a.type === \"null\" ? 1 : compare(hashField(a), hashField(b));\n}\nconst hashCache = /* @__PURE__ */ new WeakMap();\nfunction hashField(field) {\n if (hashCache.has(field))\n return hashCache.get(field);\n const hash = calculateFieldHash(field);\n return hashCache.set(field, hash), hash;\n}\nfunction calculateFieldHash(field) {\n switch (field.type) {\n case \"number\":\n case \"boolean\":\n return field.value !== void 0 ? `${field.type}(${field.value})` : `${field.type}`;\n case \"string\":\n return isDateTime(field) && field.value !== void 0 ? `${field.type}(${field.value}):datetime` : isDateTime(field) ? `${field.type}:datetime` : field.value !== void 0 ? `${field.type}(${field.value})` : `${field.type}`;\n case \"null\":\n case \"unknown\":\n return field.type;\n case \"array\":\n return `${field.type}(${hashField(field.of)})`;\n case \"object\": {\n const attributes = Object.entries(field.attributes);\n return attributes.sort(([a], [b]) => compare(a, b)), `${field.type}:(${attributes.map(\n ([key, value]) => `${key}:${hashField(value.value)}(${value.optional ? \"optional\" : \"non-optional\"})`\n ).join(\",\")}):ref-${field.dereferencesTo}:${field.rest ? hashField(field.rest) : \"no-rest\"}`;\n }\n case \"union\": {\n const sorted = [...field.of];\n return sorted.sort(typeNodesSorter), `${field.type}(${sorted.map(hashField).join(\",\")})`;\n }\n case \"inline\":\n return `${field.type}(${field.name})`;\n default:\n return field.type;\n }\n}\nfunction removeDuplicateTypeNodes(typeNodes) {\n const seenTypes = /* @__PURE__ */ new Set(), newTypeNodes = [], sortedTypeNodes = [...typeNodes];\n sortedTypeNodes.sort(typeNodesSorter);\n for (const typeNode of sortedTypeNodes) {\n const hash = hashField(typeNode);\n if (hash === null) {\n newTypeNodes.push(typeNode);\n continue;\n }\n seenTypes.has(hash) || (seenTypes.add(hash), newTypeNodes.push(typeNode));\n }\n return newTypeNodes;\n}\nfunction optimizeUnions(field) {\n if (field.type === \"union\") {\n if (field.of.length === 0)\n return field;\n if (field.of = removeDuplicateTypeNodes(field.of), field.of.length === 1)\n return optimizeUnions(field.of[0]);\n for (let idx = 0; field.of.length > idx; idx++) {\n const subField = field.of[idx];\n if (subField.type === \"union\") {\n field.of.splice(idx, 1, ...subField.of), idx--;\n continue;\n }\n field.of[idx] = optimizeUnions(subField);\n }\n return field.of.sort((a, b) => a.type === \"null\" ? 1 : compare(hashField(a), hashField(b))), field;\n }\n if (field.type === \"array\")\n return field.of = optimizeUnions(field.of), field;\n if (field.type === \"object\") {\n for (const idx in field.attributes)\n Object.hasOwn(field.attributes, idx) && (field.attributes[idx].value = optimizeUnions(field.attributes[idx].value));\n return field;\n }\n return field;\n}\nconst STRING_TYPE_DATETIME = /* @__PURE__ */ Symbol(\"groq-js.type.string_datetime\");\nfunction createReferenceTypeNode(name, inArray = !1) {\n const attributes = {\n _ref: {\n type: \"objectAttribute\",\n value: {\n type: \"string\"\n }\n },\n _type: {\n type: \"objectAttribute\",\n value: {\n type: \"string\",\n value: \"reference\"\n }\n },\n _weak: {\n type: \"objectAttribute\",\n value: {\n type: \"boolean\"\n },\n optional: !0\n }\n };\n return inArray && (attributes._key = {\n type: \"objectAttribute\",\n value: {\n type: \"string\"\n }\n }), {\n type: \"object\",\n attributes,\n dereferencesTo: name\n };\n}\nfunction createObjectAttribute(value, optional) {\n return optional === void 0 ? {\n type: \"objectAttribute\",\n value\n } : {\n type: \"objectAttribute\",\n value,\n optional\n };\n}\nfunction nullUnion(node) {\n return node.type === \"union\" ? unionOf(...node.of, { type: \"null\" }) : unionOf(node, { type: \"null\" });\n}\nfunction unionOf(...nodes) {\n return nodes.length === 1 ? nodes[0] : {\n type: \"union\",\n of: nodes\n };\n}\nfunction dateTimeString() {\n return {\n type: \"string\",\n [STRING_TYPE_DATETIME]: !0\n };\n}\nfunction resolveInline(node, scope) {\n if (node.type === \"inline\") {\n const resolvedInline = scope.context.lookupTypeDeclaration(node);\n return resolveInline(resolvedInline, scope);\n }\n return node;\n}\nfunction mapNode(node, scope, mapper, mergeUnions = (nodes) => optimizeUnions({ type: \"union\", of: nodes })) {\n switch (node.type) {\n case \"boolean\":\n case \"array\":\n case \"null\":\n case \"object\":\n case \"string\":\n case \"number\":\n case \"unknown\":\n return mapper(node);\n case \"union\":\n return mergeUnions(node.of.map((inner) => mapNode(inner, scope, mapper), mergeUnions));\n case \"inline\": {\n const resolvedInline = resolveInline(node, scope);\n return mapNode(resolvedInline, scope, mapper, mergeUnions);\n }\n default:\n throw new Error(`Unknown type: ${node.type}`);\n }\n}\nfunction isFuncCall(node, name) {\n return node.type === \"Group\" ? isFuncCall(node.base, name) : node.type === \"FuncCall\" && `${node.namespace}::${node.name}` === name;\n}\nfunction isString(node) {\n return node.type === \"string\" && !node[STRING_TYPE_DATETIME];\n}\nfunction isDateTime(node) {\n return !!(node.type === \"string\" && node[STRING_TYPE_DATETIME]);\n}\nfunction containsDateTime(node) {\n if (isDateTime(node)) return !0;\n if (node.type === \"array\") {\n if (isDateTime(node.of)) return !0;\n if (node.of.type === \"union\")\n return node.of.of.some((member) => isDateTime(member));\n }\n return !1;\n}\nfunction createGeoJson(type = \"Point\") {\n let coordinateAttribute = {\n type: \"array\",\n of: {\n type: \"number\"\n }\n };\n return type === \"LineString\" && (coordinateAttribute = {\n type: \"array\",\n of: {\n type: \"array\",\n of: {\n type: \"number\"\n }\n }\n }), type === \"Polygon\" && (coordinateAttribute = {\n type: \"array\",\n of: {\n type: \"array\",\n of: {\n type: \"array\",\n of: {\n type: \"number\"\n }\n }\n }\n }), {\n type: \"object\",\n attributes: {\n type: {\n type: \"objectAttribute\",\n value: {\n type: \"string\",\n value: type\n }\n },\n coordinates: {\n type: \"objectAttribute\",\n value: coordinateAttribute\n }\n }\n };\n}\nfunction booleanValue(node, scope) {\n switch (node.type) {\n case \"unknown\":\n return { canBeTrue: !0, canBeFalse: !0, canBeNull: !0 };\n case \"boolean\":\n return node.value === !0 ? { canBeTrue: !0, canBeFalse: !1, canBeNull: !1 } : node.value === !1 ? { canBeTrue: !1, canBeFalse: !0, canBeNull: !1 } : { canBeTrue: !0, canBeFalse: !0, canBeNull: !1 };\n case \"union\": {\n const value = { canBeTrue: !1, canBeFalse: !1, canBeNull: !1 };\n for (const sub of node.of) {\n const match2 = booleanValue(sub, scope);\n match2.canBeNull && (value.canBeNull = !0), match2.canBeTrue && (value.canBeTrue = !0), match2.canBeFalse && (value.canBeFalse = !0);\n }\n return value;\n }\n case \"inline\": {\n const resolved = resolveInline(node, scope);\n return booleanValue(resolved, scope);\n }\n case \"null\":\n case \"string\":\n case \"number\":\n case \"object\":\n case \"array\":\n return { canBeTrue: !1, canBeFalse: !1, canBeNull: !0 };\n default:\n throw new Error(`unknown node type ${node.type}`);\n }\n}\nfunction booleanOr(left, right) {\n return left.canBeTrue && !left.canBeFalse && !left.canBeNull ? left : right.canBeTrue && !right.canBeFalse && !right.canBeNull ? right : {\n // Either side can be true for the expression to be true\n canBeTrue: left.canBeTrue || right.canBeTrue,\n // Both sides must be false for the expression to be false\n canBeFalse: left.canBeFalse && right.canBeFalse,\n // if either side can be null, the expression can be null if the other side can't only be true\n canBeNull: left.canBeNull || right.canBeNull\n };\n}\nfunction booleanAnd(left, right) {\n return left.canBeFalse && !left.canBeTrue && !left.canBeNull ? left : right.canBeFalse && !right.canBeTrue && !right.canBeNull ? right : {\n // Both sides must be true for the expression to be true\n canBeTrue: left.canBeTrue && right.canBeTrue,\n // if either side can be false, the expression can be false\n canBeFalse: left.canBeFalse || right.canBeFalse,\n // if either side can be null, the expression can be null\n canBeNull: left.canBeNull || right.canBeNull\n };\n}\nfunction booleanInterpretationToTypeNode(bool) {\n return bool.canBeTrue ? bool.canBeFalse ? bool.canBeNull ? nullUnion({ type: \"boolean\" }) : { type: \"boolean\" } : bool.canBeNull ? nullUnion({ type: \"boolean\", value: !0 }) : { type: \"boolean\", value: !0 } : bool.canBeFalse ? bool.canBeNull ? nullUnion({ type: \"boolean\", value: !1 }) : { type: \"boolean\", value: !1 } : { type: \"null\" };\n}\nfunction unionWithoutNull(unionTypeNode) {\n return unionTypeNode.type === \"union\" ? {\n type: \"union\",\n of: unionTypeNode.of.filter((type) => type.type !== \"null\")\n } : unionTypeNode;\n}\nfunction handleFuncCallNode(node, scope) {\n switch (`${node.namespace}.${node.name}`) {\n case \"array.compact\": {\n const arg = walk({ node: node.args[0], scope });\n return mapNode(arg, scope, (arg2) => {\n if (arg2.type === \"unknown\")\n return nullUnion({ type: \"array\", of: { type: \"unknown\" } });\n if (arg2.type !== \"array\")\n return { type: \"null\" };\n const of = mapNode(arg2.of, scope, (of2) => of2);\n return {\n type: \"array\",\n of: unionWithoutNull(of)\n };\n });\n }\n case \"array.join\": {\n const arrayArg = walk({ node: node.args[0], scope }), sepArg = walk({ node: node.args[1], scope });\n return mapNode(\n arrayArg,\n scope,\n (arrayArg2) => mapNode(sepArg, scope, (sepArg2) => arrayArg2.type === \"unknown\" || sepArg2.type === \"unknown\" ? nullUnion({ type: \"string\" }) : arrayArg2.type !== \"array\" || !isString(sepArg2) ? { type: \"null\" } : mapNode(arrayArg2.of, scope, (of) => of.type === \"unknown\" ? nullUnion({ type: \"string\" }) : of.type !== \"string\" && of.type !== \"number\" && of.type !== \"boolean\" ? { type: \"null\" } : { type: \"string\" }))\n );\n }\n case \"array.unique\": {\n const arg = walk({ node: node.args[0], scope });\n return mapNode(arg, scope, (arg2) => arg2.type === \"unknown\" ? nullUnion({ type: \"array\", of: { type: \"unknown\" } }) : arg2.type !== \"array\" ? { type: \"null\" } : arg2);\n }\n case \"array.intersects\": {\n const arg1 = walk({ node: node.args[0], scope }), arg2 = walk({ node: node.args[1], scope });\n return mapNode(\n arg1,\n scope,\n (arg12) => mapNode(arg2, scope, (arg22) => arg12.type !== \"array\" ? { type: \"null\" } : arg22.type !== \"array\" ? { type: \"null\" } : { type: \"boolean\" })\n );\n }\n case \"global.lower\": {\n const arg = walk({ node: node.args[0], scope });\n return mapNode(arg, scope, (arg2) => arg2.type === \"unknown\" ? nullUnion({ type: \"string\" }) : isString(arg2) ? arg2.value !== void 0 ? {\n type: \"string\",\n value: arg2.value.toLowerCase()\n } : { type: \"string\" } : { type: \"null\" });\n }\n case \"global.upper\": {\n const arg = walk({ node: node.args[0], scope });\n return mapNode(arg, scope, (arg2) => arg2.type === \"unknown\" ? nullUnion({ type: \"string\" }) : isString(arg2) ? arg2.value !== void 0 ? {\n type: \"string\",\n value: arg2.value.toUpperCase()\n } : { type: \"string\" } : { type: \"null\" });\n }\n case \"dateTime.now\":\n return dateTimeString();\n case \"global.now\":\n return { type: \"string\" };\n case \"global.defined\": {\n const arg = walk({ node: node.args[0], scope });\n return mapNode(arg, scope, (node2) => node2.type === \"unknown\" ? { type: \"boolean\" } : { type: \"boolean\", value: node2.type !== \"null\" });\n }\n case \"global.path\": {\n const arg = walk({ node: node.args[0], scope });\n return mapNode(arg, scope, (arg2) => arg2.type === \"unknown\" ? nullUnion({ type: \"string\" }) : arg2.type === \"string\" ? { type: \"string\" } : { type: \"null\" });\n }\n case \"global.coalesce\": {\n if (node.args.length === 0)\n return { type: \"null\" };\n const typeNodes = [];\n let canBeNull = !0;\n for (const arg of node.args) {\n const argNode = optimizeUnions(walk({ node: arg, scope })), allNull = argNode.type === \"null\" || argNode.type === \"union\" && argNode.of.every((t) => t.type === \"null\");\n if (canBeNull = allNull || argNode.type === \"unknown\" || argNode.type === \"union\" && argNode.of.some((t) => t.type === \"null\" || t.type === \"unknown\"), allNull || typeNodes.push(unionWithoutNull(argNode)), !canBeNull)\n break;\n }\n return canBeNull && typeNodes.push({ type: \"null\" }), {\n type: \"union\",\n of: typeNodes\n };\n }\n case \"global.count\": {\n const arg = walk({ node: node.args[0], scope });\n return mapNode(arg, scope, (arg2) => arg2.type === \"unknown\" ? nullUnion({ type: \"string\" }) : arg2.type === \"array\" ? { type: \"number\" } : { type: \"null\" });\n }\n case \"global.dateTime\": {\n const arg = walk({ node: node.args[0], scope });\n return mapNode(arg, scope, (arg2) => arg2.type === \"unknown\" || arg2.type === \"string\" ? nullUnion(dateTimeString()) : { type: \"null\" });\n }\n case \"global.length\": {\n const arg = walk({ node: node.args[0], scope });\n return mapNode(arg, scope, (arg2) => arg2.type === \"unknown\" ? nullUnion({ type: \"number\" }) : arg2.type === \"array\" || isString(arg2) ? { type: \"number\" } : { type: \"null\" });\n }\n case \"global.references\":\n return { type: \"boolean\" };\n case \"global.round\": {\n const numNode = walk({ node: node.args[0], scope });\n return mapNode(numNode, scope, (num) => {\n if (num.type === \"unknown\")\n return nullUnion({ type: \"number\" });\n if (num.type !== \"number\")\n return { type: \"null\" };\n if (node.args.length === 2) {\n const precisionNode = walk({ node: node.args[1], scope });\n return mapNode(precisionNode, scope, (precision) => precision.type === \"unknown\" ? nullUnion({ type: \"number\" }) : precision.type !== \"number\" ? { type: \"null\" } : { type: \"number\" });\n }\n return { type: \"number\" };\n });\n }\n case \"global.string\": {\n const arg = walk({ node: node.args[0], scope });\n return mapNode(arg, scope, (node2) => node2.type === \"unknown\" ? nullUnion({ type: \"string\" }) : node2.type === \"string\" || node2.type === \"number\" || node2.type === \"boolean\" ? node2.value ? {\n type: \"string\",\n value: node2.value.toString()\n } : {\n type: \"string\"\n } : { type: \"null\" });\n }\n case \"math.sum\": {\n const values = walk({ node: node.args[0], scope });\n return mapNode(values, scope, (node2) => node2.type === \"unknown\" ? nullUnion({ type: \"number\" }) : node2.type !== \"array\" ? { type: \"null\" } : mapNode(node2.of, scope, (node3) => node3.type === \"unknown\" ? nullUnion({ type: \"number\" }) : node3.type === \"number\" || node3.type === \"null\" ? { type: \"number\" } : { type: \"null\" }));\n }\n case \"math.avg\": {\n const values = walk({ node: node.args[0], scope });\n return mapNode(values, scope, (node2) => node2.type === \"unknown\" ? nullUnion({ type: \"number\" }) : node2.type !== \"array\" ? { type: \"null\" } : mapNode(node2.of, scope, (node3) => node3.type === \"unknown\" ? nullUnion({ type: \"number\" }) : node3.type === \"number\" ? { type: \"number\" } : { type: \"null\" }));\n }\n case \"math.max\":\n case \"math.min\": {\n const values = walk({ node: node.args[0], scope });\n return mapNode(values, scope, (node2) => node2.type === \"unknown\" ? nullUnion({ type: \"number\" }) : node2.type !== \"array\" ? { type: \"null\" } : mapNode(node2.of, scope, (node3) => node3.type === \"unknown\" ? nullUnion({ type: \"number\" }) : node3.type === \"number\" ? node3 : { type: \"null\" }));\n }\n case \"pt.text\":\n return node.args.length === 0 ? { type: \"null\" } : {\n type: \"string\"\n };\n case \"string.startsWith\": {\n const strTypeNode = walk({ node: node.args[0], scope }), prefixTypeNode = walk({ node: node.args[1], scope });\n return mapNode(strTypeNode, scope, (strNode) => mapNode(prefixTypeNode, scope, (prefixNode) => strNode.type === \"unknown\" || prefixNode.type === \"unknown\" ? nullUnion({ type: \"boolean\" }) : strNode.type !== \"string\" || prefixNode.type !== \"string\" ? { type: \"null\" } : { type: \"boolean\" }));\n }\n case \"string.split\": {\n const strTypeNode = walk({ node: node.args[0], scope }), sepTypeNode = walk({ node: node.args[1], scope });\n return mapNode(strTypeNode, scope, (strNode) => mapNode(sepTypeNode, scope, (sepNode) => strNode.type === \"unknown\" || sepNode.type === \"unknown\" ? nullUnion({ type: \"array\", of: { type: \"string\" } }) : strNode.type !== \"string\" || sepNode.type !== \"string\" ? { type: \"null\" } : { type: \"array\", of: { type: \"string\" } }));\n }\n case \"geo.latLng\": {\n const latTypeNode = walk({ node: node.args[0], scope }), lngTypeNode = walk({ node: node.args[1], scope });\n return mapNode(latTypeNode, scope, (latNode) => mapNode(lngTypeNode, scope, (lngNode) => latNode.type == \"unknown\" || lngNode.type == \"unknown\" ? nullUnion(createGeoJson()) : latNode.type !== \"number\" || lngNode.type !== \"number\" ? { type: \"null\" } : nullUnion(createGeoJson())));\n }\n case \"geo.contains\":\n return nullUnion({ type: \"boolean\" });\n case \"geo.intersects\":\n return nullUnion({ type: \"boolean\" });\n case \"geo.distance\":\n return nullUnion({ type: \"number\" });\n case \"sanity.projectId\":\n case \"sanity.dataset\":\n return nullUnion({ type: \"string\" });\n case \"sanity.versionOf\": {\n const typeNode = walk({ node: node.args[0], scope });\n return mapNode(typeNode, scope, (typeNode2) => typeNode2.type === \"unknown\" ? nullUnion({ type: \"boolean\" }) : typeNode2.type !== \"string\" ? { type: \"null\" } : { type: \"boolean\" });\n }\n case \"sanity.partOfRelease\": {\n const typeNode = walk({ node: node.args[0], scope });\n return mapNode(typeNode, scope, (typeNode2) => typeNode2.type === \"unknown\" ? nullUnion({ type: \"boolean\" }) : typeNode2.type !== \"string\" ? { type: \"null\" } : { type: \"boolean\" });\n }\n case \"documents.get\": {\n const typeNode = walk({ node: node.args[0], scope });\n return mapNode(typeNode, scope, (typeNode2) => typeNode2.type === \"unknown\" ? typeNode2 : typeNode2.type !== \"object\" ? { type: \"null\" } : { type: \"unknown\" });\n }\n case \"documents.incomingRefCount\":\n return { type: \"number\" };\n case \"documents.incomingGlobalDocumentReferenceCount\":\n return { type: \"number\" };\n case \"media.aspect\":\n return mapNode(walk({ node: node.args[0], scope }), scope, (fieldNode) => fieldNode.type === \"null\" ? { type: \"null\" } : mapNode(walk({ node: node.args[1], scope }), scope, (aspectNode) => aspectNode.type !== \"string\" ? { type: \"null\" } : { type: \"unknown\" }));\n case \"user.attributes\":\n return { type: \"unknown\" };\n default:\n return { type: \"unknown\" };\n }\n}\nfunction match(left, right) {\n let tokens = [], patterns = [];\n if (left.type === \"string\") {\n if (left.value === void 0)\n return;\n tokens = tokens.concat(matchTokenize(left.value));\n }\n if (left.type === \"array\") {\n if (left.of.type === \"unknown\")\n return;\n if (left.of.type === \"string\") {\n if (left.of.value === void 0)\n return;\n tokens = tokens.concat(matchTokenize(left.of.value));\n }\n if (left.of.type === \"union\")\n for (const node of left.of.of)\n node.type === \"string\" && node.value !== void 0 && (tokens = tokens.concat(matchTokenize(node.value)));\n }\n if (right.type === \"string\") {\n if (right.value === void 0)\n return;\n patterns = patterns.concat(matchAnalyzePattern(right.value));\n }\n if (right.type === \"array\") {\n if (right.of.type === \"unknown\")\n return;\n if (right.of.type === \"string\") {\n if (right.of.value === void 0)\n return;\n patterns = patterns.concat(matchAnalyzePattern(right.of.value));\n }\n if (right.of.type === \"union\")\n for (const node of right.of.of) {\n if (node.type === \"string\") {\n if (node.value === void 0)\n return;\n patterns = patterns.concat(matchAnalyzePattern(node.value));\n }\n if (node.type !== \"string\")\n return !1;\n }\n }\n return matchText(tokens, patterns);\n}\nfunction extractAttributePath(node) {\n if (node.type === \"AccessAttribute\") {\n if (node.base) {\n const basePath = extractAttributePath(node.base);\n return basePath ? [...basePath, node.name] : null;\n }\n return [node.name];\n }\n return node.type === \"Group\" ? extractAttributePath(node.base) : null;\n}\nfunction extractLiteralType(node) {\n if (node.type === \"Value\") {\n if (typeof node.value == \"string\")\n return { type: \"string\", value: node.value };\n if (typeof node.value == \"number\")\n return { type: \"number\", value: node.value };\n if (typeof node.value == \"boolean\")\n return { type: \"boolean\", value: node.value };\n if (node.value === null)\n return { type: \"null\" };\n }\n return null;\n}\nfunction extractNarrowingAssertions(expr, negated = !1) {\n switch (expr.type) {\n case \"Group\":\n return extractNarrowingAssertions(expr.base, negated);\n case \"Not\":\n return extractNarrowingAssertions(expr.base, !negated);\n case \"And\":\n return negated ? [] : [\n ...extractNarrowingAssertions(expr.left, negated),\n ...extractNarrowingAssertions(expr.right, negated)\n ];\n case \"Or\":\n return negated ? [\n ...extractNarrowingAssertions(expr.left, negated),\n ...extractNarrowingAssertions(expr.right, negated)\n ] : [];\n case \"FuncCall\": {\n if (expr.namespace === \"global\" && expr.name === \"defined\" && expr.args.length === 1) {\n const path = extractAttributePath(expr.args[0]);\n if (path)\n return [\n {\n path,\n action: negated ? \"notDefined\" : \"defined\"\n }\n ];\n }\n return [];\n }\n case \"OpCall\": {\n const leftPath = extractAttributePath(expr.left), rightPath = extractAttributePath(expr.right), leftLiteral = extractLiteralType(expr.left), rightLiteral = extractLiteralType(expr.right);\n if (expr.op === \"==\" || expr.op === \"!=\") {\n const isEquality = expr.op === \"==\", effectiveEquality = negated ? !isEquality : isEquality;\n if (leftPath && rightLiteral?.type === \"null\")\n return [\n {\n path: leftPath,\n action: effectiveEquality ? \"notDefined\" : \"defined\"\n }\n ];\n if (rightPath && leftLiteral?.type === \"null\")\n return [\n {\n path: rightPath,\n action: effectiveEquality ? \"notDefined\" : \"defined\"\n }\n ];\n if (effectiveEquality) {\n if (leftPath && rightLiteral && rightLiteral.type !== \"null\")\n return [\n {\n path: leftPath,\n action: \"equals\",\n value: rightLiteral\n }\n ];\n if (rightPath && leftLiteral && leftLiteral.type !== \"null\")\n return [\n {\n path: rightPath,\n action: \"equals\",\n value: leftLiteral\n }\n ];\n }\n }\n return [];\n }\n default:\n return [];\n }\n}\nfunction applyAssertionsToObject(node, assertions, currentDepth = 0, isOptionalPath = !1) {\n const narrowedAttributes = {};\n let hasChanges = !1;\n for (const [name, attr] of Object.entries(node.attributes)) {\n const matchingAssertions = assertions.filter((a) => a.path[currentDepth] === name);\n if (matchingAssertions.length > 0) {\n const thisPathIsOptional = isOptionalPath || attr.optional === !0, terminalAssertions = matchingAssertions.filter(\n (a) => a.path.length === currentDepth + 1\n ), deeperAssertions = matchingAssertions.filter((a) => a.path.length > currentDepth + 1);\n let newAttr = attr, shouldRemoveAttr = !1;\n for (const assertion of terminalAssertions)\n switch (assertion.action) {\n case \"defined\": {\n if (newAttr.optional && (newAttr = createObjectAttribute(newAttr.value), hasChanges = !0), newAttr.value.type === \"union\") {\n const nonNullTypes = newAttr.value.of.filter((t) => t.type !== \"null\");\n nonNullTypes.length !== newAttr.value.of.length && (newAttr = createObjectAttribute(unionOf(...nonNullTypes)), hasChanges = !0);\n }\n break;\n }\n case \"notDefined\": {\n attr.optional === !0 ? (newAttr = createObjectAttribute({ type: \"null\" }), hasChanges = !0) : (shouldRemoveAttr = !0, hasChanges = !0);\n break;\n }\n case \"equals\": {\n newAttr = createObjectAttribute(assertion.value), hasChanges = !0;\n break;\n }\n default:\n throw new Error(`Unhandled assertion action: ${assertion.action.toString()}`);\n }\n if (deeperAssertions.length > 0) {\n if (attr.optional && (newAttr = createObjectAttribute(newAttr.value), hasChanges = !0), newAttr.value.type === \"object\") {\n const narrowedValue = applyAssertionsToObject(\n newAttr.value,\n deeperAssertions,\n currentDepth + 1,\n thisPathIsOptional\n );\n narrowedValue !== newAttr.value && (newAttr = createObjectAttribute(narrowedValue), hasChanges = !0);\n } else if (newAttr.value.type === \"union\") {\n const originalOf = newAttr.value.of, narrowedOf = originalOf.map((t) => t.type === \"object\" ? applyAssertionsToObject(\n t,\n deeperAssertions,\n currentDepth + 1,\n thisPathIsOptional\n ) : t), nonNullTypes = narrowedOf.filter((t) => t.type !== \"null\");\n thisPathIsOptional && nonNullTypes.length !== narrowedOf.length ? (newAttr = createObjectAttribute(unionOf(...nonNullTypes)), hasChanges = !0) : narrowedOf.some((t, i) => t !== originalOf[i]) && (newAttr = createObjectAttribute(unionOf(...narrowedOf)), hasChanges = !0);\n }\n }\n shouldRemoveAttr || (narrowedAttributes[name] = newAttr);\n } else\n narrowedAttributes[name] = attr;\n }\n return hasChanges ? {\n ...node,\n attributes: narrowedAttributes\n } : node;\n}\nfunction narrowNode(node, assertions) {\n return assertions.length === 0 ? node : node.type === \"object\" ? applyAssertionsToObject(node, assertions) : node.type === \"union\" ? unionOf(...node.of.map((n) => narrowNode(n, assertions))) : node;\n}\nconst $trace$1 = debug(\"typeEvaluator:scope:trace\");\n$trace$1.log = console.log.bind(console);\nclass Context {\n schema;\n constructor(schema) {\n this.schema = schema;\n }\n lookupRef(refTo) {\n for (const val of this.schema)\n if (val.type === \"document\" && val.name === refTo)\n return {\n type: \"object\",\n attributes: val.attributes\n };\n return { type: \"null\" };\n }\n lookupTypeDeclaration(alias) {\n for (const val of this.schema)\n if (val.type === \"type\" && val.name === alias.name)\n return val.value;\n return { type: \"null\" };\n }\n}\nclass Scope {\n value;\n parent;\n context;\n isHidden;\n constructor(value, parent, context) {\n this.value = { type: \"union\", of: value }, this.parent = parent, this.context = context || parent?.context || new Context([]), this.isHidden = !1;\n }\n createNested(value) {\n return this.isHidden ? new Scope(value, this.parent, this.context) : new Scope(value, this, this.context);\n }\n createHidden(value) {\n const result = this.createNested(value);\n return result.isHidden = !0, result;\n }\n}\nconst $trace = debug(\"typeEvaluator:evaluate:trace\");\n$trace.log = console.log.bind(console);\nconst $debug = debug(\"typeEvaluator:evaluate:debug\");\n$debug.log = console.log.bind(console);\nconst $warn = debug(\"typeEvaluator:evaluate:warn\");\nfunction typeEvaluate(ast, schema) {\n $debug(\"evaluateQueryType.ast %O\", ast), $debug(\"evaluateQueryType.schema %O\", schema);\n const parsed = walk({\n node: ast,\n scope: new Scope([], void 0, new Context(schema))\n });\n $trace(\"evaluateQueryType.parsed %O\", parsed);\n const optimized = optimizeUnions(parsed);\n return $debug(\"evaluateQueryType.optimized %O\", optimized), optimized;\n}\nfunction mapDeref(node, scope) {\n return mapNode(node, scope, (base) => {\n if (base.type === \"array\")\n return {\n type: \"array\",\n of: mapDeref(base.of, scope)\n };\n if (base.type === \"object\") {\n if (base.dereferencesTo !== void 0)\n return scope.context.lookupRef(base.dereferencesTo);\n if (base.rest !== void 0)\n return mapDeref(resolveInline(base.rest, scope), scope);\n }\n return { type: \"null\" };\n });\n}\nfunction handleDerefNode(node, scope) {\n $trace(\"deref.node %O\", node);\n const derefedNode = mapDeref(walk({ node: node.base, scope }), scope);\n return $trace(\"deref.derefedNode %O\", derefedNode), derefedNode;\n}\nfunction handleObjectSplatNode(attr, scope) {\n const value = walk({ node: attr.value, scope });\n return $trace(\"object.splat.value %O\", value), mapNode(value, scope, (node) => {\n if (node.type === \"unknown\")\n return { type: \"unknown\" };\n if (node.type !== \"object\")\n return { type: \"object\", attributes: {} };\n const attributes = {};\n for (const name in node.attributes)\n node.attributes.hasOwnProperty(name) && (attributes[name] = node.attributes[name]);\n if (node.rest !== void 0) {\n const resolvedRest = resolveInline(node.rest, scope);\n if (resolvedRest.type === \"unknown\")\n return { type: \"unknown\" };\n if (resolvedRest.type !== \"object\")\n return { type: \"null\" };\n for (const name in resolvedRest.attributes)\n resolvedRest.attributes.hasOwnProperty(name) && (attributes[name] = resolvedRest.attributes[name]);\n }\n return { type: \"object\", attributes };\n });\n}\nfunction handleObjectNode(node, scope) {\n if ($trace(\"object.node %O\", node), node.attributes.length === 0)\n return {\n type: \"object\",\n attributes: {}\n };\n const objectAttributes = [], splatVariants = [], conditionalVariants = [];\n for (const [idx, attr] of node.attributes.entries()) {\n if (attr.type === \"ObjectAttributeValue\") {\n const attributeNode = walk({ node: attr.value, scope });\n objectAttributes.push([\n idx,\n attr.name,\n {\n type: \"objectAttribute\",\n value: attributeNode\n }\n ]);\n continue;\n }\n if (attr.type === \"ObjectSplat\") {\n const attributeNode = handleObjectSplatNode(attr, scope);\n switch ($trace(\"object.splat.result %O\", attributeNode), attributeNode.type) {\n case \"object\": {\n splatVariants.push([idx, attributeNode]);\n continue;\n }\n case \"union\": {\n for (const node2 of attributeNode.of)\n if (node2.type === \"unknown\")\n return node2;\n splatVariants.push([idx, attributeNode]);\n continue;\n }\n default:\n return { type: \"unknown\" };\n }\n }\n if (attr.type === \"ObjectConditionalSplat\") {\n const condition = booleanValue(walk({ node: attr.condition, scope }), scope);\n if ($trace(\"object.conditional.splat.condition %O\", condition), condition.canBeTrue === !1)\n continue;\n const attributeNode = handleObjectSplatNode(attr, scope);\n if ($trace(\"object.conditional.splat.result %O\", attributeNode), condition.canBeFalse === !1 && condition.canBeNull === !1)\n switch (attributeNode.type) {\n case \"object\": {\n splatVariants.push([idx, attributeNode]);\n continue;\n }\n case \"union\": {\n for (const node2 of attributeNode.of)\n if (node2.type !== \"object\")\n return { type: \"unknown\" };\n splatVariants.push([idx, attributeNode]);\n continue;\n }\n default:\n return { type: \"unknown\" };\n }\n const variant = mapNode(attributeNode, scope, (attributeNode2) => ($trace(\"object.conditional.splat.result.concrete %O\", attributeNode2), attributeNode2.type !== \"object\" ? { type: \"unknown\" } : {\n type: \"object\",\n attributes: attributeNode2.attributes\n }));\n if (variant.type === \"union\") {\n for (const node2 of variant.of)\n if (node2.type !== \"object\")\n return { type: \"unknown\" };\n variant.of.push({ type: \"object\", attributes: {} }), conditionalVariants.push([idx, variant]);\n continue;\n }\n if (variant.type !== \"object\")\n return { type: \"unknown\" };\n conditionalVariants.push([\n idx,\n {\n type: \"union\",\n of: [{ type: \"object\", attributes: {} }, variant]\n }\n ]);\n continue;\n }\n throw new Error(`Unknown object attribute type: ${attr.type}`);\n }\n const guaranteedAttributes = [];\n guaranteedAttributes.push(...objectAttributes);\n for (const [idx, splatNode] of splatVariants) {\n if (splatNode.type === \"object\") {\n for (const name in splatNode.attributes) {\n if (!splatNode.attributes.hasOwnProperty(name))\n continue;\n const attribute = splatNode.attributes[name];\n guaranteedAttributes.push([idx, name, attribute]);\n }\n continue;\n }\n conditionalVariants.push([idx, splatNode]);\n }\n if (guaranteedAttributes.sort(([a], [b]) => a - b), conditionalVariants.length === 0)\n return {\n type: \"object\",\n attributes: Object.fromEntries(\n guaranteedAttributes.map(([, name, attribute]) => [name, attribute])\n )\n };\n const matrix = [];\n for (const [unionIdx, union] of conditionalVariants) {\n const unionGuaranteedBefore = [], unionGuaranteedAfter = [];\n for (const [guaranteedIndex, name, attribute] of guaranteedAttributes)\n guaranteedIndex < unionIdx && unionGuaranteedBefore.push([guaranteedIndex, name, attribute]), guaranteedIndex > unionIdx && unionGuaranteedAfter.push([guaranteedIndex, name, attribute]);\n const allVariantsAttributes = [];\n for (const [conditionalVariantIdx, otherUnion] of conditionalVariants) {\n const variantAttributes = [];\n for (const node2 of otherUnion.of)\n variantAttributes.push(node2.attributes);\n allVariantsAttributes.push([conditionalVariantIdx, variantAttributes]);\n }\n for (const node2 of union.of) {\n matrix.push({\n type: \"object\",\n attributes: {\n ...Object.fromEntries(\n unionGuaranteedBefore.map(([, name, attribute]) => [name, attribute])\n ),\n ...node2.attributes,\n ...Object.fromEntries(\n unionGuaranteedAfter.map(([, name, attribute]) => [name, attribute])\n )\n }\n });\n for (const [outerIdx, outerAttributes] of allVariantsAttributes)\n for (const outer of outerAttributes)\n for (const [innerIdx, innerAttributes] of allVariantsAttributes)\n if (outerIdx !== innerIdx)\n for (const inner of innerAttributes) {\n const _before = [...unionGuaranteedBefore], _after = [...unionGuaranteedAfter];\n for (const name in outer)\n outer.hasOwnProperty(name) && outerIdx !== unionIdx && (outerIdx < unionIdx && _before.push([outerIdx, name, outer[name]]), outerIdx > unionIdx && _after.push([outerIdx, name, outer[name]]));\n for (const name in inner)\n inner.hasOwnProperty(name) && outerIdx !== unionIdx && (innerIdx < unionIdx && _before.push([innerIdx, name, inner[name]]), innerIdx > unionIdx && _after.push([innerIdx, name, inner[name]]));\n _before.sort(([a], [b]) => a - b), _after.sort(([a], [b]) => a - b);\n const before = Object.fromEntries(\n _before.map(([, name, attribute]) => [name, attribute])\n ), after = Object.fromEntries(\n _after.map(([, name, attribute]) => [name, attribute])\n );\n matrix.push({\n type: \"object\",\n attributes: {\n ...before,\n ...node2.attributes,\n ...after\n }\n });\n }\n }\n }\n return optimizeUnions({\n type: \"union\",\n of: matrix\n });\n}\nfunction handleOpCallNode(node, scope) {\n $trace(\"opcall.node %O\", node);\n const lhs = walk({ node: node.left, scope }), rhs = walk({ node: node.right, scope });\n return mapNode(\n lhs,\n scope,\n (left) => (\n // eslint-disable-next-line complexity, max-statements\n mapNode(rhs, scope, (right) => {\n switch ($trace('opcall.node.concrete \"%s\" %O', node.op, { left, right }), node.op) {\n case \"==\":\n return left.type === \"unknown\" || right.type === \"unknown\" ? { type: \"boolean\" } : left.type !== right.type ? {\n type: \"boolean\",\n value: !1\n } : left.type === \"null\" ? {\n type: \"boolean\",\n value: !0\n } : !isPrimitiveTypeNode(left) || !isPrimitiveTypeNode(right) ? {\n type: \"boolean\",\n value: !1\n } : {\n type: \"boolean\",\n value: evaluateComparison(node.op, left, right)\n };\n case \"!=\": {\n if (left.type === \"unknown\" || right.type === \"unknown\")\n return { type: \"boolean\" };\n if (left.type !== right.type)\n return {\n type: \"boolean\",\n value: !0\n };\n if (left.type === \"null\")\n return {\n type: \"boolean\",\n value: !1\n };\n if (!isPrimitiveTypeNode(left) || !isPrimitiveTypeNode(right))\n return {\n type: \"boolean\",\n value: !0\n };\n let value = evaluateComparison(\"==\", left, right);\n return value !== void 0 && (value = !value), {\n type: \"boolean\",\n value\n };\n }\n case \">\":\n case \">=\":\n case \"<\":\n case \"<=\":\n return left.type === \"unknown\" || right.type === \"unknown\" ? nullUnion({ type: \"boolean\" }) : left.type !== right.type ? { type: \"null\" } : left.type === \"string\" && right.type === \"string\" && isDateTime(left) !== isDateTime(right) ? { type: \"null\" } : !isPrimitiveTypeNode(left) || !isPrimitiveTypeNode(right) ? { type: \"null\" } : {\n type: \"boolean\",\n value: evaluateComparison(node.op, left, right)\n };\n case \"in\":\n return left.type === \"unknown\" || right.type === \"unknown\" ? nullUnion({ type: \"boolean\" }) : right.type !== \"array\" ? isFuncCall(node.right, \"global::path\") ? { type: \"boolean\" } : { type: \"null\" } : !isPrimitiveTypeNode(left) && left.type !== \"null\" ? {\n type: \"boolean\",\n value: !1\n } : mapNode(right.of, scope, (arrayTypeNode) => arrayTypeNode.type === \"unknown\" ? nullUnion({ type: \"boolean\" }) : left.type === \"null\" ? {\n type: \"boolean\",\n value: arrayTypeNode.type === \"null\"\n } : left.value === void 0 ? {\n type: \"boolean\"\n } : isPrimitiveTypeNode(arrayTypeNode) ? arrayTypeNode.value === void 0 ? {\n type: \"boolean\"\n } : {\n type: \"boolean\",\n value: left.value === arrayTypeNode.value\n } : {\n type: \"boolean\",\n value: !1\n });\n case \"match\":\n return left.type === \"unknown\" || right.type === \"unknown\" ? { type: \"boolean\" } : containsDateTime(left) || containsDateTime(right) ? { type: \"boolean\", value: !1 } : {\n type: \"boolean\",\n value: match(left, right)\n };\n case \"+\":\n return left.type === \"unknown\" || right.type === \"unknown\" ? { type: \"unknown\" } : isDateTime(left) && right.type === \"number\" || left.type === \"number\" && isDateTime(right) ? dateTimeString() : isString(left) && isString(right) ? {\n type: \"string\",\n value: left.value !== void 0 && right.value !== void 0 ? left.value + right.value : void 0\n } : left.type === \"number\" && right.type === \"number\" ? {\n type: \"number\",\n value: left.value !== void 0 && right.value !== void 0 ? left.value + right.value : void 0\n } : left.type === \"array\" && right.type === \"array\" ? {\n type: \"array\",\n of: {\n type: \"union\",\n of: [left.of, right.of]\n }\n } : left.type === \"object\" && right.type === \"object\" ? {\n type: \"object\",\n attributes: { ...left.attributes, ...right.attributes }\n } : { type: \"null\" };\n case \"-\":\n return isDateTime(left) && isDateTime(right) ? { type: \"number\" } : isDateTime(left) && right.type === \"unknown\" ? nullUnion({\n type: \"union\",\n of: [{ type: \"number\" }, dateTimeString()]\n }) : isDateTime(left) && right.type === \"number\" ? dateTimeString() : left.type === \"unknown\" ? nullUnion({\n type: \"union\",\n of: [{ type: \"number\" }, dateTimeString()]\n }) : right.type === \"unknown\" ? nullUnion({ type: \"number\" }) : left.type === \"number\" && right.type === \"number\" ? {\n type: \"number\",\n value: left.value !== void 0 && right.value !== void 0 ? left.value - right.value : void 0\n } : { type: \"null\" };\n case \"*\":\n return left.type === \"unknown\" || right.type === \"unknown\" ? nullUnion({ type: \"number\" }) : left.type === \"number\" && right.type === \"number\" ? {\n type: \"number\",\n value: left.value !== void 0 && right.value !== void 0 ? left.value * right.value : void 0\n } : { type: \"null\" };\n case \"/\":\n return left.type === \"unknown\" || right.type === \"unknown\" ? nullUnion({ type: \"number\" }) : left.type === \"number\" && right.type === \"number\" ? {\n type: \"number\",\n value: left.value !== void 0 && right.value !== void 0 ? left.value / right.value : void 0\n } : { type: \"null\" };\n case \"**\":\n return left.type === \"unknown\" || right.type === \"unknown\" ? nullUnion({ type: \"number\" }) : left.type === \"number\" && right.type === \"number\" ? {\n type: \"number\",\n value: left.value !== void 0 && right.value !== void 0 ? left.value ** right.value : void 0\n } : { type: \"null\" };\n case \"%\":\n return left.type === \"unknown\" || right.type === \"unknown\" ? nullUnion({ type: \"number\" }) : left.type === \"number\" && right.type === \"number\" ? {\n type: \"number\",\n value: left.value !== void 0 && right.value !== void 0 ? left.value % right.value : void 0\n } : { type: \"null\" };\n default:\n return {\n type: \"unknown\"\n };\n }\n })\n )\n );\n}\nfunction handleSelectNode(node, scope) {\n const values = [];\n let guaranteed = !1;\n for (const alternative of node.alternatives) {\n const conditionValue = walk({ node: alternative.condition, scope }), conditionScope = resolveFilter(alternative.condition, scope);\n conditionScope.type === \"union\" && conditionScope.of.length > 0 && values.push(walk({ node: alternative.value, scope: scope.createHidden(conditionScope.of) })), conditionValue.type === \"boolean\" && conditionValue.value === !0 && (guaranteed = !0);\n }\n return node.fallback && !guaranteed && values.push(walk({ node: node.fallback, scope })), values.length === 0 ? { type: \"null\" } : {\n type: \"union\",\n of: values\n };\n}\nfunction handleArrayCoerceNode(node, scope) {\n const base = walk({ node: node.base, scope });\n return $trace(\"arrayCoerce.base %O\", base), mapArray(base, scope, (base2) => base2);\n}\nfunction handleFlatMap(node, scope) {\n const base = walk({ node: node.base, scope });\n return mapArray(base, scope, (base2) => {\n const inner = walk({ node: node.expr, scope: scope.createHidden([base2.of]) });\n return mapNode(\n inner,\n scope,\n (inner2) => inner2.type === \"array\" ? inner2 : { type: \"array\", of: inner2 },\n (nodes) => {\n const inner2 = [];\n for (const node2 of nodes) {\n if (node2.type === \"unknown\") return { type: \"array\", of: node2 };\n if (node2.type !== \"array\") throw new Error(`Unexpected type: ${node2.type}`);\n inner2.push(node2.of);\n }\n return {\n type: \"array\",\n of: optimizeUnions({ type: \"union\", of: inner2 })\n };\n }\n );\n });\n}\nfunction handleMap(node, scope) {\n const base = walk({ node: node.base, scope });\n return $trace(\"map.base %O\", base), mapArray(base, scope, (base2) => ({\n type: \"array\",\n of: walk({ node: node.expr, scope: scope.createHidden([base2.of]) })\n }));\n}\nfunction handleProjectionNode(node, scope) {\n const base = walk({ node: node.base, scope });\n return $trace(\"projection.base %O\", base), mapObject(\n base,\n scope,\n (base2) => walk({ node: node.expr, scope: scope.createNested([base2]) })\n );\n}\nfunction createFilterScope(base, scope) {\n return base.type === \"array\" ? base.of.type === \"union\" ? scope.createNested(base.of.of) : scope.createNested([base.of]) : scope.createNested([base]);\n}\nfunction handleFilterNode(node, scope) {\n const base = walk({ node: node.base, scope });\n return $trace(\"filter.base %O\", base), mapNode(base, scope, (base2) => {\n if ($trace(\"filter.resolving %O\", base2), base2.type === \"null\")\n return base2;\n const resolved = resolveFilter(node.expr, createFilterScope(base2, scope));\n return $trace(\"filter.resolved %O\", resolved), {\n type: \"array\",\n of: resolved\n };\n });\n}\nfunction handleAccessAttributeNode(node, scope) {\n let attributeBase = scope.value;\n return node.base && (attributeBase = walk({ node: node.base, scope })), $trace(\"accessAttribute.base %s %O\", node.name, attributeBase), handleAccessAttributeBase(attributeBase, node.name, scope);\n}\nfunction handleAccessAttributeBase(base, name, scope) {\n return mapObject(base, scope, (base2) => {\n $trace('Looking for attribute \"%s\" in object %O', name, base2);\n const attribute = base2.attributes[name];\n return attribute !== void 0 ? ($debug(`accessAttribute.attribute found ${name} %O`, attribute), attribute.optional ? nullUnion(attribute.value) : attribute.value) : base2.rest ? handleAccessAttributeBase(base2.rest, name, scope) : ($warn(`attribute \"${name}\" not found in object`), { type: \"null\" });\n });\n}\nfunction handleAccessElementNode(node, scope) {\n const base = walk({ node: node.base, scope });\n return $trace(\"accessElement.base %O\", base), mapArray(base, scope, (base2) => nullUnion(base2.of));\n}\nfunction handleArrayNode(node, scope) {\n const of = [];\n for (const el of node.elements) {\n const node2 = walk({ node: el.value, scope });\n if (el.isSplat) {\n if (node2.type !== \"array\")\n continue;\n of.push(node2.of);\n } else\n of.push(node2);\n }\n return {\n type: \"array\",\n of: {\n type: \"union\",\n of\n }\n };\n}\nfunction handleValueNode(node, scope) {\n if (node.value === null)\n return { type: \"null\" };\n switch (typeof node.value) {\n case \"string\":\n return {\n type: \"string\",\n value: node.value\n };\n case \"number\":\n return {\n type: \"number\",\n value: node.value\n };\n case \"boolean\":\n return {\n type: \"boolean\",\n value: node.value\n };\n case \"object\":\n return node.value === null ? { type: \"null\" } : Array.isArray(node.value) ? {\n type: \"array\",\n of: {\n type: \"union\",\n of: node.value.map((value) => walk({ node: { type: \"Value\", value }, scope }))\n }\n } : {\n type: \"object\",\n attributes: Object.fromEntries(\n Object.entries(node.value).map(([key, value]) => [\n key,\n {\n type: \"objectAttribute\",\n value: walk({ node: { type: \"Value\", value }, scope })\n }\n ])\n )\n };\n default:\n return { type: \"unknown\" };\n }\n}\nfunction handleSlice(node, scope) {\n $trace(\"slice.node %O\", node);\n const base = walk({ node: node.base, scope });\n return mapArray(base, scope, (base2) => base2);\n}\nfunction handleParentNode({ n }, scope) {\n $trace(\"handle.parent.currentScope %d %O\", n, scope);\n let current = scope;\n for (let i = 0; i < n; i++) {\n for (; current?.isHidden; )\n current = current.parent;\n current = current?.parent;\n }\n return $trace(\"handle.parent.newScope %d %O\", n, current), current ? current.value.of.length === 0 ? { type: \"null\" } : current.value : { type: \"null\" };\n}\nfunction handleNotNode(node, scope) {\n const base = walk({ node: node.base, scope });\n return mapNode(base, scope, (base2) => base2.type === \"unknown\" ? nullUnion({ type: \"boolean\" }) : base2.type === \"boolean\" ? base2.value !== void 0 ? { type: \"boolean\", value: base2.value === !1 } : { type: \"boolean\" } : { type: \"null\" });\n}\nfunction handleNegNode(node, scope) {\n const base = walk({ node: node.base, scope });\n return mapNode(base, scope, (base2) => base2.type === \"unknown\" ? nullUnion({ type: \"number\" }) : base2.type !== \"number\" ? { type: \"null\" } : base2.value !== void 0 ? { type: \"number\", value: -base2.value } : base2);\n}\nfunction handlePosNode(node, scope) {\n const base = walk({ node: node.base, scope });\n return mapNode(base, scope, (base2) => base2.type === \"unknown\" ? nullUnion({ type: \"number\" }) : base2.type !== \"number\" ? { type: \"null\" } : base2);\n}\nfunction handleEverythingNode(_, scope) {\n return {\n type: \"array\",\n of: {\n type: \"union\",\n of: scope.context.schema.filter((obj) => obj.type === \"document\").map((doc) => ({\n type: \"object\",\n attributes: doc.attributes\n }))\n }\n };\n}\nfunction handleAndNode(node, scope) {\n const left = walk({ node: node.left, scope }), right = walk({ node: node.right, scope });\n return mapNode(\n left,\n scope,\n (lhs) => mapNode(right, scope, (rhs) => {\n const value = booleanAnd(booleanValue(lhs, scope), booleanValue(rhs, scope));\n return booleanInterpretationToTypeNode(value);\n })\n );\n}\nfunction handleOrNode(node, scope) {\n const left = walk({ node: node.left, scope }), right = walk({ node: node.right, scope });\n return mapNode(\n left,\n scope,\n (lhs) => mapNode(right, scope, (rhs) => {\n const value = booleanOr(booleanValue(lhs, scope), booleanValue(rhs, scope));\n return booleanInterpretationToTypeNode(value);\n })\n );\n}\nconst OVERRIDE_TYPE_SYMBOL = /* @__PURE__ */ Symbol(\"groq-js.type\");\nfunction walk({ node, scope }) {\n if (OVERRIDE_TYPE_SYMBOL in node)\n return node[OVERRIDE_TYPE_SYMBOL];\n switch (node.type) {\n // Filtering, traversal & projections\n case \"Map\":\n return handleMap(node, scope);\n case \"Projection\":\n return handleProjectionNode(node, scope);\n case \"Filter\":\n return handleFilterNode(node, scope);\n case \"AccessAttribute\":\n return optimizeUnions(handleAccessAttributeNode(node, scope));\n case \"AccessElement\":\n return handleAccessElementNode(node, scope);\n case \"ArrayCoerce\":\n return handleArrayCoerceNode(node, scope);\n case \"FlatMap\":\n return handleFlatMap(node, scope);\n // Operations\n case \"OpCall\":\n return handleOpCallNode(node, scope);\n case \"And\":\n return handleAndNode(node, scope);\n case \"Or\":\n return handleOrNode(node, scope);\n case \"Select\":\n return handleSelectNode(node, scope);\n case \"PipeFuncCall\":\n return walk({ node: node.base, scope });\n // Values\n case \"Deref\":\n return handleDerefNode(node, scope);\n case \"Object\":\n return handleObjectNode(node, scope);\n case \"Value\":\n return handleValueNode(node, scope);\n case \"Array\":\n return handleArrayNode(node, scope);\n // Special cases\n case \"Everything\":\n return handleEverythingNode(node, scope);\n case \"This\":\n return $trace(\"this %O\", scope.value), scope.value;\n case \"Parent\":\n return handleParentNode(node, scope);\n case \"FuncCall\":\n return handleFuncCallNode(node, scope);\n case \"Group\":\n return walk({ node: node.base, scope });\n case \"Not\":\n return handleNotNode(node, scope);\n case \"Parameter\":\n return {\n type: \"unknown\"\n };\n case \"Slice\":\n return handleSlice(node, scope);\n case \"Neg\":\n return handleNegNode(node, scope);\n case \"Pos\":\n return handlePosNode(node, scope);\n // everything else\n case \"Asc\":\n case \"Desc\":\n case \"Context\":\n case \"Tuple\":\n case \"SelectorFuncCall\":\n case \"SelectorNested\":\n case \"InRange\":\n return { type: \"unknown\" };\n default:\n throw new Error(`unknown node type ${node.type}`);\n }\n}\nfunction isPrimitiveTypeNode(node) {\n return node.type === \"string\" || node.type === \"number\" || node.type === \"boolean\";\n}\nfunction evaluateComparison(opcall, left, right) {\n if (!(left.value === void 0 || right.value === void 0))\n switch (opcall) {\n case \"==\":\n return left.value === right.value;\n case \"<\":\n return left.value < right.value;\n case \"<=\":\n return left.value <= right.value;\n case \">\":\n return left.value > right.value;\n case \">=\":\n return left.value >= right.value;\n default:\n throw new Error(`unknown comparison operator ${opcall}`);\n }\n}\nfunction resolveFilter(expr, scope) {\n $trace(\"resolveFilter.expr %O\", expr);\n const filtered = [], assertions = extractNarrowingAssertions(expr);\n for (const node of scope.value.of) {\n const subScope = scope.createHidden([node]), cond = walk({ node: expr, scope: subScope }), boolResult = booleanValue(cond, subScope);\n if (boolResult.canBeTrue)\n if (boolResult.canBeFalse && assertions.length > 0) {\n const narrowedNode = narrowNode(node, assertions), narrowedScope = scope.createHidden([narrowedNode]), narrowedCond = walk({ node: expr, scope: narrowedScope }), narrowedBoolResult = booleanValue(narrowedCond, narrowedScope);\n narrowedBoolResult.canBeTrue && !narrowedBoolResult.canBeFalse ? filtered.push(narrowedNode) : filtered.push(node);\n } else\n filtered.push(node);\n }\n return $trace(\n `resolveFilter ${expr.type === \"OpCall\" ? `${expr.type}/${expr.op}` : expr.type} %O`,\n filtered\n ), { type: \"union\", of: filtered };\n}\nfunction mapArray(node, scope, mapper) {\n return mapNode(node, scope, (base) => base.type === \"unknown\" ? base : base.type === \"array\" ? mapper(base) : { type: \"null\" });\n}\nfunction mapObject(node, scope, mapper) {\n return mapNode(node, scope, (base) => base.type === \"unknown\" ? base : base.type === \"object\" ? mapper(base) : { type: \"null\" });\n}\nexport {\n DateTime,\n GroqSyntaxError,\n Path,\n createReferenceTypeNode,\n evaluateQuery as evaluate,\n evaluateQuerySync as evaluateSync,\n isSelectorNested,\n isSelectorNode,\n parse,\n toJS,\n typeEvaluate,\n unparse\n};\n//# sourceMappingURL=1.mjs.map\n","import { parse, evaluate } from \"groq-js\";\nconst ERR_PREFIX = \"[client-fake-for-test]\";\nfunction fakeError(message) {\n return new Error(`${ERR_PREFIX} ${message}`);\n}\nclass WriteAccessDeniedError extends Error {\n documentId;\n permission;\n matchingGrants;\n constructor(args) {\n super(\n `Sanity (test): permission denied \\u2014 actor lacks \"${args.permission}\" on document \"${args.documentId}\" (${args.matchingGrants} grant${args.matchingGrants === 1 ? \"\" : \"s\"} matched the document but none included \"${args.permission}\").`\n ), this.name = \"WriteAccessDeniedError\", this.documentId = args.documentId, this.permission = args.permission, this.matchingGrants = args.matchingGrants;\n }\n}\nasync function canAccess(args) {\n return (await evaluateWriteAccess(args)).allowed;\n}\nconst parsedFilters = /* @__PURE__ */ new Map();\nasync function matchesFilter(args) {\n const { document, filter, userId } = args;\n parsedFilters.has(filter) || parsedFilters.set(filter, parse(`*[${filter}]`));\n const ast = parsedFilters.get(filter), data = await (await evaluate(ast, {\n dataset: [document],\n identity: userId\n })).get();\n return Array.isArray(data) && data.length === 1;\n}\nasync function evaluateWriteAccess(args) {\n const { document, grants, permission, userId } = args;\n let matching = 0;\n for (const grant of grants)\n if (await matchesFilter({\n document,\n filter: grant.filter,\n userId\n }) && (matching++, grant.permissions.includes(permission)))\n return { allowed: !0, matchingGrants: matching };\n return { allowed: !1, matchingGrants: matching };\n}\nasync function enforceWriteAccess(args) {\n const { document, grants, permission, userId } = args, { allowed, matchingGrants } = await evaluateWriteAccess({\n document,\n grants,\n permission,\n userId\n });\n if (!allowed)\n throw typeof document._id != \"string\" ? new WriteAccessDeniedError({\n documentId: \"(unknown)\",\n permission,\n matchingGrants\n }) : new WriteAccessDeniedError({\n documentId: document._id,\n permission,\n matchingGrants\n });\n}\nfunction defaultAclPath(projectId, dataset) {\n return `/projects/${projectId}/datasets/${dataset}/acl`;\n}\nfunction makeRequestImpl(accessControl, projectId, dataset) {\n const aclPath = accessControl.aclPath ?? defaultAclPath(projectId, dataset);\n return async (opts) => {\n const path = opts.uri ?? opts.url;\n if (path === \"/users/me\")\n return accessControl.currentUser;\n if (path === aclPath)\n return accessControl.grants;\n throw fakeError(\n `request(): no handler for path \"${path}\". With accessControl configured, the fake only serves \"/users/me\" and \"${aclPath}\". For any other endpoint, register a stub (client.stub(\"request\", fn)) or intercept the HTTP call with a tool like MSW.`\n );\n };\n}\nfunction createTestStore(initial) {\n const docs = /* @__PURE__ */ new Map(), promote2 = (doc) => {\n if (typeof doc._id != \"string\" || doc._id.length === 0)\n throw fakeError(\n `Cannot seed/store a document without a non-empty string \\`_id\\` (got ${JSON.stringify(doc._id)}). This fake never auto-generates ids \\u2014 give every document an explicit _id. Document: ${JSON.stringify(doc)}`\n );\n if (typeof doc._type != \"string\" || doc._type.length === 0)\n throw fakeError(\n `Document \"${doc._id}\" is missing a non-empty string \\`_type\\` (got ${JSON.stringify(doc._type)}). Every Sanity document needs a _type.`\n );\n const now = (/* @__PURE__ */ new Date()).toISOString();\n return {\n ...doc,\n _id: doc._id,\n _type: doc._type,\n _rev: doc._rev ?? cryptoRandomKey(),\n _createdAt: doc._createdAt ?? now,\n _updatedAt: doc._updatedAt ?? now\n };\n }, seed = (documents) => {\n docs.clear();\n for (const d of documents) {\n const promoted = promote2(d);\n docs.set(promoted._id, promoted);\n }\n };\n return initial && seed(initial), {\n seed,\n add: (documents) => {\n for (const d of documents) {\n const promoted = promote2(d);\n docs.set(promoted._id, promoted);\n }\n },\n reset: () => docs.clear(),\n all: () => [...docs.values()],\n get: (id) => docs.get(id),\n put: (doc) => {\n docs.set(doc._id, doc);\n },\n remove: (id) => {\n const doc = docs.get(id);\n return doc && docs.delete(id), doc;\n },\n snapshot: () => [...docs.values()]\n };\n}\nfunction cryptoRandomKey(length = 12) {\n const bytes = new Uint8Array(length);\n return globalThis.crypto.getRandomValues(bytes), [...bytes].map((b) => b.toString(16).padStart(2, \"0\")).join(\"\").slice(0, length);\n}\nfunction describeType(value) {\n return value === null ? \"null\" : Array.isArray(value) ? \"an array\" : `a ${typeof value}`;\n}\nfunction createPatch(documentId, executor) {\n const ops = [];\n let ifRev;\n const handle = {\n set: (props) => (ops.push({ kind: \"set\", props }), handle),\n setIfMissing: (props) => (ops.push({ kind: \"setIfMissing\", props }), handle),\n unset: (paths) => (ops.push({ kind: \"unset\", paths }), handle),\n inc: (props) => (ops.push({ kind: \"inc\", props }), handle),\n dec: (props) => (ops.push({ kind: \"dec\", props }), handle),\n insert: (position, anchor, items) => (ops.push({ kind: \"insert\", position, anchor, items }), handle),\n ifRevisionId: (rev) => (ifRev = rev, handle),\n commit: () => executor.apply(documentId, ops, ifRev),\n toJSON: () => ({\n id: documentId,\n ops: [...ops],\n ...ifRev !== void 0 ? { ifRev } : {}\n })\n };\n return handle;\n}\nfunction applyPatchOps(doc, ops) {\n let next = structuredClone(doc);\n for (const op of ops)\n next = applyOne(next, op);\n return next;\n}\nfunction applyOne(doc, op) {\n switch (op.kind) {\n case \"set\":\n for (const [path, value] of Object.entries(op.props))\n setAtPath(doc, path, value);\n return doc;\n case \"setIfMissing\":\n for (const [path, value] of Object.entries(op.props))\n getAtPath(doc, path) === void 0 && setAtPath(doc, path, value);\n return doc;\n case \"unset\":\n for (const path of op.paths)\n unsetAtPath(doc, path);\n return doc;\n case \"inc\":\n for (const [path, delta] of Object.entries(op.props)) {\n const current = getAtPath(doc, path);\n setAtPath(doc, path, (typeof current == \"number\" ? current : 0) + delta);\n }\n return doc;\n case \"dec\":\n for (const [path, delta] of Object.entries(op.props)) {\n const current = getAtPath(doc, path);\n setAtPath(doc, path, (typeof current == \"number\" ? current : 0) - delta);\n }\n return doc;\n case \"insert\":\n return insertIntoArray(doc, op.position, op.anchor, op.items), doc;\n }\n}\nfunction parsePath(path) {\n const segments = [];\n for (const raw of path.split(\".\")) {\n const match = /^([A-Za-z_$][\\w$]*)(?:\\[(.+)\\])?$/.exec(raw);\n if (!match)\n throw fakeError(\n `Unsupported patch path segment \"${raw}\" (in path \"${path}\"). This fake supports dotted field access (\"a.b.c\"), array index (\"items[0]\"), and keyed lookup (\\`items[_key==\"x\"]\\`). Recursive descent (\"..\") and GROQ filter expressions are not supported.`\n );\n const key = match[1], selectorRaw = match[2];\n if (selectorRaw === void 0) {\n segments.push({ key });\n continue;\n }\n const indexMatch = /^(\\d+)$/.exec(selectorRaw);\n if (indexMatch) {\n segments.push({ key, selector: { kind: \"index\", index: Number(indexMatch[1]) } });\n continue;\n }\n const keyedMatch = /^([A-Za-z_$][\\w$]*)\\s*==\\s*\"([^\"]*)\"$/.exec(selectorRaw);\n if (keyedMatch) {\n segments.push({\n key,\n selector: { kind: \"keyed\", field: keyedMatch[1], value: keyedMatch[2] }\n });\n continue;\n }\n throw fakeError(\n `Unsupported array selector \"[${selectorRaw}]\" in patch path \"${path}\". Supported selectors are a numeric index (e.g. \"[0]\") and a single keyed match (e.g. \\`[_key==\"abc\"]\\`). Multi-key matches and arbitrary GROQ filters are not supported.`\n );\n }\n return segments;\n}\nfunction resolveSelector(array, selector) {\n if (selector.kind === \"index\") return selector.index;\n const idx = array.findIndex(\n (entry) => typeof entry == \"object\" && entry !== null && entry[selector.field] === selector.value\n );\n if (idx === -1)\n throw fakeError(\n `Patch path matched no array entry where ${selector.field}==\"${selector.value}\". The array has ${array.length} item(s); check the key exists (and that you're patching the right document).`\n );\n return idx;\n}\nfunction getAtPath(doc, path) {\n const segments = parsePath(path);\n let cursor = doc;\n for (const seg of segments) {\n if (cursor == null) return;\n if (cursor = cursor[seg.key], seg.selector !== void 0) {\n if (!Array.isArray(cursor)) return;\n const idx = resolveSelector(cursor, seg.selector);\n cursor = cursor[idx];\n }\n }\n return cursor;\n}\nfunction setAtPath(doc, path, value) {\n const segments = parsePath(path);\n if (segments.length === 0)\n throw fakeError(\"Empty patch path \\u2014 a set/setIfMissing op needs a target field.\");\n let cursor = doc;\n for (let i = 0; i < segments.length - 1; i++) {\n const seg = segments[i];\n let next = cursor[seg.key];\n if (next === void 0 && (next = seg.selector?.kind === \"index\" || seg.selector?.kind === \"keyed\" ? [] : {}, cursor[seg.key] = next), seg.selector !== void 0) {\n if (!Array.isArray(next))\n throw fakeError(\n `Patch path \"${path}\" applies an array selector to field \"${seg.key}\", but that field holds ${describeType(next)}, not an array.`\n );\n const idx = resolveSelector(next, seg.selector);\n cursor = next[idx];\n } else\n cursor = next;\n }\n const last = segments[segments.length - 1];\n if (last.selector !== void 0) {\n const arr = cursor[last.key];\n if (!Array.isArray(arr))\n throw fakeError(\n `Patch path \"${path}\" applies an array selector to field \"${last.key}\", but that field holds ${describeType(arr)}, not an array.`\n );\n const idx = resolveSelector(arr, last.selector);\n arr[idx] = value;\n } else\n cursor[last.key] = value;\n}\nfunction unsetAtPath(doc, path) {\n const segments = parsePath(path);\n if (segments.length === 0) return;\n let cursor = doc;\n for (let i = 0; i < segments.length - 1; i++) {\n const seg = segments[i];\n let next = cursor[seg.key];\n if (next == null) return;\n if (seg.selector !== void 0) {\n if (!Array.isArray(next)) return;\n const idx = resolveSelector(next, seg.selector);\n next = next[idx];\n }\n cursor = next;\n }\n const last = segments[segments.length - 1];\n if (last.selector !== void 0) {\n const arr = cursor[last.key];\n if (!Array.isArray(arr)) return;\n const idx = resolveSelector(arr, last.selector);\n arr.splice(idx, 1);\n } else\n delete cursor[last.key];\n}\nfunction insertIntoArray(doc, position, anchor, items) {\n const segments = parsePath(anchor);\n if (segments.length === 0)\n throw fakeError(\"Empty insert anchor \\u2014 insert() needs an array path to anchor against.\");\n const last = segments[segments.length - 1];\n if (last.selector === void 0)\n throw fakeError(\n `Insert anchor \"${anchor}\" must end with an array selector (an index like \"[0]\" or a keyed match like \\`[_key==\"x\"]\\`) so the fake knows where in the array to insert.`\n );\n let cursor = doc;\n for (let i = 0; i < segments.length - 1; i++) {\n const seg = segments[i], next = cursor[seg.key];\n if (next == null)\n throw fakeError(\n `Insert anchor \"${anchor}\" traverses field \"${seg.key}\", which is missing on the document. setIfMissing the parent first, or anchor against an existing array.`\n );\n if (seg.selector !== void 0) {\n if (!Array.isArray(next))\n throw fakeError(\n `Insert anchor \"${anchor}\" applies an array selector to field \"${seg.key}\", but it holds ${describeType(next)}, not an array.`\n );\n cursor = next[resolveSelector(next, seg.selector)];\n } else\n cursor = next;\n }\n const arr = cursor[last.key];\n if (!Array.isArray(arr))\n throw fakeError(\n `Insert anchor \"${anchor}\" targets field \"${last.key}\", but it holds ${describeType(arr)}, not an array.`\n );\n const idx = resolveSelector(arr, last.selector);\n position === \"replace\" ? arr.splice(idx, 1, ...items) : position === \"before\" ? arr.splice(idx, 0, ...items) : arr.splice(idx + 1, 0, ...items);\n}\nconst RELEASE_DOC_PREFIX$1 = \"_.releases.\", VERSIONS_PREFIX$1 = \"versions.\", releaseDocId = (releaseId) => `${RELEASE_DOC_PREFIX$1}${releaseId}`, versionDocId = (releaseId, publishedId) => `${VERSIONS_PREFIX$1}${releaseId}.${publishedId}`;\nfunction parseVersionId(versionId) {\n if (!versionId.startsWith(VERSIONS_PREFIX$1))\n throw fakeError(\n `\"${versionId}\" is not a version document id. Version ids look like \"versions.<releaseId>.<publishedId>\" (e.g. \"versions.summer-drop.product-1\").`\n );\n const rest = versionId.slice(VERSIONS_PREFIX$1.length), dot = rest.indexOf(\".\");\n if (dot === -1)\n throw fakeError(\n `\"${versionId}\" is not a version document id. Version ids look like \"versions.<releaseId>.<publishedId>\" (e.g. \"versions.summer-drop.product-1\").`\n );\n return { releaseId: rest.slice(0, dot), publishedId: rest.slice(dot + 1) };\n}\nfunction getRelease(store, releaseId) {\n const doc = store.get(releaseDocId(releaseId));\n if (doc === void 0)\n throw fakeError(\n `Release \"${releaseId}\" not found. Create it first with client.releases.create({ releaseId: \"${releaseId}\" }) (or a \"sanity.action.release.create\" action) before editing, scheduling, or adding versions to it.`\n );\n return doc;\n}\nfunction maybeRelease(store, releaseId) {\n return store.get(releaseDocId(releaseId));\n}\nfunction nowIso() {\n return (/* @__PURE__ */ new Date()).toISOString();\n}\nfunction promote(doc) {\n const now = nowIso();\n return {\n ...doc,\n _id: doc._id,\n _type: doc._type,\n _rev: cryptoRandomKey(),\n _createdAt: doc._createdAt ?? now,\n _updatedAt: now\n };\n}\nfunction bumpRev(doc, patch) {\n return {\n ...doc,\n ...patch,\n _rev: cryptoRandomKey(),\n _updatedAt: nowIso()\n };\n}\nfunction requireActive(release) {\n if (release.state !== \"active\")\n throw fakeError(\n `Release \"${release.name}\" is \"${release.state}\", but only \"active\" releases accept version writes (create / replace / discard / unpublish). Unschedule or unarchive it back to \"active\" first, or target a different release.`\n );\n}\nfunction applyAction(store, action) {\n switch (action.actionType) {\n case \"sanity.action.release.create\": {\n if (maybeRelease(store, action.releaseId) !== void 0)\n throw fakeError(\n `Release \"${action.releaseId}\" already exists. release.create expects a new releaseId; use release.edit to change its metadata, or pick a different releaseId.`\n );\n const now = nowIso(), metadata = {\n releaseType: \"undecided\",\n ...action.metadata\n }, doc = {\n _id: releaseDocId(action.releaseId),\n _type: \"system.release\",\n _rev: cryptoRandomKey(),\n _createdAt: now,\n _updatedAt: now,\n name: action.releaseId,\n state: \"active\",\n metadata\n };\n return store.put(doc), { transactionId: cryptoRandomKey() };\n }\n case \"sanity.action.release.edit\": {\n const release = getRelease(store, action.releaseId), patchOps = [];\n action.patch.set !== void 0 && patchOps.push({ kind: \"set\", props: action.patch.set }), action.patch.unset !== void 0 && patchOps.push({ kind: \"unset\", paths: action.patch.unset });\n const patched = applyPatchOps(release, patchOps);\n return store.put(bumpRev(patched, {})), { transactionId: cryptoRandomKey() };\n }\n case \"sanity.action.release.schedule\": {\n const release = getRelease(store, action.releaseId);\n if (release.state !== \"active\")\n throw fakeError(\n `Cannot schedule release \"${action.releaseId}\": it is \"${release.state}\", and only \"active\" releases can be scheduled.`\n );\n return store.put(\n bumpRev(release, {\n state: \"scheduled\",\n publishAt: action.publishAt\n })\n ), { transactionId: cryptoRandomKey() };\n }\n case \"sanity.action.release.unschedule\": {\n const release = getRelease(store, action.releaseId);\n if (release.state !== \"scheduled\")\n throw fakeError(\n `Cannot unschedule release \"${action.releaseId}\": it is \"${release.state}\", and only \"scheduled\" releases can be unscheduled.`\n );\n const next = { ...release, state: \"active\" };\n return delete next.publishAt, store.put(bumpRev(next, {})), { transactionId: cryptoRandomKey() };\n }\n case \"sanity.action.release.publish\": {\n const release = getRelease(store, action.releaseId);\n if (release.state === \"published\")\n return { transactionId: cryptoRandomKey() };\n if (release.state !== \"active\" && release.state !== \"scheduled\")\n throw fakeError(\n `Cannot publish release \"${action.releaseId}\": it is \"${release.state}\", and only \"active\" or \"scheduled\" releases can be published.`\n );\n const prefix = `${VERSIONS_PREFIX$1}${action.releaseId}.`, sources = store.all().filter((d) => d._id.startsWith(prefix));\n for (const v of sources) {\n const pubId = v._id.slice(prefix.length);\n if (v._system?.delete === !0)\n store.remove(pubId);\n else {\n const body = {\n ...v,\n _id: pubId\n };\n delete body._originalId, delete body._system;\n const promoted = promote(body), existing = store.get(pubId);\n existing !== void 0 && (promoted._createdAt = existing._createdAt), store.put(promoted);\n }\n store.remove(v._id);\n }\n return store.put(bumpRev(release, { state: \"published\" })), { transactionId: cryptoRandomKey() };\n }\n case \"sanity.action.release.archive\": {\n const release = getRelease(store, action.releaseId);\n if (release.state !== \"active\" && release.state !== \"scheduled\")\n throw fakeError(\n `Cannot archive release \"${action.releaseId}\": it is \"${release.state}\", and only \"active\" or \"scheduled\" releases can be archived.`\n );\n return store.put(bumpRev(release, { state: \"archived\" })), { transactionId: cryptoRandomKey() };\n }\n case \"sanity.action.release.unarchive\": {\n const release = getRelease(store, action.releaseId);\n if (release.state !== \"archived\")\n throw fakeError(\n `Cannot unarchive release \"${action.releaseId}\": it is \"${release.state}\", and only \"archived\" releases can be unarchived.`\n );\n return store.put(bumpRev(release, { state: \"active\" })), { transactionId: cryptoRandomKey() };\n }\n case \"sanity.action.release.delete\": {\n const release = getRelease(store, action.releaseId);\n if (release.state !== \"archived\" && release.state !== \"published\")\n throw fakeError(\n `Cannot delete release \"${action.releaseId}\": it is \"${release.state}\", and only \"archived\" or \"published\" releases can be deleted. Archive it first (sanity.action.release.archive) or publish it.`\n );\n const prefix = `${VERSIONS_PREFIX$1}${action.releaseId}.`;\n for (const v of store.all())\n v._id.startsWith(prefix) && store.remove(v._id);\n return store.remove(release._id), { transactionId: cryptoRandomKey() };\n }\n case \"sanity.action.document.version.create\": {\n const releaseId = action.releaseId ?? (action.document._id !== void 0 ? parseVersionId(action.document._id).releaseId : void 0);\n if (releaseId === void 0)\n throw fakeError(\n 'version.create needs a release to attach to: pass `releaseId`, or a `document._id` shaped \"versions.<releaseId>.<publishedId>\" so the release can be inferred.'\n );\n const release = getRelease(store, releaseId);\n requireActive(release);\n const vid = versionDocId(releaseId, action.publishedId), doc = {\n ...action.document,\n _id: vid\n }, existing = store.get(vid), promoted = promote(doc);\n return existing !== void 0 && (promoted._createdAt = existing._createdAt), store.put(promoted), { transactionId: cryptoRandomKey() };\n }\n case \"sanity.action.document.version.replace\": {\n const id = action.document._id;\n if (typeof id != \"string\")\n throw fakeError(\n 'version.replace needs `document._id` (a version id like \"versions.<releaseId>.<publishedId>\") to identify which version document to replace.'\n );\n const { releaseId } = parseVersionId(id), release = getRelease(store, releaseId);\n requireActive(release);\n const existing = store.get(id), promoted = promote(action.document);\n return existing !== void 0 && (promoted._createdAt = existing._createdAt), store.put(promoted), { transactionId: cryptoRandomKey() };\n }\n case \"sanity.action.document.version.discard\": {\n const { releaseId } = parseVersionId(action.versionId), release = getRelease(store, releaseId);\n return requireActive(release), store.remove(action.versionId), { transactionId: cryptoRandomKey() };\n }\n case \"sanity.action.document.version.unpublish\": {\n const { releaseId } = parseVersionId(action.versionId), release = getRelease(store, releaseId);\n requireActive(release);\n const doc = {\n _id: action.versionId,\n _type: \"stub\",\n _system: { delete: !0 }\n };\n return store.put(promote(doc)), { transactionId: cryptoRandomKey() };\n }\n }\n}\nfunction applyActions(store, actions) {\n const list = Array.isArray(actions) ? actions : [actions], snapshot = /* @__PURE__ */ new Map(), remember = (id) => {\n snapshot.has(id) || snapshot.set(id, store.get(id));\n };\n try {\n let last = { transactionId: cryptoRandomKey() };\n for (const a of list) {\n switch (a.actionType) {\n case \"sanity.action.release.create\":\n case \"sanity.action.release.edit\":\n case \"sanity.action.release.schedule\":\n case \"sanity.action.release.unschedule\":\n case \"sanity.action.release.archive\":\n case \"sanity.action.release.unarchive\":\n case \"sanity.action.release.delete\":\n remember(`${RELEASE_DOC_PREFIX$1}${a.releaseId}`);\n break;\n case \"sanity.action.release.publish\": {\n remember(`${RELEASE_DOC_PREFIX$1}${a.releaseId}`);\n const prefix = `${VERSIONS_PREFIX$1}${a.releaseId}.`;\n for (const d of store.all())\n d._id.startsWith(prefix) && (remember(d._id), remember(d._id.slice(prefix.length)));\n break;\n }\n case \"sanity.action.document.version.create\": {\n const releaseId = a.releaseId ?? (typeof a.document._id == \"string\" ? parseVersionId(a.document._id).releaseId : void 0);\n releaseId !== void 0 && remember(versionDocId(releaseId, a.publishedId));\n break;\n }\n case \"sanity.action.document.version.replace\":\n typeof a.document._id == \"string\" && remember(a.document._id);\n break;\n case \"sanity.action.document.version.discard\":\n case \"sanity.action.document.version.unpublish\":\n remember(a.versionId);\n break;\n }\n last = applyAction(store, a);\n }\n return last;\n } catch (err) {\n for (const [id, doc] of snapshot)\n doc === void 0 ? store.remove(id) : store.put(doc);\n throw err;\n }\n}\nconst DRAFTS_PREFIX = \"drafts.\", VERSIONS_PREFIX = \"versions.\", RELEASE_DOC_PREFIX = \"_.releases.\";\nfunction publishedIdOf(id) {\n if (id.startsWith(DRAFTS_PREFIX)) return id.slice(DRAFTS_PREFIX.length);\n if (id.startsWith(VERSIONS_PREFIX)) {\n const rest = id.slice(VERSIONS_PREFIX.length), dot = rest.indexOf(\".\");\n return dot === -1 ? rest : rest.slice(dot + 1);\n }\n return id;\n}\nfunction releaseNameOf(id) {\n if (!id.startsWith(VERSIONS_PREFIX)) return;\n const rest = id.slice(VERSIONS_PREFIX.length), dot = rest.indexOf(\".\");\n if (dot !== -1)\n return rest.slice(0, dot);\n}\nconst isDraftId = (id) => id.startsWith(DRAFTS_PREFIX), isVersionId = (id) => id.startsWith(VERSIONS_PREFIX), isSystemId = (id) => id.startsWith(\"_.\"), isReleaseDocId = (id) => id.startsWith(RELEASE_DOC_PREFIX);\nfunction applyPerspective(docs, perspective) {\n if (perspective === \"raw\") return [...docs];\n if (perspective === \"published\")\n return docs.filter((d) => !isDraftId(d._id) && !isVersionId(d._id) && !isSystemId(d._id));\n if (perspective === \"drafts\")\n return mergeStack(docs, [], { includeDrafts: !0, includeReleaseDocs: !1 });\n const stack = [];\n let includeDrafts = !1;\n for (const entry of perspective)\n entry === \"drafts\" ? includeDrafts = !0 : stack.push(entry);\n return mergeStack(docs, stack, { includeDrafts, includeReleaseDocs: !0 });\n}\nfunction mergeStack(docs, releaseStack, options) {\n const groups = /* @__PURE__ */ new Map(), systemReleases = [];\n for (const doc of docs) {\n if (isReleaseDocId(doc._id)) {\n options.includeReleaseDocs && systemReleases.push(doc);\n continue;\n }\n if (isSystemId(doc._id)) continue;\n const pubId = publishedIdOf(doc._id);\n let group = groups.get(pubId);\n if (group === void 0 && (group = { versions: /* @__PURE__ */ new Map() }, groups.set(pubId, group)), isDraftId(doc._id))\n group.draft = doc;\n else if (isVersionId(doc._id)) {\n const releaseName = releaseNameOf(doc._id);\n releaseName !== void 0 && group.versions.set(releaseName, doc);\n } else\n group.published = doc;\n }\n const out = [];\n for (const [pubId, group] of groups) {\n let chosen;\n for (const releaseName of releaseStack) {\n const v = group.versions.get(releaseName);\n if (v !== void 0) {\n if (isUnpublishStub(v)) {\n chosen = void 0;\n break;\n }\n chosen = v;\n break;\n }\n }\n chosen === void 0 && options.includeDrafts && group.draft !== void 0 && (chosen = group.draft), chosen === void 0 && group.published !== void 0 && (releaseStack.some((name) => {\n const v = group.versions.get(name);\n return v !== void 0 && isUnpublishStub(v);\n }) || (chosen = group.published)), chosen !== void 0 && out.push(projectToPublishedId(chosen, pubId));\n }\n return [...out, ...systemReleases];\n}\nfunction isUnpublishStub(doc) {\n return doc._system?.delete === !0;\n}\nfunction projectToPublishedId(doc, pubId) {\n return doc._id === pubId ? doc : { ...doc, _id: pubId, _originalId: doc._id };\n}\nfunction resolveDocument(docs, id, perspective) {\n return perspective === \"raw\" ? docs.find((d) => d._id === id) : applyPerspective(docs, perspective).find((d) => d._id === id);\n}\nfunction createTransaction(executor) {\n const mutations = [], handle = {\n create: (doc) => (mutations.push({ kind: \"create\", doc }), handle),\n createOrReplace: (doc) => (mutations.push({ kind: \"createOrReplace\", doc }), handle),\n createIfNotExists: (doc) => (mutations.push({ kind: \"createIfNotExists\", doc }), handle),\n delete: (id) => (mutations.push({ kind: \"delete\", id }), handle),\n patch: (documentIdOrPatch, ops, ifRev) => {\n if (typeof documentIdOrPatch == \"string\")\n mutations.push({\n kind: \"patch\",\n documentId: documentIdOrPatch,\n ops: ops ?? [],\n ...ifRev !== void 0 ? { ifRev } : {}\n });\n else {\n const json = documentIdOrPatch.toJSON();\n mutations.push({\n kind: \"patch\",\n documentId: json.id,\n ops: json.ops,\n ...json.ifRev !== void 0 ? { ifRev: json.ifRev } : {}\n });\n }\n return handle;\n },\n commit: (options) => executor.apply(mutations, options),\n toJSON: () => [...mutations]\n };\n return handle;\n}\nconst ISSUES_URL = \"https://github.com/sanity-labs/client-fake-for-test/issues\", SUPPORTED_SURFACE = [\n \"fetch\",\n \"getDocument\",\n \"getDocuments\",\n \"create\",\n \"createOrReplace\",\n \"createIfNotExists\",\n \"delete\",\n \"patch\",\n \"transaction\",\n \"mutate\",\n \"action\",\n \"releases\",\n \"createVersion\",\n \"unpublishVersion\",\n \"request (only with accessControl)\",\n \"config\",\n \"withConfig\"\n], UNSUPPORTED_MEMBERS = {\n listen: {\n what: \"real-time listener (returns an RxJS Observable of mutation events)\",\n workaround: 'Test your subscription logic in isolation, or register a fake: client.stub(\"listen\", () => myFakeObservable).'\n },\n observable: {\n what: \"the RxJS-flavoured mirror of the client API\",\n workaround: \"Use the Promise-based methods and wrap them with `from()` if you need an Observable.\"\n },\n clone: {\n what: \"clone the client with the same config\",\n workaround: \"Use `withConfig({})` \\u2014 it returns a sibling handle into the same store.\"\n },\n getUrl: {\n what: \"build an absolute API URL for a path\",\n workaround: \"Hard-code the expected URL in your test, or stub it.\"\n },\n getDataUrl: {\n what: \"build an absolute data-API URL\",\n workaround: \"Hard-code the expected URL in your test, or stub it.\"\n },\n assets: {\n what: \"asset upload / metadata namespace\",\n workaround: \"Seed asset documents into the store directly with `seed()` / `add()`.\"\n },\n agent: {\n what: \"Agent Actions namespace (generate / transform / \\u2026)\",\n workaround: 'Stub the call site: client.stub(\"agent\", myFakeAgent).'\n },\n projects: {\n what: \"project-management namespace\",\n workaround: \"Out of scope for a data-plane fake \\u2014 stub the call site.\"\n },\n users: {\n what: \"user-management namespace\",\n workaround: \"Out of scope for a data-plane fake \\u2014 stub the call site.\"\n },\n live: {\n what: \"Live Content API namespace\",\n workaround: \"Out of scope \\u2014 stub the call site or test the consumer separately.\"\n },\n mediaLibrary: {\n what: \"Media Library namespace\",\n workaround: \"Out of scope \\u2014 seed documents directly or stub the call site.\"\n },\n request: {\n what: \"generic HTTP request hook \\u2014 only wired up when accessControl is configured\",\n workaround: \"Create the client with `accessControl` to enable request() (it serves /users/me + the ACL path), or register a stub.\"\n },\n dryRun: {\n what: \"not a method \\u2014 did you mean the `{ dryRun }` mutation option?\",\n workaround: \"Pass `{ dryRun: true }` as the second arg to create / mutate / delete.\"\n }\n}, PROBE_NAMES = /* @__PURE__ */ new Set([\n \"then\",\n \"catch\",\n \"finally\",\n \"toJSON\",\n \"asymmetricMatch\",\n \"$$typeof\",\n \"nodeType\",\n \"_isMockFunction\"\n]);\nfunction guardMessage(path, detail, workaround) {\n return [\n `[client-fake-for-test] \\`client.${path}\\` ${detail}`,\n \"\",\n \"This is an in-memory fake of @sanity/client. It implements:\",\n ` ${SUPPORTED_SURFACE.join(\", \")}.`,\n \"\",\n `\\u2192 ${workaround}`,\n \"\",\n `Register a stub to fill any gap: client.stub(${JSON.stringify(path.split(\".\")[0])}, handler)`,\n `If this should be supported, open an issue: ${ISSUES_URL}`\n ].join(`\n`);\n}\nfunction makeGuard(path, message) {\n const thrower = () => {\n throw new Error(message);\n };\n return new Proxy(thrower, {\n apply: () => thrower(),\n get: (_t, prop) => {\n if (typeof prop == \"symbol\" || PROBE_NAMES.has(prop)) return;\n const childPath = `${path}.${String(prop)}`, top = path.split(\".\")[0], entry = UNSUPPORTED_MEMBERS[top], detail = entry ? `is not implemented (${entry.what}).` : \"is not implemented.\", workaround = entry?.workaround ?? \"Register a stub or use a different test strategy.\";\n return makeGuard(childPath, guardMessage(childPath, detail, workaround));\n }\n });\n}\nfunction wrapRecorded(method, fn, onCall) {\n return (...args) => {\n const settle = onCall(method, args);\n try {\n const out = fn(...args);\n return out !== null && typeof out == \"object\" && typeof out.then == \"function\" ? out.then(\n (result) => (settle({ result }), result),\n (error) => {\n throw settle({ error }), error;\n }\n ) : (settle({ result: out }), out);\n } catch (error) {\n throw settle({ error }), error;\n }\n };\n}\nfunction wrapNamespace(ns, prefix, onCall) {\n return new Proxy(ns, {\n get(target, prop, receiver) {\n const value = Reflect.get(target, prop, receiver);\n return typeof prop == \"string\" && typeof value == \"function\" ? wrapRecorded(`${prefix}.${prop}`, value, onCall) : value;\n }\n });\n}\nfunction wrapWithGuards(client, config) {\n const { getStub, onCall, recorded } = config;\n return new Proxy(client, {\n get(target, prop, receiver) {\n if (typeof prop == \"symbol\") return Reflect.get(target, prop, receiver);\n if (prop in target) {\n const value = Reflect.get(target, prop, receiver);\n if (onCall !== void 0 && recorded?.has(prop) === !0) {\n if (typeof value == \"function\")\n return wrapRecorded(prop, value, onCall);\n if (value !== null && typeof value == \"object\")\n return wrapNamespace(value, prop, onCall);\n }\n return value;\n }\n if (PROBE_NAMES.has(prop)) return;\n const stub = getStub(prop);\n if (stub !== void 0) return stub;\n const entry = UNSUPPORTED_MEMBERS[prop];\n return entry !== void 0 ? makeGuard(\n prop,\n guardMessage(prop, `is not implemented (${entry.what}).`, entry.workaround)\n ) : makeGuard(\n prop,\n guardMessage(\n prop,\n \"is not a method on this fake (unknown member or unimplemented @sanity/client API).\",\n \"Check for a typo, register a stub, or use a different test strategy.\"\n )\n );\n }\n });\n}\nconst RECORDED_METHODS = /* @__PURE__ */ new Set([\n \"fetch\",\n \"getDocument\",\n \"getDocuments\",\n \"create\",\n \"createOrReplace\",\n \"createIfNotExists\",\n \"delete\",\n \"patch\",\n \"transaction\",\n \"mutate\",\n \"action\",\n \"releases\",\n \"createVersion\",\n \"unpublishVersion\",\n \"request\"\n]), DEFAULT_PROJECT_ID = \"test\", DEFAULT_DATASET = \"test\", registryKey = (projectId, dataset) => `${projectId}:${dataset}`, parseRegistryKey = (key) => {\n const [projectId, dataset] = key.split(\":\");\n return { projectId, dataset };\n};\nfunction createTestClient(options = {}) {\n const defaultProjectId = options.projectId ?? DEFAULT_PROJECT_ID, defaultDataset = options.dataset ?? DEFAULT_DATASET, backend = {\n registry: /* @__PURE__ */ new Map(),\n log: [],\n stubs: /* @__PURE__ */ new Map(),\n calls: [],\n concurrentEdits: /* @__PURE__ */ new Map()\n }, registry = backend.registry, ensureStore = (projectId, dataset) => {\n const key = registryKey(projectId, dataset);\n let store = registry.get(key);\n return store === void 0 && (store = createTestStore(), registry.set(key, store)), store;\n };\n if (options.documents && ensureStore(defaultProjectId, defaultDataset).seed(options.documents), options.datasets)\n for (const [key, docs] of Object.entries(options.datasets)) {\n const { projectId, dataset } = parseRegistryKey(key);\n ensureStore(projectId, dataset).seed(docs);\n }\n return makeHandle(\n backend,\n defaultProjectId,\n defaultDataset,\n options.accessControl,\n options.perspective ?? \"raw\",\n options.mutationGuard\n );\n}\nfunction dedupeIds(results) {\n const seen = /* @__PURE__ */ new Set(), out = [];\n for (const r of results)\n seen.has(r.id) || (seen.add(r.id), out.push(r.id));\n return out;\n}\nfunction formatMutationResult(documents, results, transactionId, returnDocuments, returnFirst) {\n return returnDocuments ? returnFirst ? documents[0] : documents : returnFirst ? {\n transactionId,\n documentId: results[0]?.id,\n results\n } : {\n transactionId,\n documentIds: dedupeIds(results),\n results\n };\n}\nfunction toSingleTxnMutation(op) {\n if (\"create\" in op) return { kind: \"create\", doc: op.create };\n if (\"createOrReplace\" in op) return { kind: \"createOrReplace\", doc: op.createOrReplace };\n if (\"createIfNotExists\" in op) return { kind: \"createIfNotExists\", doc: op.createIfNotExists };\n if (\"delete\" in op) return { kind: \"delete\", id: op.delete.id };\n const p = op.patch, ops = [];\n if (p.set !== void 0 && ops.push({ kind: \"set\", props: p.set }), p.setIfMissing !== void 0 && ops.push({ kind: \"setIfMissing\", props: p.setIfMissing }), p.unset !== void 0 && ops.push({ kind: \"unset\", paths: p.unset }), p.inc !== void 0 && ops.push({ kind: \"inc\", props: p.inc }), p.dec !== void 0 && ops.push({ kind: \"dec\", props: p.dec }), p.insert !== void 0) {\n const { before, after, replace, items } = p.insert, position = before !== void 0 ? \"before\" : after !== void 0 ? \"after\" : \"replace\", anchor = before ?? after ?? replace;\n if (anchor === void 0)\n throw fakeError(\n 'mutate(): a `patch.insert` operation must name exactly one anchor \\u2014 `before`, `after`, or `replace` \\u2014 pointing at an array path (e.g. \"tags[-1]\" or `tags[_key==\"x\"]`), alongside `items`. None was set.'\n );\n ops.push({ kind: \"insert\", position, anchor, items });\n }\n return {\n kind: \"patch\",\n documentId: p.id,\n ops,\n ...p.ifRevisionID !== void 0 ? { ifRev: p.ifRevisionID } : {}\n };\n}\nfunction toTxnMutations(operations) {\n if (Array.isArray(operations)) return operations.map(toSingleTxnMutation);\n const json = operations.toJSON();\n return Array.isArray(json) ? json : [\n {\n kind: \"patch\",\n documentId: json.id,\n ops: json.ops,\n ...json.ifRev !== void 0 ? { ifRev: json.ifRev } : {}\n }\n ];\n}\nfunction makeHandle(backend, projectId, dataset, accessControl, perspective, mutationGuard) {\n const { registry } = backend, store = (() => {\n const key = registryKey(projectId, dataset);\n let s = registry.get(key);\n return s === void 0 && (s = createTestStore(), registry.set(key, s)), s;\n })(), concurrentEditKey = (id) => registryKey(projectId, dataset) + \" \" + id, record = (transactionId, mutations) => {\n backend.log.push({ transactionId, projectId, dataset, mutations });\n }, writeResult = (documents, results, transactionId, opts) => formatMutationResult(\n documents,\n results,\n transactionId,\n opts?.returnDocuments ?? !0,\n opts?.returnFirst ?? !0\n ), promote2 = (doc) => {\n const now = (/* @__PURE__ */ new Date()).toISOString();\n if (typeof doc._id != \"string\" || doc._id.length === 0)\n throw fakeError(\n `Cannot store a document without a non-empty string \\`_id\\` (got ${JSON.stringify(doc._id)}). Unlike @sanity/client, this fake never auto-generates ids \\u2014 give every document an explicit _id.`\n );\n if (typeof doc._type != \"string\" || doc._type.length === 0)\n throw fakeError(\n `Document \"${doc._id}\" is missing a non-empty string \\`_type\\` (got ${JSON.stringify(doc._type)}). Every Sanity document needs a _type.`\n );\n return {\n ...doc,\n _id: doc._id,\n _type: doc._type,\n _rev: cryptoRandomKey(),\n _createdAt: doc._createdAt ?? now,\n _updatedAt: now\n };\n }, checkRevision = (id, ifRevisionId) => {\n if (ifRevisionId === void 0) return;\n const editKey = concurrentEditKey(id), pendingEdits = backend.concurrentEdits.get(editKey) ?? 0;\n if (pendingEdits > 0)\n throw backend.concurrentEdits.set(editKey, pendingEdits - 1), fakeError(\n `ifRevisionId check failed: document \"${id}\" was concurrently edited (simulated via simulateConcurrentEdit) \\u2014 the revision-guarded mutation lost the race; re-read and retry. (This mirrors Sanity's optimistic-locking 409.)`\n );\n const existing = store.get(id);\n if (existing === void 0)\n throw fakeError(\n `ifRevisionId check failed: document \"${id}\" does not exist, so its revision cannot match the expected _rev=\"${ifRevisionId}\". Drop ifRevisionId when creating a new document, or seed/create the document before guarding on its revision.`\n );\n if (existing._rev !== ifRevisionId)\n throw fakeError(\n `ifRevisionId check failed: document \"${id}\" is at _rev=\"${existing._rev}\" but the mutation required _rev=\"${ifRevisionId}\". The document changed since you read it \\u2014 re-read it and retry. (This mirrors Sanity's optimistic-locking 409.)`\n );\n }, gate = async (document, permission) => {\n accessControl !== void 0 && await enforceWriteAccess({\n document,\n grants: accessControl.grants,\n permission,\n userId: accessControl.currentUser.id\n });\n }, guardGate = async (action, before, after) => {\n mutationGuard !== void 0 && await mutationGuard({ action, before, after, identity: accessControl?.currentUser.id });\n }, canRead = async (document) => accessControl === void 0 ? !0 : canAccess({\n document,\n grants: accessControl.grants,\n permission: \"read\",\n userId: accessControl.currentUser.id\n }), applyPatch = async (documentId, ops, ifRev) => {\n const existing = store.get(documentId);\n if (existing === void 0)\n throw fakeError(\n `Cannot patch document \"${documentId}\": not found \\u2014 no document with that _id exists in dataset \"${projectId}:${dataset}\". patch() requires the target to already exist; use createOrReplace() / createIfNotExists() to upsert, or seed the document first.`\n );\n checkRevision(documentId, ifRev), await gate(existing, \"update\");\n const patched = applyPatchOps(existing, ops), now = (/* @__PURE__ */ new Date()).toISOString(), next = {\n ...patched,\n _rev: cryptoRandomKey(),\n _updatedAt: now\n };\n return await guardGate(\"update\", existing, next), store.put(next), next;\n }, applyTransaction = async (mutations, txnOptions) => {\n const transactionId = txnOptions?.transactionId ?? cryptoRandomKey(), snapshot = /* @__PURE__ */ new Map(), touchedIds = [], operations = [], remember = (id) => {\n snapshot.has(id) || snapshot.set(id, store.get(id));\n };\n try {\n for (const mut of mutations)\n switch (mut.kind) {\n case \"create\": {\n remember(mut.doc._id);\n const promoted = promote2(mut.doc);\n if (store.get(promoted._id) !== void 0)\n throw fakeError(\n `create() failed: a document with _id \"${promoted._id}\" already exists in dataset \"${projectId}:${dataset}\". Use createOrReplace() to overwrite it, or createIfNotExists() to leave the existing one untouched.`\n );\n await gate(promoted, \"create\"), await guardGate(\"create\", null, promoted), store.put(promoted), touchedIds.push(promoted._id), operations.push({ id: promoted._id, operation: \"create\" });\n break;\n }\n case \"createOrReplace\": {\n remember(mut.doc._id);\n const promoted = promote2(mut.doc), existing = store.get(promoted._id);\n await gate(existing ?? promoted, existing !== void 0 ? \"update\" : \"create\"), await guardGate(\n existing !== void 0 ? \"update\" : \"create\",\n existing ?? null,\n promoted\n );\n const wasPresent = existing !== void 0;\n store.put(promoted), touchedIds.push(promoted._id), operations.push({ id: promoted._id, operation: wasPresent ? \"update\" : \"create\" });\n break;\n }\n case \"createIfNotExists\": {\n if (remember(mut.doc._id), store.get(mut.doc._id) === void 0) {\n const promoted = promote2(mut.doc);\n await gate(promoted, \"create\"), await guardGate(\"create\", null, promoted), store.put(promoted), touchedIds.push(promoted._id), operations.push({ id: promoted._id, operation: \"create\" });\n }\n break;\n }\n case \"delete\": {\n remember(mut.id);\n const existing = store.get(mut.id);\n existing !== void 0 && await gate(existing, \"update\"), existing !== void 0 && await guardGate(\"delete\", existing, null), store.remove(mut.id) && (touchedIds.push(mut.id), operations.push({ id: mut.id, operation: \"delete\" }));\n break;\n }\n case \"patch\": {\n remember(mut.documentId), await applyPatch(mut.documentId, mut.ops, mut.ifRev), touchedIds.push(mut.documentId), operations.push({ id: mut.documentId, operation: \"update\" });\n break;\n }\n }\n } catch (error) {\n for (const [id, doc] of snapshot)\n doc === void 0 ? store.remove(id) : store.put(doc);\n throw error;\n }\n record(transactionId, mutations);\n const documents = touchedIds.map((id) => store.get(id)).filter((d) => d !== void 0);\n return formatMutationResult(\n documents,\n operations,\n transactionId,\n txnOptions?.returnDocuments ?? !1,\n txnOptions?.returnFirst ?? !1\n );\n }, accessVisibleDocs = async () => {\n const all = store.all();\n if (accessControl === void 0) return all;\n const out = [];\n for (const doc of all)\n await canRead(doc) && out.push(doc);\n return out;\n }, visibleDocs = async (override) => {\n const accessible = await accessVisibleDocs();\n return applyPerspective(accessible, override ?? perspective);\n }, client = {\n fetch: async (query, params, opts) => {\n const start = Date.now(), tree = parse(query, params ? { params } : void 0), result = await (await evaluate(tree, {\n dataset: await visibleDocs(opts?.perspective),\n ...params !== void 0 ? { params } : {}\n })).get();\n if (opts?.filterResponse === !1) {\n const ms = Date.now() - start;\n return opts.returnQuery === !1 ? { ms, result } : { query, ms, result };\n }\n return result;\n },\n getDocument: async (id, opts) => {\n const effective = opts?.perspective ?? perspective;\n if (effective === \"raw\") {\n const doc = store.get(id);\n return doc === void 0 || !await canRead(doc) ? void 0 : doc;\n }\n const view = await visibleDocs(effective);\n return resolveDocument(view, id, effective) ?? void 0;\n },\n getDocuments: async (ids, opts) => {\n const effective = opts?.perspective ?? perspective;\n if (effective === \"raw\") {\n const result = [];\n for (const id of ids) {\n const doc = store.get(id);\n doc === void 0 ? result.push(null) : await canRead(doc) ? result.push(doc) : result.push(null);\n }\n return result;\n }\n const view = await visibleDocs(effective);\n return ids.map((id) => resolveDocument(view, id, effective) ?? null);\n },\n create: async (doc, opts) => {\n if (checkRevision(doc._id, opts?.ifRevisionId), store.get(doc._id) !== void 0)\n throw fakeError(\n `create() failed: a document with _id \"${doc._id}\" already exists in dataset \"${projectId}:${dataset}\". Use createOrReplace() to overwrite it, or createIfNotExists() to leave the existing one untouched.`\n );\n const promoted = promote2(doc);\n await gate(promoted, \"create\"), await guardGate(\"create\", null, promoted);\n const transactionId = opts?.transactionId ?? cryptoRandomKey();\n return opts?.dryRun !== !0 && (store.put(promoted), record(transactionId, [{ kind: \"create\", doc }])), writeResult(\n [promoted],\n [{ id: promoted._id, operation: \"create\" }],\n transactionId,\n opts\n );\n },\n createOrReplace: async (doc, opts) => {\n checkRevision(doc._id, opts?.ifRevisionId);\n const promoted = promote2(doc), existing = store.get(doc._id);\n await gate(existing ?? promoted, existing !== void 0 ? \"update\" : \"create\"), await guardGate(existing !== void 0 ? \"update\" : \"create\", existing ?? null, promoted);\n const transactionId = opts?.transactionId ?? cryptoRandomKey();\n opts?.dryRun !== !0 && (store.put(promoted), record(transactionId, [{ kind: \"createOrReplace\", doc }]));\n const operation = existing !== void 0 ? \"update\" : \"create\";\n return writeResult(\n [promoted],\n [{ id: promoted._id, operation }],\n transactionId,\n opts\n );\n },\n createIfNotExists: async (doc, opts) => {\n checkRevision(doc._id, opts?.ifRevisionId);\n const existing = store.get(doc._id), transactionId = opts?.transactionId ?? cryptoRandomKey();\n if (existing !== void 0)\n return writeResult(\n [existing],\n [{ id: existing._id, operation: \"none\" }],\n transactionId,\n opts\n );\n const promoted = promote2(doc);\n return await gate(promoted, \"create\"), await guardGate(\"create\", null, promoted), opts?.dryRun !== !0 && (store.put(promoted), record(transactionId, [{ kind: \"createIfNotExists\", doc }])), writeResult(\n [promoted],\n [{ id: promoted._id, operation: \"create\" }],\n transactionId,\n opts\n );\n },\n delete: async (id, opts) => {\n checkRevision(id, opts?.ifRevisionId);\n const existing = store.get(id);\n existing !== void 0 && await gate(existing, \"update\"), existing !== void 0 && await guardGate(\"delete\", existing, null);\n const transactionId = opts?.transactionId ?? cryptoRandomKey();\n let removed = existing;\n return opts?.dryRun !== !0 && (removed = store.remove(id), removed !== void 0 && record(transactionId, [{ kind: \"delete\", id }])), opts?.returnDocuments === void 0 && opts?.returnFirst === void 0 ? removed !== void 0 ? { _id: id } : null : formatMutationResult(\n removed !== void 0 ? [removed] : [],\n removed !== void 0 ? [{ id, operation: \"delete\" }] : [],\n transactionId,\n opts.returnDocuments ?? !0,\n opts.returnFirst ?? !0\n );\n },\n patch: (documentId) => createPatch(documentId, {\n apply: async (docId, ops, ifRev) => {\n const doc = await applyPatch(docId, ops, ifRev);\n return record(cryptoRandomKey(), [\n { kind: \"patch\", documentId: docId, ops, ...ifRev !== void 0 ? { ifRev } : {} }\n ]), doc;\n }\n }),\n transaction: () => createTransaction({ apply: applyTransaction }),\n mutate: async (operations, options) => applyTransaction(toTxnMutations(operations), options),\n action: async (action) => applyActions(store, action),\n releases: {\n create: async ({ releaseId, metadata }) => {\n const result = applyActions(store, {\n actionType: \"sanity.action.release.create\",\n releaseId,\n ...metadata !== void 0 ? { metadata } : {}\n }), doc = store.get(`_.releases.${releaseId}`);\n return {\n ...result,\n releaseId,\n metadata: doc?.metadata ?? { releaseType: \"undecided\" }\n };\n },\n edit: async ({ releaseId, patch }) => applyActions(store, { actionType: \"sanity.action.release.edit\", releaseId, patch }),\n get: async ({ releaseId }) => store.get(`_.releases.${releaseId}`),\n fetchDocuments: async ({ releaseId }) => {\n const prefix = `versions.${releaseId}.`;\n return store.all().filter((d) => d._id.startsWith(prefix));\n },\n schedule: async ({ releaseId, publishAt }) => applyActions(store, {\n actionType: \"sanity.action.release.schedule\",\n releaseId,\n publishAt\n }),\n unschedule: async ({ releaseId }) => applyActions(store, { actionType: \"sanity.action.release.unschedule\", releaseId }),\n publish: async ({ releaseId }) => applyActions(store, { actionType: \"sanity.action.release.publish\", releaseId }),\n archive: async ({ releaseId }) => applyActions(store, { actionType: \"sanity.action.release.archive\", releaseId }),\n unarchive: async ({ releaseId }) => applyActions(store, { actionType: \"sanity.action.release.unarchive\", releaseId }),\n delete: async ({ releaseId }) => applyActions(store, { actionType: \"sanity.action.release.delete\", releaseId })\n },\n createVersion: async ({ releaseId, publishedId, document }) => applyActions(store, {\n actionType: \"sanity.action.document.version.create\",\n releaseId,\n publishedId,\n document\n }),\n unpublishVersion: async ({ releaseId, publishedId }) => applyActions(store, {\n actionType: \"sanity.action.document.version.unpublish\",\n versionId: `versions.${releaseId}.${publishedId}`,\n publishedId\n }),\n ...accessControl !== void 0 ? { request: makeRequestImpl(accessControl, projectId, dataset) } : {},\n config: () => ({ projectId, dataset, perspective }),\n withConfig: (config) => makeHandle(\n backend,\n config.projectId ?? projectId,\n config.dataset ?? dataset,\n config.accessControl ?? accessControl,\n config.perspective ?? perspective,\n mutationGuard\n ),\n seed: (documents) => store.seed(documents),\n add: (documents) => store.add(documents),\n reset: () => store.reset(),\n snapshot: () => store.snapshot(),\n store: () => store,\n simulateConcurrentEdit: (id, count = 1) => {\n const editKey = concurrentEditKey(id);\n backend.concurrentEdits.set(editKey, (backend.concurrentEdits.get(editKey) ?? 0) + count);\n },\n datasets: () => [...registry.keys()].map(parseRegistryKey),\n stub: (name, handler) => {\n backend.stubs.set(name, handler);\n },\n stubs: () => Object.fromEntries(backend.stubs),\n mutations: () => backend.log.flatMap((entry) => entry.mutations),\n transactions: () => [...backend.log],\n clearLog: () => {\n backend.log.length = 0;\n },\n calls: (method) => method === void 0 ? [...backend.calls] : backend.calls.filter((c) => c.method === method),\n callCount: (method) => method === void 0 ? backend.calls.length : backend.calls.filter((c) => c.method === method).length,\n clearCalls: () => {\n backend.calls.length = 0;\n }\n };\n return wrapWithGuards(client, {\n getStub: (name) => backend.stubs.get(name),\n onCall: (method, args) => {\n const rec = { method, args, projectId, dataset };\n return backend.calls.push(rec), (outcome) => {\n \"error\" in outcome ? rec.error = outcome.error : rec.result = outcome.result;\n };\n },\n recorded: RECORDED_METHODS\n });\n}\nexport {\n ERR_PREFIX,\n SUPPORTED_SURFACE,\n UNSUPPORTED_MEMBERS,\n WriteAccessDeniedError,\n applyPatchOps,\n applyPerspective,\n createPatch,\n createTestClient,\n createTestStore,\n createTransaction,\n defaultAclPath,\n evaluateWriteAccess,\n fakeError,\n isDraftId,\n isReleaseDocId,\n isSystemId,\n isVersionId,\n publishedIdOf,\n releaseNameOf,\n wrapWithGuards\n};\n//# sourceMappingURL=index.js.map\n","import type {Actor, Grant, WorkflowAccess, WorkflowResource} from '@sanity/workflow-engine'\n\n/** Default workflow resource for benches that don't pass one. */\nexport const DEFAULT_WORKFLOW_RESOURCE: WorkflowResource = {\n type: 'dataset',\n id: 'test.test',\n}\n\n/**\n * The default actor used when tests don't specify one. Its `\"*\"` role is an\n * inert placeholder, NOT a wildcard: role matching is literal membership, so\n * this actor satisfies no `Action.roles` gate or `{kind: \"role\"}` assignee on\n * its own — a test that exercises a role gate passes an actor carrying the\n * real role (and the definition's `roleAliases` decide what fulfills it). The\n * bench's all-access default is really {@link WILDCARD_GRANTS}, which feeds\n * `$can`. Production code should never see this id.\n */\nexport const ALL_ACCESS_USER: Actor = {\n kind: 'user',\n id: 'bench-user',\n roles: ['*'],\n}\n\n/**\n * The default grants used when tests don't specify any. A single\n * permissive grant matches every document and confers all permissions.\n */\nexport const WILDCARD_GRANTS: Grant[] = [\n {filter: 'true', permissions: ['create', 'read', 'update']},\n]\n\n/**\n * The bench's default access state — wildcard user + wildcard\n * grants. The bench injects this as the `access` override on every\n * engine call so the underlying TestClient (which has no token, so\n * no `/users/me` resolution path) never needs to do auth resolution.\n *\n * Production code never sees this; pass `createBench({ access })` to\n * test denial paths.\n */\nexport const ALL_ACCESS: WorkflowAccess = {\n actor: ALL_ACCESS_USER,\n grants: WILDCARD_GRANTS,\n}\n","import {\n denyingGuards,\n guardsForResource,\n type MutationGuardAction,\n type MutationGuardDoc,\n} from '@sanity/workflow-engine'\n\ntype DocImage = ({_id: string; _type: string} & Record<string, unknown>) | null\n\n/**\n * Fetch the guards deployed in `client`'s resource and return those that deny a\n * mutation with the given before/after image. The single evaluation path shared\n * by the client write-seam enforcement (`benchMutationGuard`) and the read-only\n * probe (`activeGuardsForDocument`), so the two can't drift in how they fetch\n * guards or feed `denyingGuards`. `client` is a `TestClient`, structurally a\n * `WorkflowClient`.\n */\nexport async function findDenyingGuards(args: {\n client: Parameters<typeof guardsForResource>[0]\n documentId: string\n before: DocImage\n after: DocImage\n action: MutationGuardAction\n identity?: string\n}): Promise<MutationGuardDoc[]> {\n const guards = await guardsForResource(args.client)\n if (guards.length === 0) return []\n const type = args.after?._type ?? args.before?._type\n return denyingGuards({\n guards,\n doc: type !== undefined ? {id: args.documentId, type} : {id: args.documentId},\n context: {\n before: args.before,\n after: args.after,\n action: args.action,\n ...(args.identity !== undefined ? {identity: args.identity} : {}),\n },\n })\n}\n","import type {\n MutationGuard,\n TestClient,\n TestClientAccessControl,\n} from '@sanity-labs/client-fake-for-test'\nimport {createTestClient} from '@sanity-labs/client-fake-for-test'\nimport {\n MutationGuardDeniedError,\n type Actor,\n type Grant,\n type WorkflowAccess,\n} from '@sanity/workflow-engine'\n\nimport {ALL_ACCESS_USER, WILDCARD_GRANTS} from './constants.ts'\nimport {findDenyingGuards} from './guard-eval.ts'\nimport type {AccessShortcuts, StoreDocument} from './types.ts'\n\n/**\n * Simulate the lake's server-side write rejection at the client's write seam.\n *\n * In production the content lake enforces deployed guards itself — it rejects a\n * violating mutation regardless of which client issued it. The bench has no\n * lake, so it reproduces that rejection here: every write through a\n * bench-minted client is gated (not just `bench.editDocument`), and a write any\n * active guard denies throws {@link MutationGuardDeniedError}. `identity` is the\n * client's bound user (its token). No-ops for writes no guard matches (the\n * engine's own instance / guard-doc writes included). `getClient` is late-bound\n * so the guard can read the store off the very client it's installed on.\n *\n * This is WRITE-TIME enforcement. The separate read-time question — \"would a\n * write be denied?\", used to preflight a UI (disable a button, show a lock) —\n * is answered by `activeGuardsForDocument`, a pure read over the same\n * {@link findDenyingGuards} path that works against any client.\n */\nfunction benchMutationGuard(getClient: () => TestClient): MutationGuard {\n return async ({before, after, action, identity}) => {\n const id = after?._id ?? before?._id\n if (id === undefined) return\n const denied = await findDenyingGuards({\n client: getClient(),\n documentId: id,\n before: before ?? null,\n after: after ?? null,\n action,\n ...(identity !== undefined ? {identity} : {}),\n })\n if (denied.length > 0) {\n throw MutationGuardDeniedError.fromGuards({documentId: id, action, guards: denied})\n }\n }\n}\n\n/**\n * Build the TestClient the bench operates against, enforcing the\n * `client` / `accessControl` mutual-exclusion contract: callers either\n * supply their own client or have the bench mint one (optionally wired\n * with lake-side access control), never both. A bench-minted client also\n * SIMULATES the lake's server-side guard rejection at its write seam via\n * {@link benchMutationGuard}.\n *\n * Scope of the seam: this is only about that write-rejection SIMULATION, and it\n * is narrow. The fake client fixes `mutationGuard` at `createTestClient` time\n * and can't add it after, so only a *bare* hand-built `createTestClient()`\n * opts out of enforcement. To share one store across benches WITH enforcement,\n * pass another bench's already-wired client — `createBench({client:\n * other.client})` — the `mutationGuard` rides along (it's inherited by the\n * client's `withConfig` siblings too). `mutation-guards.test.ts` proves a guard\n * deployed in one bench denies writes through a second bench sharing the client.\n * It is NOT a limitation on guards themselves: in production the lake enforces\n * server-side for any client, and the read-side preflight\n * (`activeGuardsForDocument` -> {@link findDenyingGuards}) that predicts denial\n * for a UI is a pure read that works on any client either way.\n */\nexport function resolveBenchClient(options: {\n client?: TestClient\n accessControl?: TestClientAccessControl\n documents?: StoreDocument[]\n}): TestClient {\n if (options.accessControl !== undefined && options.client !== undefined) {\n throw new Error(\n 'createBench: `accessControl` and `client` are mutually exclusive. Either let the bench ' +\n 'build a TestClient configured with the supplied accessControl, or build the client ' +\n 'yourself with `createTestClient({ accessControl })` and pass it in.',\n )\n }\n if (options.client !== undefined) {\n // Used as-is — see the note above on guard enforcement for supplied clients.\n if (options.documents) options.client.add(options.documents)\n return options.client\n }\n let client: TestClient\n client = createTestClient({\n ...(options.accessControl !== undefined ? {accessControl: options.accessControl} : {}),\n mutationGuard: benchMutationGuard(() => client),\n })\n if (options.documents) client.add(options.documents)\n return client\n}\n\n/**\n * Compose the bench-wide access default. Precedence: the canonical\n * `access` shape, then the `currentUser` / `grants` shortcuts, then\n * {@link ALL_ACCESS_USER} + {@link WILDCARD_GRANTS}.\n */\nexport function resolveBenchAccess(options: {\n access?: WorkflowAccess\n currentUser?: Actor\n grants?: Grant[]\n}): WorkflowAccess {\n return (\n options.access ?? {\n actor: options.currentUser ?? ALL_ACCESS_USER,\n grants: options.grants ?? WILDCARD_GRANTS,\n }\n )\n}\n\n/**\n * Resolve the per-call access override against the bench-wide default.\n * A call may tighten or replace access via the canonical `{ access }`\n * field or the `{ actor, grants }` shortcuts.\n *\n * `canTokenResolve` is true when the bench's client was built with\n * `accessControl` — i.e. its `request` hook can resolve grants from\n * the ACL path. In that case an actor-only override (no grants) must\n * NOT inherit the bench's default grants: doing so would gate the\n * per-call actor with the default's (e.g. wildcard) grants instead of\n * that actor's real grants, silently false-greening denial tests. The\n * engine treats verb `access` as `WorkflowAccessOverride`, so the bench\n * hands it `{ actor }` alone and lets the engine token-resolve grants\n * (via the call's `grantsFromPath`) or skip the gate — both faithful to\n * production. Tokenless default benches keep inheriting the default\n * grants, since there is no other source.\n */\nexport function accessFor(\n access: WorkflowAccess,\n args: AccessShortcuts,\n canTokenResolve: boolean,\n): WorkflowAccess {\n if (args.access !== undefined) return args.access\n if (args.actor === undefined && args.grants === undefined) return access\n const inheritedGrants = canTokenResolve ? undefined : access.grants\n const grants = args.grants ?? inheritedGrants\n return {\n actor: args.actor ?? access.actor,\n ...(grants !== undefined ? {grants} : {}),\n }\n}\n\n/**\n * Strip the bench-only access shortcut fields before spreading the rest\n * of a call's args into an engine call, so the composed `access` is the\n * single source of truth.\n */\nexport function stripAccessShortcuts<T extends AccessShortcuts>(\n args: T,\n): Omit<T, 'access' | 'actor' | 'grants'> {\n const rest = {...args}\n delete rest.access\n delete rest.actor\n delete rest.grants\n return rest\n}\n","import {\n workflow,\n type Clock,\n type DeployDefinitionsArgs,\n type DeployDefinitionsResult,\n type DispatchResult,\n type MutationGuardDoc,\n type WorkflowAccess,\n type WorkflowEvaluation,\n type WorkflowInstance,\n} from '@sanity/workflow-engine'\n\nimport {accessFor, stripAccessShortcuts} from './access.ts'\nimport type {\n AccessShortcuts,\n BenchCompleteEffectArgs,\n BenchEditFieldArgs,\n BenchEvaluateArgs,\n BenchFireActionArgs,\n BenchStartInstanceArgs,\n BenchTickArgs,\n EngineScope,\n} from './types.ts'\n\n/** Engine-call wrappers that inject the bench-owned client + tag + access. */\nexport type EngineWrappers = {\n deployDefinitions: (\n args: Omit<DeployDefinitionsArgs, 'client' | 'tag' | 'workflowResource'>,\n ) => Promise<DeployDefinitionsResult>\n startInstance: (args: BenchStartInstanceArgs) => Promise<WorkflowInstance>\n fireAction: (args: BenchFireActionArgs) => Promise<DispatchResult>\n editField: (args: BenchEditFieldArgs) => Promise<DispatchResult>\n completeEffect: (args: BenchCompleteEffectArgs) => Promise<DispatchResult>\n tick: (args: BenchTickArgs) => Promise<DispatchResult>\n evaluate: (args: BenchEvaluateArgs) => Promise<WorkflowEvaluation>\n guardsForInstance: (instanceId: string) => Promise<MutationGuardDoc[]>\n guardsForDefinition: (definition: string) => Promise<MutationGuardDoc[]>\n}\n\n/**\n * Build the engine-call wrappers. Each access-aware wrapper composes the\n * call's `access` from the bench default plus any per-call override,\n * injects the bench {@link Clock} (so `setNow` / `advance` control time),\n * then spreads the remaining args into the engine with the bench-owned\n * scope. A per-call `clock` in `args` still wins over the bench default.\n */\nexport function createEngineWrappers(\n scope: EngineScope,\n access: WorkflowAccess,\n clock: Clock,\n): EngineWrappers {\n // The fake client only exposes an own `request` hook when built with\n // `accessControl`; that hook is what lets the engine token-resolve\n // grants from the ACL path. A plain bench client has no such hook.\n const canTokenResolve = 'request' in scope.client\n const withAccess = <T extends AccessShortcuts>(args: T) => ({\n ...scope,\n access: accessFor(access, args, canTokenResolve),\n clock,\n ...stripAccessShortcuts(args),\n })\n return {\n deployDefinitions: (args) => workflow.deployDefinitions({...scope, ...args}),\n startInstance: (args) => workflow.startInstance(withAccess(args)),\n fireAction: (args) => workflow.fireAction(withAccess(args)),\n editField: (args) => workflow.editField(withAccess(args)),\n completeEffect: (args) => workflow.completeEffect(withAccess(args)),\n tick: (args) => workflow.tick(withAccess(args)),\n evaluate: (args) => workflow.evaluate(withAccess(args)),\n guardsForInstance: (instanceId) => workflow.guardsForInstance({...scope, instanceId}),\n guardsForDefinition: (definition) => workflow.guardsForDefinition({...scope, definition}),\n }\n}\n","import type {TestClient} from '@sanity-labs/client-fake-for-test'\nimport {\n guardsForResource,\n type Actor,\n type MutationGuardAction,\n type MutationGuardDoc,\n} from '@sanity/workflow-engine'\n\nimport {WILDCARD_GRANTS} from './constants.ts'\nimport {findDenyingGuards} from './guard-eval.ts'\nimport type {StoreDocument} from './types.ts'\n\nexport type GuardHelpers = {\n /** All deployed `temp.system.guard` docs in the store. */\n listGuards: () => Promise<MutationGuardDoc[]>\n\n /**\n * Guards that would deny an arbitrary edit to `documentId` right now (i.e.\n * active locks). Probes by changing every non-system field; a lifted guard\n * (predicate `\"true\"`) returns nothing.\n */\n activeGuardsForDocument: (documentId: string, as?: Actor) => Promise<MutationGuardDoc[]>\n\n /**\n * Write to a document through the client's enforced write seam — the bench\n * client gates the write against deployed guards (incl. `identity()`) and\n * throws `MutationGuardDeniedError` on denial, exactly as the lake would.\n * `as` routes the write through a token-scoped sibling so `identity()`\n * resolves to that actor.\n */\n editDocument: (\n documentId: string,\n patch: Record<string, unknown>,\n options?: {action?: MutationGuardAction; as?: Actor},\n ) => Promise<StoreDocument>\n}\n\n/**\n * Build the lake mutation-guard helpers. `editDocument` writes through the\n * client, whose `mutationGuard` seam enforces deployed guards (see\n * `resolveBenchClient`); `activeGuardsForDocument` is a read-only probe that\n * evaluates guards against a synthetic before/after without writing.\n */\nexport function createGuardHelpers(client: TestClient): GuardHelpers {\n return {\n listGuards: () => guardsForResource(client),\n\n activeGuardsForDocument: async (documentId, as) => {\n const before = await client.getDocument<StoreDocument>(documentId)\n const after: Record<string, unknown> = {...(before ?? {_id: documentId, _type: 'unknown'})}\n for (const key of Object.keys(after)) {\n if (!key.startsWith('_')) after[key] = {__guardProbe: true}\n }\n after.__guardProbe = {__guardProbe: true}\n return findDenyingGuards({\n client,\n documentId,\n before: before ?? null,\n after: after as {_id: string; _type: string},\n action: 'update',\n ...(as ? {identity: as.id} : {}),\n })\n },\n\n editDocument: async (documentId, patch, editOptions) => {\n const action = editOptions?.action ?? 'update'\n const as = editOptions?.as\n // Route through a token-scoped sibling so the client's guard enforcement\n // resolves `identity()` to the acting user; the client throws on denial.\n const writer = as\n ? client.withConfig({\n accessControl: {currentUser: {id: as.id}, grants: WILDCARD_GRANTS},\n })\n : client\n if (action === 'delete') {\n await writer.delete(documentId)\n } else {\n await writer.patch(documentId).set(patch).commit()\n }\n return (await client.getDocument(documentId)) as StoreDocument\n },\n }\n}\n","import {workflow} from '@sanity/workflow-engine'\n\nimport type {EngineScope} from './types.ts'\n\nexport type QueryHelpers = {\n /**\n * Run an arbitrary GROQ query through `workflow.query`. The query MUST\n * filter on the auto-injected `$tag` param (e.g. `*[... && tag == $tag]`)\n * or it throws — the engine refuses to run a query that could read\n * across partitions. Caller is responsible for narrowing the result.\n */\n query: <T = unknown>(groq: string, params?: Record<string, unknown>) => Promise<T>\n\n /**\n * Snapshot-aware GROQ for `instanceId` — runs against the same\n * in-memory view the engine's filters see. Reserved params (`$self`,\n * `$subject`, `$parent`, `$ancestors`, `$now`, `$stage`) auto-bound\n * in GDR URI form. Use to ask \"what does the engine see for this\n * workflow?\" — useful for filter debugging, UIs that mirror engine\n * state, etc.\n */\n queryInScope: <T = unknown>(\n instanceId: string,\n groq: string,\n params?: Record<string, unknown>,\n ) => Promise<T>\n}\n\n/** Build the GROQ passthrough helpers, both tag-scoped via the bench scope. */\nexport function createQueryHelpers(scope: EngineScope): QueryHelpers {\n const withParams = (params?: Record<string, unknown>) => (params !== undefined ? {params} : {})\n return {\n query: <T = unknown>(groq: string, params?: Record<string, unknown>) =>\n workflow.query<T>({...scope, groq, ...withParams(params)}),\n\n queryInScope: <T = unknown>(\n instanceId: string,\n groq: string,\n params?: Record<string, unknown>,\n ) => workflow.queryInScope<T>({...scope, instanceId, groq, ...withParams(params)}),\n }\n}\n","import {\n effectsContextMap,\n tagScopeFilter,\n workflow,\n WORKFLOW_INSTANCE_TYPE,\n type PendingEffect,\n type TaskStatus,\n type WorkflowInstance,\n} from '@sanity/workflow-engine'\n\nimport type {EngineScope, StoreDocument} from './types.ts'\n\nexport type ReadHelpers = {\n /** Read the workflow instance by id. Throws if missing. */\n getInstance: (instanceId: string) => Promise<WorkflowInstance>\n\n /** Current stage name of an instance. */\n currentStage: (instanceId: string) => Promise<string>\n\n /** Pending effects on an instance. */\n pendingEffects: (instanceId: string) => Promise<PendingEffect[]>\n\n /** Status of a single task on an instance, or undefined if missing. */\n taskStatus: (instanceId: string, task: string) => Promise<TaskStatus | undefined>\n\n /** The rendered `$effects` map — context entries keyed by `name`,\n * completed-effect outputs namespaced under the effect's name. */\n effectsContextMap: (instanceId: string) => Promise<Record<string, unknown>>\n\n /**\n * Spawned children of `parentInstanceId`. If `task` is provided,\n * only children spawned by that specific task on the parent.\n *\n * Walks `history.spawned` entries on the parent — this is the durable\n * record. (The per-task `spawnedInstances` field only lives on the\n * open StageEntry's tasks; history survives transitions.)\n *\n * Returns children ordered by `startedAt` ascending.\n */\n children: (parentInstanceId: string, task?: string) => Promise<WorkflowInstance[]>\n\n /**\n * All workflow instances whose `doc.ref` field entry named\n * `entryName` (default `\"subject\"`) matches the given doc id. Useful\n * for \"what workflow is running on this document?\" questions. Pass\n * `entryName` for workflows whose subject entry uses a different name.\n */\n instancesForSubject: (subjectRef: string, entryName?: string) => Promise<WorkflowInstance[]>\n\n /**\n * All instances of `workflowName` currently at `stage`. Includes\n * completed instances (`completedAt != null`) by default; set\n * `{ openOnly: true }` to filter to in-flight only.\n */\n instancesByStage: (\n workflowName: string,\n stage: string,\n options?: {openOnly?: boolean},\n ) => Promise<WorkflowInstance[]>\n\n /** Snapshot of all documents in the store — for inspecting the world. */\n snapshot: () => readonly StoreDocument[]\n}\n\n/**\n * Build the read-side DX helpers. {@link ReadHelpers.getInstance} enforces\n * tag-scoped visibility so every derived read (`currentStage`, `taskStatus`,\n * …) inherits the same isolation the engine's filters apply.\n */\nexport function createReadHelpers(scope: EngineScope): ReadHelpers {\n const {client, tag} = scope\n\n const getInstance = async (instanceId: string): Promise<WorkflowInstance> => {\n const doc = await client.getDocument<WorkflowInstance>(instanceId)\n if (!doc) throw new Error(`Workflow instance ${instanceId} not found`)\n if (doc.tag !== tag) {\n throw new Error(`Workflow instance ${instanceId} not visible to this engine (tag mismatch)`)\n }\n return doc\n }\n\n return {\n getInstance,\n\n currentStage: async (instanceId) => (await getInstance(instanceId)).currentStage,\n\n pendingEffects: async (instanceId) => (await getInstance(instanceId)).pendingEffects,\n\n taskStatus: async (instanceId, task) => {\n const instance = await getInstance(instanceId)\n const stage = instance.stages.find(\n (s) => s.name === instance.currentStage && s.exitedAt === undefined,\n )\n return stage?.tasks.find((t) => t.name === task)?.status\n },\n\n effectsContextMap: async (instanceId) => effectsContextMap(await getInstance(instanceId)),\n\n children: async (parentInstanceId, task) =>\n workflow.children({\n ...scope,\n instanceId: parentInstanceId,\n ...(task !== undefined ? {task} : {}),\n }),\n\n instancesForSubject: async (subjectRef, entryName = 'subject') =>\n // Subjects live on a workflow-scope `doc.ref` field entry. Match\n // instances whose entry's value.id equals the supplied ref. The\n // entry name is conventionally \"subject\" but workflows may name\n // it otherwise.\n client.fetch<WorkflowInstance[]>(\n `*[_type == \"${WORKFLOW_INSTANCE_TYPE}\"\n && fields[_type == \"doc.ref\" && name == $entry][0].value.id == $ref\n && ${tagScopeFilter()}] | order(startedAt asc)`,\n {ref: subjectRef, entry: entryName, tag},\n ),\n\n instancesByStage: async (workflowName, stage, queryOptions) => {\n const filter = queryOptions?.openOnly ? ' && completedAt == null' : ''\n return client.fetch<WorkflowInstance[]>(\n `*[_type == \"${WORKFLOW_INSTANCE_TYPE}\" && definition == $wf && currentStage == $stage && ${tagScopeFilter()}${filter}]\n | order(startedAt asc)`,\n {wf: workflowName, stage, tag},\n )\n },\n\n snapshot: () => client.snapshot() as readonly StoreDocument[],\n }\n}\n","/**\n * The bench — a dry-run test harness wrapping `@sanity-labs/client-fake-for-test`.\n *\n * The bench is the **only** place in the package that fabricates an\n * actor identity. The engine itself requires an explicit `actor` on\n * every call; the bench provides a default `ALL_ACCESS_USER` so tests\n * don't have to thread one manually, and exposes wrapper methods that\n * inject `bench.currentUser` + `bench.grants` for every engine call.\n *\n * ```\n * const bench = createBench();\n * await bench.deployDefinitions({ definitions: [definition] });\n * const inst = await bench.startInstance({\n * definition: \"...\",\n * initialFields: [{ type: \"doc.ref\", name: \"subject\", value: { id, type } }],\n * });\n * await bench.fireAction({ instanceId: inst._id, task: \"...\", action: \"...\" });\n * expect(await bench.currentStage(inst._id)).toBe(\"ready\");\n * ```\n *\n * For denial-path tests, pass an explicit `currentUser` and/or `grants`:\n *\n * ```\n * const bench = createBench({\n * currentUser: { kind: \"user\", id: \"viewer\", roles: [\"viewer\"] },\n * grants: [{ filter: '_type == \"sanity.workflow.instance\"', permissions: [\"read\"] }],\n * });\n * await expect(bench.fireAction({...})).rejects.toBeInstanceOf(ActionDisabledError);\n * ```\n */\n\nimport type {TestClient, TestClientAccessControl} from '@sanity-labs/client-fake-for-test'\nimport {validateTag} from '@sanity/workflow-engine'\nimport type {Actor, Clock, Grant, WorkflowAccess, WorkflowResource} from '@sanity/workflow-engine'\n\nimport {resolveBenchAccess, resolveBenchClient} from './access.ts'\nimport {DEFAULT_WORKFLOW_RESOURCE} from './constants.ts'\nimport {createEngineWrappers, type EngineWrappers} from './engine-wrappers.ts'\nimport {createGuardHelpers, type GuardHelpers} from './guard-helpers.ts'\nimport {createQueryHelpers, type QueryHelpers} from './query-helpers.ts'\nimport {createReadHelpers, type ReadHelpers} from './read-helpers.ts'\nimport type {StoreDocument} from './types.ts'\n\nexport {\n ALL_ACCESS,\n ALL_ACCESS_USER,\n DEFAULT_WORKFLOW_RESOURCE,\n WILDCARD_GRANTS,\n} from './constants.ts'\n\nexport interface CreateBenchOptions {\n /** Subject documents seeded into the store. */\n documents?: StoreDocument[]\n /**\n * Access state (actor + grants) injected as the engine `access`\n * override on every wrapped call. Defaults to `ALL_ACCESS` —\n * wildcard user + wildcard grants. Pass a restrictive value to\n * test denial paths.\n *\n * Mutually exclusive with the `currentUser` / `grants` shortcuts\n * (which compose into the same shape internally).\n */\n access?: WorkflowAccess\n /** Shortcut for `access.actor`. Composed with `grants`. */\n currentUser?: Actor\n /** Shortcut for `access.grants`. Composed with `currentUser`. */\n grants?: Grant[]\n /**\n * Opt-in: simulate Sanity's hard write-gate inside the TestClient.\n *\n * When set, the bench's underlying TestClient:\n * - Exposes `client.request({ url })` serving `/users/me` + the\n * configured ACL path, so the engine can resolve `WorkflowAccess`\n * from \"the token\" exactly like production.\n * - Rejects writes the grants don't permit with a Sanity-style\n * `WriteAccessDeniedError` — the same 403 a real lake would\n * return.\n *\n * Use this to demonstrate what would happen if the engine's\n * soft-gate were bypassed (or disagreed with) — the lake is still\n * authoritative. The bench's `access` field is the engine-side\n * override; `accessControl` is the lake-side enforcement. They\n * usually carry the same `actor` + `grants` but can be made to\n * disagree to test edge cases.\n *\n * Mutually exclusive with passing a pre-built `client`.\n */\n accessControl?: TestClientAccessControl\n /**\n * Engine-scope environment partition. Defaults to `\"bench\"`. Pass\n * different tags to two benches sharing a `client` to assert partition\n * isolation; pass the same tag to assert visibility through a shared\n * partition.\n *\n * The tag must be ASCII lowercase + digits + dashes, no leading dash,\n * no dots — validated at construction.\n */\n tag?: string\n /**\n * Shared TestClient. If omitted, the bench creates its own — two\n * benches without a shared client are completely isolated, regardless\n * of tag. Pass the same client to two benches to test tag-scoped\n * visibility across a shared store.\n */\n client?: TestClient\n /**\n * Workflow resource the bench's engine operates against. Mirrors\n * `@sanity/client`'s `ClientConfigResource`. Defaults to\n * `{ type: \"dataset\", id: \"test.test\" }` so all bench-minted GDR\n * URIs read as `dataset:test:test:<docId>`.\n */\n workflowResource?: WorkflowResource\n /**\n * Freeze the bench clock at this ISO instant from construction, so\n * `$now` and every engine timestamp are deterministic. Equivalent to\n * calling {@link Bench.setNow} immediately after `createBench`. Omit to\n * start on the wall clock (`advance` / `setNow` can freeze it later).\n */\n now?: string\n}\n\n/** Base bench state, distinct from the engine/read/guard/query helper groups. */\ninterface BenchState {\n /** The fake Sanity client. Passed automatically by bench wrappers. */\n client: TestClient\n /**\n * The access state (actor + grants) the bench injects as the\n * `access` override on every wrapped engine call. Defaults to\n * `ALL_ACCESS`.\n */\n access: WorkflowAccess\n /** Convenience: `access.actor`. */\n currentUser: Actor\n /** Convenience: `access.grants ?? []`. */\n grants: Grant[]\n\n /** Add documents to the store after construction. */\n seedDocuments: (documents: StoreDocument[]) => void\n\n /**\n * Current bench clock reading (ISO). Wall-clock until {@link Bench.setNow}\n * or {@link Bench.advance} freezes it. Handy for computing deadlines\n * relative to frozen time in a test.\n */\n now: () => string\n /**\n * Freeze the bench clock at an explicit ISO instant. Every subsequent\n * engine call (`startInstance` / `fireAction` / `tick` / `completeEffect`\n * / `evaluate`) sees this as `$now` and stamps it on history, so\n * time-based `completeWhen` / `failWhen` / SLA predicates are\n * deterministic.\n */\n setNow: (iso: string) => void\n /**\n * Move the bench clock forward by `ms`, freezing it at\n * `current + ms`. Re-evaluate by calling {@link Bench.tick} — `advance`\n * itself never writes, so the timeline only progresses when you tick.\n */\n advance: (ms: number) => void\n}\n\nexport type Bench = BenchState & EngineWrappers & ReadHelpers & GuardHelpers & QueryHelpers\n\n/**\n * Create a fresh bench. By default the bench is fully isolated — two\n * `createBench()` calls have no shared state. Pass `client` + `tag`\n * to two benches to share a store and exercise tag scoping.\n */\nexport function createBench(options: CreateBenchOptions = {}): Bench {\n const tag = options.tag ?? 'bench'\n validateTag(tag)\n const workflowResource = options.workflowResource ?? DEFAULT_WORKFLOW_RESOURCE\n const client = resolveBenchClient(options)\n const scope = {client, tag, workflowResource}\n\n const access = resolveBenchAccess(options)\n\n // `undefined` ⇒ wall clock; a string ⇒ time is frozen at that instant.\n let frozenNow = options.now !== undefined ? assertIsoInstant(options.now) : undefined\n const clock: Clock = () => frozenNow ?? new Date().toISOString()\n\n return {\n client,\n access,\n currentUser: access.actor,\n grants: access.grants ?? [],\n\n seedDocuments: (documents) => client.add(documents),\n\n now: clock,\n setNow: (iso) => {\n frozenNow = assertIsoInstant(iso)\n },\n advance: (ms) => {\n if (!Number.isFinite(ms))\n throw new Error(`bench.advance: ms must be a finite number, got ${ms}`)\n frozenNow = new Date(Date.parse(frozenNow ?? new Date().toISOString()) + ms).toISOString()\n },\n\n ...createEngineWrappers(scope, access, clock),\n ...createReadHelpers(scope),\n ...createGuardHelpers(client),\n ...createQueryHelpers(scope),\n }\n}\n\n/** Parse + canonicalise an ISO instant, throwing loud on garbage so a\n * typo'd `setNow` fails at the call site, not as a silent NaN later. */\nfunction assertIsoInstant(iso: string): string {\n const ms = Date.parse(iso)\n if (Number.isNaN(ms)) {\n throw new Error(`bench clock: expected an ISO-8601 instant, got ${JSON.stringify(iso)}`)\n }\n return new Date(ms).toISOString()\n}\n"],"names":["string","node","text","flatMap","process","map","node2","parse","ms","require$$0","debug","namespaces","exports","module","require$$1","require$$2","useColors","require$$3","srcModule","document","evaluate","documents","delta","array","guardsForResource","denyingGuards","MutationGuardDeniedError","workflow","effectsContextMap","WORKFLOW_INSTANCE_TYPE","tagScopeFilter","validateTag"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9]}