@dev-blinq/bvt-playwright-js 1.0.0-dev.1
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.
- package/en-Bp7eyprf.mjs +34392 -0
- package/en-Bp7eyprf.mjs.map +1 -0
- package/index.d.mts +9311 -0
- package/index.mjs +24078 -0
- package/index.mjs.map +1 -0
- package/otpauth.node-k0uQ9qOV.mjs +685 -0
- package/otpauth.node-k0uQ9qOV.mjs.map +1 -0
- package/package.json +28 -0
package/index.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["initializer","util.jsonStringifyReplacer","core.$ZodAsyncError","util.finalizeIssue","core.config","parse","errors.$ZodRealError","parseAsync","errors.$ZodError","safeParse","safeParseAsync","encode","decode","encodeAsync","decodeAsync","safeEncode","safeDecode","safeEncodeAsync","safeDecodeAsync","ulid","duration","email","_emoji","date","time","datetime","string","number","boolean","_null","util.floatSafeRemainder","util.NUMBER_FORMAT_RANGES","regexes.integer","util.nullish","util.getLengthableOrigin","regexes.lowercase","regexes.uppercase","util.escapeRegex","version","version","util.aborted","core.$ZodAsyncError","safeParse","safeParseAsync","regexes.string","regexes.guid","regexes.uuid","regexes.email","regexes.emoji","regexes.nanoid","regexes.cuid","regexes.cuid2","regexes.ulid","regexes.xid","regexes.ksuid","regexes.datetime","regexes.date","regexes.time","regexes.duration","regexes.ipv4","regexes.ipv6","regexes.cidrv4","regexes.cidrv6","regexes.base64","regexes.base64url","regexes.e164","regexes.number","regexes.boolean","regexes.null","util.prefixIssues","util.optionalKeys","util.cached","isObject","util.isObject","util.esc","allowsEval","util.allowsEval","util.finalizeIssue","core.config","util.cleanRegex","util.isPlainObject","util.getEnumValues","util.escapeRegex","core.$ZodEncodeError","util.issue","util.normalizeParams","_null","checks.$ZodCheckLessThan","checks.$ZodCheckGreaterThan","checks.$ZodCheckMultipleOf","checks.$ZodCheckMaxLength","checks.$ZodCheckMinLength","checks.$ZodCheckLengthEquals","checks.$ZodCheckRegex","checks.$ZodCheckLowerCase","checks.$ZodCheckUpperCase","checks.$ZodCheckIncludes","checks.$ZodCheckStartsWith","checks.$ZodCheckEndsWith","checks.$ZodCheckOverwrite","util.slugify","issue","util.issue","checks.$ZodCheck","describe","meta","process","process","core._isoDateTime","date","core._isoDate","core._isoTime","core._isoDuration","core.formatError","core.flattenError","util.jsonStringifyReplacer","core.$constructor","parse","util.mergeDefs","core.clone","parse.parse","parse.safeParse","parse.parseAsync","parse.safeParseAsync","parse.encode","parse.decode","parse.encodeAsync","parse.decodeAsync","parse.safeEncode","parse.safeDecode","parse.safeEncodeAsync","parse.safeDecodeAsync","checks.overwrite","processors.stringProcessor","checks.regex","checks.includes","checks.startsWith","checks.endsWith","checks.minLength","checks.maxLength","checks.length","checks.lowercase","checks.uppercase","checks.trim","checks.normalize","checks.toLowerCase","checks.toUpperCase","checks.slugify","core._email","core._url","core._jwt","core._emoji","core._guid","core._uuid","core._uuidv4","core._uuidv6","core._uuidv7","core._nanoid","core._cuid","core._cuid2","core._ulid","core._base64","core._base64url","core._xid","core._ksuid","core._ipv4","core._ipv6","core._cidrv4","core._cidrv6","core._e164","iso.datetime","iso.date","iso.time","iso.duration","core._string","processors.numberProcessor","checks.gt","checks.gte","checks.lt","checks.lte","checks.multipleOf","core._number","core._int","processors.booleanProcessor","core._boolean","processors.nullProcessor","core._null","processors.unknownProcessor","core._unknown","processors.neverProcessor","core._never","processors.dateProcessor","core._date","processors.arrayProcessor","core._array","processors.objectProcessor","util.extend","util.safeExtend","util.merge","util.pick","util.omit","util.partial","util.required","util.normalizeParams","processors.unionProcessor","processors.intersectionProcessor","processors.recordProcessor","processors.enumProcessor","processors.literalProcessor","literal","processors.transformProcessor","core.$ZodEncodeError","issue","util.issue","processors.optionalProcessor","processors.nullableProcessor","processors.defaultProcessor","util.shallowClone","processors.prefaultProcessor","processors.nonoptionalProcessor","processors.catchProcessor","processors.pipeProcessor","processors.readonlyProcessor","processors.lazyProcessor","processors.customProcessor","core._refine","core._superRefine","core.describe","core.meta","z.string","z\n .object","z.number","z.discriminatedUnion","z\n .object","z.literal","z.object","z.boolean","z.object","z.enum","z.number","z.string","z\n .object","z.record","z.unknown","z\n .string","z\n .object","z.union","z.discriminatedUnion","z.literal","z.enum","z\n .object","z\n .object","z.number","z.array","z.boolean","z.discriminatedUnion","z.object","z.literal","z.string","z.union","z.discriminatedUnion","z.object","z.literal","z\n .object","z.number","z.string","z.discriminatedUnion","z.object","z.literal","z.string","z.object","z.string","z.discriminatedUnion","z\n .object","z.literal","z.boolean","z\n .object","z\n .object","z.number","z.enum","z\n .object","z\n .object","z.discriminatedUnion","z\n .object","z.literal","z.string","z.enum","z.discriminatedUnion","z.object","z.literal","z.string","z\n .object","z.number","z.boolean","z.discriminatedUnion","z.object","z.literal","z\n .object","z.number","z.discriminatedUnion","z.object","z.literal","z.enum","z.string","z\n .object","z\n .array","z.enum","z\n .object","z.string","z.number","z\n .string","z.date","z.record","z.array","z\n .object","z.discriminatedUnion","z\n .object","z.literal","z.number","z.string","z.boolean","z.preprocess","z\n .object","z.string","z.record","z.number","z.enum","z\n .object","z.string","z.unknown","z\n .preprocess","z.array","z.number","z.enum","z.discriminatedUnion","z.object","z.literal","z.string","z.union","z.array","z.boolean","z.number","z\n .object","z\n .object","z.unknown","z\n .object","z.object","z.string","z.string","z.enum","z\n .object","z.array","z.unknown","z.number","z.boolean","z.literal","z.discriminatedUnion","z\n .object","z\n .object","z.enum","z\n .object","z.literal","z.number","z.string","z.record","z.array","z.boolean","z.union","z.string","z.number","z.boolean","z.null","z.record","z\n .object","z.object","z.array","z\n .array","z\n .object","z.discriminatedUnion","z.literal","z.unknown","z\n .object","z.string","z.array","z.enum","z.boolean","z.object","z.record","z.number","z\n .object","z.unknown","z.date","z.literal","z.discriminatedUnion","z\n .object","z.string","z.url","z.array","z\n .object","z.string","z.enum","z.date","z.number","z.object","z\n .object","z.string","z.enum","z\n .object","z.string","z.email","z.boolean","z.number","z.enum","z\n .object","z.string","z.number","z.union","z.literal","z.date","z.discriminatedUnion","z\n .object","z.literal","z.string","z\n .object","z.date","z.array","z.enum","z.number","z.record","z.union","z.enum","z.null","isArray","defaultOptions","z.enum","z\n .object","z.array","z.string","z\n .object","z.number","z.boolean","z\n .object","z\n .object","z.string","z.enum","z.number","z.array","z\n .record","z.object","z\n .array","z\n .string","z.boolean","z.union","z.object","z.literal","z.string","z.union","z.lazy","z.enum","z.number","z.boolean","z.array","z.record","z\n .object","z.unknown","z\n .array","z.url","z\n .number","z.discriminatedUnion","z.object","z.enum","z.string","z.enum","z\n .object","z\n .object","z.number","z.enum","z\n .object","z.string","z.date","z.boolean","z.string","z.enum","z\n .number","z\n .object","z.object","z.boolean","z.number","z.array","z.object","z.string","z.array","z.record","z.string","z.unknown","z\n .object","z.literal","z.array","z\n .object","z.string","z.number","z.enum","z.boolean","z.array","z\n .object","z\n .record","z.lazy","z.enum","z\n .object","z.boolean","z.string","z.enum","z.record","z.string","z.unknown","z\n .object","z.iso.datetime","z.number","z.literal","z.discriminatedUnion","z.array","z.enum","z\n .object","z.array","z.number","z.string","z.date","z.boolean","z\n .object","z\n .enum","z.record","z.unknown","z.discriminatedUnion","z\n .object","z.literal","z.object","z.string","z.date","z.discriminatedUnion","z.literal","z.url","z\n .array","z.enum","z\n .object","z.string","z.array","z.number","z\n .object","z.literal","z.string","z.enum","z.number","z.discriminatedUnion","z.enum","z\n .object","z.number","z.string","z.array","z.boolean","z.literal","z.lazy","z\n .object","z.string","z.number","z.enum","z.enum","z\n .enum","z\n .object","z.number","z.literal","z.string","z\n .string","z.enum","z\n .object","z.array","z.discriminatedUnion","z.object","z.literal","z.string","z.boolean","z.email","z.date","z.enum","z\n .object","z.string","z.date","z.enum","z\n .object","z.number","z.string","crypto","BLOCKED_IDENTIFIERS","dirname","ObservabilityLogger","baseTest"],"sources":["../../../core/bvt-agent/src/agent/logger.ts","../../../core/bvt-agent/src/agent/test-data-api.ts","../../../node_modules/zod/v4/core/core.js","../../../node_modules/zod/v4/core/util.js","../../../node_modules/zod/v4/core/errors.js","../../../node_modules/zod/v4/core/parse.js","../../../node_modules/zod/v4/core/regexes.js","../../../node_modules/zod/v4/core/checks.js","../../../node_modules/zod/v4/core/doc.js","../../../node_modules/zod/v4/core/versions.js","../../../node_modules/zod/v4/core/schemas.js","../../../node_modules/zod/v4/core/registries.js","../../../node_modules/zod/v4/core/api.js","../../../node_modules/zod/v4/core/to-json-schema.js","../../../node_modules/zod/v4/core/json-schema-processors.js","../../../node_modules/zod/v4/classic/iso.js","../../../node_modules/zod/v4/classic/errors.js","../../../node_modules/zod/v4/classic/parse.js","../../../node_modules/zod/v4/classic/schemas.js","../../../node_modules/zod/v4/classic/compat.js","../../../core/schemas/src/base.schema.ts","../../../core/schemas/src/api/api.schema.ts","../../../core/schemas/src/command/element/element-action.schema.ts","../../../core/schemas/src/command/element/element-assertion.schema.ts","../../../core/schemas/src/command/element/element-extract.schema.ts","../../../core/schemas/src/selector/bvtSelector.schema.ts","../../../core/schemas/src/selector/selector.schema.ts","../../../core/schemas/src/command/page/page-action.schema.ts","../../../core/schemas/src/command/page/page-assertion.schema.ts","../../../core/schemas/src/command/page/page-extract.schema.ts","../../../core/schemas/src/test-data/scope.schema.ts","../../../core/schemas/src/test-data/test-data.schema.ts","../../../core/schemas/src/command/utility/index.ts","../../../core/schemas/src/command/page-url-context.schema.ts","../../../core/schemas/src/rca/diagnosis.schema.ts","../../../core/schemas/src/recovery/step-repair.schema.ts","../../../core/schemas/src/recovery/recovery-artifact.ts","../../../core/schemas/src/recovery/recovery.schema.ts","../../../core/schemas/src/selector/replay-context.schema.ts","../../../core/schemas/src/command/command.schema.ts","../../../core/schemas/src/scenario/scenario.schema.ts","../../../core/schemas/src/workspace/workspace.schema.ts","../../../core/schemas/src/project/project.schema.ts","../../../core/schemas/src/invitation/invitation.schema.ts","../../../core/schemas/src/user/user.schema.ts","../../../core/schemas/src/report/report.schema.ts","../../../core/schemas/src/testcase/testcase.schema.ts","../../../core/schemas/src/state/browserObserverState.schema.ts","../../../node_modules/xstate/dev/dist/xstate-dev.esm.js","../../../node_modules/xstate/dist/raise-34c45204.esm.js","../../../node_modules/xstate/actors/dist/xstate-actors.esm.js","../../../node_modules/xstate/dist/assign-5f7ff891.esm.js","../../../node_modules/xstate/dist/StateMachine-9ef88566.esm.js","../../../node_modules/xstate/dist/log-1324d455.esm.js","../../../node_modules/xstate/dist/xstate.esm.js","../../../core/schemas/src/ai-chat-mutation-signals.ts","../../../core/schemas/src/ai-chat/tool-args.ts","../../../core/schemas/src/ai-chat/types.ts","../../../core/schemas/src/ai-chat/machine.ts","../../../core/schemas/src/billing/plan.schema.ts","../../../core/schemas/src/billing/subscription.schema.ts","../../../core/schemas/src/ai-chat/postcondition-generation.schema.ts","../../../core/schemas/src/ai-chat/locators.ts","../../../core/schemas/src/ai-chat/client-tools-proxy.ts","../../../core/schemas/src/ai-chat/observe-act-generation.schema.ts","../../../core/schemas/src/failure-codes.ts","../../../core/schemas/src/feature-flags/feature-flag.schema.ts","../../../core/schemas/src/observability/observability.schema.ts","../../../core/schemas/src/execution-planner/execution-planner.schema.ts","../../../core/schemas/src/integration/integration.schema.ts","../../../core/schemas/src/rca/constants.ts","../../../core/schemas/src/rca/prior-execution.schema.ts","../../../core/schemas/src/rca/heal-proposal.schema.ts","../../../core/schemas/src/rca/bundle.schema.ts","../../../core/schemas/src/recovery/repair-signature.ts","../../../core/schemas/src/recovery/recovery-correlation-context.ts","../../../core/schemas/src/notifications/execution-completed-event.schema.ts","../../../core/schemas/src/notifications/notification-rule.schema.ts","../../../core/schemas/src/notifications/notification-delivery.schema.ts","../../../core/schemas/src/notifications/notification-event-processing.schema.ts","../../../core/bvt-agent/src/agent/download-interceptor.ts","../../../core/bvt-agent/src/agent/recovery/types.ts","../../../core/bvt-agent/src/agent/recovery/no-op-controller.ts","../../../node_modules/ulid/dist/node/index.js","../../../core/bvt-agent/src/agent/recovery/id-preserving-diff.ts","../../../core/bvt-agent/src/agent/recovery/apply-repair-plan.ts","../../../core/bvt-agent/src/agent/recovery/persist-step-repair.ts","../../../core/bvt-agent/src/agent/command-preprocessor.ts","../../../node_modules/acorn/dist/acorn.mjs","../../../node_modules/acorn-walk/dist/walk.mjs","../../../core/bvt-agent/src/agent/playwright-static-analyzer.ts","../../../core/bvt-agent/src/agent/playwright-validator.ts","../../../core/bvt-agent/src/agent/playwright-runner.ts","../../../core/bvt-agent/src/agent/playwright-sandbox.ts","../../../core/bvt-agent/src/agent/utils.ts","../../../core/bvt-agent/src/agent/api-command.ts","../../../core/bvt-agent/src/agent/session-storage-state.ts","../../../core/bvt-agent/src/agent/tester.ts","../../../core/bvt-agent/src/agent/step-parameter.preprocessor.ts","../../../core/bvt-agent/src/agent/data-resolver.preprocessor.ts","../../../shared/observability/src/logger.ts","../../../shared/observability/src/error-serialization.ts","../../../core/data-resolver/src/types.ts","../../../core/data-resolver/src/scanner.ts","../../../core/data-resolver/src/resolution-stack.ts","../../../core/data-resolver/src/path-utils.ts","../../../node_modules/dlv/dist/dlv.js","../../../core/data-resolver/src/evaluators/literal.ts","../../../core/data-resolver/src/crypto.ts","../../../core/data-resolver/src/resolver.ts","../../../core/data-resolver/src/scope-manager.ts","../../../core/data-resolver/src/evaluators/registry.ts","../../../core/data-resolver/src/evaluators/faker.ts","../../../node_modules/jsep/dist/jsep.js","../../../core/data-resolver/src/evaluators/js-evaluator.ts","../../../core/data-resolver/src/evaluators/date-evaluator.ts","../../../core/bvt-agent/src/agent/ai-chat-code-token.preprocessor.ts","../../../core/bvt-agent/src/agent/test-data-api.preprocessor.ts","../src/index.ts"],"sourcesContent":["type LogMethod = (...args: any[]) => void;\ntype LogContext = any;\ntype MetricTags = Record<string, string>;\ntype EventProperties = Record<string, unknown>;\n\ntype ObservabilityLoggerLike = {\n info: LogMethod;\n warn: LogMethod;\n error: LogMethod;\n withContext?: (context: LogContext) => ObservabilityLoggerLike;\n log?: LogMethod;\n};\n\ntype ObservabilityMetricsLike = {\n count: (name: string, value?: number, tags?: MetricTags, context?: LogContext) => void;\n gauge: (name: string, value: number, unit?: any, tags?: MetricTags, context?: LogContext) => void;\n histogram: (\n name: string,\n value: number,\n unit?: any,\n tags?: MetricTags,\n context?: LogContext,\n ) => void;\n latency: (name: string, startMs: number, tags?: MetricTags, context?: LogContext) => void;\n withContext?: (context: LogContext) => ObservabilityMetricsLike;\n};\n\ntype ObservabilityEventsLike = {\n track: (name: string, properties?: EventProperties, context?: any) => void;\n withContext?: (context: any) => ObservabilityEventsLike;\n};\n\ntype ConsoleLikeLogger = Partial<Record<\"log\" | \"info\" | \"warn\" | \"error\", LogMethod>>;\n\nexport interface AgentLogger {\n log: LogMethod;\n info: LogMethod;\n warn: LogMethod;\n error: LogMethod;\n withContext: (context: LogContext) => AgentLogger;\n}\n\nexport interface AgentMetrics {\n count: (name: string, value?: number, tags?: MetricTags, context?: LogContext) => void;\n gauge: (name: string, value: number, unit?: any, tags?: MetricTags, context?: LogContext) => void;\n histogram: (\n name: string,\n value: number,\n unit?: any,\n tags?: MetricTags,\n context?: LogContext,\n ) => void;\n latency: (name: string, startMs: number, tags?: MetricTags, context?: LogContext) => void;\n withContext: (context: LogContext) => AgentMetrics;\n}\n\nexport interface AgentEvents {\n track: (name: string, properties?: EventProperties, context?: any) => void;\n withContext: (context: any) => AgentEvents;\n}\n\nexport interface AgentObservability {\n logger: AgentLogger;\n metrics: AgentMetrics;\n events: AgentEvents;\n withContext: (context: LogContext) => AgentObservability;\n}\n\nexport type AgentLoggerInput =\n | AgentLogger\n | ObservabilityLoggerLike\n | ConsoleLikeLogger\n | undefined;\n\nexport type AgentObservabilityInput =\n | AgentObservability\n | {\n logger?: AgentLoggerInput;\n metrics?: AgentMetrics | ObservabilityMetricsLike;\n events?: AgentEvents | ObservabilityEventsLike;\n }\n | AgentLoggerInput;\n\nfunction formatLogValue(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n\n if (value instanceof Error) {\n return `${value.name}: ${value.message}`;\n }\n\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\nfunction serializeLogArg(value: unknown): unknown {\n if (value instanceof Error) {\n return {\n name: value.name,\n message: value.message,\n };\n }\n\n if (value === null || Array.isArray(value) || typeof value === \"object\") {\n return value;\n }\n\n return formatLogValue(value);\n}\n\nfunction isAgentLogger(value: unknown): value is AgentLogger {\n return (\n !!value &&\n typeof value === \"object\" &&\n typeof (value as AgentLogger).log === \"function\" &&\n typeof (value as AgentLogger).info === \"function\" &&\n typeof (value as AgentLogger).warn === \"function\" &&\n typeof (value as AgentLogger).error === \"function\" &&\n typeof (value as AgentLogger).withContext === \"function\"\n );\n}\n\nfunction isAgentMetrics(value: unknown): value is AgentMetrics {\n return (\n !!value &&\n typeof value === \"object\" &&\n typeof (value as AgentMetrics).count === \"function\" &&\n typeof (value as AgentMetrics).gauge === \"function\" &&\n typeof (value as AgentMetrics).histogram === \"function\" &&\n typeof (value as AgentMetrics).latency === \"function\" &&\n typeof (value as AgentMetrics).withContext === \"function\"\n );\n}\n\nfunction isAgentEvents(value: unknown): value is AgentEvents {\n return (\n !!value &&\n typeof value === \"object\" &&\n typeof (value as AgentEvents).track === \"function\" &&\n typeof (value as AgentEvents).withContext === \"function\"\n );\n}\n\nfunction isObservabilityLoggerLike(value: unknown): value is ObservabilityLoggerLike {\n return (\n !!value &&\n typeof value === \"object\" &&\n typeof (value as ObservabilityLoggerLike).info === \"function\" &&\n typeof (value as ObservabilityLoggerLike).warn === \"function\" &&\n typeof (value as ObservabilityLoggerLike).error === \"function\"\n );\n}\n\nfunction isMetricsLike(value: unknown): value is ObservabilityMetricsLike {\n return (\n !!value &&\n typeof value === \"object\" &&\n typeof (value as ObservabilityMetricsLike).count === \"function\" &&\n typeof (value as ObservabilityMetricsLike).gauge === \"function\" &&\n typeof (value as ObservabilityMetricsLike).histogram === \"function\" &&\n typeof (value as ObservabilityMetricsLike).latency === \"function\"\n );\n}\n\nfunction isEventsLike(value: unknown): value is ObservabilityEventsLike {\n return (\n !!value &&\n typeof value === \"object\" &&\n typeof (value as ObservabilityEventsLike).track === \"function\"\n );\n}\n\nexport function isLoggerLike(value: unknown): value is Exclude<AgentLoggerInput, undefined> {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n return (\n typeof (value as { log?: unknown }).log === \"function\" ||\n typeof (value as { info?: unknown }).info === \"function\" ||\n typeof (value as { warn?: unknown }).warn === \"function\" ||\n typeof (value as { error?: unknown }).error === \"function\"\n );\n}\n\nexport function isObservabilityLike(\n value: unknown,\n): value is Exclude<AgentObservabilityInput, AgentLoggerInput> {\n return (\n !!value &&\n typeof value === \"object\" &&\n (\"logger\" in value || \"metrics\" in value || \"events\" in value)\n );\n}\n\nfunction toObservabilityLogPayload(args: unknown[]): {\n message: string;\n metadata?: Record<string, unknown>;\n} {\n const [first, ...rest] = args;\n const message = formatLogValue(first);\n\n if (rest.length === 0) {\n return { message };\n }\n\n if (\n rest.length === 1 &&\n rest[0] !== null &&\n typeof rest[0] === \"object\" &&\n !Array.isArray(rest[0]) &&\n !(rest[0] instanceof Error)\n ) {\n return {\n message,\n metadata: rest[0] as Record<string, unknown>,\n };\n }\n\n return {\n message,\n metadata: {\n args: rest.map(serializeLogArg),\n },\n };\n}\n\nfunction createObservabilityAgentLogger(logger: ObservabilityLoggerLike): AgentLogger {\n const emit =\n (level: \"info\" | \"warn\" | \"error\") =>\n (...args: unknown[]) => {\n const { message, metadata } = toObservabilityLogPayload(args);\n logger[level](message, metadata);\n };\n\n return {\n log: emit(\"info\"),\n info: emit(\"info\"),\n warn: emit(\"warn\"),\n error: emit(\"error\"),\n withContext(context) {\n return createObservabilityAgentLogger(logger.withContext?.(context) ?? logger);\n },\n };\n}\n\nfunction createConsoleAgentLogger(\n logger: ConsoleLikeLogger = console,\n boundContext?: LogContext,\n): AgentLogger {\n const emit =\n (level: \"log\" | \"info\" | \"warn\" | \"error\") =>\n (...args: unknown[]) => {\n const logMethod =\n logger[level] ?? logger.info ?? logger.warn ?? logger.error ?? logger.log ?? console.log;\n\n if (!boundContext) {\n logMethod(...args);\n return;\n }\n\n logMethod(...args, { context: boundContext });\n };\n\n return {\n log: emit(\"log\"),\n info: emit(\"info\"),\n warn: emit(\"warn\"),\n error: emit(\"error\"),\n withContext(context) {\n return createConsoleAgentLogger(logger, context);\n },\n };\n}\n\nfunction createNoopMetrics(): AgentMetrics {\n return {\n count: () => {},\n gauge: () => {},\n histogram: () => {},\n latency: () => {},\n withContext: () => createNoopMetrics(),\n };\n}\n\nfunction createObservabilityAgentMetrics(metrics: ObservabilityMetricsLike): AgentMetrics {\n return {\n count(name, value, tags, context) {\n metrics.count(name, value, tags, context);\n },\n gauge(name, value, unit, tags, context) {\n metrics.gauge(name, value, unit, tags, context);\n },\n histogram(name, value, unit, tags, context) {\n metrics.histogram(name, value, unit, tags, context);\n },\n latency(name, startMs, tags, context) {\n metrics.latency(name, startMs, tags, context);\n },\n withContext(context) {\n return createObservabilityAgentMetrics(metrics.withContext?.(context) ?? metrics);\n },\n };\n}\n\nfunction createNoopEvents(): AgentEvents {\n return {\n track: () => {},\n withContext: () => createNoopEvents(),\n };\n}\n\nfunction createObservabilityAgentEvents(events: ObservabilityEventsLike): AgentEvents {\n return {\n track(name, properties, context) {\n events.track(name, properties, context);\n },\n withContext(context) {\n return createObservabilityAgentEvents(events.withContext?.(context) ?? events);\n },\n };\n}\n\nexport function resolveAgentLogger(logger?: AgentLoggerInput): AgentLogger {\n if (!logger) {\n return createConsoleAgentLogger();\n }\n\n if (isAgentLogger(logger)) {\n return logger;\n }\n\n if (isObservabilityLoggerLike(logger)) {\n return createObservabilityAgentLogger(logger);\n }\n\n return createConsoleAgentLogger(logger);\n}\n\nexport function resolveAgentMetrics(\n metrics?: AgentMetrics | ObservabilityMetricsLike,\n): AgentMetrics {\n if (!metrics) {\n return createNoopMetrics();\n }\n\n if (isAgentMetrics(metrics)) {\n return metrics;\n }\n\n if (isMetricsLike(metrics)) {\n return createObservabilityAgentMetrics(metrics);\n }\n\n return createNoopMetrics();\n}\n\nexport function resolveAgentEvents(events?: AgentEvents | ObservabilityEventsLike): AgentEvents {\n if (!events) {\n return createNoopEvents();\n }\n\n if (isAgentEvents(events)) {\n return events;\n }\n\n if (isEventsLike(events)) {\n return createObservabilityAgentEvents(events);\n }\n\n return createNoopEvents();\n}\n\nexport function resolveAgentObservability(input?: AgentObservabilityInput): AgentObservability {\n if (input && !isObservabilityLike(input)) {\n const logger = resolveAgentLogger(input);\n const metrics = createNoopMetrics();\n const events = createNoopEvents();\n\n return {\n logger,\n metrics,\n events,\n withContext(context) {\n return {\n logger: logger.withContext(context),\n metrics: metrics.withContext(context),\n events,\n withContext: this.withContext,\n };\n },\n };\n }\n\n const logger = resolveAgentLogger(input?.logger);\n const metrics = resolveAgentMetrics(input?.metrics);\n const events = resolveAgentEvents(input?.events);\n\n return {\n logger,\n metrics,\n events,\n withContext(context) {\n return {\n logger: logger.withContext(context),\n metrics: metrics.withContext(context),\n events: events.withContext(context),\n withContext: this.withContext,\n };\n },\n };\n}\n","import type { ITestDataProvider } from \"@blinq/data-resolver\";\nimport type { ResolutionContext, TestDataType } from \"@blinq/schemas\";\nimport { resolveAgentLogger, type AgentLogger, type AgentLoggerInput } from \"./logger\";\n\nexport interface TestDataApiOptions {\n /**\n * Called after every successful write. Used by WorkerRuntime to fan out\n * snapshots over the sessionTestData subscription.\n */\n onChange?: () => void;\n /**\n * Optional logger. When supplied, every setRuntime/getRuntime call emits a\n * structured info log so the operator can trace test-data writes without\n * grepping for `provider.upsert`.\n */\n logger?: AgentLoggerInput;\n}\n\nexport class TestDataApi {\n private readonly logger?: AgentLogger;\n\n constructor(\n private readonly provider: ITestDataProvider,\n private readonly context: ResolutionContext,\n private readonly options: TestDataApiOptions = {},\n ) {\n this.logger = options.logger ? resolveAgentLogger(options.logger) : undefined;\n }\n\n /**\n * Save a value to runtime test data.\n *\n * Runtime values:\n * - resolvable as `{{key}}` in subsequent steps within the same execution\n * - scoped to the current scenario; cleared when the scenario or environment changes\n * - last write wins for the same key inside one run (idempotent)\n *\n * @example in AI-chat-generated custom code\n * const orderId = await page.locator('[data-order-id]').getAttribute('data-order-id');\n * await context.testData.setRuntime('orderId', orderId ?? '');\n *\n * @example with explicit dataType\n * await context.testData.setRuntime('authToken', token, { dataType: 'secret' });\n */\n async setRuntime(\n key: string,\n value: string,\n opts: { dataType?: TestDataType } = {},\n ): Promise<void> {\n if (typeof key !== \"string\" || key.length === 0) {\n throw new Error(\"setRuntime: key is required\");\n }\n const dataType = opts.dataType ?? \"string\";\n await this.provider.upsert({\n projectId: this.context.projectId,\n key,\n value: value ?? \"\",\n dataType,\n source: \"extracted\",\n scope: {\n type: \"runtime\",\n executionId: this.context.executionId,\n scenarioId: this.context.scenarioId,\n },\n });\n this.logger?.info(\"[TestDataApi] setRuntime\", {\n key,\n dataType,\n valueLength: (value ?? \"\").length,\n scope: \"runtime\",\n projectId: this.context.projectId,\n scenarioId: this.context.scenarioId,\n executionId: this.context.executionId,\n });\n this.options.onChange?.();\n }\n\n /**\n * Read a runtime value previously saved via setRuntime or an extract step.\n *\n * Returns `null` if no entry exists for `key` in the current runtime scope.\n * Does NOT walk the scope chain. For full resolution including environment +\n * global, use the `{{key}}` token syntax with the resolver.\n */\n async getRuntime(key: string): Promise<string | null> {\n const entries = await this.provider.getByScope(this.context);\n const hit = entries.find((e) => e.key === key && e.scope.type === \"runtime\");\n this.logger?.info(\"[TestDataApi] getRuntime\", {\n key,\n hit: hit !== undefined,\n projectId: this.context.projectId,\n scenarioId: this.context.scenarioId,\n });\n return hit?.value ?? null;\n }\n\n /**\n * Read a value through the full runtime → scenario → feature → environment → global\n * scope chain. This is used by built-in utility commands that need the raw value\n * rather than `{{key}}` token interpolation.\n */\n async getScoped(key: string): Promise<string | null> {\n const entries = await this.provider.getByScope(this.context);\n const precedence = [\"runtime\", \"scenario\", \"feature\", \"environment\", \"global\"] as const;\n const match = precedence\n .map((scopeType) =>\n entries.find((entry) => {\n if (entry.key !== key || entry.scope.type !== scopeType) {\n return false;\n }\n\n switch (entry.scope.type) {\n case \"runtime\":\n return (\n entry.scope.executionId === this.context.executionId &&\n (this.context.scenarioId === undefined ||\n entry.scope.scenarioId === this.context.scenarioId)\n );\n case \"scenario\":\n return entry.scope.scenarioId === this.context.scenarioId;\n case \"feature\":\n return entry.scope.featureId === this.context.featureId;\n case \"environment\":\n return entry.scope.environmentId === this.context.environmentId;\n case \"global\":\n return true;\n default:\n return false;\n }\n }),\n )\n .find((entry) => entry !== undefined);\n\n this.logger?.info(\"[TestDataApi] getScoped\", {\n key,\n hit: match !== undefined,\n scope: match?.scope.type,\n projectId: this.context.projectId,\n scenarioId: this.context.scenarioId,\n environmentId: this.context.environmentId,\n });\n return match?.value ?? null;\n }\n}\n","/** A special constant with type `never` */\nexport const NEVER = Object.freeze({\n status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n function init(inst, def) {\n if (!inst._zod) {\n Object.defineProperty(inst, \"_zod\", {\n value: {\n def,\n constr: _,\n traits: new Set(),\n },\n enumerable: false,\n });\n }\n if (inst._zod.traits.has(name)) {\n return;\n }\n inst._zod.traits.add(name);\n initializer(inst, def);\n // support prototype modifications\n const proto = _.prototype;\n const keys = Object.keys(proto);\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n if (!(k in inst)) {\n inst[k] = proto[k].bind(inst);\n }\n }\n }\n // doesn't work if Parent has a constructor with arguments\n const Parent = params?.Parent ?? Object;\n class Definition extends Parent {\n }\n Object.defineProperty(Definition, \"name\", { value: name });\n function _(def) {\n var _a;\n const inst = params?.Parent ? new Definition() : this;\n init(inst, def);\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n for (const fn of inst._zod.deferred) {\n fn();\n }\n return inst;\n }\n Object.defineProperty(_, \"init\", { value: init });\n Object.defineProperty(_, Symbol.hasInstance, {\n value: (inst) => {\n if (params?.Parent && inst instanceof params.Parent)\n return true;\n return inst?._zod?.traits?.has(name);\n },\n });\n Object.defineProperty(_, \"name\", { value: name });\n return _;\n}\n////////////////////////////// UTILITIES ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n constructor() {\n super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n }\n}\nexport class $ZodEncodeError extends Error {\n constructor(name) {\n super(`Encountered unidirectional transform during encode: ${name}`);\n this.name = \"ZodEncodeError\";\n }\n}\nexport const globalConfig = {};\nexport function config(newConfig) {\n if (newConfig)\n Object.assign(globalConfig, newConfig);\n return globalConfig;\n}\n","// functions\nexport function assertEqual(val) {\n return val;\n}\nexport function assertNotEqual(val) {\n return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n throw new Error(\"Unexpected value in exhaustive check\");\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n const values = Object.entries(entries)\n .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n .map(([_, v]) => v);\n return values;\n}\nexport function joinValues(array, separator = \"|\") {\n return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n if (typeof value === \"bigint\")\n return value.toString();\n return value;\n}\nexport function cached(getter) {\n const set = false;\n return {\n get value() {\n if (!set) {\n const value = getter();\n Object.defineProperty(this, \"value\", { value });\n return value;\n }\n throw new Error(\"cached value already set\");\n },\n };\n}\nexport function nullish(input) {\n return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepString = step.toString();\n let stepDecCount = (stepString.split(\".\")[1] || \"\").length;\n if (stepDecCount === 0 && /\\d?e-\\d?/.test(stepString)) {\n const match = stepString.match(/\\d?e-(\\d?)/);\n if (match?.[1]) {\n stepDecCount = Number.parseInt(match[1]);\n }\n }\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nconst EVALUATING = Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n let value = undefined;\n Object.defineProperty(object, key, {\n get() {\n if (value === EVALUATING) {\n // Circular reference detected, return undefined to break the cycle\n return undefined;\n }\n if (value === undefined) {\n value = EVALUATING;\n value = getter();\n }\n return value;\n },\n set(v) {\n Object.defineProperty(object, key, {\n value: v,\n // configurable: true,\n });\n // object[key] = v;\n },\n configurable: true,\n });\n}\nexport function objectClone(obj) {\n return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nexport function assignProp(target, prop, value) {\n Object.defineProperty(target, prop, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n}\nexport function mergeDefs(...defs) {\n const mergedDescriptors = {};\n for (const def of defs) {\n const descriptors = Object.getOwnPropertyDescriptors(def);\n Object.assign(mergedDescriptors, descriptors);\n }\n return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n return mergeDefs(schema._zod.def);\n}\nexport function getElementAtPath(obj, path) {\n if (!path)\n return obj;\n return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n const keys = Object.keys(promisesObj);\n const promises = keys.map((key) => promisesObj[key]);\n return Promise.all(promises).then((results) => {\n const resolvedObj = {};\n for (let i = 0; i < keys.length; i++) {\n resolvedObj[keys[i]] = results[i];\n }\n return resolvedObj;\n });\n}\nexport function randomString(length = 10) {\n const chars = \"abcdefghijklmnopqrstuvwxyz\";\n let str = \"\";\n for (let i = 0; i < length; i++) {\n str += chars[Math.floor(Math.random() * chars.length)];\n }\n return str;\n}\nexport function esc(str) {\n return JSON.stringify(str);\n}\nexport function slugify(input) {\n return input\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, \"\")\n .replace(/[\\s_-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = cached(() => {\n // @ts-ignore\n if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n return false;\n }\n try {\n const F = Function;\n new F(\"\");\n return true;\n }\n catch (_) {\n return false;\n }\n});\nexport function isPlainObject(o) {\n if (isObject(o) === false)\n return false;\n // modified constructor\n const ctor = o.constructor;\n if (ctor === undefined)\n return true;\n if (typeof ctor !== \"function\")\n return true;\n // modified prototype\n const prot = ctor.prototype;\n if (isObject(prot) === false)\n return false;\n // ctor doesn't have static `isPrototypeOf`\n if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n return false;\n }\n return true;\n}\nexport function shallowClone(o) {\n if (isPlainObject(o))\n return { ...o };\n if (Array.isArray(o))\n return [...o];\n return o;\n}\nexport function numKeys(data) {\n let keyCount = 0;\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n keyCount++;\n }\n }\n return keyCount;\n}\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return \"undefined\";\n case \"string\":\n return \"string\";\n case \"number\":\n return Number.isNaN(data) ? \"nan\" : \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"function\":\n return \"function\";\n case \"bigint\":\n return \"bigint\";\n case \"symbol\":\n return \"symbol\";\n case \"object\":\n if (Array.isArray(data)) {\n return \"array\";\n }\n if (data === null) {\n return \"null\";\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return \"promise\";\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return \"map\";\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return \"set\";\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return \"date\";\n }\n // @ts-ignore\n if (typeof File !== \"undefined\" && data instanceof File) {\n return \"file\";\n }\n return \"object\";\n default:\n throw new Error(`Unknown data type: ${t}`);\n }\n};\nexport const propertyKeyTypes = new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = new Set([\"string\", \"number\", \"bigint\", \"boolean\", \"symbol\", \"undefined\"]);\nexport function escapeRegex(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n const cl = new inst._zod.constr(def ?? inst._zod.def);\n if (!def || params?.parent)\n cl._zod.parent = inst;\n return cl;\n}\nexport function normalizeParams(_params) {\n const params = _params;\n if (!params)\n return {};\n if (typeof params === \"string\")\n return { error: () => params };\n if (params?.message !== undefined) {\n if (params?.error !== undefined)\n throw new Error(\"Cannot specify both `message` and `error` params\");\n params.error = params.message;\n }\n delete params.message;\n if (typeof params.error === \"string\")\n return { ...params, error: () => params.error };\n return params;\n}\nexport function createTransparentProxy(getter) {\n let target;\n return new Proxy({}, {\n get(_, prop, receiver) {\n target ?? (target = getter());\n return Reflect.get(target, prop, receiver);\n },\n set(_, prop, value, receiver) {\n target ?? (target = getter());\n return Reflect.set(target, prop, value, receiver);\n },\n has(_, prop) {\n target ?? (target = getter());\n return Reflect.has(target, prop);\n },\n deleteProperty(_, prop) {\n target ?? (target = getter());\n return Reflect.deleteProperty(target, prop);\n },\n ownKeys(_) {\n target ?? (target = getter());\n return Reflect.ownKeys(target);\n },\n getOwnPropertyDescriptor(_, prop) {\n target ?? (target = getter());\n return Reflect.getOwnPropertyDescriptor(target, prop);\n },\n defineProperty(_, prop, descriptor) {\n target ?? (target = getter());\n return Reflect.defineProperty(target, prop, descriptor);\n },\n });\n}\nexport function stringifyPrimitive(value) {\n if (typeof value === \"bigint\")\n return value.toString() + \"n\";\n if (typeof value === \"string\")\n return `\"${value}\"`;\n return `${value}`;\n}\nexport function optionalKeys(shape) {\n return Object.keys(shape).filter((k) => {\n return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n });\n}\nexport const NUMBER_FORMAT_RANGES = {\n safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n int32: [-2147483648, 2147483647],\n uint32: [0, 4294967295],\n float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".pick() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = {};\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n newShape[key] = currDef.shape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function omit(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".omit() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = { ...schema._zod.def.shape };\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n delete newShape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function extend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to extend: expected a plain object\");\n }\n const checks = schema._zod.def.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n // Only throw if new shape overlaps with existing shape\n // Use getOwnPropertyDescriptor to check key existence without accessing values\n const existingShape = schema._zod.def.shape;\n for (const key in shape) {\n if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {\n throw new Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\");\n }\n }\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function safeExtend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function merge(a, b) {\n const def = mergeDefs(a._zod.def, {\n get shape() {\n const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n get catchall() {\n return b._zod.def.catchall;\n },\n checks: [], // delete existing checks\n });\n return clone(a, def);\n}\nexport function partial(Class, schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".partial() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in oldShape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n else {\n for (const key in oldShape) {\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function required(Class, schema, mask) {\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n else {\n for (const key in oldShape) {\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n });\n return clone(schema, def);\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n if (x.aborted === true)\n return true;\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue !== true) {\n return true;\n }\n }\n return false;\n}\nexport function prefixIssues(path, issues) {\n return issues.map((iss) => {\n var _a;\n (_a = iss).path ?? (_a.path = []);\n iss.path.unshift(path);\n return iss;\n });\n}\nexport function unwrapMessage(message) {\n return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n const full = { ...iss, path: iss.path ?? [] };\n // for backwards compatibility\n if (!iss.message) {\n const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n unwrapMessage(ctx?.error?.(iss)) ??\n unwrapMessage(config.customError?.(iss)) ??\n unwrapMessage(config.localeError?.(iss)) ??\n \"Invalid input\";\n full.message = message;\n }\n // delete (full as any).def;\n delete full.inst;\n delete full.continue;\n if (!ctx?.reportInput) {\n delete full.input;\n }\n return full;\n}\nexport function getSizableOrigin(input) {\n if (input instanceof Set)\n return \"set\";\n if (input instanceof Map)\n return \"map\";\n // @ts-ignore\n if (input instanceof File)\n return \"file\";\n return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n if (Array.isArray(input))\n return \"array\";\n if (typeof input === \"string\")\n return \"string\";\n return \"unknown\";\n}\nexport function parsedType(data) {\n const t = typeof data;\n switch (t) {\n case \"number\": {\n return Number.isNaN(data) ? \"nan\" : \"number\";\n }\n case \"object\": {\n if (data === null) {\n return \"null\";\n }\n if (Array.isArray(data)) {\n return \"array\";\n }\n const obj = data;\n if (obj && Object.getPrototypeOf(obj) !== Object.prototype && \"constructor\" in obj && obj.constructor) {\n return obj.constructor.name;\n }\n }\n }\n return t;\n}\nexport function issue(...args) {\n const [iss, input, inst] = args;\n if (typeof iss === \"string\") {\n return {\n message: iss,\n code: \"custom\",\n input,\n inst,\n };\n }\n return { ...iss };\n}\nexport function cleanEnum(obj) {\n return Object.entries(obj)\n .filter(([k, _]) => {\n // return true if NaN, meaning it's not a number, thus a string key\n return Number.isNaN(Number.parseInt(k, 10));\n })\n .map((el) => el[1]);\n}\n// Codec utility functions\nexport function base64ToUint8Array(base64) {\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n let binaryString = \"\";\n for (let i = 0; i < bytes.length; i++) {\n binaryString += String.fromCharCode(bytes[i]);\n }\n return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n const cleanHex = hex.replace(/^0x/, \"\");\n if (cleanHex.length % 2 !== 0) {\n throw new Error(\"Invalid hex string length\");\n }\n const bytes = new Uint8Array(cleanHex.length / 2);\n for (let i = 0; i < cleanHex.length; i += 2) {\n bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n }\n return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n// instanceof\nexport class Class {\n constructor(..._args) { }\n}\n","import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n inst.name = \"$ZodError\";\n Object.defineProperty(inst, \"_zod\", {\n value: inst._zod,\n enumerable: false,\n });\n Object.defineProperty(inst, \"issues\", {\n value: def,\n enumerable: false,\n });\n inst.message = JSON.stringify(def, util.jsonStringifyReplacer, 2);\n Object.defineProperty(inst, \"toString\", {\n value: () => inst.message,\n enumerable: false,\n });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of error.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n}\nexport function formatError(error, mapper = (issue) => issue.message) {\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n issue.errors.map((issues) => processError({ issues }));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues });\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues });\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(error);\n return fieldErrors;\n}\nexport function treeifyError(error, mapper = (issue) => issue.message) {\n const result = { errors: [] };\n const processError = (error, path = []) => {\n var _a, _b;\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n // regular union error\n issue.errors.map((issues) => processError({ issues }, issue.path));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, issue.path);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, issue.path);\n }\n else {\n const fullpath = [...path, ...issue.path];\n if (fullpath.length === 0) {\n result.errors.push(mapper(issue));\n continue;\n }\n let curr = result;\n let i = 0;\n while (i < fullpath.length) {\n const el = fullpath[i];\n const terminal = i === fullpath.length - 1;\n if (typeof el === \"string\") {\n curr.properties ?? (curr.properties = {});\n (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n curr = curr.properties[el];\n }\n else {\n curr.items ?? (curr.items = []);\n (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n curr = curr.items[el];\n }\n if (terminal) {\n curr.errors.push(mapper(issue));\n }\n i++;\n }\n }\n }\n };\n processError(error);\n return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n * issues: [\n * {\n * expected: 'string',\n * code: 'invalid_type',\n * path: [ 'username' ],\n * message: 'Invalid input: expected string'\n * },\n * {\n * expected: 'number',\n * code: 'invalid_type',\n * path: [ 'favoriteNumbers', 1 ],\n * message: 'Invalid input: expected number'\n * }\n * ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n * ✖ Expected number, received string at \"username\n * favoriteNumbers[0]\n * ✖ Invalid input: expected number\n * ```\n */\nexport function toDotPath(_path) {\n const segs = [];\n const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n for (const seg of path) {\n if (typeof seg === \"number\")\n segs.push(`[${seg}]`);\n else if (typeof seg === \"symbol\")\n segs.push(`[${JSON.stringify(String(seg))}]`);\n else if (/[^\\w$]/.test(seg))\n segs.push(`[${JSON.stringify(seg)}]`);\n else {\n if (segs.length)\n segs.push(\".\");\n segs.push(seg);\n }\n }\n return segs.join(\"\");\n}\nexport function prettifyError(error) {\n const lines = [];\n // sort by path length\n const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n // Process each issue\n for (const issue of issues) {\n lines.push(`✖ ${issue.message}`);\n if (issue.path?.length)\n lines.push(` → at ${toDotPath(issue.path)}`);\n }\n // Convert Map to formatted string\n return lines.join(\"\\n\");\n}\n","import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\nexport const _parse = (_Err) => (schema, value, _ctx, _params) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n if (result.issues.length) {\n const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, _params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n if (result.issues.length) {\n const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n return result.issues.length\n ? {\n success: false,\n error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n return result.issues.length\n ? {\n success: false,\n error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\nexport const _encode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _parse(_Err)(schema, value, ctx);\n};\nexport const encode = /* @__PURE__*/ _encode(errors.$ZodRealError);\nexport const _decode = (_Err) => (schema, value, _ctx) => {\n return _parse(_Err)(schema, value, _ctx);\n};\nexport const decode = /* @__PURE__*/ _decode(errors.$ZodRealError);\nexport const _encodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _parseAsync(_Err)(schema, value, ctx);\n};\nexport const encodeAsync = /* @__PURE__*/ _encodeAsync(errors.$ZodRealError);\nexport const _decodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _parseAsync(_Err)(schema, value, _ctx);\n};\nexport const decodeAsync = /* @__PURE__*/ _decodeAsync(errors.$ZodRealError);\nexport const _safeEncode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _safeParse(_Err)(schema, value, ctx);\n};\nexport const safeEncode = /* @__PURE__*/ _safeEncode(errors.$ZodRealError);\nexport const _safeDecode = (_Err) => (schema, value, _ctx) => {\n return _safeParse(_Err)(schema, value, _ctx);\n};\nexport const safeDecode = /* @__PURE__*/ _safeDecode(errors.$ZodRealError);\nexport const _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _safeParseAsync(_Err)(schema, value, ctx);\n};\nexport const safeEncodeAsync = /* @__PURE__*/ _safeEncodeAsync(errors.$ZodRealError);\nexport const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _safeParseAsync(_Err)(schema, value, _ctx);\n};\nexport const safeDecodeAsync = /* @__PURE__*/ _safeDecodeAsync(errors.$ZodRealError);\n","import * as util from \"./util.js\";\nexport const cuid = /^[cC][^\\s-]{8,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n if (!version)\n return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const idnEmail = unicodeEmail;\nexport const browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emoji = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nexport function emoji() {\n return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nexport const mac = (delimiter) => {\n const escapedDelim = util.escapeRegex(delimiter ?? \":\");\n return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);\n};\nexport const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\nexport const domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\n// E.164: leading digit must be 1-9; total digits (excluding '+') between 7-15\nexport const e164 = /^\\+[1-9]\\d{6,14}$/;\n// const dateSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\nexport const date = /*@__PURE__*/ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n const regex = typeof args.precision === \"number\"\n ? args.precision === -1\n ? `${hhmm}`\n : args.precision === 0\n ? `${hhmm}:[0-5]\\\\d`\n : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n return regex;\n}\nexport function time(args) {\n return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n const time = timeSource({ precision: args.precision });\n const opts = [\"Z\"];\n if (args.local)\n opts.push(\"\");\n // if (args.offset) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n if (args.offset)\n opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n const timeRegex = `${time}(?:${opts.join(\"|\")})`;\n return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nexport const string = (params) => {\n const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^-?\\d+n?$/;\nexport const integer = /^-?\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?$/;\nexport const boolean = /^(?:true|false)$/i;\nconst _null = /^null$/i;\nexport { _null as null };\nconst _undefined = /^undefined$/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n// regex for hexadecimal strings (any length)\nexport const hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nexport const md5_hex = /^[0-9a-fA-F]{32}$/;\nexport const md5_base64 = /*@__PURE__*/ fixedBase64(22, \"==\");\nexport const md5_base64url = /*@__PURE__*/ fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nexport const sha1_hex = /^[0-9a-fA-F]{40}$/;\nexport const sha1_base64 = /*@__PURE__*/ fixedBase64(27, \"=\");\nexport const sha1_base64url = /*@__PURE__*/ fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nexport const sha256_hex = /^[0-9a-fA-F]{64}$/;\nexport const sha256_base64 = /*@__PURE__*/ fixedBase64(43, \"=\");\nexport const sha256_base64url = /*@__PURE__*/ fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nexport const sha384_hex = /^[0-9a-fA-F]{96}$/;\nexport const sha384_base64 = /*@__PURE__*/ fixedBase64(64, \"\");\nexport const sha384_base64url = /*@__PURE__*/ fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nexport const sha512_hex = /^[0-9a-fA-F]{128}$/;\nexport const sha512_base64 = /*@__PURE__*/ fixedBase64(86, \"==\");\nexport const sha512_base64url = /*@__PURE__*/ fixedBase64url(86);\n","// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n var _a;\n inst._zod ?? (inst._zod = {});\n inst._zod.def = def;\n (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\nconst numericOriginMap = {\n number: \"number\",\n bigint: \"bigint\",\n object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n if (def.value < curr) {\n if (def.inclusive)\n bag.maximum = def.value;\n else\n bag.exclusiveMaximum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n if (def.value > curr) {\n if (def.inclusive)\n bag.minimum = def.value;\n else\n bag.exclusiveMinimum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n var _a;\n (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n });\n inst._zod.check = (payload) => {\n if (typeof payload.value !== typeof def.value)\n throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n const isMultiple = typeof payload.value === \"bigint\"\n ? payload.value % def.value === BigInt(0)\n : util.floatSafeRemainder(payload.value, def.value) === 0;\n if (isMultiple)\n return;\n payload.issues.push({\n origin: typeof payload.value,\n code: \"not_multiple_of\",\n divisor: def.value,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n def.format = def.format || \"float64\";\n const isInt = def.format?.includes(\"int\");\n const origin = isInt ? \"int\" : \"number\";\n const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n if (isInt)\n bag.pattern = regexes.integer;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (isInt) {\n if (!Number.isInteger(input)) {\n // invalid_format issue\n // payload.issues.push({\n // expected: def.format,\n // format: def.format,\n // code: \"invalid_format\",\n // input,\n // inst,\n // });\n // invalid_type issue\n payload.issues.push({\n expected: origin,\n format: def.format,\n code: \"invalid_type\",\n continue: false,\n input,\n inst,\n });\n return;\n // not_multiple_of issue\n // payload.issues.push({\n // code: \"not_multiple_of\",\n // origin: \"number\",\n // input,\n // inst,\n // divisor: 1,\n // });\n }\n if (!Number.isSafeInteger(input)) {\n if (input > 0) {\n // too_big\n payload.issues.push({\n input,\n code: \"too_big\",\n maximum: Number.MAX_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n else {\n // too_small\n payload.issues.push({\n input,\n code: \"too_small\",\n minimum: Number.MIN_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n return;\n }\n }\n if (input < minimum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_small\",\n minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (input < minimum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_small\",\n minimum: minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size <= def.maximum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size >= def.minimum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.size;\n bag.maximum = def.size;\n bag.size = def.size;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size === def.size)\n return;\n const tooBig = size > def.size;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length <= def.maximum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length >= def.minimum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.length;\n bag.maximum = def.length;\n bag.length = def.length;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length === def.length)\n return;\n const origin = util.getLengthableOrigin(input);\n const tooBig = length > def.length;\n payload.issues.push({\n origin,\n ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n var _a, _b;\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n if (def.pattern) {\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(def.pattern);\n }\n });\n if (def.pattern)\n (_a = inst._zod).check ?? (_a.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n inst,\n continue: !def.abort,\n });\n });\n else\n (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n $ZodCheckStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"regex\",\n input: payload.value,\n pattern: def.pattern.toString(),\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.lowercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.uppercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const escapedRegex = util.escapeRegex(def.includes);\n const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n def.pattern = pattern;\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.includes(def.includes, def.position))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"includes\",\n includes: def.includes,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.startsWith(def.prefix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"starts_with\",\n prefix: def.prefix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.endsWith(def.suffix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"ends_with\",\n suffix: def.suffix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n///////////////////////////////////\n///// $ZodCheckProperty /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(property, result.issues));\n }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n const result = def.schema._zod.run({\n value: payload.value[def.property],\n issues: [],\n }, {});\n if (result instanceof Promise) {\n return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n }\n handleCheckPropertyResult(result, payload, def.property);\n return;\n };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const mimeSet = new Set(def.mime);\n inst._zod.onattach.push((inst) => {\n inst._zod.bag.mime = def.mime;\n });\n inst._zod.check = (payload) => {\n if (mimeSet.has(payload.value.type))\n return;\n payload.issues.push({\n code: \"invalid_value\",\n values: def.mime,\n input: payload.value.type,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n payload.value = def.tx(payload.value);\n };\n});\n","export class Doc {\n constructor(args = []) {\n this.content = [];\n this.indent = 0;\n if (this)\n this.args = args;\n }\n indented(fn) {\n this.indent += 1;\n fn(this);\n this.indent -= 1;\n }\n write(arg) {\n if (typeof arg === \"function\") {\n arg(this, { execution: \"sync\" });\n arg(this, { execution: \"async\" });\n return;\n }\n const content = arg;\n const lines = content.split(\"\\n\").filter((x) => x);\n const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n for (const line of dedented) {\n this.content.push(line);\n }\n }\n compile() {\n const F = Function;\n const args = this?.args;\n const content = this?.content ?? [``];\n const lines = [...content.map((x) => ` ${x}`)];\n // console.log(lines.join(\"\\n\"));\n return new F(...args, lines.join(\"\\n\"));\n }\n}\n","export const version = {\n major: 4,\n minor: 3,\n patch: 6,\n};\n","import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { parse, parseAsync, safeParse, safeParseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n var _a;\n inst ?? (inst = {});\n inst._zod.def = def; // set _def property\n inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n inst._zod.version = version;\n const checks = [...(inst._zod.def.checks ?? [])];\n // if inst is itself a checks.$ZodCheck, run it as a check\n if (inst._zod.traits.has(\"$ZodCheck\")) {\n checks.unshift(inst);\n }\n for (const ch of checks) {\n for (const fn of ch._zod.onattach) {\n fn(inst);\n }\n }\n if (checks.length === 0) {\n // deferred initializer\n // inst._zod.parse is not yet defined\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n inst._zod.deferred?.push(() => {\n inst._zod.run = inst._zod.parse;\n });\n }\n else {\n const runChecks = (payload, checks, ctx) => {\n let isAborted = util.aborted(payload);\n let asyncResult;\n for (const ch of checks) {\n if (ch._zod.def.when) {\n const shouldRun = ch._zod.def.when(payload);\n if (!shouldRun)\n continue;\n }\n else if (isAborted) {\n continue;\n }\n const currLen = payload.issues.length;\n const _ = ch._zod.check(payload);\n if (_ instanceof Promise && ctx?.async === false) {\n throw new core.$ZodAsyncError();\n }\n if (asyncResult || _ instanceof Promise) {\n asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n await _;\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n return;\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n });\n }\n else {\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n continue;\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n }\n }\n if (asyncResult) {\n return asyncResult.then(() => {\n return payload;\n });\n }\n return payload;\n };\n const handleCanaryResult = (canary, payload, ctx) => {\n // abort if the canary is aborted\n if (util.aborted(canary)) {\n canary.aborted = true;\n return canary;\n }\n // run checks first, then\n const checkResult = runChecks(payload, checks, ctx);\n if (checkResult instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n }\n return inst._zod.parse(checkResult, ctx);\n };\n inst._zod.run = (payload, ctx) => {\n if (ctx.skipChecks) {\n return inst._zod.parse(payload, ctx);\n }\n if (ctx.direction === \"backward\") {\n // run canary\n // initial pass (no checks)\n const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n if (canary instanceof Promise) {\n return canary.then((canary) => {\n return handleCanaryResult(canary, payload, ctx);\n });\n }\n return handleCanaryResult(canary, payload, ctx);\n }\n // forward\n const result = inst._zod.parse(payload, ctx);\n if (result instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return result.then((result) => runChecks(result, checks, ctx));\n }\n return runChecks(result, checks, ctx);\n };\n }\n // Lazy initialize ~standard to avoid creating objects for every schema\n util.defineLazy(inst, \"~standard\", () => ({\n validate: (value) => {\n try {\n const r = safeParse(inst, value);\n return r.success ? { value: r.data } : { issues: r.error?.issues };\n }\n catch (_) {\n return safeParseAsync(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\n }\n },\n vendor: \"zod\",\n version: 1,\n }));\n});\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);\n inst._zod.parse = (payload, _) => {\n if (def.coerce)\n try {\n payload.value = String(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"string\")\n return payload;\n payload.issues.push({\n expected: \"string\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n // check initialization must come first\n checks.$ZodCheckStringFormat.init(inst, def);\n $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.guid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n if (def.version) {\n const versionMap = {\n v1: 1,\n v2: 2,\n v3: 3,\n v4: 4,\n v5: 5,\n v6: 6,\n v7: 7,\n v8: 8,\n };\n const v = versionMap[def.version];\n if (v === undefined)\n throw new Error(`Invalid UUID version: \"${def.version}\"`);\n def.pattern ?? (def.pattern = regexes.uuid(v));\n }\n else\n def.pattern ?? (def.pattern = regexes.uuid());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.email);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n try {\n // Trim whitespace from input\n const trimmed = payload.value.trim();\n // @ts-ignore\n const url = new URL(trimmed);\n if (def.hostname) {\n def.hostname.lastIndex = 0;\n if (!def.hostname.test(url.hostname)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid hostname\",\n pattern: def.hostname.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n if (def.protocol) {\n def.protocol.lastIndex = 0;\n if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid protocol\",\n pattern: def.protocol.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n // Set the output value based on normalize flag\n if (def.normalize) {\n // Use normalized URL\n payload.value = url.href;\n }\n else {\n // Preserve the original input (trimmed)\n payload.value = trimmed;\n }\n return;\n }\n catch (_) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.emoji());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.nanoid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid2);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ulid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.xid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ksuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.datetime(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.date);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.time(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.duration);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv4);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `ipv4`;\n});\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv6);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `ipv6`;\n inst._zod.check = (payload) => {\n try {\n // @ts-ignore\n new URL(`http://[${payload.value}]`);\n // return;\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"ipv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodMAC = /*@__PURE__*/ core.$constructor(\"$ZodMAC\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.mac(def.delimiter));\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `mac`;\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv4);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n const parts = payload.value.split(\"/\");\n try {\n if (parts.length !== 2)\n throw new Error();\n const [address, prefix] = parts;\n if (!prefix)\n throw new Error();\n const prefixNum = Number(prefix);\n if (`${prefixNum}` !== prefix)\n throw new Error();\n if (prefixNum < 0 || prefixNum > 128)\n throw new Error();\n // @ts-ignore\n new URL(`http://[${address}]`);\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"cidrv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64(data) {\n if (data === \"\")\n return true;\n if (data.length % 4 !== 0)\n return false;\n try {\n // @ts-ignore\n atob(data);\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.contentEncoding = \"base64\";\n inst._zod.check = (payload) => {\n if (isValidBase64(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64URL(data) {\n if (!regexes.base64url.test(data))\n return false;\n const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64url);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.contentEncoding = \"base64url\";\n inst._zod.check = (payload) => {\n if (isValidBase64URL(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.e164);\n $ZodStringFormat.init(inst, def);\n});\n////////////////////////////// ZodJWT //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n try {\n const tokensParts = token.split(\".\");\n if (tokensParts.length !== 3)\n return false;\n const [header] = tokensParts;\n if (!header)\n return false;\n // @ts-ignore\n const parsedHeader = JSON.parse(atob(header));\n if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n return false;\n if (!parsedHeader.alg)\n return false;\n if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (isValidJWT(payload.value, def.alg))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"jwt\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (def.fn(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Number(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n return payload;\n }\n const received = typeof input === \"number\"\n ? Number.isNaN(input)\n ? \"NaN\"\n : !Number.isFinite(input)\n ? \"Infinity\"\n : undefined\n : undefined;\n payload.issues.push({\n expected: \"number\",\n code: \"invalid_type\",\n input,\n inst,\n ...(received ? { received } : {}),\n });\n return payload;\n };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumberFormat\", (inst, def) => {\n checks.$ZodCheckNumberFormat.init(inst, def);\n $ZodNumber.init(inst, def); // no format checks\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.boolean;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Boolean(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"boolean\")\n return payload;\n payload.issues.push({\n expected: \"boolean\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.bigint;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = BigInt(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"bigint\")\n return payload;\n payload.issues.push({\n expected: \"bigint\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigIntFormat\", (inst, def) => {\n checks.$ZodCheckBigIntFormat.init(inst, def);\n $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"symbol\")\n return payload;\n payload.issues.push({\n expected: \"symbol\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.undefined;\n inst._zod.values = new Set([undefined]);\n inst._zod.optin = \"optional\";\n inst._zod.optout = \"optional\";\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"undefined\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.null;\n inst._zod.values = new Set([null]);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (input === null)\n return payload;\n payload.issues.push({\n expected: \"null\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n payload.issues.push({\n expected: \"never\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"void\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce) {\n try {\n payload.value = new Date(payload.value);\n }\n catch (_err) { }\n }\n const input = payload.value;\n const isDate = input instanceof Date;\n const isValidDate = isDate && !Number.isNaN(input.getTime());\n if (isValidDate)\n return payload;\n payload.issues.push({\n expected: \"date\",\n code: \"invalid_type\",\n input,\n ...(isDate ? { received: \"Invalid Date\" } : {}),\n inst,\n });\n return payload;\n };\n});\nfunction handleArrayResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n expected: \"array\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = Array(input.length);\n const proms = [];\n for (let i = 0; i < input.length; i++) {\n const item = input[i];\n const result = def.element._zod.run({\n value: item,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n }\n else {\n handleArrayResult(result, payload, i);\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload; //handleArrayResultsAsync(parseResults, final);\n };\n});\nfunction handlePropertyResult(result, final, key, input, isOptionalOut) {\n if (result.issues.length) {\n // For optional-out schemas, ignore errors on absent keys\n if (isOptionalOut && !(key in input)) {\n return;\n }\n final.issues.push(...util.prefixIssues(key, result.issues));\n }\n if (result.value === undefined) {\n if (key in input) {\n final.value[key] = undefined;\n }\n }\n else {\n final.value[key] = result.value;\n }\n}\nfunction normalizeDef(def) {\n const keys = Object.keys(def.shape);\n for (const k of keys) {\n if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) {\n throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n }\n }\n const okeys = util.optionalKeys(def.shape);\n return {\n ...def,\n keys,\n keySet: new Set(keys),\n numKeys: keys.length,\n optionalKeys: new Set(okeys),\n };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst) {\n const unrecognized = [];\n // iterate over input keys\n const keySet = def.keySet;\n const _catchall = def.catchall._zod;\n const t = _catchall.def.type;\n const isOptionalOut = _catchall.optout === \"optional\";\n for (const key in input) {\n if (keySet.has(key))\n continue;\n if (t === \"never\") {\n unrecognized.push(key);\n continue;\n }\n const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalOut);\n }\n }\n if (unrecognized.length) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n keys: unrecognized,\n input,\n inst,\n });\n }\n if (!proms.length)\n return payload;\n return Promise.all(proms).then(() => {\n return payload;\n });\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodType.init(inst, def);\n // const sh = def.shape;\n const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n if (!desc?.get) {\n const sh = def.shape;\n Object.defineProperty(def, \"shape\", {\n get: () => {\n const newSh = { ...sh };\n Object.defineProperty(def, \"shape\", {\n value: newSh,\n });\n return newSh;\n },\n });\n }\n const _normalized = util.cached(() => normalizeDef(def));\n util.defineLazy(inst._zod, \"propValues\", () => {\n const shape = def.shape;\n const propValues = {};\n for (const key in shape) {\n const field = shape[key]._zod;\n if (field.values) {\n propValues[key] ?? (propValues[key] = new Set());\n for (const v of field.values)\n propValues[key].add(v);\n }\n }\n return propValues;\n });\n const isObject = util.isObject;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = {};\n const proms = [];\n const shape = value.shape;\n for (const key of value.keys) {\n const el = shape[key];\n const isOptionalOut = el._zod.optout === \"optional\";\n const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalOut);\n }\n }\n if (!catchall) {\n return proms.length ? Promise.all(proms).then(() => payload) : payload;\n }\n return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);\n };\n});\nexport const $ZodObjectJIT = /*@__PURE__*/ core.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodObject.init(inst, def);\n const superParse = inst._zod.parse;\n const _normalized = util.cached(() => normalizeDef(def));\n const generateFastpass = (shape) => {\n const doc = new Doc([\"shape\", \"payload\", \"ctx\"]);\n const normalized = _normalized.value;\n const parseStr = (key) => {\n const k = util.esc(key);\n return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n };\n doc.write(`const input = payload.value;`);\n const ids = Object.create(null);\n let counter = 0;\n for (const key of normalized.keys) {\n ids[key] = `key_${counter++}`;\n }\n // A: preserve key order {\n doc.write(`const newResult = {};`);\n for (const key of normalized.keys) {\n const id = ids[key];\n const k = util.esc(key);\n const schema = shape[key];\n const isOptionalOut = schema?._zod?.optout === \"optional\";\n doc.write(`const ${id} = ${parseStr(key)};`);\n if (isOptionalOut) {\n // For optional-out schemas, ignore errors on absent keys\n doc.write(`\n if (${id}.issues.length) {\n if (${k} in input) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n }\n else {\n doc.write(`\n if (${id}.issues.length) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n }\n }\n doc.write(`payload.value = newResult;`);\n doc.write(`return payload;`);\n const fn = doc.compile();\n return (payload, ctx) => fn(shape, payload, ctx);\n };\n let fastpass;\n const isObject = util.isObject;\n const jit = !core.globalConfig.jitless;\n const allowsEval = util.allowsEval;\n const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n // always synchronous\n if (!fastpass)\n fastpass = generateFastpass(def.shape);\n payload = fastpass(payload, ctx);\n if (!catchall)\n return payload;\n return handleCatchall([], input, payload, ctx, value, inst);\n }\n return superParse(payload, ctx);\n };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n for (const result of results) {\n if (result.issues.length === 0) {\n final.value = result.value;\n return final;\n }\n }\n const nonaborted = results.filter((r) => !util.aborted(r));\n if (nonaborted.length === 1) {\n final.value = nonaborted[0].value;\n return nonaborted[0];\n }\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"values\", () => {\n if (def.options.every((o) => o._zod.values)) {\n return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n }\n return undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n if (def.options.every((o) => o._zod.pattern)) {\n const patterns = def.options.map((o) => o._zod.pattern);\n return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n }\n return undefined;\n });\n const single = def.options.length === 1;\n const first = def.options[0]._zod.run;\n inst._zod.parse = (payload, ctx) => {\n if (single) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n if (result.issues.length === 0)\n return result;\n results.push(result);\n }\n }\n if (!async)\n return handleUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleUnionResults(results, payload, inst, ctx);\n });\n };\n});\nfunction handleExclusiveUnionResults(results, final, inst, ctx) {\n const successes = results.filter((r) => r.issues.length === 0);\n if (successes.length === 1) {\n final.value = successes[0].value;\n return final;\n }\n if (successes.length === 0) {\n // No matches - same as regular union\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n }\n else {\n // Multiple matches - exclusive union failure\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: [],\n inclusive: false,\n });\n }\n return final;\n}\nexport const $ZodXor = /*@__PURE__*/ core.$constructor(\"$ZodXor\", (inst, def) => {\n $ZodUnion.init(inst, def);\n def.inclusive = false;\n const single = def.options.length === 1;\n const first = def.options[0]._zod.run;\n inst._zod.parse = (payload, ctx) => {\n if (single) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n results.push(result);\n }\n }\n if (!async)\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n });\n };\n});\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n def.inclusive = false;\n $ZodUnion.init(inst, def);\n const _super = inst._zod.parse;\n util.defineLazy(inst._zod, \"propValues\", () => {\n const propValues = {};\n for (const option of def.options) {\n const pv = option._zod.propValues;\n if (!pv || Object.keys(pv).length === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n for (const [k, v] of Object.entries(pv)) {\n if (!propValues[k])\n propValues[k] = new Set();\n for (const val of v) {\n propValues[k].add(val);\n }\n }\n }\n return propValues;\n });\n const disc = util.cached(() => {\n const opts = def.options;\n const map = new Map();\n for (const o of opts) {\n const values = o._zod.propValues?.[def.discriminator];\n if (!values || values.size === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n for (const v of values) {\n if (map.has(v)) {\n throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n }\n map.set(v, o);\n }\n }\n return map;\n });\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isObject(input)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"object\",\n input,\n inst,\n });\n return payload;\n }\n const opt = disc.value.get(input?.[def.discriminator]);\n if (opt) {\n return opt._zod.run(payload, ctx);\n }\n if (def.unionFallback) {\n return _super(payload, ctx);\n }\n // no matching discriminator\n payload.issues.push({\n code: \"invalid_union\",\n errors: [],\n note: \"No matching discriminator\",\n discriminator: def.discriminator,\n input,\n path: [def.discriminator],\n inst,\n });\n return payload;\n };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n const async = left instanceof Promise || right instanceof Promise;\n if (async) {\n return Promise.all([left, right]).then(([left, right]) => {\n return handleIntersectionResults(payload, left, right);\n });\n }\n return handleIntersectionResults(payload, left, right);\n };\n});\nfunction mergeValues(a, b) {\n // const aType = parse.t(a);\n // const bType = parse.t(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n if (a instanceof Date && b instanceof Date && +a === +b) {\n return { valid: true, data: a };\n }\n if (util.isPlainObject(a) && util.isPlainObject(b)) {\n const bKeys = Object.keys(b);\n const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return {\n valid: false,\n mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) {\n return { valid: false, mergeErrorPath: [] };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return {\n valid: false,\n mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n // Track which side(s) report each key as unrecognized\n const unrecKeys = new Map();\n let unrecIssue;\n for (const iss of left.issues) {\n if (iss.code === \"unrecognized_keys\") {\n unrecIssue ?? (unrecIssue = iss);\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).l = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n for (const iss of right.issues) {\n if (iss.code === \"unrecognized_keys\") {\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).r = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n // Report only keys unrecognized by BOTH sides\n const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);\n if (bothKeys.length && unrecIssue) {\n result.issues.push({ ...unrecIssue, keys: bothKeys });\n }\n if (util.aborted(result))\n return result;\n const merged = mergeValues(left.value, right.value);\n if (!merged.valid) {\n throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n }\n result.value = merged.data;\n return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n $ZodType.init(inst, def);\n const items = def.items;\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n input,\n inst,\n expected: \"tuple\",\n code: \"invalid_type\",\n });\n return payload;\n }\n payload.value = [];\n const proms = [];\n const reversedIndex = [...items].reverse().findIndex((item) => item._zod.optin !== \"optional\");\n const optStart = reversedIndex === -1 ? 0 : items.length - reversedIndex;\n if (!def.rest) {\n const tooBig = input.length > items.length;\n const tooSmall = input.length < optStart - 1;\n if (tooBig || tooSmall) {\n payload.issues.push({\n ...(tooBig\n ? { code: \"too_big\", maximum: items.length, inclusive: true }\n : { code: \"too_small\", minimum: items.length }),\n input,\n inst,\n origin: \"array\",\n });\n return payload;\n }\n }\n let i = -1;\n for (const item of items) {\n i++;\n if (i >= input.length)\n if (i >= optStart)\n continue;\n const result = item._zod.run({\n value: input[i],\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n if (def.rest) {\n const rest = input.slice(items.length);\n for (const el of rest) {\n i++;\n const result = def.rest._zod.run({\n value: el,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleTupleResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isPlainObject(input)) {\n payload.issues.push({\n expected: \"record\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n const values = def.keyType._zod.values;\n if (values) {\n payload.value = {};\n const recordKeys = new Set();\n for (const key of values) {\n if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n recordKeys.add(typeof key === \"number\" ? key.toString() : key);\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[key] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[key] = result.value;\n }\n }\n }\n let unrecognized;\n for (const key in input) {\n if (!recordKeys.has(key)) {\n unrecognized = unrecognized ?? [];\n unrecognized.push(key);\n }\n }\n if (unrecognized && unrecognized.length > 0) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n input,\n inst,\n keys: unrecognized,\n });\n }\n }\n else {\n payload.value = {};\n for (const key of Reflect.ownKeys(input)) {\n if (key === \"__proto__\")\n continue;\n let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n if (keyResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n // Numeric string fallback: if key is a numeric string and failed, retry with Number(key)\n // This handles z.number(), z.literal([1, 2, 3]), and unions containing numeric literals\n const checkNumericKey = typeof key === \"string\" && regexes.number.test(key) && keyResult.issues.length;\n if (checkNumericKey) {\n const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx);\n if (retryResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n if (retryResult.issues.length === 0) {\n keyResult = retryResult;\n }\n }\n if (keyResult.issues.length) {\n if (def.mode === \"loose\") {\n // Pass through unchanged\n payload.value[key] = input[key];\n }\n else {\n // Default \"strict\" behavior: error on invalid key\n payload.issues.push({\n code: \"invalid_key\",\n origin: \"record\",\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n input: key,\n path: [key],\n inst,\n });\n }\n continue;\n }\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload;\n };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Map)) {\n payload.issues.push({\n expected: \"map\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n payload.value = new Map();\n for (const [key, value] of input) {\n const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n if (keyResult instanceof Promise || valueResult instanceof Promise) {\n proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }));\n }\n else {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n if (keyResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, keyResult.issues));\n }\n else {\n final.issues.push({\n code: \"invalid_key\",\n origin: \"map\",\n input,\n inst,\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n if (valueResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, valueResult.issues));\n }\n else {\n final.issues.push({\n origin: \"map\",\n code: \"invalid_element\",\n input,\n inst,\n key: key,\n issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Set)) {\n payload.issues.push({\n input,\n inst,\n expected: \"set\",\n code: \"invalid_type\",\n });\n return payload;\n }\n const proms = [];\n payload.value = new Set();\n for (const item of input) {\n const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleSetResult(result, payload)));\n }\n else\n handleSetResult(result, payload);\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleSetResult(result, final) {\n if (result.issues.length) {\n final.issues.push(...result.issues);\n }\n final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n $ZodType.init(inst, def);\n const values = util.getEnumValues(def.entries);\n const valuesSet = new Set(values);\n inst._zod.values = valuesSet;\n inst._zod.pattern = new RegExp(`^(${values\n .filter((k) => util.propertyKeyTypes.has(typeof k))\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o.toString()))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (valuesSet.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n if (def.values.length === 0) {\n throw new Error(\"Cannot create literal schema with no valid values\");\n }\n const values = new Set(def.values);\n inst._zod.values = values;\n inst._zod.pattern = new RegExp(`^(${def.values\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o)))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (values.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values: def.values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n // @ts-ignore\n if (input instanceof File)\n return payload;\n payload.issues.push({\n expected: \"file\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\n const _out = def.transform(payload.value, payload);\n if (ctx.async) {\n const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n return output.then((output) => {\n payload.value = output;\n return payload;\n });\n }\n if (_out instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n payload.value = _out;\n return payload;\n };\n});\nfunction handleOptionalResult(result, input) {\n if (result.issues.length && input === undefined) {\n return { issues: [], value: undefined };\n }\n return result;\n}\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n inst._zod.optout = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n if (def.innerType._zod.optin === \"optional\") {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise)\n return result.then((r) => handleOptionalResult(r, payload.value));\n return handleOptionalResult(result, payload.value);\n }\n if (payload.value === undefined) {\n return payload;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodExactOptional = /*@__PURE__*/ core.$constructor(\"$ZodExactOptional\", (inst, def) => {\n // Call parent init - inherits optin/optout = \"optional\"\n $ZodOptional.init(inst, def);\n // Override values/pattern to NOT add undefined\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n util.defineLazy(inst._zod, \"pattern\", () => def.innerType._zod.pattern);\n // Override parse to just delegate (no undefined handling)\n inst._zod.parse = (payload, ctx) => {\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n });\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n // Forward direction (decode): allow null to pass through\n if (payload.value === null)\n return payload;\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n $ZodType.init(inst, def);\n // inst._zod.qin = \"true\";\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply defaults for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n /**\n * $ZodDefault returns the default value immediately in forward direction.\n * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe. */\n return payload;\n }\n // Forward direction: continue with default handling\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleDefaultResult(result, def));\n }\n return handleDefaultResult(result, def);\n };\n});\nfunction handleDefaultResult(payload, def) {\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply prefault for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => {\n const v = def.innerType._zod.values;\n return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleNonOptionalResult(result, inst));\n }\n return handleNonOptionalResult(result, inst);\n };\n});\nfunction handleNonOptionalResult(payload, inst) {\n if (!payload.issues.length && payload.value === undefined) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"nonoptional\",\n input: payload.value,\n inst,\n });\n }\n return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(\"ZodSuccess\");\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.issues.length === 0;\n return payload;\n });\n }\n payload.value = result.issues.length === 0;\n return payload;\n };\n});\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply catch logic\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n }\n return payload;\n });\n }\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n }\n return payload;\n };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"nan\",\n code: \"invalid_type\",\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handlePipeResult(right, def.in, ctx));\n }\n return handlePipeResult(right, def.in, ctx);\n }\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handlePipeResult(left, def.out, ctx));\n }\n return handlePipeResult(left, def.out, ctx);\n };\n});\nfunction handlePipeResult(left, next, ctx) {\n if (left.issues.length) {\n // prevent further checks\n left.aborted = true;\n return left;\n }\n return next._zod.run({ value: left.value, issues: left.issues }, ctx);\n}\nexport const $ZodCodec = /*@__PURE__*/ core.$constructor(\"$ZodCodec\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handleCodecAResult(left, def, ctx));\n }\n return handleCodecAResult(left, def, ctx);\n }\n else {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handleCodecAResult(right, def, ctx));\n }\n return handleCodecAResult(right, def, ctx);\n }\n };\n});\nfunction handleCodecAResult(result, def, ctx) {\n if (result.issues.length) {\n // prevent further checks\n result.aborted = true;\n return result;\n }\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const transformed = def.transform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n }\n return handleCodecTxResult(result, transformed, def.out, ctx);\n }\n else {\n const transformed = def.reverseTransform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n }\n return handleCodecTxResult(result, transformed, def.in, ctx);\n }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n // Check if transform added any issues\n if (left.issues.length) {\n left.aborted = true;\n return left;\n }\n return nextSchema._zod.run({ value, issues: left.issues }, ctx);\n}\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType?._zod?.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType?._zod?.optout);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then(handleReadonlyResult);\n }\n return handleReadonlyResult(result);\n };\n});\nfunction handleReadonlyResult(payload) {\n payload.value = Object.freeze(payload.value);\n return payload;\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n const regexParts = [];\n for (const part of def.parts) {\n if (typeof part === \"object\" && part !== null) {\n // is Zod schema\n if (!part._zod.pattern) {\n // if (!source)\n throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n }\n const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n if (!source)\n throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n regexParts.push(source.slice(start, end));\n }\n else if (part === null || util.primitiveTypes.has(typeof part)) {\n regexParts.push(util.escapeRegex(`${part}`));\n }\n else {\n throw new Error(`Invalid template literal part: ${part}`);\n }\n }\n inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"string\") {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"string\",\n code: \"invalid_type\",\n });\n return payload;\n }\n inst._zod.pattern.lastIndex = 0;\n if (!inst._zod.pattern.test(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n code: \"invalid_format\",\n format: def.format ?? \"template_literal\",\n pattern: inst._zod.pattern.source,\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodFunction = /*@__PURE__*/ core.$constructor(\"$ZodFunction\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._def = def;\n inst._zod.def = def;\n inst.implement = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implement() must be called with a function\");\n }\n return function (...args) {\n const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;\n const result = Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return parse(inst._def.output, result);\n }\n return result;\n };\n };\n inst.implementAsync = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implementAsync() must be called with a function\");\n }\n return async function (...args) {\n const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;\n const result = await Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return await parseAsync(inst._def.output, result);\n }\n return result;\n };\n };\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"function\") {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"function\",\n input: payload.value,\n inst,\n });\n return payload;\n }\n // Check if output is a promise type to determine if we should use async implementation\n const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n if (hasPromiseOutput) {\n payload.value = inst.implementAsync(payload.value);\n }\n else {\n payload.value = inst.implement(payload.value);\n }\n return payload;\n };\n inst.input = (...args) => {\n const F = inst.constructor;\n if (Array.isArray(args[0])) {\n return new F({\n type: \"function\",\n input: new $ZodTuple({\n type: \"tuple\",\n items: args[0],\n rest: args[1],\n }),\n output: inst._def.output,\n });\n }\n return new F({\n type: \"function\",\n input: args[0],\n output: inst._def.output,\n });\n };\n inst.output = (output) => {\n const F = inst.constructor;\n return new F({\n type: \"function\",\n input: inst._def.input,\n output,\n });\n };\n return inst;\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n $ZodType.init(inst, def);\n // let _innerType!: any;\n // util.defineLazy(def, \"getter\", () => {\n // if (!_innerType) {\n // _innerType = def.getter();\n // }\n // return () => _innerType;\n // });\n util.defineLazy(inst._zod, \"innerType\", () => def.getter());\n util.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType?._zod?.pattern);\n util.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType?._zod?.propValues);\n util.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType?._zod?.optin ?? undefined);\n util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType?._zod?.optout ?? undefined);\n inst._zod.parse = (payload, ctx) => {\n const inner = inst._zod.innerType;\n return inner._zod.run(payload, ctx);\n };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n checks.$ZodCheck.init(inst, def);\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _) => {\n return payload;\n };\n inst._zod.check = (payload) => {\n const input = payload.value;\n const r = def.fn(input);\n if (r instanceof Promise) {\n return r.then((r) => handleRefineResult(r, payload, input, inst));\n }\n handleRefineResult(r, payload, input, inst);\n return;\n };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n if (!result) {\n const _iss = {\n code: \"custom\",\n input,\n inst, // incorporates params.error into issue reporting\n path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n continue: !inst._zod.def.abort,\n // params: inst._zod.def.params,\n };\n if (inst._zod.def.params)\n _iss.params = inst._zod.def.params;\n payload.issues.push(util.issue(_iss));\n }\n}\n","var _a;\nexport const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n constructor() {\n this._map = new WeakMap();\n this._idmap = new Map();\n }\n add(schema, ..._meta) {\n const meta = _meta[0];\n this._map.set(schema, meta);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.set(meta.id, schema);\n }\n return this;\n }\n clear() {\n this._map = new WeakMap();\n this._idmap = new Map();\n return this;\n }\n remove(schema) {\n const meta = this._map.get(schema);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.delete(meta.id);\n }\n this._map.delete(schema);\n return this;\n }\n get(schema) {\n // return this._map.get(schema) as any;\n // inherit metadata\n const p = schema._zod.parent;\n if (p) {\n const pm = { ...(this.get(p) ?? {}) };\n delete pm.id; // do not inherit id\n const f = { ...pm, ...this._map.get(schema) };\n return Object.keys(f).length ? f : undefined;\n }\n return this._map.get(schema);\n }\n has(schema) {\n return this._map.has(schema);\n }\n}\n// registries\nexport function registry() {\n return new $ZodRegistry();\n}\n(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());\nexport const globalRegistry = globalThis.__zod_globalRegistry;\n","import * as checks from \"./checks.js\";\nimport * as registries from \"./registries.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\n// @__NO_SIDE_EFFECTS__\nexport function _string(Class, params) {\n return new Class({\n type: \"string\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedString(Class, params) {\n return new Class({\n type: \"string\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _email(Class, params) {\n return new Class({\n type: \"string\",\n format: \"email\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _guid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"guid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v4\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v6\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv7(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v7\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _emoji(Class, params) {\n return new Class({\n type: \"string\",\n format: \"emoji\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nanoid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"nanoid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid2(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid2\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ulid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ulid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _xid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"xid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ksuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ksuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mac(Class, params) {\n return new Class({\n type: \"string\",\n format: \"mac\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _e164(Class, params) {\n return new Class({\n type: \"string\",\n format: \"e164\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _jwt(Class, params) {\n return new Class({\n type: \"string\",\n format: \"jwt\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport const TimePrecision = {\n Any: null,\n Minute: -1,\n Second: 0,\n Millisecond: 3,\n Microsecond: 6,\n};\n// @__NO_SIDE_EFFECTS__\nexport function _isoDateTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"datetime\",\n check: \"string_format\",\n offset: false,\n local: false,\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDate(Class, params) {\n return new Class({\n type: \"string\",\n format: \"date\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"time\",\n check: \"string_format\",\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDuration(Class, params) {\n return new Class({\n type: \"string\",\n format: \"duration\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _number(Class, params) {\n return new Class({\n type: \"number\",\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedNumber(Class, params) {\n return new Class({\n type: \"number\",\n coerce: true,\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"safeint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float64(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"int32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"uint32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _boolean(Class, params) {\n return new Class({\n type: \"boolean\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBoolean(Class, params) {\n return new Class({\n type: \"boolean\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _bigint(Class, params) {\n return new Class({\n type: \"bigint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBigint(Class, params) {\n return new Class({\n type: \"bigint\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"int64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"uint64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _symbol(Class, params) {\n return new Class({\n type: \"symbol\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _undefined(Class, params) {\n return new Class({\n type: \"undefined\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _null(Class, params) {\n return new Class({\n type: \"null\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _any(Class) {\n return new Class({\n type: \"any\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _unknown(Class) {\n return new Class({\n type: \"unknown\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _never(Class, params) {\n return new Class({\n type: \"never\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _void(Class, params) {\n return new Class({\n type: \"void\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _date(Class, params) {\n return new Class({\n type: \"date\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedDate(Class, params) {\n return new Class({\n type: \"date\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nan(Class, params) {\n return new Class({\n type: \"nan\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lt(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lte(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\n// @__NO_SIDE_EFFECTS__\nexport function _gt(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _gte(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\n// @__NO_SIDE_EFFECTS__\nexport function _positive(params) {\n return _gt(0, params);\n}\n// negative\n// @__NO_SIDE_EFFECTS__\nexport function _negative(params) {\n return _lt(0, params);\n}\n// nonpositive\n// @__NO_SIDE_EFFECTS__\nexport function _nonpositive(params) {\n return _lte(0, params);\n}\n// nonnegative\n// @__NO_SIDE_EFFECTS__\nexport function _nonnegative(params) {\n return _gte(0, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function _multipleOf(value, params) {\n return new checks.$ZodCheckMultipleOf({\n check: \"multiple_of\",\n ...util.normalizeParams(params),\n value,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxSize(maximum, params) {\n return new checks.$ZodCheckMaxSize({\n check: \"max_size\",\n ...util.normalizeParams(params),\n maximum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minSize(minimum, params) {\n return new checks.$ZodCheckMinSize({\n check: \"min_size\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _size(size, params) {\n return new checks.$ZodCheckSizeEquals({\n check: \"size_equals\",\n ...util.normalizeParams(params),\n size,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxLength(maximum, params) {\n const ch = new checks.$ZodCheckMaxLength({\n check: \"max_length\",\n ...util.normalizeParams(params),\n maximum,\n });\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minLength(minimum, params) {\n return new checks.$ZodCheckMinLength({\n check: \"min_length\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _length(length, params) {\n return new checks.$ZodCheckLengthEquals({\n check: \"length_equals\",\n ...util.normalizeParams(params),\n length,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _regex(pattern, params) {\n return new checks.$ZodCheckRegex({\n check: \"string_format\",\n format: \"regex\",\n ...util.normalizeParams(params),\n pattern,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lowercase(params) {\n return new checks.$ZodCheckLowerCase({\n check: \"string_format\",\n format: \"lowercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uppercase(params) {\n return new checks.$ZodCheckUpperCase({\n check: \"string_format\",\n format: \"uppercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _includes(includes, params) {\n return new checks.$ZodCheckIncludes({\n check: \"string_format\",\n format: \"includes\",\n ...util.normalizeParams(params),\n includes,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _startsWith(prefix, params) {\n return new checks.$ZodCheckStartsWith({\n check: \"string_format\",\n format: \"starts_with\",\n ...util.normalizeParams(params),\n prefix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _endsWith(suffix, params) {\n return new checks.$ZodCheckEndsWith({\n check: \"string_format\",\n format: \"ends_with\",\n ...util.normalizeParams(params),\n suffix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _property(property, schema, params) {\n return new checks.$ZodCheckProperty({\n check: \"property\",\n property,\n schema,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mime(types, params) {\n return new checks.$ZodCheckMimeType({\n check: \"mime_type\",\n mime: types,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _overwrite(tx) {\n return new checks.$ZodCheckOverwrite({\n check: \"overwrite\",\n tx,\n });\n}\n// normalize\n// @__NO_SIDE_EFFECTS__\nexport function _normalize(form) {\n return _overwrite((input) => input.normalize(form));\n}\n// trim\n// @__NO_SIDE_EFFECTS__\nexport function _trim() {\n return _overwrite((input) => input.trim());\n}\n// toLowerCase\n// @__NO_SIDE_EFFECTS__\nexport function _toLowerCase() {\n return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\n// @__NO_SIDE_EFFECTS__\nexport function _toUpperCase() {\n return _overwrite((input) => input.toUpperCase());\n}\n// slugify\n// @__NO_SIDE_EFFECTS__\nexport function _slugify() {\n return _overwrite((input) => util.slugify(input));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _array(Class, element, params) {\n return new Class({\n type: \"array\",\n element,\n // get element() {\n // return element;\n // },\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _union(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n ...util.normalizeParams(params),\n });\n}\nexport function _xor(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n return new Class({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _intersection(Class, left, right) {\n return new Class({\n type: \"intersection\",\n left,\n right,\n });\n}\n// export function _tuple(\n// Class: util.SchemaClass<schemas.$ZodTuple>,\n// items: [],\n// params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\n// @__NO_SIDE_EFFECTS__\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new Class({\n type: \"tuple\",\n items,\n rest,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _record(Class, keyType, valueType, params) {\n return new Class({\n type: \"record\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _map(Class, keyType, valueType, params) {\n return new Class({\n type: \"map\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _set(Class, valueType, params) {\n return new Class({\n type: \"set\",\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _enum(Class, values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n // if (Array.isArray(values)) {\n // for (const value of values) {\n // entries[value] = value;\n // }\n // } else {\n // Object.assign(entries, values);\n // }\n // const entries: util.EnumLike = {};\n // for (const val of values) {\n // entries[val] = val;\n // }\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _literal(Class, value, params) {\n return new Class({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _file(Class, params) {\n return new Class({\n type: \"file\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _transform(Class, fn) {\n return new Class({\n type: \"transform\",\n transform: fn,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _optional(Class, innerType) {\n return new Class({\n type: \"optional\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nullable(Class, innerType) {\n return new Class({\n type: \"nullable\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _default(Class, innerType, defaultValue) {\n return new Class({\n type: \"default\",\n innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nonoptional(Class, innerType, params) {\n return new Class({\n type: \"nonoptional\",\n innerType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _success(Class, innerType) {\n return new Class({\n type: \"success\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _catch(Class, innerType, catchValue) {\n return new Class({\n type: \"catch\",\n innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _pipe(Class, in_, out) {\n return new Class({\n type: \"pipe\",\n in: in_,\n out,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _readonly(Class, innerType) {\n return new Class({\n type: \"readonly\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _templateLiteral(Class, parts, params) {\n return new Class({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lazy(Class, getter) {\n return new Class({\n type: \"lazy\",\n getter,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _promise(Class, innerType) {\n return new Class({\n type: \"promise\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _custom(Class, fn, _params) {\n const norm = util.normalizeParams(_params);\n norm.abort ?? (norm.abort = true); // default to abort:false\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...norm,\n });\n return schema;\n}\n// same as _custom but defaults to abort:false\n// @__NO_SIDE_EFFECTS__\nexport function _refine(Class, fn, _params) {\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...util.normalizeParams(_params),\n });\n return schema;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _superRefine(fn) {\n const ch = _check((payload) => {\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = ch);\n _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n payload.issues.push(util.issue(_issue));\n }\n };\n return fn(payload.value, payload);\n });\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _check(fn, params) {\n const ch = new checks.$ZodCheck({\n check: \"custom\",\n ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function describe(description) {\n const ch = new checks.$ZodCheck({ check: \"describe\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, description });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function meta(metadata) {\n const ch = new checks.$ZodCheck({ check: \"meta\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, ...metadata });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringbool(Classes, _params) {\n const params = util.normalizeParams(_params);\n let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n if (params.case !== \"sensitive\") {\n truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n }\n const truthySet = new Set(truthyArray);\n const falsySet = new Set(falsyArray);\n const _Codec = Classes.Codec ?? schemas.$ZodCodec;\n const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n const _String = Classes.String ?? schemas.$ZodString;\n const stringSchema = new _String({ type: \"string\", error: params.error });\n const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n const codec = new _Codec({\n type: \"pipe\",\n in: stringSchema,\n out: booleanSchema,\n transform: ((input, payload) => {\n let data = input;\n if (params.case !== \"sensitive\")\n data = data.toLowerCase();\n if (truthySet.has(data)) {\n return true;\n }\n else if (falsySet.has(data)) {\n return false;\n }\n else {\n payload.issues.push({\n code: \"invalid_value\",\n expected: \"stringbool\",\n values: [...truthySet, ...falsySet],\n input: payload.value,\n inst: codec,\n continue: false,\n });\n return {};\n }\n }),\n reverseTransform: ((input, _payload) => {\n if (input === true) {\n return truthyArray[0] || \"true\";\n }\n else {\n return falsyArray[0] || \"false\";\n }\n }),\n error: params.error,\n });\n return codec;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n const params = util.normalizeParams(_params);\n const def = {\n ...util.normalizeParams(_params),\n check: \"string_format\",\n type: \"string\",\n format,\n fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n ...params,\n };\n if (fnOrRegex instanceof RegExp) {\n def.pattern = fnOrRegex;\n }\n const inst = new Class(def);\n return inst;\n}\n","import { globalRegistry } from \"./registries.js\";\n// function initializeContext<T extends schemas.$ZodType>(inputs: JSONSchemaGeneratorParams<T>): ToJSONSchemaContext<T> {\n// return {\n// processor: inputs.processor,\n// metadataRegistry: inputs.metadata ?? globalRegistry,\n// target: inputs.target ?? \"draft-2020-12\",\n// unrepresentable: inputs.unrepresentable ?? \"throw\",\n// };\n// }\nexport function initializeContext(params) {\n // Normalize target: convert old non-hyphenated versions to hyphenated versions\n let target = params?.target ?? \"draft-2020-12\";\n if (target === \"draft-4\")\n target = \"draft-04\";\n if (target === \"draft-7\")\n target = \"draft-07\";\n return {\n processors: params.processors ?? {},\n metadataRegistry: params?.metadata ?? globalRegistry,\n target,\n unrepresentable: params?.unrepresentable ?? \"throw\",\n override: params?.override ?? (() => { }),\n io: params?.io ?? \"output\",\n counter: 0,\n seen: new Map(),\n cycles: params?.cycles ?? \"ref\",\n reused: params?.reused ?? \"inline\",\n external: params?.external ?? undefined,\n };\n}\nexport function process(schema, ctx, _params = { path: [], schemaPath: [] }) {\n var _a;\n const def = schema._zod.def;\n // check for schema in seens\n const seen = ctx.seen.get(schema);\n if (seen) {\n seen.count++;\n // check if cycle\n const isCycle = _params.schemaPath.includes(schema);\n if (isCycle) {\n seen.cycle = _params.path;\n }\n return seen.schema;\n }\n // initialize\n const result = { schema: {}, count: 1, cycle: undefined, path: _params.path };\n ctx.seen.set(schema, result);\n // custom method overrides default behavior\n const overrideSchema = schema._zod.toJSONSchema?.();\n if (overrideSchema) {\n result.schema = overrideSchema;\n }\n else {\n const params = {\n ..._params,\n schemaPath: [..._params.schemaPath, schema],\n path: _params.path,\n };\n if (schema._zod.processJSONSchema) {\n schema._zod.processJSONSchema(ctx, result.schema, params);\n }\n else {\n const _json = result.schema;\n const processor = ctx.processors[def.type];\n if (!processor) {\n throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`);\n }\n processor(schema, ctx, _json, params);\n }\n const parent = schema._zod.parent;\n if (parent) {\n // Also set ref if processor didn't (for inheritance)\n if (!result.ref)\n result.ref = parent;\n process(parent, ctx, params);\n ctx.seen.get(parent).isParent = true;\n }\n }\n // metadata\n const meta = ctx.metadataRegistry.get(schema);\n if (meta)\n Object.assign(result.schema, meta);\n if (ctx.io === \"input\" && isTransforming(schema)) {\n // examples/defaults only apply to output type of pipe\n delete result.schema.examples;\n delete result.schema.default;\n }\n // set prefault as default\n if (ctx.io === \"input\" && result.schema._prefault)\n (_a = result.schema).default ?? (_a.default = result.schema._prefault);\n delete result.schema._prefault;\n // pulling fresh from ctx.seen in case it was overwritten\n const _result = ctx.seen.get(schema);\n return _result.schema;\n}\nexport function extractDefs(ctx, schema\n// params: EmitParams\n) {\n // iterate over seen map;\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // Track ids to detect duplicates across different schemas\n const idToSchema = new Map();\n for (const entry of ctx.seen.entries()) {\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n const existing = idToSchema.get(id);\n if (existing && existing !== entry[0]) {\n throw new Error(`Duplicate schema id \"${id}\" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);\n }\n idToSchema.set(id, entry[0]);\n }\n }\n // returns a ref to the schema\n // defId will be empty if the ref points to an external schema (or #)\n const makeURI = (entry) => {\n // comparing the seen objects because sometimes\n // multiple schemas map to the same seen object.\n // e.g. lazy\n // external is configured\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n if (ctx.external) {\n const externalId = ctx.external.registry.get(entry[0])?.id; // ?? \"__shared\";// `__schema${ctx.counter++}`;\n // check if schema is in the external registry\n const uriGenerator = ctx.external.uri ?? ((id) => id);\n if (externalId) {\n return { ref: uriGenerator(externalId) };\n }\n // otherwise, add to __shared\n const id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`;\n entry[1].defId = id; // set defId so it will be reused if needed\n return { defId: id, ref: `${uriGenerator(\"__shared\")}#/${defsSegment}/${id}` };\n }\n if (entry[1] === root) {\n return { ref: \"#\" };\n }\n // self-contained schema\n const uriPrefix = `#`;\n const defUriPrefix = `${uriPrefix}/${defsSegment}/`;\n const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`;\n return { defId, ref: defUriPrefix + defId };\n };\n // stored cached version in `def` property\n // remove all properties, set $ref\n const extractToDef = (entry) => {\n // if the schema is already a reference, do not extract it\n if (entry[1].schema.$ref) {\n return;\n }\n const seen = entry[1];\n const { ref, defId } = makeURI(entry);\n seen.def = { ...seen.schema };\n // defId won't be set if the schema is a reference to an external schema\n // or if the schema is the root schema\n if (defId)\n seen.defId = defId;\n // wipe away all properties except $ref\n const schema = seen.schema;\n for (const key in schema) {\n delete schema[key];\n }\n schema.$ref = ref;\n };\n // throw on cycles\n // break cycles\n if (ctx.cycles === \"throw\") {\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.cycle) {\n throw new Error(\"Cycle detected: \" +\n `#/${seen.cycle?.join(\"/\")}/<root>` +\n '\\n\\nSet the `cycles` parameter to `\"ref\"` to resolve cyclical schemas with defs.');\n }\n }\n }\n // extract schemas into $defs\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n // convert root schema to # $ref\n if (schema === entry[0]) {\n extractToDef(entry); // this has special handling for the root schema\n continue;\n }\n // extract schemas that are in the external registry\n if (ctx.external) {\n const ext = ctx.external.registry.get(entry[0])?.id;\n if (schema !== entry[0] && ext) {\n extractToDef(entry);\n continue;\n }\n }\n // extract schemas with `id` meta\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n extractToDef(entry);\n continue;\n }\n // break cycles\n if (seen.cycle) {\n // any\n extractToDef(entry);\n continue;\n }\n // extract reused schemas\n if (seen.count > 1) {\n if (ctx.reused === \"ref\") {\n extractToDef(entry);\n // biome-ignore lint:\n continue;\n }\n }\n }\n}\nexport function finalize(ctx, schema) {\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // flatten refs - inherit properties from parent schemas\n const flattenRef = (zodSchema) => {\n const seen = ctx.seen.get(zodSchema);\n // already processed\n if (seen.ref === null)\n return;\n const schema = seen.def ?? seen.schema;\n const _cached = { ...schema };\n const ref = seen.ref;\n seen.ref = null; // prevent infinite recursion\n if (ref) {\n flattenRef(ref);\n const refSeen = ctx.seen.get(ref);\n const refSchema = refSeen.schema;\n // merge referenced schema into current\n if (refSchema.$ref && (ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\")) {\n // older drafts can't combine $ref with other properties\n schema.allOf = schema.allOf ?? [];\n schema.allOf.push(refSchema);\n }\n else {\n Object.assign(schema, refSchema);\n }\n // restore child's own properties (child wins)\n Object.assign(schema, _cached);\n const isParentRef = zodSchema._zod.parent === ref;\n // For parent chain, child is a refinement - remove parent-only properties\n if (isParentRef) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (!(key in _cached)) {\n delete schema[key];\n }\n }\n }\n // When ref was extracted to $defs, remove properties that match the definition\n if (refSchema.$ref && refSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in refSeen.def && JSON.stringify(schema[key]) === JSON.stringify(refSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n // If parent was extracted (has $ref), propagate $ref to this schema\n // This handles cases like: readonly().meta({id}).describe()\n // where processor sets ref to innerType but parent should be referenced\n const parent = zodSchema._zod.parent;\n if (parent && parent !== ref) {\n // Ensure parent is processed first so its def has inherited properties\n flattenRef(parent);\n const parentSeen = ctx.seen.get(parent);\n if (parentSeen?.schema.$ref) {\n schema.$ref = parentSeen.schema.$ref;\n // De-duplicate with parent's definition\n if (parentSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in parentSeen.def && JSON.stringify(schema[key]) === JSON.stringify(parentSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n }\n // execute overrides\n ctx.override({\n zodSchema: zodSchema,\n jsonSchema: schema,\n path: seen.path ?? [],\n });\n };\n for (const entry of [...ctx.seen.entries()].reverse()) {\n flattenRef(entry[0]);\n }\n const result = {};\n if (ctx.target === \"draft-2020-12\") {\n result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n }\n else if (ctx.target === \"draft-07\") {\n result.$schema = \"http://json-schema.org/draft-07/schema#\";\n }\n else if (ctx.target === \"draft-04\") {\n result.$schema = \"http://json-schema.org/draft-04/schema#\";\n }\n else if (ctx.target === \"openapi-3.0\") {\n // OpenAPI 3.0 schema objects should not include a $schema property\n }\n else {\n // Arbitrary string values are allowed but won't have a $schema property set\n }\n if (ctx.external?.uri) {\n const id = ctx.external.registry.get(schema)?.id;\n if (!id)\n throw new Error(\"Schema is missing an `id` property\");\n result.$id = ctx.external.uri(id);\n }\n Object.assign(result, root.def ?? root.schema);\n // build defs object\n const defs = ctx.external?.defs ?? {};\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.def && seen.defId) {\n defs[seen.defId] = seen.def;\n }\n }\n // set definitions in result\n if (ctx.external) {\n }\n else {\n if (Object.keys(defs).length > 0) {\n if (ctx.target === \"draft-2020-12\") {\n result.$defs = defs;\n }\n else {\n result.definitions = defs;\n }\n }\n }\n try {\n // this \"finalizes\" this schema and ensures all cycles are removed\n // each call to finalize() is functionally independent\n // though the seen map is shared\n const finalized = JSON.parse(JSON.stringify(result));\n Object.defineProperty(finalized, \"~standard\", {\n value: {\n ...schema[\"~standard\"],\n jsonSchema: {\n input: createStandardJSONSchemaMethod(schema, \"input\", ctx.processors),\n output: createStandardJSONSchemaMethod(schema, \"output\", ctx.processors),\n },\n },\n enumerable: false,\n writable: false,\n });\n return finalized;\n }\n catch (_err) {\n throw new Error(\"Error converting schema to JSON.\");\n }\n}\nfunction isTransforming(_schema, _ctx) {\n const ctx = _ctx ?? { seen: new Set() };\n if (ctx.seen.has(_schema))\n return false;\n ctx.seen.add(_schema);\n const def = _schema._zod.def;\n if (def.type === \"transform\")\n return true;\n if (def.type === \"array\")\n return isTransforming(def.element, ctx);\n if (def.type === \"set\")\n return isTransforming(def.valueType, ctx);\n if (def.type === \"lazy\")\n return isTransforming(def.getter(), ctx);\n if (def.type === \"promise\" ||\n def.type === \"optional\" ||\n def.type === \"nonoptional\" ||\n def.type === \"nullable\" ||\n def.type === \"readonly\" ||\n def.type === \"default\" ||\n def.type === \"prefault\") {\n return isTransforming(def.innerType, ctx);\n }\n if (def.type === \"intersection\") {\n return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n }\n if (def.type === \"record\" || def.type === \"map\") {\n return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n }\n if (def.type === \"pipe\") {\n return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n }\n if (def.type === \"object\") {\n for (const key in def.shape) {\n if (isTransforming(def.shape[key], ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"union\") {\n for (const option of def.options) {\n if (isTransforming(option, ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"tuple\") {\n for (const item of def.items) {\n if (isTransforming(item, ctx))\n return true;\n }\n if (def.rest && isTransforming(def.rest, ctx))\n return true;\n return false;\n }\n return false;\n}\n/**\n * Creates a toJSONSchema method for a schema instance.\n * This encapsulates the logic of initializing context, processing, extracting defs, and finalizing.\n */\nexport const createToJSONSchemaMethod = (schema, processors = {}) => (params) => {\n const ctx = initializeContext({ ...params, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\nexport const createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => {\n const { libraryOptions, target } = params ?? {};\n const ctx = initializeContext({ ...(libraryOptions ?? {}), target, io, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\n","import { extractDefs, finalize, initializeContext, process, } from \"./to-json-schema.js\";\nimport { getEnumValues } from \"./util.js\";\nconst formatMap = {\n guid: \"uuid\",\n url: \"uri\",\n datetime: \"date-time\",\n json_string: \"json-string\",\n regex: \"\", // do not set\n};\n// ==================== SIMPLE TYPE PROCESSORS ====================\nexport const stringProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n json.type = \"string\";\n const { minimum, maximum, format, patterns, contentEncoding } = schema._zod\n .bag;\n if (typeof minimum === \"number\")\n json.minLength = minimum;\n if (typeof maximum === \"number\")\n json.maxLength = maximum;\n // custom pattern overrides format\n if (format) {\n json.format = formatMap[format] ?? format;\n if (json.format === \"\")\n delete json.format; // empty format is not valid\n // JSON Schema format: \"time\" requires a full time with offset or Z\n // z.iso.time() does not include timezone information, so format: \"time\" should never be used\n if (format === \"time\") {\n delete json.format;\n }\n }\n if (contentEncoding)\n json.contentEncoding = contentEncoding;\n if (patterns && patterns.size > 0) {\n const regexes = [...patterns];\n if (regexes.length === 1)\n json.pattern = regexes[0].source;\n else if (regexes.length > 1) {\n json.allOf = [\n ...regexes.map((regex) => ({\n ...(ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\"\n ? { type: \"string\" }\n : {}),\n pattern: regex.source,\n })),\n ];\n }\n }\n};\nexport const numberProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;\n if (typeof format === \"string\" && format.includes(\"int\"))\n json.type = \"integer\";\n else\n json.type = \"number\";\n if (typeof exclusiveMinimum === \"number\") {\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.minimum = exclusiveMinimum;\n json.exclusiveMinimum = true;\n }\n else {\n json.exclusiveMinimum = exclusiveMinimum;\n }\n }\n if (typeof minimum === \"number\") {\n json.minimum = minimum;\n if (typeof exclusiveMinimum === \"number\" && ctx.target !== \"draft-04\") {\n if (exclusiveMinimum >= minimum)\n delete json.minimum;\n else\n delete json.exclusiveMinimum;\n }\n }\n if (typeof exclusiveMaximum === \"number\") {\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.maximum = exclusiveMaximum;\n json.exclusiveMaximum = true;\n }\n else {\n json.exclusiveMaximum = exclusiveMaximum;\n }\n }\n if (typeof maximum === \"number\") {\n json.maximum = maximum;\n if (typeof exclusiveMaximum === \"number\" && ctx.target !== \"draft-04\") {\n if (exclusiveMaximum <= maximum)\n delete json.maximum;\n else\n delete json.exclusiveMaximum;\n }\n }\n if (typeof multipleOf === \"number\")\n json.multipleOf = multipleOf;\n};\nexport const booleanProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const bigintProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt cannot be represented in JSON Schema\");\n }\n};\nexport const symbolProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Symbols cannot be represented in JSON Schema\");\n }\n};\nexport const nullProcessor = (_schema, ctx, json, _params) => {\n if (ctx.target === \"openapi-3.0\") {\n json.type = \"string\";\n json.nullable = true;\n json.enum = [null];\n }\n else {\n json.type = \"null\";\n }\n};\nexport const undefinedProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Undefined cannot be represented in JSON Schema\");\n }\n};\nexport const voidProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Void cannot be represented in JSON Schema\");\n }\n};\nexport const neverProcessor = (_schema, _ctx, json, _params) => {\n json.not = {};\n};\nexport const anyProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const unknownProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const dateProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Date cannot be represented in JSON Schema\");\n }\n};\nexport const enumProcessor = (schema, _ctx, json, _params) => {\n const def = schema._zod.def;\n const values = getEnumValues(def.entries);\n // Number enums can have both string and number values\n if (values.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (values.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n json.enum = values;\n};\nexport const literalProcessor = (schema, ctx, json, _params) => {\n const def = schema._zod.def;\n const vals = [];\n for (const val of def.values) {\n if (val === undefined) {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Literal `undefined` cannot be represented in JSON Schema\");\n }\n else {\n // do not add to vals\n }\n }\n else if (typeof val === \"bigint\") {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt literals cannot be represented in JSON Schema\");\n }\n else {\n vals.push(Number(val));\n }\n }\n else {\n vals.push(val);\n }\n }\n if (vals.length === 0) {\n // do nothing (an undefined literal was stripped)\n }\n else if (vals.length === 1) {\n const val = vals[0];\n json.type = val === null ? \"null\" : typeof val;\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.enum = [val];\n }\n else {\n json.const = val;\n }\n }\n else {\n if (vals.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (vals.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n if (vals.every((v) => typeof v === \"boolean\"))\n json.type = \"boolean\";\n if (vals.every((v) => v === null))\n json.type = \"null\";\n json.enum = vals;\n }\n};\nexport const nanProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"NaN cannot be represented in JSON Schema\");\n }\n};\nexport const templateLiteralProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const pattern = schema._zod.pattern;\n if (!pattern)\n throw new Error(\"Pattern not found in template literal\");\n _json.type = \"string\";\n _json.pattern = pattern.source;\n};\nexport const fileProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const file = {\n type: \"string\",\n format: \"binary\",\n contentEncoding: \"binary\",\n };\n const { minimum, maximum, mime } = schema._zod.bag;\n if (minimum !== undefined)\n file.minLength = minimum;\n if (maximum !== undefined)\n file.maxLength = maximum;\n if (mime) {\n if (mime.length === 1) {\n file.contentMediaType = mime[0];\n Object.assign(_json, file);\n }\n else {\n Object.assign(_json, file); // shared props at root\n _json.anyOf = mime.map((m) => ({ contentMediaType: m })); // only contentMediaType differs\n }\n }\n else {\n Object.assign(_json, file);\n }\n};\nexport const successProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const customProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Custom types cannot be represented in JSON Schema\");\n }\n};\nexport const functionProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Function types cannot be represented in JSON Schema\");\n }\n};\nexport const transformProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Transforms cannot be represented in JSON Schema\");\n }\n};\nexport const mapProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Map cannot be represented in JSON Schema\");\n }\n};\nexport const setProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Set cannot be represented in JSON Schema\");\n }\n};\n// ==================== COMPOSITE TYPE PROCESSORS ====================\nexport const arrayProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n json.type = \"array\";\n json.items = process(def.element, ctx, { ...params, path: [...params.path, \"items\"] });\n};\nexport const objectProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n json.properties = {};\n const shape = def.shape;\n for (const key in shape) {\n json.properties[key] = process(shape[key], ctx, {\n ...params,\n path: [...params.path, \"properties\", key],\n });\n }\n // required keys\n const allKeys = new Set(Object.keys(shape));\n const requiredKeys = new Set([...allKeys].filter((key) => {\n const v = def.shape[key]._zod;\n if (ctx.io === \"input\") {\n return v.optin === undefined;\n }\n else {\n return v.optout === undefined;\n }\n }));\n if (requiredKeys.size > 0) {\n json.required = Array.from(requiredKeys);\n }\n // catchall\n if (def.catchall?._zod.def.type === \"never\") {\n // strict\n json.additionalProperties = false;\n }\n else if (!def.catchall) {\n // regular\n if (ctx.io === \"output\")\n json.additionalProperties = false;\n }\n else if (def.catchall) {\n json.additionalProperties = process(def.catchall, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n};\nexport const unionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n // Exclusive unions (inclusive === false) use oneOf (exactly one match) instead of anyOf (one or more matches)\n // This includes both z.xor() and discriminated unions\n const isExclusive = def.inclusive === false;\n const options = def.options.map((x, i) => process(x, ctx, {\n ...params,\n path: [...params.path, isExclusive ? \"oneOf\" : \"anyOf\", i],\n }));\n if (isExclusive) {\n json.oneOf = options;\n }\n else {\n json.anyOf = options;\n }\n};\nexport const intersectionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const a = process(def.left, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 0],\n });\n const b = process(def.right, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 1],\n });\n const isSimpleIntersection = (val) => \"allOf\" in val && Object.keys(val).length === 1;\n const allOf = [\n ...(isSimpleIntersection(a) ? a.allOf : [a]),\n ...(isSimpleIntersection(b) ? b.allOf : [b]),\n ];\n json.allOf = allOf;\n};\nexport const tupleProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"array\";\n const prefixPath = ctx.target === \"draft-2020-12\" ? \"prefixItems\" : \"items\";\n const restPath = ctx.target === \"draft-2020-12\" ? \"items\" : ctx.target === \"openapi-3.0\" ? \"items\" : \"additionalItems\";\n const prefixItems = def.items.map((x, i) => process(x, ctx, {\n ...params,\n path: [...params.path, prefixPath, i],\n }));\n const rest = def.rest\n ? process(def.rest, ctx, {\n ...params,\n path: [...params.path, restPath, ...(ctx.target === \"openapi-3.0\" ? [def.items.length] : [])],\n })\n : null;\n if (ctx.target === \"draft-2020-12\") {\n json.prefixItems = prefixItems;\n if (rest) {\n json.items = rest;\n }\n }\n else if (ctx.target === \"openapi-3.0\") {\n json.items = {\n anyOf: prefixItems,\n };\n if (rest) {\n json.items.anyOf.push(rest);\n }\n json.minItems = prefixItems.length;\n if (!rest) {\n json.maxItems = prefixItems.length;\n }\n }\n else {\n json.items = prefixItems;\n if (rest) {\n json.additionalItems = rest;\n }\n }\n // length\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n};\nexport const recordProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n // For looseRecord with regex patterns, use patternProperties\n // This correctly represents \"only validate keys matching the pattern\" semantics\n // and composes well with allOf (intersections)\n const keyType = def.keyType;\n const keyBag = keyType._zod.bag;\n const patterns = keyBag?.patterns;\n if (def.mode === \"loose\" && patterns && patterns.size > 0) {\n // Use patternProperties for looseRecord with regex patterns\n const valueSchema = process(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"patternProperties\", \"*\"],\n });\n json.patternProperties = {};\n for (const pattern of patterns) {\n json.patternProperties[pattern.source] = valueSchema;\n }\n }\n else {\n // Default behavior: use propertyNames + additionalProperties\n if (ctx.target === \"draft-07\" || ctx.target === \"draft-2020-12\") {\n json.propertyNames = process(def.keyType, ctx, {\n ...params,\n path: [...params.path, \"propertyNames\"],\n });\n }\n json.additionalProperties = process(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n // Add required for keys with discrete values (enum, literal, etc.)\n const keyValues = keyType._zod.values;\n if (keyValues) {\n const validKeyValues = [...keyValues].filter((v) => typeof v === \"string\" || typeof v === \"number\");\n if (validKeyValues.length > 0) {\n json.required = validKeyValues;\n }\n }\n};\nexport const nullableProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const inner = process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n if (ctx.target === \"openapi-3.0\") {\n seen.ref = def.innerType;\n json.nullable = true;\n }\n else {\n json.anyOf = [inner, { type: \"null\" }];\n }\n};\nexport const nonoptionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const defaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.default = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const prefaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n if (ctx.io === \"input\")\n json._prefault = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const catchProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n let catchValue;\n try {\n catchValue = def.catchValue(undefined);\n }\n catch {\n throw new Error(\"Dynamic catch values are not supported in JSON Schema\");\n }\n json.default = catchValue;\n};\nexport const pipeProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n const innerType = ctx.io === \"input\" ? (def.in._zod.def.type === \"transform\" ? def.out : def.in) : def.out;\n process(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\nexport const readonlyProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.readOnly = true;\n};\nexport const promiseProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const optionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const lazyProcessor = (schema, ctx, _json, params) => {\n const innerType = schema._zod.innerType;\n process(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\n// ==================== ALL PROCESSORS ====================\nexport const allProcessors = {\n string: stringProcessor,\n number: numberProcessor,\n boolean: booleanProcessor,\n bigint: bigintProcessor,\n symbol: symbolProcessor,\n null: nullProcessor,\n undefined: undefinedProcessor,\n void: voidProcessor,\n never: neverProcessor,\n any: anyProcessor,\n unknown: unknownProcessor,\n date: dateProcessor,\n enum: enumProcessor,\n literal: literalProcessor,\n nan: nanProcessor,\n template_literal: templateLiteralProcessor,\n file: fileProcessor,\n success: successProcessor,\n custom: customProcessor,\n function: functionProcessor,\n transform: transformProcessor,\n map: mapProcessor,\n set: setProcessor,\n array: arrayProcessor,\n object: objectProcessor,\n union: unionProcessor,\n intersection: intersectionProcessor,\n tuple: tupleProcessor,\n record: recordProcessor,\n nullable: nullableProcessor,\n nonoptional: nonoptionalProcessor,\n default: defaultProcessor,\n prefault: prefaultProcessor,\n catch: catchProcessor,\n pipe: pipeProcessor,\n readonly: readonlyProcessor,\n promise: promiseProcessor,\n optional: optionalProcessor,\n lazy: lazyProcessor,\n};\nexport function toJSONSchema(input, params) {\n if (\"_idmap\" in input) {\n // Registry case\n const registry = input;\n const ctx = initializeContext({ ...params, processors: allProcessors });\n const defs = {};\n // First pass: process all schemas to build the seen map\n for (const entry of registry._idmap.entries()) {\n const [_, schema] = entry;\n process(schema, ctx);\n }\n const schemas = {};\n const external = {\n registry,\n uri: params?.uri,\n defs,\n };\n // Update the context with external configuration\n ctx.external = external;\n // Second pass: emit each schema\n for (const entry of registry._idmap.entries()) {\n const [key, schema] = entry;\n extractDefs(ctx, schema);\n schemas[key] = finalize(ctx, schema);\n }\n if (Object.keys(defs).length > 0) {\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n schemas.__shared = {\n [defsSegment]: defs,\n };\n }\n return { schemas };\n }\n // Single schema case\n const ctx = initializeContext({ ...params, processors: allProcessors });\n process(input, ctx);\n extractDefs(ctx, input);\n return finalize(ctx, input);\n}\n","import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n core.$ZodISODateTime.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function datetime(params) {\n return core._isoDateTime(ZodISODateTime, params);\n}\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n core.$ZodISODate.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function date(params) {\n return core._isoDate(ZodISODate, params);\n}\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n core.$ZodISOTime.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function time(params) {\n return core._isoTime(ZodISOTime, params);\n}\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n core.$ZodISODuration.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function duration(params) {\n return core._isoDuration(ZodISODuration, params);\n}\n","import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nimport * as util from \"../core/util.js\";\nconst initializer = (inst, issues) => {\n $ZodError.init(inst, issues);\n inst.name = \"ZodError\";\n Object.defineProperties(inst, {\n format: {\n value: (mapper) => core.formatError(inst, mapper),\n // enumerable: false,\n },\n flatten: {\n value: (mapper) => core.flattenError(inst, mapper),\n // enumerable: false,\n },\n addIssue: {\n value: (issue) => {\n inst.issues.push(issue);\n inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n },\n // enumerable: false,\n },\n addIssues: {\n value: (issues) => {\n inst.issues.push(...issues);\n inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n },\n // enumerable: false,\n },\n isEmpty: {\n get() {\n return inst.issues.length === 0;\n },\n // enumerable: false,\n },\n });\n // Object.defineProperty(inst, \"isEmpty\", {\n // get() {\n // return inst.issues.length === 0;\n // },\n // });\n};\nexport const ZodError = core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = core.$constructor(\"ZodError\", initializer, {\n Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n","import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\n// Codec functions\nexport const encode = /* @__PURE__ */ core._encode(ZodRealError);\nexport const decode = /* @__PURE__ */ core._decode(ZodRealError);\nexport const encodeAsync = /* @__PURE__ */ core._encodeAsync(ZodRealError);\nexport const decodeAsync = /* @__PURE__ */ core._decodeAsync(ZodRealError);\nexport const safeEncode = /* @__PURE__ */ core._safeEncode(ZodRealError);\nexport const safeDecode = /* @__PURE__ */ core._safeDecode(ZodRealError);\nexport const safeEncodeAsync = /* @__PURE__ */ core._safeEncodeAsync(ZodRealError);\nexport const safeDecodeAsync = /* @__PURE__ */ core._safeDecodeAsync(ZodRealError);\n","import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as processors from \"../core/json-schema-processors.js\";\nimport { createStandardJSONSchemaMethod, createToJSONSchemaMethod } from \"../core/to-json-schema.js\";\nimport * as checks from \"./checks.js\";\nimport * as iso from \"./iso.js\";\nimport * as parse from \"./parse.js\";\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n core.$ZodType.init(inst, def);\n Object.assign(inst[\"~standard\"], {\n jsonSchema: {\n input: createStandardJSONSchemaMethod(inst, \"input\"),\n output: createStandardJSONSchemaMethod(inst, \"output\"),\n },\n });\n inst.toJSONSchema = createToJSONSchemaMethod(inst, {});\n inst.def = def;\n inst.type = def.type;\n Object.defineProperty(inst, \"_def\", { value: def });\n // base methods\n inst.check = (...checks) => {\n return inst.clone(util.mergeDefs(def, {\n checks: [\n ...(def.checks ?? []),\n ...checks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n ],\n }), {\n parent: true,\n });\n };\n inst.with = inst.check;\n inst.clone = (def, params) => core.clone(inst, def, params);\n inst.brand = () => inst;\n inst.register = ((reg, meta) => {\n reg.add(inst, meta);\n return inst;\n });\n // parsing\n inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n inst.spa = inst.safeParseAsync;\n // encoding/decoding\n inst.encode = (data, params) => parse.encode(inst, data, params);\n inst.decode = (data, params) => parse.decode(inst, data, params);\n inst.encodeAsync = async (data, params) => parse.encodeAsync(inst, data, params);\n inst.decodeAsync = async (data, params) => parse.decodeAsync(inst, data, params);\n inst.safeEncode = (data, params) => parse.safeEncode(inst, data, params);\n inst.safeDecode = (data, params) => parse.safeDecode(inst, data, params);\n inst.safeEncodeAsync = async (data, params) => parse.safeEncodeAsync(inst, data, params);\n inst.safeDecodeAsync = async (data, params) => parse.safeDecodeAsync(inst, data, params);\n // refinements\n inst.refine = (check, params) => inst.check(refine(check, params));\n inst.superRefine = (refinement) => inst.check(superRefine(refinement));\n inst.overwrite = (fn) => inst.check(checks.overwrite(fn));\n // wrappers\n inst.optional = () => optional(inst);\n inst.exactOptional = () => exactOptional(inst);\n inst.nullable = () => nullable(inst);\n inst.nullish = () => optional(nullable(inst));\n inst.nonoptional = (params) => nonoptional(inst, params);\n inst.array = () => array(inst);\n inst.or = (arg) => union([inst, arg]);\n inst.and = (arg) => intersection(inst, arg);\n inst.transform = (tx) => pipe(inst, transform(tx));\n inst.default = (def) => _default(inst, def);\n inst.prefault = (def) => prefault(inst, def);\n // inst.coalesce = (def, params) => coalesce(inst, def, params);\n inst.catch = (params) => _catch(inst, params);\n inst.pipe = (target) => pipe(inst, target);\n inst.readonly = () => readonly(inst);\n // meta\n inst.describe = (description) => {\n const cl = inst.clone();\n core.globalRegistry.add(cl, { description });\n return cl;\n };\n Object.defineProperty(inst, \"description\", {\n get() {\n return core.globalRegistry.get(inst)?.description;\n },\n configurable: true,\n });\n inst.meta = (...args) => {\n if (args.length === 0) {\n return core.globalRegistry.get(inst);\n }\n const cl = inst.clone();\n core.globalRegistry.add(cl, args[0]);\n return cl;\n };\n // helpers\n inst.isOptional = () => inst.safeParse(undefined).success;\n inst.isNullable = () => inst.safeParse(null).success;\n inst.apply = (fn) => fn(inst);\n return inst;\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.stringProcessor(inst, ctx, json, params);\n const bag = inst._zod.bag;\n inst.format = bag.format ?? null;\n inst.minLength = bag.minimum ?? null;\n inst.maxLength = bag.maximum ?? null;\n // validations\n inst.regex = (...args) => inst.check(checks.regex(...args));\n inst.includes = (...args) => inst.check(checks.includes(...args));\n inst.startsWith = (...args) => inst.check(checks.startsWith(...args));\n inst.endsWith = (...args) => inst.check(checks.endsWith(...args));\n inst.min = (...args) => inst.check(checks.minLength(...args));\n inst.max = (...args) => inst.check(checks.maxLength(...args));\n inst.length = (...args) => inst.check(checks.length(...args));\n inst.nonempty = (...args) => inst.check(checks.minLength(1, ...args));\n inst.lowercase = (params) => inst.check(checks.lowercase(params));\n inst.uppercase = (params) => inst.check(checks.uppercase(params));\n // transforms\n inst.trim = () => inst.check(checks.trim());\n inst.normalize = (...args) => inst.check(checks.normalize(...args));\n inst.toLowerCase = () => inst.check(checks.toLowerCase());\n inst.toUpperCase = () => inst.check(checks.toUpperCase());\n inst.slugify = () => inst.check(checks.slugify());\n});\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n _ZodString.init(inst, def);\n inst.email = (params) => inst.check(core._email(ZodEmail, params));\n inst.url = (params) => inst.check(core._url(ZodURL, params));\n inst.jwt = (params) => inst.check(core._jwt(ZodJWT, params));\n inst.emoji = (params) => inst.check(core._emoji(ZodEmoji, params));\n inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n inst.uuid = (params) => inst.check(core._uuid(ZodUUID, params));\n inst.uuidv4 = (params) => inst.check(core._uuidv4(ZodUUID, params));\n inst.uuidv6 = (params) => inst.check(core._uuidv6(ZodUUID, params));\n inst.uuidv7 = (params) => inst.check(core._uuidv7(ZodUUID, params));\n inst.nanoid = (params) => inst.check(core._nanoid(ZodNanoID, params));\n inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n inst.cuid = (params) => inst.check(core._cuid(ZodCUID, params));\n inst.cuid2 = (params) => inst.check(core._cuid2(ZodCUID2, params));\n inst.ulid = (params) => inst.check(core._ulid(ZodULID, params));\n inst.base64 = (params) => inst.check(core._base64(ZodBase64, params));\n inst.base64url = (params) => inst.check(core._base64url(ZodBase64URL, params));\n inst.xid = (params) => inst.check(core._xid(ZodXID, params));\n inst.ksuid = (params) => inst.check(core._ksuid(ZodKSUID, params));\n inst.ipv4 = (params) => inst.check(core._ipv4(ZodIPv4, params));\n inst.ipv6 = (params) => inst.check(core._ipv6(ZodIPv6, params));\n inst.cidrv4 = (params) => inst.check(core._cidrv4(ZodCIDRv4, params));\n inst.cidrv6 = (params) => inst.check(core._cidrv6(ZodCIDRv6, params));\n inst.e164 = (params) => inst.check(core._e164(ZodE164, params));\n // iso\n inst.datetime = (params) => inst.check(iso.datetime(params));\n inst.date = (params) => inst.check(iso.date(params));\n inst.time = (params) => inst.check(iso.time(params));\n inst.duration = (params) => inst.check(iso.duration(params));\n});\nexport function string(params) {\n return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n core.$ZodStringFormat.init(inst, def);\n _ZodString.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmail.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodGUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodUUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodURL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n return core._url(ZodURL, params);\n}\nexport function httpUrl(params) {\n return core._url(ZodURL, {\n protocol: /^https?$/,\n hostname: core.regexes.domain,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmoji.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodNanoID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n return core._nanoid(ZodNanoID, params);\n}\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cuid(params) {\n return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID2.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodULID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodXID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodKSUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n return core._ipv4(ZodIPv4, params);\n}\nexport const ZodMAC = /*@__PURE__*/ core.$constructor(\"ZodMAC\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodMAC.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function mac(params) {\n return core._mac(ZodMAC, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n core.$ZodCIDRv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n core.$ZodCIDRv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64URL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodE164.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n return core._e164(ZodE164, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodJWT.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCustomStringFormat.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport function hostname(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hostname\", core.regexes.hostname, _params);\n}\nexport function hex(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hex\", core.regexes.hex, _params);\n}\nexport function hash(alg, params) {\n const enc = params?.enc ?? \"hex\";\n const format = `${alg}_${enc}`;\n const regex = core.regexes[format];\n if (!regex)\n throw new Error(`Unrecognized hash format: ${format}`);\n return core._stringFormat(ZodCustomStringFormat, format, regex, params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n core.$ZodNumber.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.numberProcessor(inst, ctx, json, params);\n inst.gt = (value, params) => inst.check(checks.gt(value, params));\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.lt = (value, params) => inst.check(checks.lt(value, params));\n inst.lte = (value, params) => inst.check(checks.lte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n inst.int = (params) => inst.check(int(params));\n inst.safe = (params) => inst.check(int(params));\n inst.positive = (params) => inst.check(checks.gt(0, params));\n inst.nonnegative = (params) => inst.check(checks.gte(0, params));\n inst.negative = (params) => inst.check(checks.lt(0, params));\n inst.nonpositive = (params) => inst.check(checks.lte(0, params));\n inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n inst.step = (value, params) => inst.check(checks.multipleOf(value, params));\n // inst.finite = (params) => inst.check(core.finite(params));\n inst.finite = () => inst;\n const bag = inst._zod.bag;\n inst.minValue =\n Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n inst.maxValue =\n Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n inst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? 0.5);\n inst.isFinite = true;\n inst.format = bag.format ?? null;\n});\nexport function number(params) {\n return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n core.$ZodNumberFormat.init(inst, def);\n ZodNumber.init(inst, def);\n});\nexport function int(params) {\n return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n core.$ZodBoolean.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.booleanProcessor(inst, ctx, json, params);\n});\nexport function boolean(params) {\n return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n core.$ZodBigInt.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.bigintProcessor(inst, ctx, json, params);\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.gt = (value, params) => inst.check(checks.gt(value, params));\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.lt = (value, params) => inst.check(checks.lt(value, params));\n inst.lte = (value, params) => inst.check(checks.lte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));\n inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));\n inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));\n inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));\n inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n const bag = inst._zod.bag;\n inst.minValue = bag.minimum ?? null;\n inst.maxValue = bag.maximum ?? null;\n inst.format = bag.format ?? null;\n});\nexport function bigint(params) {\n return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n core.$ZodBigIntFormat.init(inst, def);\n ZodBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n return core._int64(ZodBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n core.$ZodSymbol.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.symbolProcessor(inst, ctx, json, params);\n});\nexport function symbol(params) {\n return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n core.$ZodUndefined.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.undefinedProcessor(inst, ctx, json, params);\n});\nfunction _undefined(params) {\n return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n core.$ZodNull.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nullProcessor(inst, ctx, json, params);\n});\nfunction _null(params) {\n return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n core.$ZodAny.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.anyProcessor(inst, ctx, json, params);\n});\nexport function any() {\n return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n core.$ZodUnknown.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unknownProcessor(inst, ctx, json, params);\n});\nexport function unknown() {\n return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n core.$ZodNever.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.neverProcessor(inst, ctx, json, params);\n});\nexport function never(params) {\n return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n core.$ZodVoid.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.voidProcessor(inst, ctx, json, params);\n});\nfunction _void(params) {\n return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n core.$ZodDate.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.dateProcessor(inst, ctx, json, params);\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n const c = inst._zod.bag;\n inst.minDate = c.minimum ? new Date(c.minimum) : null;\n inst.maxDate = c.maximum ? new Date(c.maximum) : null;\n});\nexport function date(params) {\n return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n core.$ZodArray.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.arrayProcessor(inst, ctx, json, params);\n inst.element = def.element;\n inst.min = (minLength, params) => inst.check(checks.minLength(minLength, params));\n inst.nonempty = (params) => inst.check(checks.minLength(1, params));\n inst.max = (maxLength, params) => inst.check(checks.maxLength(maxLength, params));\n inst.length = (len, params) => inst.check(checks.length(len, params));\n inst.unwrap = () => inst.element;\n});\nexport function array(element, params) {\n return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n const shape = schema._zod.def.shape;\n return _enum(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n core.$ZodObjectJIT.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.objectProcessor(inst, ctx, json, params);\n util.defineLazy(inst, \"shape\", () => {\n return def.shape;\n });\n inst.keyof = () => _enum(Object.keys(inst._zod.def.shape));\n inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall: catchall });\n inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never() });\n inst.strip = () => inst.clone({ ...inst._zod.def, catchall: undefined });\n inst.extend = (incoming) => {\n return util.extend(inst, incoming);\n };\n inst.safeExtend = (incoming) => {\n return util.safeExtend(inst, incoming);\n };\n inst.merge = (other) => util.merge(inst, other);\n inst.pick = (mask) => util.pick(inst, mask);\n inst.omit = (mask) => util.omit(inst, mask);\n inst.partial = (...args) => util.partial(ZodOptional, inst, args[0]);\n inst.required = (...args) => util.required(ZodNonOptional, inst, args[0]);\n});\nexport function object(shape, params) {\n const def = {\n type: \"object\",\n shape: shape ?? {},\n ...util.normalizeParams(params),\n };\n return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\n catchall: never(),\n ...util.normalizeParams(params),\n });\n}\n// looseObject\nexport function looseObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\n catchall: unknown(),\n ...util.normalizeParams(params),\n });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n core.$ZodUnion.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n inst.options = def.options;\n});\nexport function union(options, params) {\n return new ZodUnion({\n type: \"union\",\n options: options,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodXor = /*@__PURE__*/ core.$constructor(\"ZodXor\", (inst, def) => {\n ZodUnion.init(inst, def);\n core.$ZodXor.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n inst.options = def.options;\n});\n/** Creates an exclusive union (XOR) where exactly one option must match.\n * Unlike regular unions that succeed when any option matches, xor fails if\n * zero or more than one option matches the input. */\nexport function xor(options, params) {\n return new ZodXor({\n type: \"union\",\n options: options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n ZodUnion.init(inst, def);\n core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n // const [options, params] = args;\n return new ZodDiscriminatedUnion({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n core.$ZodIntersection.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.intersectionProcessor(inst, ctx, json, params);\n});\nexport function intersection(left, right) {\n return new ZodIntersection({\n type: \"intersection\",\n left: left,\n right: right,\n });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n core.$ZodTuple.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.tupleProcessor(inst, ctx, json, params);\n inst.rest = (rest) => inst.clone({\n ...inst._zod.def,\n rest: rest,\n });\n});\nexport function tuple(items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof core.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new ZodTuple({\n type: \"tuple\",\n items: items,\n rest,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n core.$ZodRecord.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.recordProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nexport function partialRecord(keyType, valueType, params) {\n const k = core.clone(keyType);\n k._zod.values = undefined;\n return new ZodRecord({\n type: \"record\",\n keyType: k,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport function looseRecord(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n mode: \"loose\",\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n core.$ZodMap.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.mapProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n inst.min = (...args) => inst.check(core._minSize(...args));\n inst.nonempty = (params) => inst.check(core._minSize(1, params));\n inst.max = (...args) => inst.check(core._maxSize(...args));\n inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function map(keyType, valueType, params) {\n return new ZodMap({\n type: \"map\",\n keyType: keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n core.$ZodSet.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.setProcessor(inst, ctx, json, params);\n inst.min = (...args) => inst.check(core._minSize(...args));\n inst.nonempty = (params) => inst.check(core._minSize(1, params));\n inst.max = (...args) => inst.check(core._maxSize(...args));\n inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n return new ZodSet({\n type: \"set\",\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n core.$ZodEnum.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.enumProcessor(inst, ctx, json, params);\n inst.enum = def.entries;\n inst.options = Object.values(def.entries);\n const keys = new Set(Object.keys(def.entries));\n inst.extract = (values, params) => {\n const newEntries = {};\n for (const value of values) {\n if (keys.has(value)) {\n newEntries[value] = def.entries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n inst.exclude = (values, params) => {\n const newEntries = { ...def.entries };\n for (const value of values) {\n if (keys.has(value)) {\n delete newEntries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n});\nfunction _enum(values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n core.$ZodLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.literalProcessor(inst, ctx, json, params);\n inst.values = new Set(def.values);\n Object.defineProperty(inst, \"value\", {\n get() {\n if (def.values.length > 1) {\n throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n }\n return def.values[0];\n },\n });\n});\nexport function literal(value, params) {\n return new ZodLiteral({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n core.$ZodFile.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.fileProcessor(inst, ctx, json, params);\n inst.min = (size, params) => inst.check(core._minSize(size, params));\n inst.max = (size, params) => inst.check(core._maxSize(size, params));\n inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n core.$ZodTransform.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.transformProcessor(inst, ctx, json, params);\n inst._zod.parse = (payload, _ctx) => {\n if (_ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = inst);\n // _issue.continue ??= true;\n payload.issues.push(util.issue(_issue));\n }\n };\n const output = def.transform(payload.value, payload);\n if (output instanceof Promise) {\n return output.then((output) => {\n payload.value = output;\n return payload;\n });\n }\n payload.value = output;\n return payload;\n };\n});\nexport function transform(fn) {\n return new ZodTransform({\n type: \"transform\",\n transform: fn,\n });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n core.$ZodOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n return new ZodOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodExactOptional = /*@__PURE__*/ core.$constructor(\"ZodExactOptional\", (inst, def) => {\n core.$ZodExactOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function exactOptional(innerType) {\n return new ZodExactOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n core.$ZodNullable.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nullableProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n return new ZodNullable({\n type: \"nullable\",\n innerType: innerType,\n });\n}\n// nullish\nexport function nullish(innerType) {\n return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n core.$ZodDefault.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.defaultProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n return new ZodDefault({\n type: \"default\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n core.$ZodPrefault.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.prefaultProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n return new ZodPrefault({\n type: \"prefault\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n core.$ZodNonOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nonoptionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n return new ZodNonOptional({\n type: \"nonoptional\",\n innerType: innerType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n core.$ZodSuccess.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.successProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n return new ZodSuccess({\n type: \"success\",\n innerType: innerType,\n });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n core.$ZodCatch.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.catchProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n return new ZodCatch({\n type: \"catch\",\n innerType: innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n core.$ZodNaN.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nanProcessor(inst, ctx, json, params);\n});\nexport function nan(params) {\n return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n core.$ZodPipe.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.pipeProcessor(inst, ctx, json, params);\n inst.in = def.in;\n inst.out = def.out;\n});\nexport function pipe(in_, out) {\n return new ZodPipe({\n type: \"pipe\",\n in: in_,\n out: out,\n // ...util.normalizeParams(params),\n });\n}\nexport const ZodCodec = /*@__PURE__*/ core.$constructor(\"ZodCodec\", (inst, def) => {\n ZodPipe.init(inst, def);\n core.$ZodCodec.init(inst, def);\n});\nexport function codec(in_, out, params) {\n return new ZodCodec({\n type: \"pipe\",\n in: in_,\n out: out,\n transform: params.decode,\n reverseTransform: params.encode,\n });\n}\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n core.$ZodReadonly.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.readonlyProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function readonly(innerType) {\n return new ZodReadonly({\n type: \"readonly\",\n innerType: innerType,\n });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n core.$ZodTemplateLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.templateLiteralProcessor(inst, ctx, json, params);\n});\nexport function templateLiteral(parts, params) {\n return new ZodTemplateLiteral({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n core.$ZodLazy.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.lazyProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n return new ZodLazy({\n type: \"lazy\",\n getter: getter,\n });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n core.$ZodPromise.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.promiseProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n return new ZodPromise({\n type: \"promise\",\n innerType: innerType,\n });\n}\nexport const ZodFunction = /*@__PURE__*/ core.$constructor(\"ZodFunction\", (inst, def) => {\n core.$ZodFunction.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.functionProcessor(inst, ctx, json, params);\n});\nexport function _function(params) {\n return new ZodFunction({\n type: \"function\",\n input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n output: params?.output ?? unknown(),\n });\n}\nexport { _function as function };\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n core.$ZodCustom.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.customProcessor(inst, ctx, json, params);\n});\n// custom checks\nexport function check(fn) {\n const ch = new core.$ZodCheck({\n check: \"custom\",\n // ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\nexport function custom(fn, _params) {\n return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn) {\n return core._superRefine(fn);\n}\n// Re-export describe and meta from core\nexport const describe = core.describe;\nexport const meta = core.meta;\nfunction _instanceof(cls, params = {}) {\n const inst = new ZodCustom({\n type: \"custom\",\n check: \"custom\",\n fn: (data) => data instanceof cls,\n abort: true,\n ...util.normalizeParams(params),\n });\n inst._zod.bag.Class = cls;\n // Override check to emit invalid_type instead of custom\n inst._zod.check = (payload) => {\n if (!(payload.value instanceof cls)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: cls.name,\n input: payload.value,\n inst,\n path: [...(inst._zod.def.path ?? [])],\n });\n }\n };\n return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n Codec: ZodCodec,\n Boolean: ZodBoolean,\n String: ZodString,\n}, ...args);\nexport function json(params) {\n const jsonSchema = lazy(() => {\n return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n });\n return jsonSchema;\n}\n// preprocess\n// /** @deprecated Use `z.pipe()` and `z.transform()` instead. */\nexport function preprocess(fn, schema) {\n return pipe(transform(fn), schema);\n}\n","// Zod 3 compat layer\nimport * as core from \"../core/index.js\";\n/** @deprecated Use the raw string literal codes instead, e.g. \"invalid_type\". */\nexport const ZodIssueCode = {\n invalid_type: \"invalid_type\",\n too_big: \"too_big\",\n too_small: \"too_small\",\n invalid_format: \"invalid_format\",\n not_multiple_of: \"not_multiple_of\",\n unrecognized_keys: \"unrecognized_keys\",\n invalid_union: \"invalid_union\",\n invalid_key: \"invalid_key\",\n invalid_element: \"invalid_element\",\n invalid_value: \"invalid_value\",\n custom: \"custom\",\n};\nexport { $brand, config } from \"../core/index.js\";\n/** @deprecated Use `z.config(params)` instead. */\nexport function setErrorMap(map) {\n core.config({\n customError: map,\n });\n}\n/** @deprecated Use `z.config()` instead. */\nexport function getErrorMap() {\n return core.config().customError;\n}\n/** @deprecated Do not use. Stub definition, only included for zod-to-json-schema compatibility. */\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n","import { z } from \"zod\";\n\nexport const EntityIdSchema = z.string().regex(/^[0-7][0-9A-HJKMNP-TV-Z]{25}$/);\n\nexport const PaginationInputSchema = z\n .object({\n limit: z.number().int().min(1).max(100).optional(),\n cursor: z.string().min(1).optional(),\n })\n .strict();\n\nexport type PaginationInput = z.infer<typeof PaginationInputSchema>;\n\nexport const stringOrRegex = z.discriminatedUnion(\"type\", [\n z\n .object({\n type: z.literal(\"string\"),\n value: z.string(),\n })\n .strict(),\n z\n .object({\n type: z.literal(\"regex\"),\n source: z.string(),\n flags: z.string(),\n })\n .strict(),\n]);\nexport type StringOrRegex = z.infer<typeof stringOrRegex>;\n\nexport const primitiveOrRegex = z.discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"string\"), value: z.string() }).strict(),\n z.object({ type: z.literal(\"regex\"), source: z.string(), flags: z.string() }).strict(),\n z.object({ type: z.literal(\"number\"), value: z.number() }).strict(),\n z.object({ type: z.literal(\"boolean\"), value: z.boolean() }).strict(),\n]);\nexport type PrimitiveOrRegex = z.infer<typeof primitiveOrRegex>;\n","import { z } from \"zod\";\n\nexport const numberAssertion = z.object({\n type: z.enum([\"toBeGreaterThan\", \"toBeLessThan\", \"toEqual\"]),\n value: z.number(),\n});\n\nexport type NumberAssertion = z.infer<typeof numberAssertion>;\n\nexport const stringAssertion = z.object({\n type: z.enum([\"toContain\", \"toMatch\"]),\n value: z.string(),\n});\n\nexport type StringAssertion = z.infer<typeof stringAssertion>;\n\nexport const booleanAssertion = z.object({\n type: z.enum([\"toBeTrue\", \"toBeFalse\"]),\n});\n\nexport type BooleanAssertion = z.infer<typeof booleanAssertion>;\n\nexport const nullAssertion = z.object({\n type: z.enum([\"toBeNull\"]),\n});\n\nexport type NullAssertion = z.infer<typeof nullAssertion>;\n\nexport const apiHttpMethodSchema = z.enum([\"GET\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\"]);\nexport type ApiHttpMethod = z.infer<typeof apiHttpMethodSchema>;\n\nexport const apiResponseSnapshotSchema = z\n .object({\n status: z.number().int(),\n statusText: z.string(),\n timeMs: z.number().nonnegative(),\n sizeBytes: z.number().nonnegative(),\n headers: z.record(z.string(), z.string()),\n bodyText: z.string(),\n bodyJson: z.unknown().optional(),\n })\n .strict();\nexport type ApiResponseSnapshot = z.infer<typeof apiResponseSnapshotSchema>;\n\nexport const apiRequestSchema = z\n .object({\n method: apiHttpMethodSchema,\n url: z.string().min(1),\n headers: z.record(z.string(), z.string()).optional(),\n body: z.string().optional(),\n saveAs: z\n .string()\n .regex(/^[A-Za-z_][A-Za-z0-9_]*$/)\n .optional(),\n capturedResponse: apiResponseSnapshotSchema.optional(),\n options: z\n .object({\n // proxy settings, timeouts, etc.\n timeout: z.number().int().positive().default(60_000).optional(),\n })\n .strict()\n .optional(),\n })\n .strict();\n\nexport type ApiRequest = z.infer<typeof apiRequestSchema>;\n\nexport const apiResponseStatusAssertionSchema = numberAssertion;\nexport type ApiResponseStatusAssertion = z.infer<typeof apiResponseStatusAssertionSchema>;\n\nexport const apiResponseHeaderAssertionSchema = z.object({\n name: z.string(),\n assertion: stringAssertion,\n});\nexport type ApiResponseHeaderAssertion = z.infer<typeof apiResponseHeaderAssertionSchema>;\n\nexport const apiResponseJsonBodyPropertyAssertionSchema = z.object({\n path: z.string(), // JSON path to the property\n assertion: z.union([numberAssertion, stringAssertion, booleanAssertion, nullAssertion]),\n});\nexport type ApiResponseJsonBodyPropertyAssertion = z.infer<\n typeof apiResponseJsonBodyPropertyAssertionSchema\n>;\nexport const apiAssertionOperatorSchema = z.enum([\n \"equals\",\n \"notEquals\",\n \"contains\",\n \"lessThan\",\n \"greaterThan\",\n \"exists\",\n]);\nexport type ApiAssertionOperator = z.infer<typeof apiAssertionOperatorSchema>;\n\nconst apiAssertionBaseSchema = z.object({\n operator: apiAssertionOperatorSchema,\n expected: z.string().optional().default(\"\"),\n});\n\nexport const apiResponseAssertionCommandData = z.discriminatedUnion(\"target\", [\n apiAssertionBaseSchema\n .extend({\n target: z.literal(\"status\"),\n expected: z.string().min(1),\n })\n .strict(),\n apiAssertionBaseSchema\n .extend({\n target: z.literal(\"responseTime\"),\n expected: z.string().min(1),\n })\n .strict(),\n apiAssertionBaseSchema\n .extend({\n target: z.literal(\"header\"),\n path: z.string().min(1),\n })\n .strict(),\n apiAssertionBaseSchema\n .extend({\n target: z.literal(\"bodyField\"),\n path: z.string().min(1),\n })\n .strict(),\n]);\nexport type ApiResponseAssertionCommandData = z.infer<typeof apiResponseAssertionCommandData>;\n","import { z } from \"zod\";\n\nconst keyModifierSchema = z.enum([\"Alt\", \"Control\", \"Meta\", \"Shift\", \"ControlOrMeta\"]);\n\nconst hoverOptionsSchema = z\n .object({\n position: z\n .object({\n x: z.number(),\n y: z.number(),\n })\n .optional(),\n modifiers: z.array(keyModifierSchema).optional(),\n timeout: z.number().optional(),\n force: z.boolean().optional(),\n noWaitAfter: z.boolean().optional(),\n })\n .optional();\nconst clickOptionsSchema = z\n .object({\n button: z.enum([\"left\", \"right\", \"middle\"]).optional(),\n clickCount: z.number().optional(),\n delay: z.number().optional(),\n position: z\n .object({\n x: z.number(),\n y: z.number(),\n })\n .optional(),\n modifiers: z.array(keyModifierSchema).optional(),\n timeout: z.number().optional(),\n force: z.boolean().optional(),\n noWaitAfter: z.boolean().optional(),\n trial: z.boolean().optional(),\n })\n .optional();\n\nconst fillOptionsSchema = z\n .object({\n timeout: z.number().optional(),\n force: z.boolean().optional(),\n noWaitAfter: z.boolean().optional(),\n })\n .optional();\nconst selectOptionsSchema = z\n .object({\n timeout: z.number().optional(),\n force: z.boolean().optional(),\n noWaitAfter: z.boolean().optional(),\n })\n .optional();\n\nconst setCheckedOptionsSchema = z\n .object({\n timeout: z.number().optional(),\n force: z.boolean().optional(),\n noWaitAfter: z.boolean().optional(),\n })\n .optional();\n\nconst setInputFilesOptionsSchema = z\n .object({\n timeout: z.number().optional(),\n noWaitAfter: z.boolean().optional(),\n })\n .optional();\n\nconst pressOptionsSchema = z\n .object({\n delay: z.number().optional(),\n timeout: z.number().optional(),\n noWaitAfter: z.boolean().optional(),\n })\n .optional();\n\nexport const elementActionSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"click\"),\n options: clickOptionsSchema,\n }),\n z.object({\n type: z.literal(\"fill\"),\n value: z.string(),\n options: fillOptionsSchema,\n }),\n z.object({\n type: z.literal(\"selectOption\"),\n value: z.union([z.string(), z.array(z.string())]),\n options: selectOptionsSchema,\n }),\n z.object({\n type: z.literal(\"setChecked\"),\n checked: z.boolean(),\n options: setCheckedOptionsSchema,\n }),\n z.object({\n type: z.literal(\"setInputFiles\"),\n files: z.union([\n // z.array(\n // z.object({\n // name: z.string(),\n // mimeType: z.string(),\n // buffer: z.instanceof(Buffer),\n // }),\n // ),\n z.array(z.string()),\n ]),\n /**\n * When set, the worker resolves this key against the active project's\n * test-data entries (dataType: \"file\"), downloads the bytes from S3 to a\n * temp path, and uses that path as the upload — `files` is ignored.\n * Authored by the recorder when the user picks a file from the Blinq\n * file-chooser modal instead of the cloud Chromium's native picker.\n */\n testDataKey: z.string().min(1).max(500).optional(),\n options: setInputFilesOptionsSchema,\n }),\n z.object({\n type: z.literal(\"hover\"),\n options: hoverOptionsSchema,\n }),\n z.object({\n type: z.literal(\"press\"),\n value: z.string(),\n options: pressOptionsSchema,\n }),\n]);\n\nexport type ElementAction = z.infer<typeof elementActionSchema>;\nexport type ElementActionTypes = ElementAction[\"type\"];\n","import { z } from \"zod\";\nimport { primitiveOrRegex, stringOrRegex } from \"../..\";\n\n// tobeHidden, toBeEnabled, toBeDisabled, toBeChecked, toBeUnchecked, toExist, toHaveAttribute, toHaveClass, toHaveId, toHaveStyle, etc.\nexport const elementAssertionSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"toBeVisible\"),\n options: z\n .object({\n timeout: z.number().optional(),\n })\n .optional(),\n }),\n z.object({\n type: z.literal(\"toBeHidden\"),\n options: z\n .object({\n timeout: z.number().optional(),\n })\n .optional(),\n }),\n z.object({\n type: z.literal(\"toBeEnabled\"),\n options: z\n .object({\n timeout: z.number().optional(),\n })\n .optional(),\n }),\n z.object({\n type: z.literal(\"toBeDisabled\"),\n options: z\n .object({\n timeout: z.number().optional(),\n })\n .optional(),\n }),\n z.object({\n type: z.literal(\"toBeChecked\"),\n options: z\n .object({\n timeout: z.number().optional(),\n })\n .optional(),\n }),\n z.object({\n type: z.literal(\"toBeUnchecked\"),\n options: z\n .object({\n timeout: z.number().optional(),\n })\n .optional(),\n }),\n z.object({\n type: z.literal(\"toBeEditable\"),\n options: z\n .object({\n timeout: z.number().optional(),\n })\n .optional(),\n }),\n z.object({\n type: z.literal(\"toExist\"),\n options: z\n .object({\n timeout: z.number().optional(),\n })\n .optional(),\n }),\n z.object({\n type: z.literal(\"toHaveText\"),\n value: stringOrRegex,\n options: z\n .object({\n timeout: z.number().optional(),\n })\n .optional(),\n }),\n z.object({\n type: z.literal(\"toHaveValue\"),\n value: stringOrRegex,\n options: z\n .object({\n timeout: z.number().optional(),\n })\n .optional(),\n }),\n z.object({\n type: z.literal(\"toHaveProperty\"),\n name: z.string(),\n value: primitiveOrRegex.optional(),\n options: z\n .object({\n timeout: z.number().optional(),\n })\n .optional(),\n }),\n z.object({\n type: z.literal(\"toHaveAttribute\"),\n name: z.string(),\n value: stringOrRegex.optional(),\n options: z\n .object({\n timeout: z.number().optional(),\n })\n .optional(),\n }),\n z.object({\n type: z.literal(\"toHaveClass\"),\n value: stringOrRegex,\n options: z\n .object({\n timeout: z.number().optional(),\n })\n .optional(),\n }),\n z.object({\n type: z.literal(\"toHaveId\"),\n value: stringOrRegex,\n options: z\n .object({\n timeout: z.number().optional(),\n })\n .optional(),\n }),\n z.object({\n type: z.literal(\"toHaveCount\"),\n count: z.number(),\n options: z\n .object({\n timeout: z.number().optional(),\n })\n .optional(),\n }),\n // z.object({\n // type: z.literal(\"toHaveStyle\"),\n // name: z.string(),\n // value: stringOrRegex,\n // options: z\n // .object({\n // timeout: z.number().optional(),\n // })\n // .optional(),\n // }),\n // Add more assertion types as needed\n]);\n\nexport type ElementAssertion = z.infer<typeof elementAssertionSchema>;\n","import { z } from \"zod\";\nexport const elementExtractSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"text\"),\n }),\n z.object({\n type: z.literal(\"attribute\"),\n name: z.string(),\n }),\n z.object({\n type: z.literal(\"property\"),\n name: z.string(),\n }),\n]);\n\nexport type ElementExtract = z.infer<typeof elementExtractSchema>;\n","import { z } from \"zod\";\nexport const regexStringSchema = z.object({\n source: z.string(),\n flags: z.string(),\n});\nexport type RegexString = z.infer<typeof regexStringSchema>;\n\nexport const AttributeSelectorSchema = z.discriminatedUnion(\"type\", [\n z\n .object({\n type: z.literal(\"string\"),\n value: z.string(),\n exact: z.boolean().default(false),\n })\n .strict(),\n z.object({}).strict(),\n z\n .object({\n type: z.literal(\"regex\"),\n ...regexStringSchema.shape,\n })\n .strict(),\n]);\nexport type AttributeSelector = z.infer<typeof AttributeSelectorSchema>;\n\nexport const AccessibleNameSelectorSchema = z.discriminatedUnion(\"type\", [\n z\n .object({\n type: z.literal(\"string\"),\n value: z.string(),\n })\n .strict(),\n z\n .object({\n type: z.literal(\"regex\"),\n ...regexStringSchema.shape,\n })\n .strict(),\n]);\nexport type AccessibleNameSelector = z.infer<typeof AccessibleNameSelectorSchema>;\nexport const BVTSelectorSchema = z.discriminatedUnion(\"type\", [\n z\n .object({\n type: z.literal(\"css\"),\n selector: z.string(),\n })\n .strict(),\n z\n .object({\n type: z.literal(\"xpath\"),\n selector: z.string(),\n })\n .strict(),\n z\n .object({\n type: z.literal(\"playwright\"),\n selector: z.string(),\n })\n .strict(),\n z\n .object({\n type: z.literal(\"bvt.simple\"),\n selector: z\n .object({\n alt: AttributeSelectorSchema,\n title: AttributeSelectorSchema,\n label: AttributeSelectorSchema,\n placeholder: AttributeSelectorSchema,\n text: AttributeSelectorSchema,\n testid: AttributeSelectorSchema,\n })\n .partial()\n .strict(),\n })\n .strict(),\n z\n .object({\n type: z.literal(\"bvt.role\"),\n selector: z\n .object({\n role: z.string(),\n options: z\n .object({\n checked: z.boolean().optional(),\n disabled: z.boolean().optional(),\n exact: z.boolean().optional(),\n expanded: z.boolean().optional(),\n includeHidden: z.boolean().optional(),\n level: z.number().optional(),\n name: AccessibleNameSelectorSchema.optional(),\n pressed: z.boolean().optional(),\n selected: z.boolean().optional(),\n })\n .partial()\n .optional(),\n })\n .strict(),\n })\n .strict(),\n]);\n\nexport type BVTSelector = z.infer<typeof BVTSelectorSchema>;\n","import { z } from \"zod\";\nimport { BVTSelectorSchema } from \"./bvtSelector.schema\";\n\nexport const StrategySchema = z.enum([\"css\", \"xpath\", \"text\", \"label\", \"testId\"]);\n\nconst BVTSelectorObjectSchemaBase = z\n .object({\n target: BVTSelectorSchema,\n context: z\n .object({\n type: z.enum([\"closest\", \"near\", \"leftOf\", \"rightOf\", \"above\", \"below\"]),\n get selectorObject() {\n return BVTSelectorObjectSchema;\n },\n })\n .optional(),\n container: z\n .object({\n get selectorObject() {\n return BVTSelectorObjectSchema;\n },\n type: z.enum([\"simple\", \"shadow\"]),\n })\n .optional(),\n })\n .strict();\n\n// `BVTSelectorObjectSchema` is intentionally self-referential — a selector\n// object can embed another selector object inside `context` or `container`.\n// At runtime, the lazy getters above make that work without import cycles.\n//\n// Downstream, `@asteasolutions/zod-to-openapi` (via `@hono/zod-openapi`) walks\n// the schema to emit a JSON Schema document. That walk eagerly reads every\n// property — including the getters — and has no native short-circuit for this\n// shape, so ai-server's OpenAPI build blows its stack with\n// \"Maximum call stack size exceeded\" in `isOptionalSchema`.\n//\n// When `@hono/zod-openapi` has been loaded by the consumer (ai-server), it\n// applies `extendZodWithOpenApi(z)` as a side effect, making `.openapi()`\n// available on every zod schema. We probe for the extension and, when\n// present, stamp a `type: \"object\"` metadata override. The walker uses that\n// metadata as a hard stop (dist/index.cjs:1365) and never recurses into the\n// getter. Consumers that do NOT load `@hono/zod-openapi` (core/schemas unit\n// tests, the worker, the client) see the bare base schema unchanged.\ntype OpenApiCapable<T extends z.ZodTypeAny> = T & {\n openapi: (metadata: Record<string, unknown>) => T;\n};\nfunction hasOpenApiExtension<T extends z.ZodTypeAny>(schema: T): schema is OpenApiCapable<T> {\n return typeof (schema as unknown as { openapi?: unknown }).openapi === \"function\";\n}\n\nexport const BVTSelectorObjectSchema: typeof BVTSelectorObjectSchemaBase = hasOpenApiExtension(\n BVTSelectorObjectSchemaBase,\n)\n ? (BVTSelectorObjectSchemaBase.openapi({\n type: \"object\",\n description:\n \"Recursive selector object. Structure is documented by the underlying Zod schema; the OpenAPI walker cannot emit the recursive shape without blowing its stack.\",\n }) as typeof BVTSelectorObjectSchemaBase)\n : BVTSelectorObjectSchemaBase;\n\nexport type BVTSelectorObject = z.infer<typeof BVTSelectorObjectSchema>;\nexport const UniqueSelectorSchema = z.discriminatedUnion(\"type\", [\n z\n .object({\n type: z.literal(\"pw.selectorString\"),\n selectorString: z.string(),\n strategy: StrategySchema,\n description: z.string().optional(),\n })\n .strict(),\n z\n .object({\n type: z.literal(\"bvt.selectorObject\"),\n selectorObject: BVTSelectorObjectSchema,\n strategy: StrategySchema,\n description: z.string().optional(),\n })\n .strict(),\n]);\n\nexport type UniqueSelector = z.infer<typeof UniqueSelectorSchema>;\n\nexport type * from \"./bvtSelector.schema\";\n","import { z } from \"zod\";\nconst waitUntilSchema = z.enum([\"load\", \"domcontentloaded\", \"networkidle\"]);\n\nexport const pageActionSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"navigate\"),\n url: z.string(),\n options: z\n .object({\n timeout: z.number().optional(),\n waitUntil: waitUntilSchema.optional(),\n })\n .optional(),\n }),\n z.object({\n type: z.literal(\"goBack\"),\n options: z\n .object({\n timeout: z.number().optional(),\n waitUntil: waitUntilSchema.optional(),\n })\n .optional(),\n }),\n z.object({\n type: z.literal(\"goForward\"),\n options: z\n .object({\n timeout: z.number().optional(),\n waitUntil: waitUntilSchema.optional(),\n })\n .optional(),\n }),\n z.object({\n type: z.literal(\"reload\"),\n options: z\n .object({\n timeout: z.number().optional(),\n waitUntil: waitUntilSchema.optional(),\n })\n .optional(),\n }),\n z.object({\n type: z.literal(\"close\"),\n options: z\n .object({\n reason: z.string().optional(),\n runBeforeUnload: z.boolean().optional(),\n })\n .optional(),\n }),\n]);\nexport type PageAction = z.infer<typeof pageActionSchema>;\n","import { z } from \"zod\";\nimport { stringOrRegex } from \"../..\";\n\nexport const pageAssertionSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"toHaveTitle\"),\n value: stringOrRegex,\n options: z\n .object({\n timeout: z.number().optional(),\n })\n .optional(),\n }),\n z.object({\n type: z.literal(\"toHaveURL\"),\n value: stringOrRegex,\n options: z\n .object({\n timeout: z.number().optional(),\n })\n .optional(),\n }),\n z.object({\n type: z.literal(\"toContainText\"),\n value: stringOrRegex,\n options: z\n .object({\n timeout: z.number().optional(),\n // ignoreCase: z.boolean().optional(),\n })\n .optional(),\n }),\n]);\nexport type PageAssertion = z.infer<typeof pageAssertionSchema>;\n","import { z } from \"zod\";\n\nexport const pageExtractSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"title\"),\n }),\n z.object({\n type: z.literal(\"url\"),\n }),\n]);\n\nexport type PageExtract = z.infer<typeof pageExtractSchema>;\n","import { z } from \"zod\";\n// ── Scope types ────────────────────────────────────────────────────────────────\n\n/**\n * Defines the lifecycle scope at which a test data entry exists.\n * Inspired by Gauge's DataStore hierarchy (Scenario → Spec → Suite),\n * extended with environment and system scopes for finer control.\n */\nexport const ScopeTypeSchema = z.enum([\n \"global\", // Project-wide constants (≈ Gauge SuiteStore, but parallel-safe)\n \"environment\", // Specific to an environment (e.g. \"staging\", \"production\")\n \"feature\", // Scoped to a feature / specification (≈ Gauge SpecStore) //? not used yet\n \"scenario\", // Scoped to a scenario within a feature //? not used yet\n \"runtime\", // Created during execution, cleared per scenario (≈ Gauge ScenarioStore)\n]);\n\nexport type ScopeType = z.infer<typeof ScopeTypeSchema>;\n\n// Scope references point at records that may include legacy, non-ULID identifiers.\nexport const TestDataScopeReferenceIdSchema = z.string().min(1, \"Scope identifier is required\");\n\n// ── Scope definition (attached to each TestDataEntry) ──────────────────────\n\nexport const TestDataScopeSchema = z\n .object({\n type: ScopeTypeSchema,\n environmentId: TestDataScopeReferenceIdSchema.optional(),\n featureId: TestDataScopeReferenceIdSchema.optional(),\n scenarioId: TestDataScopeReferenceIdSchema.optional(),\n executionId: TestDataScopeReferenceIdSchema.optional(),\n })\n .strict()\n .superRefine((scope, ctx) => {\n if (scope.type === \"environment\" && !scope.environmentId) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"environmentId is required when scope type is 'environment'\",\n path: [\"environmentId\"],\n });\n }\n });\n\nexport type TestDataScope = z.infer<typeof TestDataScopeSchema>;\n\n// ── Scope precedence configuration ─────────────────────────────────────────\n\n/**\n * Default resolution order (most specific → least specific):\n * runtime → scenario → feature → environment → global → system\n *\n * The `systemEnvPosition` field controls where OS environment variables\n * sit in the chain. By default they are checked LAST (\"after-global\"),\n * but can be moved to FIRST (\"before-runtime\") for CI/CD overrides.\n */\nexport const ScopePrecedenceConfigSchema = z\n .object({\n order: z\n .array(ScopeTypeSchema)\n .default([\"runtime\", \"scenario\", \"feature\", \"environment\", \"global\"]),\n systemEnvPosition: z.enum([\"before-runtime\", \"after-global\"]).default(\"after-global\"),\n })\n .strict();\n\nexport type ScopePrecedenceConfig = z.infer<typeof ScopePrecedenceConfigSchema>;\n\n// ── Default precedence ─────────────────────────────────────────────────────\n\nexport const DEFAULT_SCOPE_PRECEDENCE: ScopePrecedenceConfig = {\n order: [\"runtime\", \"scenario\", \"feature\", \"environment\", \"global\"],\n systemEnvPosition: \"after-global\",\n};\n","import { z } from \"zod\";\nimport { EntityIdSchema } from \"../base.schema\";\nimport {\n ScopeTypeSchema,\n TestDataScopeReferenceIdSchema,\n TestDataScopeSchema,\n} from \"./scope.schema\";\n\n// ── Data type enum ─────────────────────────────────────────────────────────\n\nexport const TestDataTypeSchema = z.enum([\n \"string\",\n \"number\",\n \"boolean\",\n \"secret\",\n \"totp\",\n \"json\",\n \"sessionState\",\n \"file\",\n]);\n\nexport type TestDataType = z.infer<typeof TestDataTypeSchema>;\n\nexport const TestDataFileMetadataSchema = z\n .object({\n s3Key: z.string().min(1),\n fileName: z.string().min(1).max(500),\n mimeType: z.string().min(1).max(200),\n size: z.number().int().nonnegative(),\n })\n .strict();\n\nexport type TestDataFileMetadata = z.infer<typeof TestDataFileMetadataSchema>;\n\nexport function serializeFileMetadata(metadata: TestDataFileMetadata): string {\n return JSON.stringify(TestDataFileMetadataSchema.parse(metadata));\n}\n\nexport function parseFileMetadata(value: string): TestDataFileMetadata {\n return TestDataFileMetadataSchema.parse(JSON.parse(value));\n}\n\n// ── Source enum (who created this entry) ───────────────────────────────────\n\nexport const TestDataSourceSchema = z.enum([\n \"user\", // Manually defined by a user\n \"extracted\", // Extracted from DOM/API during execution\n \"system\", // Created by the system (e.g. env injection)\n]);\n\nexport type TestDataSource = z.infer<typeof TestDataSourceSchema>;\n\nexport const TEST_DATA_VALUE_MAX_BYTES = 4 * 1024 * 1024;\nexport const TEST_DATA_VALUE_MAX_LENGTH = TEST_DATA_VALUE_MAX_BYTES;\nexport const TEST_DATA_VALUE_TOO_LARGE_MESSAGE =\n \"Test data value is too large. Maximum allowed size is 4 MB.\";\n\nconst textEncoder = new TextEncoder();\n\nfunction getUtf8ByteLength(value: string): number {\n return textEncoder.encode(value).byteLength;\n}\n\nexport const TestDataValueSchema = z\n .string()\n .refine((value) => getUtf8ByteLength(value) <= TEST_DATA_VALUE_MAX_BYTES, {\n message: TEST_DATA_VALUE_TOO_LARGE_MESSAGE,\n });\n\n// ── Test Data Entry ────────────────────────────────────────────────────────\n\nexport const TestDataEntrySchema = z\n .object({\n _id: EntityIdSchema,\n projectId: EntityIdSchema,\n key: z.string().min(1).max(500),\n value: TestDataValueSchema,\n dataType: TestDataTypeSchema,\n scope: TestDataScopeSchema,\n source: TestDataSourceSchema,\n createdAt: z.date(),\n updatedAt: z.date(),\n })\n .strict();\n\nexport type TestDataEntry = z.infer<typeof TestDataEntrySchema>;\n\n// ── Resolution Context ─────────────────────────────────────────────────────\n\n/**\n * Context passed to the resolver so it knows which scopes to query.\n */\nexport const ResolutionContextSchema = z\n .object({\n projectId: EntityIdSchema,\n environmentId: TestDataScopeReferenceIdSchema.optional(),\n featureId: TestDataScopeReferenceIdSchema.optional(),\n scenarioId: TestDataScopeReferenceIdSchema.optional(),\n executionId: TestDataScopeReferenceIdSchema.optional(),\n /** Snapshot of relevant `process.env` entries for system-env override. */\n systemEnvOverrides: z.record(z.string(), z.string()).default({}),\n })\n .strict();\n\nexport type ResolutionContext = z.infer<typeof ResolutionContextSchema>;\n\n// ── Resolution Warning ─────────────────────────────────────────────────────\n\nexport const ResolutionWarningTypeSchema = z.enum([\n \"system_env_override\", // System env variable took precedence over a scoped value\n \"fallback_used\", // Value resolved from a broader scope (e.g. global instead of env)\n \"faker_generated\", // Value was generated by faker (no key found in data)\n \"unknown_key\", // Key was not found in any scope or evaluator\n]);\n\nexport type ResolutionWarningType = z.infer<typeof ResolutionWarningTypeSchema>;\n\nexport const ResolutionWarningSchema = z\n .object({\n type: ResolutionWarningTypeSchema,\n key: z.string(),\n message: z.string(),\n resolvedFromScope: ScopeTypeSchema.optional(),\n })\n .strict();\n\nexport type ResolutionWarning = z.infer<typeof ResolutionWarningSchema>;\n\n// ── Resolution Result ──────────────────────────────────────────────────────\n\nexport const ResolutionResultSchema = z\n .object({\n resolved: z.string(),\n warnings: z.array(ResolutionWarningSchema),\n usedKeys: z.array(\n z\n .object({\n key: z.string(),\n scope: ScopeTypeSchema,\n source: TestDataSourceSchema,\n })\n .strict(),\n ),\n })\n .strict();\n\nexport type ResolutionResult = z.infer<typeof ResolutionResultSchema>;\n","import { z } from \"zod\";\nimport { stringOrRegex } from \"../../base.schema\";\n\n/**\n * Maximum per-download byte cap enforced by the recorder/worker's\n * `page.on(\"download\")` interceptor. Picked to match the same 10 MB cap\n * applied to test-data file uploads. Exported so the executor's error\n * messages can quote it consistently.\n */\nexport const VERIFY_DOWNLOAD_MAX_BYTES = 10 * 1024 * 1024;\n\n/** Default polling window for `verifyDownload` (matches other assertions). */\nexport const VERIFY_DOWNLOAD_DEFAULT_TIMEOUT_MS = 15_000;\n\nexport const utilityCommandSchema = z.discriminatedUnion(\"type\", [\n z\n .object({\n type: z.literal(\"sleep\"),\n durationMs: z.number().min(0),\n })\n .strict(),\n z\n .object({\n type: z.literal(\"saveSessionState\"),\n key: z.string().trim().min(1).max(500),\n includeIndexedDB: z.boolean().default(true),\n })\n .strict(),\n z\n .object({\n type: z.literal(\"restoreSessionState\"),\n key: z.string().trim().min(1).max(500),\n })\n .strict(),\n z\n .object({\n type: z.literal(\"verifyDownload\"),\n /**\n * Filename to assert on. `string` matches the resolved filename\n * exactly; `regex` matches via the same `StringOrRegex` shape used by\n * other assertions (e.g. `toHaveText`). Required — modal always\n * captures a concrete value.\n */\n fileName: stringOrRegex,\n /**\n * Max time to poll for the file to appear in the session download\n * store (downloads are async; the click that triggered them may have\n * just finished). Defaults to 15s — same as other assertions.\n */\n timeoutMs: z.number().int().min(0).default(VERIFY_DOWNLOAD_DEFAULT_TIMEOUT_MS),\n })\n .strict(),\n]);\n\nexport type UtilityCommand = z.infer<typeof utilityCommandSchema>;\n","import { z } from \"zod\";\n\nexport const PageUrlContextSchema = z.preprocess(\n normalizePageUrlContextInput,\n z\n .object({\n rawUrl: z.string(),\n origin: z.string().optional(),\n pathname: z.string().optional(),\n query: z.record(z.string(), z.string()).optional(),\n hash: z.string().optional(),\n capturedAt: z.number(),\n })\n .strict(),\n);\n\nexport type PageUrlContext = z.infer<typeof PageUrlContextSchema>;\n\nconst REDACTED = \"[REDACTED]\";\n\nconst SENSITIVE_QUERY_KEYS = [\n \"token\",\n \"code\",\n \"password\",\n \"secret\",\n \"auth\",\n \"session\",\n \"jwt\",\n \"key\",\n];\n\nfunction normalizePageUrlContextInput(value: unknown): unknown {\n if (typeof value !== \"object\" || value === null) {\n return value;\n }\n\n const normalized = { ...(value as Record<string, unknown>) };\n if (normalized.query === null) {\n delete normalized.query;\n }\n\n if (normalized.hash === null) {\n delete normalized.hash;\n }\n\n return normalized;\n}\n\nexport function isSensitiveUrlKey(key: string): boolean {\n const lower = key.toLowerCase();\n return SENSITIVE_QUERY_KEYS.some((sensitive) => lower.includes(sensitive));\n}\n\nfunction redactQueryValues(query: URLSearchParams): Record<string, string> {\n const result: Record<string, string> = {};\n for (const [key, value] of query.entries()) {\n result[key] = isSensitiveUrlKey(key) ? REDACTED : value;\n }\n return result;\n}\n\nfunction redactParamString(paramString: string): string {\n const params = new URLSearchParams(paramString);\n const redactedEntries: string[] = [];\n for (const [key, value] of params.entries()) {\n redactedEntries.push(`${key}=${isSensitiveUrlKey(key) ? REDACTED : value}`);\n }\n return redactedEntries.join(\"&\");\n}\n\nfunction redactHashParams(hash: string): string {\n if (!hash) {\n return hash;\n }\n\n const hashPrefix = hash.startsWith(\"#\") ? \"#\" : \"\";\n const hashBody = hashPrefix ? hash.slice(1) : hash;\n const hashIndex = hash.indexOf(\"?\");\n\n try {\n if (hashIndex >= 0) {\n const baseHash = hash.slice(0, hashIndex);\n const hashQueryString = hash.slice(hashIndex + 1);\n const redactedParams = redactParamString(hashQueryString);\n return redactedParams ? `${baseHash}?${redactedParams}` : baseHash;\n }\n\n if (!hashBody.includes(\"=\")) {\n return hash;\n }\n\n const redactedParams = redactParamString(hashBody);\n return redactedParams ? `${hashPrefix}${redactedParams}` : hash;\n } catch {\n return hash;\n }\n}\n\nexport function buildPageUrlContext(rawUrl: string, capturedAt?: number): PageUrlContext {\n const timestamp = capturedAt ?? Date.now();\n\n try {\n const url = new URL(rawUrl);\n const redactedQuery = redactQueryValues(url.searchParams);\n\n // Rebuild rawUrl with redacted query values\n const redactedSearch = Object.entries(redactedQuery)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)\n .join(\"&\");\n\n const redactedRawUrl =\n `${url.protocol}//${url.host}${url.pathname}` +\n (redactedSearch ? `?${redactedSearch}` : \"\") +\n (url.hash ? redactHashParams(url.hash) : \"\");\n\n return {\n rawUrl: redactedRawUrl,\n origin: url.origin,\n pathname: url.pathname,\n query: Object.keys(redactedQuery).length > 0 ? redactedQuery : undefined,\n hash: url.hash ? redactHashParams(url.hash) : undefined,\n capturedAt: timestamp,\n };\n } catch {\n return {\n rawUrl,\n capturedAt: timestamp,\n };\n }\n}\n","import { z } from \"zod\";\n\nexport const RcaPrimaryCategorySchema = z.enum([\n \"app-bug\",\n \"locator-drift\",\n \"timing\",\n \"data\",\n \"environment\",\n \"page-state-mismatch\",\n \"unknown\",\n \"other\",\n]);\n\nexport type RcaPrimaryCategory = z.infer<typeof RcaPrimaryCategorySchema>;\n\nexport const RcaEvidenceSourceSchema = z.enum([\"failure-time\", \"live-inspection\"]);\n\nexport type RcaEvidenceSource = z.infer<typeof RcaEvidenceSourceSchema>;\n\nexport const RcaEvidenceSchema = z\n .object({\n source: RcaEvidenceSourceSchema,\n kind: z.string().min(1),\n summary: z.string().min(1),\n value: z.unknown().optional(),\n })\n .strict();\n\nexport type RcaEvidence = z.infer<typeof RcaEvidenceSchema>;\n\nexport const RcaSuggestedActionSchema = z.enum([\"replay\", \"heal\", \"report-only\"]);\n\nexport type RcaSuggestedAction = z.infer<typeof RcaSuggestedActionSchema>;\n\nconst NullableOptionalSuggestedCategorySchema = z\n .preprocess((value) => (value === null ? undefined : value), z.string().min(1).optional())\n .optional();\n\nexport const RcaDiagnosisSchema = z\n .object({\n primaryCategory: RcaPrimaryCategorySchema,\n specificCause: z.string().min(1),\n causalChain: z.array(z.string().min(1)).min(1),\n evidence: z.array(RcaEvidenceSchema).min(1),\n ruledOut: z.array(RcaPrimaryCategorySchema).default([]),\n suggestedCategory: NullableOptionalSuggestedCategorySchema,\n suggestedAction: RcaSuggestedActionSchema,\n confidence: z.number().min(0).max(1),\n })\n .strict()\n .superRefine((value, ctx) => {\n if (value.primaryCategory === \"other\" && value.suggestedCategory === undefined) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"suggestedCategory is required when primaryCategory is other.\",\n path: [\"suggestedCategory\"],\n });\n }\n });\n\nexport type RcaDiagnosis = z.infer<typeof RcaDiagnosisSchema>;\n","import { z } from \"zod\";\n\nexport const ExpectedEffectKindSchema = z.enum([\n \"field-filled\",\n \"selection\",\n \"checked-state\",\n \"clicked\",\n \"visible\",\n \"navigation\",\n]);\nexport type ExpectedEffectKind = z.infer<typeof ExpectedEffectKindSchema>;\n\nexport const ExpectedEffectSchema = z.discriminatedUnion(\"kind\", [\n z.object({\n kind: z.literal(\"field-filled\"),\n value: z.string().optional(),\n description: z.string().min(1).optional(),\n }),\n z.object({\n kind: z.literal(\"selection\"),\n value: z.union([z.string(), z.array(z.string())]).optional(),\n description: z.string().min(1).optional(),\n }),\n z.object({\n kind: z.literal(\"checked-state\"),\n checked: z.boolean().optional(),\n description: z.string().min(1).optional(),\n }),\n z.object({\n kind: z.literal(\"clicked\"),\n description: z.string().min(1).optional(),\n }),\n z.object({\n kind: z.literal(\"visible\"),\n selector: z.string().min(1).optional(),\n description: z.string().min(1).optional(),\n }),\n z.object({\n kind: z.literal(\"navigation\"),\n urlContains: z.string().min(1).optional(),\n description: z.string().min(1).optional(),\n }),\n]);\nexport type ExpectedEffect = z.infer<typeof ExpectedEffectSchema>;\n\nexport const TargetFingerprintSchema = z.object({\n tagName: z.string().min(1).optional(),\n role: z.string().min(1).optional(),\n accessibleName: z.string().min(1).optional(),\n classNames: z.array(z.string().min(1)).optional(),\n testId: z.string().min(1).optional(),\n placeholder: z.string().min(1).optional(),\n labelText: z.string().min(1).optional(),\n});\nexport type TargetFingerprint = z.infer<typeof TargetFingerprintSchema>;\n\nexport const TargetCandidateSchema = z.object({\n targetRef: z.string().min(1),\n ancestorRef: z.string().min(1).optional(),\n fingerprint: TargetFingerprintSchema,\n confidence: z.number().min(0).max(1),\n rationale: z.string().min(1),\n});\nexport type TargetCandidate = z.infer<typeof TargetCandidateSchema>;\n\nexport const RepairActionSpecSchema = z.discriminatedUnion(\"action\", [\n z.object({\n action: z.literal(\"click\"),\n options: z\n .object({\n button: z.enum([\"left\", \"right\", \"middle\"]).optional(),\n clickCount: z.number().optional(),\n delay: z.number().optional(),\n position: z.object({ x: z.number(), y: z.number() }).optional(),\n modifiers: z.array(z.enum([\"Alt\", \"Control\", \"Meta\", \"Shift\", \"ControlOrMeta\"])).optional(),\n timeout: z.number().optional(),\n force: z.boolean().optional(),\n noWaitAfter: z.boolean().optional(),\n trial: z.boolean().optional(),\n })\n .optional(),\n }),\n z.object({\n action: z.literal(\"fill\"),\n value: z.string(),\n options: z\n .object({\n timeout: z.number().optional(),\n force: z.boolean().optional(),\n noWaitAfter: z.boolean().optional(),\n })\n .optional(),\n }),\n z.object({\n action: z.literal(\"selectOption\"),\n value: z.union([z.string(), z.array(z.string())]),\n options: z\n .object({\n timeout: z.number().optional(),\n force: z.boolean().optional(),\n noWaitAfter: z.boolean().optional(),\n })\n .optional(),\n }),\n z.object({\n action: z.literal(\"setChecked\"),\n checked: z.boolean(),\n options: z\n .object({\n timeout: z.number().optional(),\n force: z.boolean().optional(),\n noWaitAfter: z.boolean().optional(),\n })\n .optional(),\n }),\n z.object({\n action: z.literal(\"press\"),\n value: z.string(),\n options: z\n .object({\n delay: z.number().optional(),\n timeout: z.number().optional(),\n noWaitAfter: z.boolean().optional(),\n })\n .optional(),\n }),\n z.object({\n action: z.literal(\"hover\"),\n options: z\n .object({\n position: z.object({ x: z.number(), y: z.number() }).optional(),\n modifiers: z.array(z.enum([\"Alt\", \"Control\", \"Meta\", \"Shift\", \"ControlOrMeta\"])).optional(),\n timeout: z.number().optional(),\n force: z.boolean().optional(),\n noWaitAfter: z.boolean().optional(),\n })\n .optional(),\n }),\n]);\nexport type RepairActionSpec = z.infer<typeof RepairActionSpecSchema>;\n\nconst validActionEffectPairs: Record<string, ExpectedEffectKind[]> = {\n click: [\"clicked\", \"visible\", \"navigation\"],\n fill: [\"field-filled\"],\n selectOption: [\"selection\"],\n setChecked: [\"checked-state\"],\n press: [\"visible\", \"navigation\", \"clicked\"],\n hover: [\"clicked\", \"visible\", \"navigation\"],\n};\n\nexport function validateActionEffectPair(\n action: RepairActionSpec[\"action\"],\n effect: ExpectedEffectKind,\n): boolean {\n const allowed = validActionEffectPairs[action];\n if (!allowed) return false;\n return allowed.includes(effect);\n}\n\nexport const RepairActionWithEffectSchema = z\n .object({\n action: RepairActionSpecSchema,\n effect: ExpectedEffectSchema,\n })\n .refine((data) => validateActionEffectPair(data.action.action, data.effect.kind), {\n message: \"Action cannot produce the specified effect\",\n });\nexport type RepairActionWithEffect = z.infer<typeof RepairActionWithEffectSchema>;\n\nexport const RepairScopeSchema = z.enum([\"single-command\", \"whole-step\"]);\nexport type RepairScope = z.infer<typeof RepairScopeSchema>;\n\nexport const RepresentationSchema = z.enum([\"native\", \"custom\"]);\nexport type Representation = z.infer<typeof RepresentationSchema>;\n\nconst RepairProposalBaseSchema = z.object({\n actionSpec: RepairActionSpecSchema,\n effect: ExpectedEffectSchema,\n targetCandidate: TargetCandidateSchema,\n scope: RepairScopeSchema,\n representation: RepresentationSchema,\n customCommand: z.string().min(1).optional(),\n confidence: z.number().min(0).max(1),\n generatorFeedback: z.string().min(1).optional(),\n signature: z.string().min(1).optional(),\n});\n\nexport const RepairProposalSchema = RepairProposalBaseSchema.superRefine((proposal, ctx) => {\n if (proposal.representation === \"custom\" && !proposal.customCommand?.trim()) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"customCommand\"],\n message: \"customCommand is required when representation is custom\",\n });\n }\n});\nexport type RepairProposal = z.infer<typeof RepairProposalSchema>;\n\nexport const StructuredRepairProposalSchema = z.object({\n primary: RepairProposalSchema,\n fallback: RepairProposalSchema.optional(),\n sequence: z.array(RepairProposalSchema).min(1).max(20).optional(),\n proposalAttemptNumber: z.number().int().min(1).default(1),\n});\nexport type StructuredRepairProposal = z.infer<typeof StructuredRepairProposalSchema>;\n\nexport const SemanticVerifierReasonSchema = z.enum([\n \"matches-intent\",\n \"wrong-target\",\n \"wrong-action\",\n \"wrong-value\",\n \"wrong-scope\",\n \"ambiguous-candidate\",\n \"low-confidence\",\n \"insufficient-evidence\",\n \"side-effect-risk\",\n \"timing-only\",\n \"unsupported-action\",\n \"wrong-page\",\n]);\nexport type SemanticVerifierReason = z.infer<typeof SemanticVerifierReasonSchema>;\n\nexport const SemanticVerifierVerdictSchema = z.discriminatedUnion(\"verdict\", [\n z.object({\n verdict: z.literal(\"accept\"),\n confidence: z.number().min(0).max(1),\n reason: SemanticVerifierReasonSchema,\n }),\n z.object({\n verdict: z.literal(\"reject\"),\n confidence: z.number().min(0).max(1),\n reason: SemanticVerifierReasonSchema,\n generatorFeedback: z.string().min(1).optional(),\n blockedSignatures: z.array(z.string().min(1)).default([]),\n }),\n z.object({\n verdict: z.literal(\"change-scope\"),\n confidence: z.number().min(0).max(1),\n reason: SemanticVerifierReasonSchema,\n newScope: RepairScopeSchema,\n newRepresentation: RepresentationSchema.optional(),\n generatorFeedback: z.string().min(1).optional(),\n blockedSignatures: z.array(z.string().min(1)).default([]),\n }),\n]);\nexport type SemanticVerifierVerdict = z.infer<typeof SemanticVerifierVerdictSchema>;\n\nexport const ExecutionVerifierVerdictSchema = z.discriminatedUnion(\"verdict\", [\n z.object({\n verdict: z.literal(\"accept-repair\"),\n confidence: z.number().min(0).max(1),\n notes: z.string().min(1).optional(),\n }),\n z.object({\n verdict: z.literal(\"retry-native-command\"),\n confidence: z.number().min(0).max(1),\n notes: z.string().min(1).optional(),\n }),\n z.object({\n verdict: z.literal(\"repair-next-command\"),\n confidence: z.number().min(0).max(1),\n notes: z.string().min(1).optional(),\n }),\n z.object({\n verdict: z.literal(\"escalate-to-custom-command\"),\n confidence: z.number().min(0).max(1),\n notes: z.string().min(1).optional(),\n }),\n z.object({\n verdict: z.literal(\"escalate-to-native-step\"),\n confidence: z.number().min(0).max(1),\n notes: z.string().min(1).optional(),\n }),\n z.object({\n verdict: z.literal(\"escalate-to-custom-step\"),\n confidence: z.number().min(0).max(1),\n notes: z.string().min(1).optional(),\n }),\n z.object({\n verdict: z.literal(\"fail-to-human\"),\n confidence: z.number().min(0).max(1),\n reason: z.string().min(1),\n notes: z.string().min(1).optional(),\n }),\n]);\nexport type ExecutionVerifierVerdict = z.infer<typeof ExecutionVerifierVerdictSchema>;\n\nexport const RepairContextSchema = z.enum([\"recorder-replay\", \"local-run\", \"execution-planner\"]);\nexport type RepairContext = z.infer<typeof RepairContextSchema>;\n\nexport const SideEffectPolicySchema = z.object({\n allowDestructive: z.boolean().default(false),\n allowNonIdempotentRetry: z.boolean().default(false),\n requireOptInFor: z.array(z.string().min(1)).default([]),\n});\nexport type SideEffectPolicy = z.infer<typeof SideEffectPolicySchema>;\n\nexport const SingleCommandRepairPlanSchema = z.object({\n type: z.literal(\"single-command\"),\n commandIndex: z.number().int().min(0),\n replacementCommand: z.unknown(), // Will be refined to Command at runtime via CommandSchema\n preserveSuffix: z.boolean().default(true),\n});\nexport type SingleCommandRepairPlan = z.infer<typeof SingleCommandRepairPlanSchema>;\n\nexport const WholeStepRepairPlanSchema = z.object({\n type: z.literal(\"whole-step\"),\n replacementCommands: z.array(z.unknown()), // Will be refined to Command[] at runtime via CommandSchema\n preservedCommandIds: z.array(z.string().min(1)).default([]),\n});\nexport type WholeStepRepairPlan = z.infer<typeof WholeStepRepairPlanSchema>;\n\nexport const CommandUpdateRepairOperationSchema = z.object({\n type: z.literal(\"update\"),\n commandIndex: z.number().int().min(0),\n replacementCommand: z.unknown(), // Will be refined to Command at runtime via CommandSchema\n});\nexport type CommandUpdateRepairOperation = z.infer<typeof CommandUpdateRepairOperationSchema>;\n\nexport const CommandInsertRepairOperationSchema = z.object({\n type: z.literal(\"insert\"),\n insertIndex: z.number().int().min(0),\n command: z.unknown(), // Will be refined to Command at runtime via CommandSchema\n});\nexport type CommandInsertRepairOperation = z.infer<typeof CommandInsertRepairOperationSchema>;\n\nexport const CommandDeleteRepairOperationSchema = z.object({\n type: z.literal(\"delete\"),\n commandIndex: z.number().int().min(0),\n});\nexport type CommandDeleteRepairOperation = z.infer<typeof CommandDeleteRepairOperationSchema>;\n\nexport const CommandRepairOperationSchema = z.discriminatedUnion(\"type\", [\n CommandUpdateRepairOperationSchema,\n CommandInsertRepairOperationSchema,\n CommandDeleteRepairOperationSchema,\n]);\nexport type CommandRepairOperation = z.infer<typeof CommandRepairOperationSchema>;\n\nexport const CommandOperationsRepairPlanSchema = z.object({\n type: z.literal(\"command-operations\"),\n operations: z.array(CommandRepairOperationSchema).min(1).max(20),\n preserveSuffix: z.boolean().default(true),\n});\nexport type CommandOperationsRepairPlan = z.infer<typeof CommandOperationsRepairPlanSchema>;\n\nexport const StepRepairPlanSchema = z.discriminatedUnion(\"type\", [\n SingleCommandRepairPlanSchema,\n WholeStepRepairPlanSchema,\n CommandOperationsRepairPlanSchema,\n]);\nexport type StepRepairPlan = z.infer<typeof StepRepairPlanSchema>;\n\nexport const RepairSummarySchema = z.object({\n recoveryAttemptId: z.string().min(1),\n stepId: z.string().min(1),\n failedCommandIndex: z.number().int().min(0),\n scope: RepairScopeSchema,\n representation: RepresentationSchema,\n expectedEffect: ExpectedEffectSchema,\n semanticVerdict: SemanticVerifierVerdictSchema,\n executionVerdict: ExecutionVerifierVerdictSchema,\n commandRangeStart: z.number().int().min(0).optional(),\n commandRangeEnd: z.number().int().min(0).optional(),\n preservedCommandIds: z.array(z.string().min(1)).default([]),\n changedCommandIds: z.array(z.string().min(1)).default([]),\n environmentKey: z.string().min(1).optional(),\n proposalSignature: z.string().min(1).optional(),\n persistenceResult: z.enum([\"persisted\", \"rejected\", \"not-applicable\"]).default(\"not-applicable\"),\n fragilitySignal: z\n .object({\n projectId: z.string().min(1),\n environmentKey: z.string().min(1),\n fingerprint: z.string().min(1),\n signal: z.enum([\"high\", \"medium\", \"low\"]),\n reason: z.string().min(1),\n })\n .optional(),\n createdAt: z.string().datetime(),\n});\nexport type RepairSummary = z.infer<typeof RepairSummarySchema>;\n\nexport const RecoveryMetadataSchemaV2 = z.object({\n recoveryAttemptId: z.string().min(1),\n originalCommandId: z.string().min(1).max(255),\n stepId: z.string().min(1).max(255),\n originalErrorMessage: z.string().min(1).max(10_000),\n recoveryContext: RepairContextSchema.optional(),\n environmentKey: z.string().min(1).optional(),\n scope: RepairScopeSchema.optional(),\n representation: RepresentationSchema.optional(),\n expectedEffect: ExpectedEffectSchema.optional(),\n semanticVerdict: SemanticVerifierVerdictSchema.optional(),\n executionVerdict: ExecutionVerifierVerdictSchema.optional(),\n changedCommandIds: z.array(z.string().min(1)).default([]),\n preservedCommandIds: z.array(z.string().min(1)).default([]),\n proposalSignature: z.string().min(1).optional(),\n persistenceResult: z.enum([\"persisted\", \"rejected\", \"not-applicable\"]).default(\"not-applicable\"),\n fragilitySignal: z\n .object({\n projectId: z.string().min(1),\n environmentKey: z.string().min(1),\n fingerprint: z.string().min(1),\n signal: z.enum([\"high\", \"medium\", \"low\"]),\n reason: z.string().min(1),\n })\n .optional(),\n recoveredAt: z.string().datetime().optional(),\n healedLocatorPersistedAt: z.string().datetime().optional(),\n persistenceError: z.string().optional(),\n});\nexport type RecoveryMetadataV2 = z.infer<typeof RecoveryMetadataSchemaV2>;\n","import { z } from \"zod\";\n\nexport const RecoveryArtifactSchema = z.object({\n rootCauseAnalysis: z.string().min(1),\n aiLog: z.string().min(1),\n description: z.string().min(1),\n});\n\nexport type RecoveryArtifact = z.infer<typeof RecoveryArtifactSchema>;\n","import { z } from \"zod\";\nimport type { Command } from \"../command/command.schema\";\nimport {\n StepRepairPlanSchema,\n type StepRepairPlan,\n RepairContextSchema,\n type RepairContext,\n} from \"./step-repair.schema\";\nimport { RecoveryArtifactSchema } from \"./recovery-artifact\";\n\nexport const RecoveryAttemptIdSchema = z.string().uuid();\nexport type RecoveryAttemptId = z.infer<typeof RecoveryAttemptIdSchema>;\n\nexport const HealingPhaseSchema = z.enum([\n \"analyzing\",\n \"trying_fix\",\n \"checking_fix\",\n \"fixed\",\n \"failed\",\n]);\nexport type HealingPhase = z.infer<typeof HealingPhaseSchema>;\n\nexport const RecoveryEligibilityReasonSchema = z.enum([\n \"eligible\",\n \"ineligible_wrong_page\",\n \"ineligible_assertion_expectation\",\n \"ineligible_timing_only\",\n \"ineligible_ambiguous_candidate\",\n \"ineligible_side_effect\",\n \"ineligible_missing_target\",\n \"ineligible_step_level_rewrite\",\n \"ineligible_low_confidence\",\n \"ineligible_label_conflict_blocked\",\n \"ineligible_unsupported_command\",\n]);\nexport type RecoveryEligibilityReason = z.infer<typeof RecoveryEligibilityReasonSchema>;\n\nexport const RetryOutcomeSchema = z.enum([\"passed\", \"failed\"]);\nexport type RetryOutcome = z.infer<typeof RetryOutcomeSchema>;\n\nexport const StepDefinitionPatchSchema = z\n .object({\n stepDefinitionId: z.string().min(1).max(255),\n commands: z.array(z.unknown()),\n changedCommandIds: z.array(z.string().min(1)).default([]),\n preservedCommandIds: z.array(z.string().min(1)).default([]),\n persistedAt: z.string().datetime(),\n })\n .strict();\nexport type StepDefinitionPatch = Omit<z.infer<typeof StepDefinitionPatchSchema>, \"commands\"> & {\n commands: Command[];\n};\n\nexport const TargetElementSnapshotSchema = z\n .object({\n accessibleName: z.string().min(1).max(255).nullable(),\n role: z.string().min(1).max(64).nullable(),\n text: z.string().min(1).max(1000).nullable(),\n labelText: z.string().min(1).max(255).nullable(),\n })\n .strict();\nexport type TargetElementSnapshot = z.infer<typeof TargetElementSnapshotSchema>;\n\nexport const RecoveryMetadataSchema = z\n .object({\n recoveryAttemptId: RecoveryAttemptIdSchema,\n originalCommandId: z.string().min(1).max(255),\n stepId: z.string().min(1).max(255),\n originalErrorMessage: z.string().min(1).max(10_000),\n originalErrorStack: z.string().max(100_000).optional(),\n rcaLabel: z.string().optional(),\n rcaConfidence: z.number().min(0).max(1).optional(),\n rootCauseAnalysis: z.string().max(5_000).optional(),\n evidenceSignalNames: z.array(z.string().min(1)).default([]),\n labelEvidenceConflict: z.boolean().optional(),\n healedSelector: z.string().optional(),\n commandPatchSummary: z.string().optional(),\n retryOutcome: RetryOutcomeSchema,\n recoveredAt: z.string().datetime().optional(),\n healedLocatorPersistedAt: z.string().datetime().optional(),\n persistenceError: z.string().optional(),\n stepDefinitionPatch: StepDefinitionPatchSchema.optional(),\n targetElementSnapshot: TargetElementSnapshotSchema.optional(),\n actionVerb: z.string().min(1).max(64).optional(),\n })\n .strict();\n\nexport type RecoveryMetadata = Omit<\n z.infer<typeof RecoveryMetadataSchema>,\n \"stepDefinitionPatch\"\n> & {\n stepDefinitionPatch?: StepDefinitionPatch;\n};\n\nexport const RecoveryStatusEventSchema = z\n .object({\n type: z.literal(\"recovery_status\"),\n recoveryAttemptId: RecoveryAttemptIdSchema,\n stepId: z.string().min(1).max(255),\n commandId: z.string().min(1).max(255),\n phase: HealingPhaseSchema,\n message: z.string().min(1).max(2000),\n timestamp: z.string().datetime(),\n artifact: RecoveryArtifactSchema.nullable().optional(),\n })\n .strict();\n\nexport type RecoveryStatusEvent = z.infer<typeof RecoveryStatusEventSchema>;\n\nexport const RecoveryDecisionSchema = z.discriminatedUnion(\"kind\", [\n z\n .object({\n kind: z.literal(\"ineligible\"),\n eligible: z.literal(false),\n reason: RecoveryEligibilityReasonSchema,\n recoveryAttemptId: RecoveryAttemptIdSchema,\n rcaLabel: z.string().optional(),\n rcaConfidence: z.number().min(0).max(1).optional(),\n evidenceSignalNames: z.array(z.string().min(1)).default([]),\n labelEvidenceConflict: z.boolean().optional(),\n userFacingMessages: z\n .object({\n analyzing: z.string().min(1),\n trying_fix: z.string().min(1),\n checking_fix: z.string().min(1),\n fixed: z.string().min(1),\n failed: z.string().min(1),\n })\n .strict(),\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"step-repair\"),\n eligible: z.literal(true),\n reason: RecoveryEligibilityReasonSchema,\n recoveryAttemptId: RecoveryAttemptIdSchema,\n stepRepairPlan: StepRepairPlanSchema,\n repairContext: RepairContextSchema,\n rcaLabel: z.string().optional(),\n rcaConfidence: z.number().min(0).max(1).optional(),\n evidenceSignalNames: z.array(z.string().min(1)).default([]),\n labelEvidenceConflict: z.boolean().optional(),\n targetElementSnapshot: TargetElementSnapshotSchema.optional(),\n actionVerb: z.string().min(1).max(64).optional(),\n userFacingMessages: z\n .object({\n analyzing: z.string().min(1),\n trying_fix: z.string().min(1),\n checking_fix: z.string().min(1),\n fixed: z.string().min(1),\n failed: z.string().min(1),\n })\n .strict(),\n })\n .strict(),\n]);\n\nexport type RecoveryDecision = z.infer<typeof RecoveryDecisionSchema>;\nexport type IneligibleDecision = Extract<RecoveryDecision, { kind: \"ineligible\" }>;\nexport type StepRepairDecision = Extract<RecoveryDecision, { kind: \"step-repair\" }>;\n","import { z } from \"zod\";\nimport { PageUrlContextSchema } from \"../command/page-url-context.schema\";\nimport { RcaDiagnosisSchema } from \"../rca/diagnosis.schema\";\nimport { RecoveryDecisionSchema } from \"../recovery/recovery.schema\";\nimport { StrategySchema, UniqueSelectorSchema } from \"./selector.schema\";\n\nexport const LocatorCandidateSourceSchema = z.enum([\n \"role\",\n \"accessibleName\",\n \"testId\",\n \"visibleText\",\n \"stableAttribute\",\n \"ancestorScoped\",\n \"xpath\",\n]);\n\nexport const ReplayLocatorCandidateSchema = z\n .object({\n kind: z.literal(\"pw.selectorString\").or(z.literal(\"bvt.selectorObject\")),\n value: UniqueSelectorSchema,\n score: z.number().min(0).max(1),\n source: LocatorCandidateSourceSchema,\n })\n .strict();\n\nexport type ReplayLocatorCandidate = z.infer<typeof ReplayLocatorCandidateSchema>;\n\nexport const BoundingBoxSchema = z\n .object({\n x: z.number(),\n y: z.number(),\n width: z.number(),\n height: z.number(),\n })\n .strict();\n\nexport type BoundingBox = z.infer<typeof BoundingBoxSchema>;\n\nexport const ElementFingerprintSchema = z\n .object({\n role: z.string().nullable(),\n accessibleName: z.string().nullable(),\n text: z.string().nullable(),\n tagName: z.string(),\n id: z.string().nullable(),\n testId: z.string().nullable(),\n attributes: z.record(z.string(), z.string()).nullable(),\n ancestorPath: z.array(z.string()),\n landmarkPath: z.array(z.string()),\n bbox: BoundingBoxSchema.nullable(),\n textSignature: z.string().nullable(),\n })\n .strict();\n\nexport type ElementFingerprint = z.infer<typeof ElementFingerprintSchema>;\n\nexport const ScreenshotRefSchema = z\n .object({\n s3Key: z.string(),\n timestamp: z.number(),\n })\n .strict();\n\nexport type ScreenshotRef = z.infer<typeof ScreenshotRefSchema>;\n\nexport const DomSnapshotRefSchema = z\n .object({\n s3Key: z.string(),\n timestamp: z.number(),\n elementCount: z.number().optional(),\n })\n .strict();\n\nexport type DomSnapshotRef = z.infer<typeof DomSnapshotRefSchema>;\n\nexport const StepContextSchema = z\n .object({\n stepId: z.string(),\n candidates: z.array(ReplayLocatorCandidateSchema),\n fingerprint: ElementFingerprintSchema,\n screenshotRef: ScreenshotRefSchema.nullable(),\n domSnapshotRef: DomSnapshotRefSchema.nullable(),\n recordedAt: z.number(),\n })\n .strict();\n\nexport type StepContext = z.infer<typeof StepContextSchema>;\n\nexport const RrwebMaskProfileSchema = z\n .object({\n maskAllInputs: z.boolean().default(true),\n maskTextClass: z.array(z.string()).default([]),\n blockClass: z.array(z.string()).default([]),\n })\n .strict();\n\nexport type RrwebMaskProfile = z.infer<typeof RrwebMaskProfileSchema>;\n\nexport const RrwebCaptureRefSchema = z\n .object({\n recordingId: z.string(),\n eventsS3Key: z.string(),\n maskProfile: RrwebMaskProfileSchema,\n startedAt: z.number(),\n endedAt: z.number().optional(),\n })\n .strict();\n\nexport type RrwebCaptureRef = z.infer<typeof RrwebCaptureRefSchema>;\n\nexport const CommandAnchorSchema = z\n .object({\n commandId: z.string(),\n rrwebTimestamp: z.number(),\n stepId: z.string(),\n action: z.string().optional(),\n })\n .strict();\n\nexport type CommandAnchor = z.infer<typeof CommandAnchorSchema>;\n\nexport const ReplayContextSchema = StepContextSchema.extend({\n rrwebCapture: RrwebCaptureRefSchema.optional(),\n commandAnchors: z.array(CommandAnchorSchema).default([]),\n}).strict();\n\nexport type ReplayContext = z.infer<typeof ReplayContextSchema>;\n\nexport const FailureLabelSchema = z.enum([\n \"app-bug\",\n \"locator-drift\",\n \"timing\",\n \"data\",\n \"environment\",\n \"page-state-mismatch\",\n \"unknown\",\n \"other\",\n]);\n\nexport const FailureEvidenceSchema = z\n .object({\n type: z.enum([\"screenshot\", \"dom-diff\", \"trace-excerpt\", \"error-message\", \"candidate-list\"]),\n content: z.string(),\n timestamp: z.number().optional(),\n })\n .strict();\n\nexport type FailureEvidence = z.infer<typeof FailureEvidenceSchema>;\n\nexport const FailureClassificationSchema = z\n .object({\n label: FailureLabelSchema,\n confidence: z.number().min(0).max(1),\n evidence: z.array(FailureEvidenceSchema),\n suggestedAction: z.enum([\"replay\", \"heal\", \"report-only\"]).optional(),\n })\n .strict();\n\nexport type FailureClassification = z.infer<typeof FailureClassificationSchema>;\n\nexport const HealProposalKindSchema = z.enum([\"auto\", \"pr\"]);\n\nexport const HealProposalBlastRadiusSchema = z.enum([\"low\", \"medium\", \"high\"]);\n\nexport const HealProposalPatchSchema = z\n .object({\n stepId: z.string(),\n candidates: z.array(ReplayLocatorCandidateSchema),\n fingerprint: ElementFingerprintSchema.optional(),\n })\n .strict();\n\nexport type HealProposalPatch = z.infer<typeof HealProposalPatchSchema>;\n\nexport const HealProposalSchema = z\n .object({\n id: z.string(),\n executionId: z.string(),\n stepId: z.string(),\n kind: HealProposalKindSchema,\n patch: HealProposalPatchSchema,\n rationale: z.string(),\n blastRadius: HealProposalBlastRadiusSchema,\n similarityScore: z.number().min(0).max(1).nullable(),\n createdAt: z.number(),\n status: z.enum([\"pending\", \"approved\", \"rejected\", \"applied\"]),\n appliedAt: z.number().optional(),\n })\n .strict();\n\nexport type HealProposal = z.infer<typeof HealProposalSchema>;\n\nexport const FailureRecordSchema = z\n .object({\n executionId: z.string(),\n stepId: z.string(),\n attemptedCandidates: z.array(z.string()),\n failedLocator: z.string(),\n classification: FailureClassificationSchema.optional(),\n healProposal: HealProposalSchema.optional(),\n occurredAt: z.number(),\n resolvedAt: z.number().optional(),\n })\n .strict();\n\nexport type FailureRecord = z.infer<typeof FailureRecordSchema>;\n\nexport const FailedCommandUrlContextSchema = z\n .object({\n recordedPageUrlContext: PageUrlContextSchema,\n expectedPageUrlContext: PageUrlContextSchema.optional(),\n })\n .strict();\n\nexport type FailedCommandUrlContext = z.infer<typeof FailedCommandUrlContextSchema>;\n\nexport const FailureContextSchema = z\n .object({\n executionId: z.string(),\n stepId: z.string(),\n stepIntent: z.string(),\n attemptedLocators: z.array(z.string()),\n fingerprint: ElementFingerprintSchema.nullable(),\n errorMessage: z.string(),\n commandUrlContext: FailedCommandUrlContextSchema.optional(),\n })\n .strict();\n\nexport type FailureContext = z.infer<typeof FailureContextSchema>;\n\nexport const StepReplayTelemetrySchema = z\n .object({\n winningCandidateIndex: z.number().int().min(0).nullable(),\n fingerprint: ElementFingerprintSchema,\n attemptedCandidates: z.array(ReplayLocatorCandidateSchema),\n failureContext: FailureContextSchema.optional(),\n })\n .strict()\n .superRefine((value, ctx) => {\n const hasFailureContext = value.failureContext !== undefined;\n\n if (value.winningCandidateIndex === null && !hasFailureContext) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"failureContext is required when winningCandidateIndex is null.\",\n path: [\"failureContext\"],\n });\n }\n\n if (value.winningCandidateIndex !== null && hasFailureContext) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"failureContext must be omitted when winningCandidateIndex is present.\",\n path: [\"failureContext\"],\n });\n }\n });\n\nexport type StepReplayTelemetry = z.infer<typeof StepReplayTelemetrySchema>;\n\nexport const ReplayOrchestratorResultSchema = z\n .object({\n classification: FailureClassificationSchema,\n diagnosis: RcaDiagnosisSchema.optional(),\n healProposal: HealProposalSchema.nullable(),\n healedLocator: z.string().nullable(),\n recoveryDecision: RecoveryDecisionSchema.optional(),\n })\n .strict();\n\nexport type ReplayOrchestratorResult = z.infer<typeof ReplayOrchestratorResultSchema>;\n","import { z } from \"zod\";\nimport { EntityIdSchema, StringOrRegex } from \"../base.schema\";\nimport { elementActionSchema, elementAssertionSchema, elementExtractSchema } from \"./element\";\nimport { UniqueSelectorSchema } from \"../selector/selector.schema\";\nimport { pageActionSchema, pageAssertionSchema, pageExtractSchema } from \"./page/\";\nimport { TestDataTypeSchema } from \"../test-data/test-data.schema\";\nimport { utilityCommandSchema } from \"./utility\";\nimport { apiResponseAssertionCommandData, apiRequestSchema } from \"../api/api.schema\";\nimport { PageUrlContextSchema } from \"./page-url-context.schema\";\nimport {\n ReplayLocatorCandidateSchema,\n ElementFingerprintSchema,\n} from \"../selector/replay-context.schema\";\n\nconst SerializableElementDetailValueSchema = z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n]);\n\nconst LegacyElementTargetDetailsSchema = z.record(z.string(), z.string());\n\nconst RichElementTargetDetailsSchema = z\n .object({\n attributes: z.record(z.string(), z.string()),\n properties: z.record(z.string(), SerializableElementDetailValueSchema),\n dataSet: z.record(z.string(), z.string()),\n role: z.string().nullable().optional(),\n accessibleName: z.string().nullable().optional(),\n })\n .passthrough();\n\nconst elementTargetSchema = z.object({\n name: z.string(),\n uniqueSelectors: z.array(UniqueSelectorSchema),\n frames: z\n .array(\n z.object({\n name: z.string(),\n uniqueSelectors: z.array(UniqueSelectorSchema),\n chosenSelectorIndex: z.number().default(0).optional(), //\n }),\n )\n .optional(),\n details: z.union([LegacyElementTargetDetailsSchema, RichElementTargetDetailsSchema]).optional(),\n // parameterName: z.string().optional(), // the name of the parameter if this element is being targeted based on a parameter\n // parameterValue: z.string().optional(), // the value of the parameter if this element is being targeted based on a parameter\n parameter: z\n .object({\n name: z.string(),\n value: z.string(),\n enabled: z.boolean().default(true),\n })\n .optional(),\n chosenSelectorIndex: z.number().default(0).optional(),\n // Ranked-candidate replay support: optional candidates + fingerprint for ranked retry\n candidates: z.array(ReplayLocatorCandidateSchema).optional(),\n fingerprint: ElementFingerprintSchema.optional(),\n});\nexport type ElementTarget = z.infer<typeof elementTargetSchema>;\n\nconst SerializableEditorMetadataValueSchema = z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n]);\n\nexport const ElementAssertionEditorMetadataSchema = z\n .object({\n elementBvtId: z.string(),\n elementName: z.string(),\n availableProperties: z.record(z.string(), SerializableEditorMetadataValueSchema),\n })\n .strict();\nexport type ElementAssertionEditorMetadata = z.infer<typeof ElementAssertionEditorMetadataSchema>;\n\nexport const ExtractStorageDetailsSchema = z.object({\n dataKey: z.string(),\n dataType: TestDataTypeSchema,\n});\n\nexport type ExtractStorageDetails = z.infer<typeof ExtractStorageDetailsSchema>;\n\nexport const PageTargetSchema = z.object({\n frames: z\n .array(\n z.object({\n name: z.string(),\n uniqueSelectors: z.array(UniqueSelectorSchema),\n chosenSelectorIndex: z.number().default(0).optional(), //\n }),\n )\n .optional(),\n});\nexport type PageTarget = z.infer<typeof PageTargetSchema>;\n\nexport const CommandSideEffectPolicySchema = z\n .object({\n isDestructive: z.boolean().default(false),\n isIdempotent: z.boolean().default(false),\n requiresOptIn: z.boolean().default(false),\n })\n .strict();\n\nexport type CommandSideEffectPolicy = z.infer<typeof CommandSideEffectPolicySchema>;\n\nexport const CommandConfigSchema = z\n .object({\n continueOnFailure: z.boolean().default(false),\n preCommandDelay: z.number().default(1000), // delay in milliseconds before executing the command\n postCommandDelay: z.number().default(0), // delay in milliseconds after executing the command\n sideEffectPolicy: CommandSideEffectPolicySchema.optional(),\n })\n .strict()\n .default({\n continueOnFailure: false,\n preCommandDelay: 1000,\n postCommandDelay: 0,\n });\n\nexport const CommandSchema = z.discriminatedUnion(\"type\", [\n z\n .object({\n _id: EntityIdSchema,\n type: z.literal(\"page.action\"),\n data: pageActionSchema,\n target: PageTargetSchema.nullish(),\n recordedPageUrlContext: PageUrlContextSchema.optional(),\n expectedPageUrlContext: PageUrlContextSchema.optional(),\n config: CommandConfigSchema.optional(),\n })\n .strict(),\n z\n .object({\n _id: EntityIdSchema,\n type: z.literal(\"page.assertion\"),\n data: pageAssertionSchema,\n target: PageTargetSchema.nullish(),\n isNegativeAssertion: z.boolean().default(false),\n recordedPageUrlContext: PageUrlContextSchema.optional(),\n config: CommandConfigSchema.optional(),\n })\n .strict(),\n z\n .object({\n _id: EntityIdSchema,\n type: z.literal(\"page.extract\"),\n data: pageExtractSchema,\n target: PageTargetSchema.nullish(),\n ...ExtractStorageDetailsSchema.shape,\n recordedPageUrlContext: PageUrlContextSchema.optional(),\n config: CommandConfigSchema.optional(),\n })\n .strict(),\n z\n .object({\n _id: EntityIdSchema,\n type: z.literal(\"element.action\"),\n data: elementActionSchema,\n target: elementTargetSchema,\n recordedPageUrlContext: PageUrlContextSchema.optional(),\n config: CommandConfigSchema.optional(),\n })\n .strict(),\n z\n .object({\n _id: EntityIdSchema,\n type: z.literal(\"element.assertion\"),\n data: elementAssertionSchema,\n target: elementTargetSchema,\n isNegativeAssertion: z.boolean().default(false),\n editorMetadata: ElementAssertionEditorMetadataSchema.optional(),\n recordedPageUrlContext: PageUrlContextSchema.optional(),\n config: CommandConfigSchema.optional(),\n })\n .strict(),\n z\n .object({\n _id: EntityIdSchema,\n type: z.literal(\"element.extract\"),\n data: elementExtractSchema,\n target: elementTargetSchema,\n ...ExtractStorageDetailsSchema.shape,\n recordedPageUrlContext: PageUrlContextSchema.optional(),\n config: CommandConfigSchema.optional(),\n })\n .strict(),\n z\n .object({\n _id: EntityIdSchema,\n type: z.literal(\"utility\"),\n data: utilityCommandSchema,\n config: CommandConfigSchema.optional(),\n })\n .strict(),\n z\n .object({\n _id: EntityIdSchema,\n type: z.literal(\"custom\"),\n code: z.string(),\n data: z.unknown().optional(),\n config: CommandConfigSchema.optional(),\n })\n .strict(),\n z\n .object({\n _id: EntityIdSchema,\n type: z.literal(\"api.action\"),\n data: apiRequestSchema,\n config: CommandConfigSchema.optional(),\n })\n .strict(),\n z\n .object({\n _id: EntityIdSchema,\n type: z.literal(\"api.assertion\"),\n data: apiResponseAssertionCommandData,\n config: CommandConfigSchema.optional(),\n })\n .strict(),\n]);\n\nexport type Command = z.infer<typeof CommandSchema>;\n\nexport type ElementCommand = Extract<\n Command,\n { type: \"element.action\" | \"element.assertion\" | \"element.extract\" }\n>;\nexport type PageCommand = Extract<\n Command,\n { type: \"page.action\" | \"page.assertion\" | \"page.extract\" }\n>;\nexport type UtilityCommand = Extract<Command, { type: \"utility\" }>;\nexport * from \"./element\";\nexport type * from \"./element\";\nexport * from \"./page\";\nexport type * from \"./page\";\nexport * from \"./utility\";\nexport type * from \"./utility\";\nexport * from \"./page-url-context.schema\";\nexport type * from \"./page-url-context.schema\";\n\nfunction getElementName(command: ElementCommand): string {\n // For backward compatibility, we check both the old and new structure for element name\n return command.target?.name ?? \"\";\n}\n\nfunction valueToString(value: StringOrRegex): string {\n if (value.type === \"string\") {\n return value.value;\n } else if (value.type === \"regex\") {\n return `/${value.source}/${value.flags}`;\n }\n throw new Error(\"Invalid StringOrRegex value\");\n}\n\nexport const getDisplayNameForCommand = (command: Command): string => {\n switch (command.type) {\n case \"element.action\": {\n switch (command.data.type) {\n case \"click\":\n return `Click on ${getElementName(command)}`;\n case \"fill\":\n return `Fill ${command.data.value} into ${getElementName(command)}`;\n case \"selectOption\":\n return `Select option ${command.data.value} in ${getElementName(command)}`;\n case \"setChecked\":\n if (command.data.checked) {\n return `Check ${getElementName(command)}`;\n } else {\n return `Uncheck ${getElementName(command)}`;\n }\n case \"hover\":\n return `Hover over ${getElementName(command)}`;\n case \"press\":\n return `Press ${command.data.value} on ${getElementName(command)}`;\n case \"setInputFiles\":\n return `Set input files ${command.data.files.join(\", \")} on ${getElementName(command)}`;\n default:\n const _exhaustiveCheck: never = command.data;\n // @ts-expect-error - in case new command types are added and we forget to update this function, we want to get a compile error\n return `${command.data.type} on ${getElementName(command)}`;\n }\n }\n case \"element.assertion\": {\n switch (command.data.type) {\n case \"toBeChecked\":\n case \"toBeUnchecked\":\n case \"toBeDisabled\":\n case \"toBeEditable\":\n case \"toBeEnabled\":\n case \"toBeHidden\":\n case \"toBeVisible\":\n case \"toExist\":\n return `Assert ${getElementName(command)} to be ${command.data.type.replace(\"toBe\", \"\").toLocaleLowerCase()}`;\n case \"toHaveText\":\n return `Assert ${getElementName(command)} to have text ${valueToString(command.data.value)}`;\n case \"toHaveValue\":\n return `Assert ${getElementName(command)} to have value ${valueToString(command.data.value)}`;\n case \"toHaveAttribute\":\n if (command.data.value) {\n return `Assert ${getElementName(command)} to have attribute ${command.data.name} with value ${valueToString(command.data.value)}`;\n } else {\n return `Assert ${getElementName(command)} to have attribute ${command.data.name}`;\n }\n case \"toHaveProperty\":\n if (command.data.value) {\n // @ts-ignore\n return `Assert ${getElementName(command)} to have property ${command.data.name} with value ${valueToString(command.data.value)}`;\n } else {\n return `Assert ${getElementName(command)} to have property ${command.data.name}`;\n }\n case \"toHaveClass\":\n return `Assert ${getElementName(command)} to have class ${valueToString(command.data.value)}`;\n case \"toHaveCount\":\n return `Assert ${getElementName(command)} to have count ${command.data.count}`;\n case \"toHaveId\":\n return `Assert ${getElementName(command)} to have id ${valueToString(command.data.value)}`;\n default:\n const _exhaustiveCheck: never = command.data;\n // @ts-expect-error - in case new assertion types are added and we forget to update this function, we want to get a compile error\n return `Assert ${getElementName(command)} with ${command.data.type}`;\n }\n }\n case \"page.action\":\n switch (command.data.type) {\n case \"navigate\":\n return `Navigate to ${command.data.url}`;\n case \"reload\":\n return `Reload page`;\n case \"goBack\":\n return `Go back`;\n case \"goForward\":\n return `Go forward`;\n case \"close\":\n return `Close page`;\n default:\n const _exhaustiveCheck: never = command.data;\n // @ts-expect-error - in case new command types are added and we forget to update this function, we want to get a compile error\n return `${command.data.type} page`;\n }\n case \"page.assertion\": {\n switch (command.data.type) {\n case \"toHaveURL\": {\n return `Assert page to have URL ${valueToString(command.data.value)}`;\n }\n case \"toHaveTitle\": {\n return `Assert page to have title ${valueToString(command.data.value)}`;\n }\n case \"toContainText\": {\n return `Assert page to have text ${valueToString(command.data.value)}`;\n }\n default: {\n const _exhaustiveCheck: never = command.data;\n // @ts-expect-error - in case new assertion types are added and we forget to update this function, we want to get a compile error\n return `Assert page with ${command.data.type}`;\n }\n }\n }\n case \"page.extract\":\n switch (command.data.type) {\n case \"url\":\n return `Extract page URL into ${command.dataKey}`;\n case \"title\":\n return `Extract page title into ${command.dataKey}`;\n default:\n const _exhaustiveCheck: never = command.data;\n // @ts-expect-error - in case new command types are added and we forget to update this function, we want to get a compile error\n return `Extract page ${command.data.type} into ${command.data.dataKey}`;\n }\n\n case \"element.extract\": {\n switch (command.data.type) {\n case \"text\":\n return `Extract text from ${getElementName(command)} into ${command.dataKey}`;\n case \"attribute\":\n return `Extract attribute ${command.data.name} from ${getElementName(command)} into ${command.dataKey}`;\n case \"property\":\n return `Extract property ${command.data.name} from ${getElementName(command)} into ${command.dataKey}`;\n default:\n const _exhaustiveCheck: never = command.data;\n // @ts-expect-error - in case new command types are added and we forget to update this function, we want to get a compile error\n return `Extract ${command.data.type} from ${getElementName(command)} into ${command.dataKey}`;\n }\n }\n case \"utility\": {\n switch (command.data.type) {\n case \"sleep\": {\n return `Sleep for ${command.data.durationMs}ms`;\n }\n case \"saveSessionState\": {\n return `Save session state into ${command.data.key}`;\n }\n case \"restoreSessionState\": {\n return `Restore session state from ${command.data.key}`;\n }\n case \"verifyDownload\": {\n return `Execute custom code: ${valueToString(command.data.fileName)}`;\n }\n default: {\n const _exhaustiveCheck: never = command.data;\n // @ts-expect-error - in case new utility command types are added and we forget to update this function, we want to get a compile error\n return `Utility command: ${command.data.type}`;\n }\n }\n }\n case \"custom\":\n return \"Custom Command\";\n case \"api.action\":\n return `API Request: ${command.data.method} ${command.data.url}`;\n case \"api.assertion\":\n return `API Assertion: ${command.data.expected} ${command.data.operator} ${command.data.target}`;\n default:\n const _exhaustiveCheck: never = command;\n // @ts-expect-error - in case new command types are added and we forget to update this function, we want to get a compile error\n return `${command.type}`;\n }\n};\n\nconst getLocatorCodestringForCommand = (command: ElementCommand): string | null => {\n if (!command.target) {\n return null;\n }\n\n const selector = command.target.uniqueSelectors[command.target.chosenSelectorIndex ?? 0];\n if (!selector) {\n return null;\n }\n\n return `activePage.locator(${JSON.stringify(selector)})`;\n};\n\nconst getOptionsCodestringForCommand = (options: any): string => {\n if (!options || Object.keys(options).length === 0) {\n return \"\";\n }\n return JSON.stringify(options);\n};\n\nexport const commandToCodeString = (command: Command): string => {\n let result = \"\";\n\n if (command.config?.preCommandDelay) {\n result += `await new Promise((resolve) => setTimeout(resolve, ${command.config.preCommandDelay}));\\n`;\n }\n switch (command.type) {\n case \"element.action\": {\n const optionsCodeString = getOptionsCodestringForCommand(command.data.options);\n const locatorCodeString = getLocatorCodestringForCommand(command);\n if (!locatorCodeString) {\n result += `// Unable to generate code for command ${command._id} due to missing locator\\n`;\n break;\n }\n switch (command.data.type) {\n case \"click\":\n case \"hover\":\n result += `await ${locatorCodeString}.${command.data.type}(${optionsCodeString});`;\n break;\n case \"fill\":\n case \"press\":\n case \"selectOption\":\n result += `await ${locatorCodeString}.${command.data.type}(${JSON.stringify(\n command.data.value,\n )}, ${optionsCodeString});`;\n break;\n case \"setChecked\":\n result += `await ${locatorCodeString}.${command.data.type}(${JSON.stringify(\n command.data.checked,\n )}, ${optionsCodeString});`;\n break;\n case \"setInputFiles\":\n result += `await ${locatorCodeString}.${command.data.type}(${JSON.stringify(\n command.data.files,\n )}, ${optionsCodeString});`;\n break;\n default:\n const _exhaustiveCheck: never = command.data;\n // @ts-expect-error - in case new command types are added and we forget to update this function, we want to get a compile error\n result += `// Unsupported element action type: ${command.data.type}`;\n break;\n }\n break;\n }\n case \"element.assertion\": {\n const optionsCodeString = getOptionsCodestringForCommand(command.data.options);\n const locatorCodeString = getLocatorCodestringForCommand(command);\n if (!locatorCodeString) {\n result += `// Unable to generate code for command ${command._id} due to missing locator\\n`;\n break;\n }\n switch (command.data.type) {\n case \"toBeChecked\":\n case \"toBeUnchecked\":\n case \"toBeDisabled\":\n case \"toBeEditable\":\n case \"toBeEnabled\":\n case \"toBeHidden\":\n case \"toBeVisible\":\n case \"toExist\":\n result += `await expect(${locatorCodeString}).${command.data.type}(${optionsCodeString});`;\n break;\n case \"toHaveText\":\n case \"toHaveValue\":\n case \"toHaveClass\":\n case \"toHaveId\":\n result += `await expect(${locatorCodeString}).${command.data.type}(${JSON.stringify(\n command.data.value,\n )}, ${optionsCodeString});`;\n break;\n case \"toHaveAttribute\":\n case \"toHaveProperty\":\n if (command.data.value) {\n result += `await expect(${locatorCodeString}).${command.data.type}(${JSON.stringify(\n command.data.name,\n )}, ${JSON.stringify(command.data.value)}, ${optionsCodeString});`;\n } else {\n result += `await expect(${locatorCodeString}).${command.data.type}(${JSON.stringify(\n command.data.name,\n )}, ${optionsCodeString});`;\n }\n break;\n case \"toHaveCount\":\n result += `await expect(${locatorCodeString}).${command.data.type}(${command.data.count}, ${optionsCodeString});`;\n break;\n default:\n const _exhaustiveCheck: never = command.data;\n // @ts-expect-error - in case new assertion types are added and we forget to update this function, we want to get a compile error\n result += `// Unsupported element assertion type: ${command.data.type}`;\n }\n break;\n }\n case \"element.extract\": {\n const locatorCodeString = getLocatorCodestringForCommand(command);\n if (!locatorCodeString) {\n result += `// Unable to generate code for command ${command._id} due to missing locator\\n`;\n break;\n }\n switch (command.data.type) {\n case \"text\":\n result += `const ${command.dataKey} = await ${locatorCodeString}.innerText();`;\n break;\n case \"attribute\":\n result += `const ${command.dataKey} = await ${locatorCodeString}.getAttribute(${JSON.stringify(command.data.name)});`;\n break;\n case \"property\":\n result += `const ${command.dataKey} = await ${locatorCodeString}.evaluate((el) => el[${JSON.stringify(command.data.name)}]);`;\n break;\n default:\n const _exhaustiveCheck: never = command.data;\n // @ts-expect-error - in case new extract types are added and we forget to update this function, we want to get a compile error\n result += `// Unsupported element extract type: ${command.data.type}`;\n }\n break;\n }\n case \"page.action\": {\n const optionsCodeString = getOptionsCodestringForCommand(command.data.options);\n switch (command.data.type) {\n case \"navigate\":\n result += `await activePage.goto(${JSON.stringify(command.data.url)}, ${optionsCodeString});`;\n break;\n case \"reload\":\n result += `await activePage.reload(${optionsCodeString});`;\n break;\n case \"goBack\":\n result += `await activePage.goBack(${optionsCodeString});`;\n break;\n case \"goForward\":\n result += `await activePage.goForward(${optionsCodeString});`;\n break;\n case \"close\":\n result += `await activePage.close();`;\n break;\n default:\n const _exhaustiveCheck: never = command.data;\n // @ts-expect-error - in case new page action types are added and we forget to update this function, we want to get a compile error\n result += `// Unsupported page action type: ${command.data.type}`;\n }\n break;\n }\n case \"page.assertion\": {\n const optionsCodeString = getOptionsCodestringForCommand(command.data.options);\n switch (command.data.type) {\n case \"toHaveURL\":\n result += `await expect(activePage).toHaveURL(${JSON.stringify(command.data.value)}, ${optionsCodeString});`;\n break;\n case \"toHaveTitle\":\n result += `await expect(activePage).toHaveTitle(${JSON.stringify(command.data.value)}, ${optionsCodeString});`;\n break;\n case \"toContainText\":\n result += `await expect(activePage).toContainText(${JSON.stringify(command.data.value)}, ${optionsCodeString});`;\n break;\n default:\n const _exhaustiveCheck: never = command.data;\n // @ts-expect-error - in case new page assertion types are added and we forget to update this function, we want to get a compile error\n result += `// Unsupported page assertion type: ${command.data.type}`;\n }\n break;\n }\n case \"page.extract\":\n case \"utility\": {\n switch (command.data.type) {\n case \"sleep\":\n result += `await new Promise((resolve) => setTimeout(resolve, ${command.data.durationMs}));`;\n break;\n case \"saveSessionState\":\n result += `await bvt.saveSessionState(${JSON.stringify(command.data.key)});`;\n break;\n }\n }\n case \"api.action\":\n case \"api.assertion\":\n result += `await bvt.executeCommand(${JSON.stringify(command)})`;\n break;\n case \"custom\":\n result += command.code;\n break;\n default:\n const _exhaustiveCheck: never = command;\n // @ts-expect-error - in case new command types are added and we forget to update this function, we want to get a compile error\n result += `// Unsupported command type: ${command.type}`;\n }\n\n if (command.config?.postCommandDelay) {\n result += `\\nawait new Promise((resolve) => setTimeout(resolve, ${command.config.postCommandDelay}));`;\n }\n\n return result;\n};\n","import { z } from \"zod\";\nimport { EntityIdSchema } from \"../base.schema\";\nimport type { Command } from \"../command/command.schema\";\nimport { CommandSchema } from \"../command/command.schema\";\nimport { RecoveryArtifactSchema } from \"../recovery/recovery-artifact\";\n\nexport const TagSchema = z\n .object({\n _id: EntityIdSchema,\n name: z.string().min(1).max(100),\n projectId: EntityIdSchema,\n })\n .strict();\n\nexport type Tag = z.infer<typeof TagSchema>;\n\n/**\n * Extracts all <param_name> angle-bracket token references from a command array.\n * Scans all string values found anywhere in the serialised command data.\n * Returns a Set of parameter names (without the angle brackets).\n */\nexport function extractParamReferences(commands: Command[]): Set<string> {\n const json = JSON.stringify(commands);\n const matches = json.matchAll(/<(\\w+)>/g);\n const result = new Set<string>();\n for (const match of matches) {\n if (match[1]) result.add(match[1]);\n }\n return result;\n}\nexport const RecorderModes = [\"ai\", \"rec\", \"api\", \"assert\", \"reuse\", \"custom\"] as const;\n\nexport type RecorderMode = (typeof RecorderModes)[number];\n\nexport const StepDefinitionSchema = z\n .object({\n _id: EntityIdSchema,\n displayName: z.string().min(1).max(2000), // Inline OR Cucumber expression step name\n stepParametersUsed: z.array(z.string()).optional(), // List of parameter names used in this definition\n commands: z.array(CommandSchema), // Ordered list of command IDs that this step definition references\n type: z.enum(RecorderModes).optional(),\n allowCustomWholeStepRepair: z.boolean().optional(),\n })\n .strict();\n\nexport type StepDefinition = z.infer<typeof StepDefinitionSchema>;\n\nexport const StepSchema = z.object({\n _id: EntityIdSchema,\n keyword: z.enum([\"Given\", \"When\", \"Then\", \"And\", \"But\", \"*\"]),\n stepParameters: z.record(z.string(), z.string()).optional(),\n text: z.string().min(1).max(4000),\n disabled: z.boolean().optional(),\n stepDefinitionId: EntityIdSchema,\n});\n\nexport type Step = z.infer<typeof StepSchema>;\n\nexport const ParameterColumnSchema = z.object({\n _id: EntityIdSchema,\n header: z.string().min(1).max(100),\n value: z.array(z.string().min(1).max(4000)),\n});\n\nexport type ParameterColumn = z.infer<typeof ParameterColumnSchema>;\n\nexport const ScenarioSchema = z\n .object({\n _id: EntityIdSchema,\n name: z.string().min(1).max(2000),\n description: z.string().max(4000).optional(),\n steps: z.array(StepSchema),\n tagIds: z.array(EntityIdSchema).optional(),\n featureId: EntityIdSchema,\n projectId: EntityIdSchema,\n parameters: z.array(ParameterColumnSchema).optional(),\n currentVersion: z.number().int().min(0),\n isPendingAIRecoveryApproval: z.boolean().default(false),\n })\n .strict();\n\nexport type Scenario = z.infer<typeof ScenarioSchema>;\nexport const ScenarioBrowserConfigSchema = z\n .object({\n viewport: z\n .object({\n width: z.number().int().positive().default(1280),\n height: z.number().int().positive().default(900),\n })\n .default({\n width: 1280,\n height: 900,\n }),\n })\n .strict();\n\nexport type ScenarioBrowserConfig = z.infer<typeof ScenarioBrowserConfigSchema>;\nexport const DraftSchema = z\n .object({\n _id: EntityIdSchema,\n scenarioId: EntityIdSchema,\n lastSessionId: z.string().min(1).max(255),\n recorderState: z.unknown(),\n browserConfig: ScenarioBrowserConfigSchema.optional(),\n lastEditedBy: EntityIdSchema,\n lastSavedVersion: z.number().int().min(0),\n })\n .strict();\n\nexport type Draft = z.infer<typeof DraftSchema>;\n\nexport const ScenarioVersionSchema = z\n .object({\n _id: EntityIdSchema,\n scenarioId: EntityIdSchema,\n projectId: EntityIdSchema,\n version: z.number().int().min(1),\n sessionId: z.string().min(1).max(255),\n recorderState: z.unknown(),\n createdBy: EntityIdSchema,\n createdAt: z.date(),\n message: z.string().max(4000).nullable(),\n browserConfig: ScenarioBrowserConfigSchema.optional(),\n })\n .strict();\n\nexport type ScenarioVersion = z.infer<typeof ScenarioVersionSchema>;\n\nexport const AiRecoveredScenarioVersionStatusSchema = z.enum([\n \"pending\",\n \"accepted\",\n \"rejected\",\n \"expired\",\n // Historical documents may still use these internal statuses.\n \"discarded\",\n \"superseded\",\n]);\nexport type AiRecoveredScenarioVersionStatus = z.infer<\n typeof AiRecoveredScenarioVersionStatusSchema\n>;\n\nconst AiRecoveredScenarioCloudExecutionSourceSchema = z\n .object({\n type: z.literal(\"cloud-execution\"),\n reportId: EntityIdSchema,\n testCaseId: EntityIdSchema,\n executionInstanceId: EntityIdSchema,\n executionId: EntityIdSchema.optional(),\n stageIndex: z.number().int().min(0).optional(),\n })\n .strict();\n\nconst AiRecoveredScenarioLocalRunSourceSchema = z\n .object({\n type: z.literal(\"local-run\"),\n reportId: EntityIdSchema,\n testCaseId: EntityIdSchema,\n })\n .strict();\n\nexport const AiRecoveredScenarioVersionSourceSchema = z.discriminatedUnion(\"type\", [\n AiRecoveredScenarioCloudExecutionSourceSchema,\n AiRecoveredScenarioLocalRunSourceSchema,\n]);\nexport type AiRecoveredScenarioVersionSource = z.infer<\n typeof AiRecoveredScenarioVersionSourceSchema\n>;\n\nexport const AiRecoveredScenarioRepairSchema = z\n .object({\n recoveryAttemptId: z.string().uuid(),\n stepId: z.string().min(1).max(255),\n stepDefinitionId: z.string().min(1).max(255),\n originalCommandId: z.string().min(1).max(255),\n failedCommandIndex: z.number().int().min(0).optional(),\n changedCommandIds: z.array(z.string().min(1).max(255)).default([]),\n preservedCommandIds: z.array(z.string().min(1).max(255)).default([]),\n originalErrorMessage: z.string().min(1).max(10_000),\n commandPatchSummary: z.string().min(1).max(4000).optional(),\n rcaLabel: z.string().min(1).max(255).optional(),\n rcaConfidence: z.number().min(0).max(1).optional(),\n evidenceSignalNames: z.array(z.string().min(1).max(255)).default([]),\n })\n .strict();\nexport type AiRecoveredScenarioRepair = z.infer<typeof AiRecoveredScenarioRepairSchema>;\n\nexport const AiRecoveredScenarioRecoverySummarySchema = z\n .object({\n rcaSummary: z.string().min(1).max(10_000),\n aiFixSummary: z.string().min(1).max(10_000),\n recoveredAt: z.string().datetime(),\n repairs: z.array(AiRecoveredScenarioRepairSchema).min(1),\n narratorArtifact: RecoveryArtifactSchema.nullable().optional(),\n })\n .strict();\nexport type AiRecoveredScenarioRecoverySummary = z.infer<\n typeof AiRecoveredScenarioRecoverySummarySchema\n>;\n\nexport const AiRecoveredScenarioVersionSchema = z\n .object({\n _id: EntityIdSchema,\n scenarioId: EntityIdSchema,\n projectId: EntityIdSchema,\n version: z.number().int().min(1),\n baseScenarioVersion: z.number().int().min(0),\n recorderState: z.unknown(),\n status: AiRecoveredScenarioVersionStatusSchema,\n source: AiRecoveredScenarioVersionSourceSchema,\n recovery: AiRecoveredScenarioRecoverySummarySchema,\n createdBy: z.string().min(1).max(255),\n createdAt: z.date(),\n message: z.string().max(4000).nullable(),\n acceptedBy: EntityIdSchema.optional(),\n acceptedAt: z.date().optional(),\n acceptedScenarioVersion: z.number().int().min(1).optional(),\n rejectedBy: EntityIdSchema.optional(),\n rejectedAt: z.date().optional(),\n discardedBy: EntityIdSchema.optional(),\n discardedAt: z.date().optional(),\n expiredAt: z.date().optional(),\n expiredByScenarioVersion: z.number().int().min(1).optional(),\n supersededBy: EntityIdSchema.optional(),\n supersededAt: z.date().optional(),\n })\n .strict();\n\nexport type AiRecoveredScenarioVersion = z.infer<typeof AiRecoveredScenarioVersionSchema>;\n","import { z } from \"zod\";\nimport { EntityIdSchema } from \"../base.schema\";\n\nexport const EnvironmentSchema = z\n .object({\n _id: EntityIdSchema,\n name: z.string().min(1).max(240),\n projectId: EntityIdSchema,\n baseURL: z.url(),\n })\n .strict();\n\nexport type Environment = z.infer<typeof EnvironmentSchema>;\n\nexport const EnvironmentSummarySchema = z\n .object({\n name: z.string().min(1).max(240),\n baseURL: z.url(),\n })\n .strict();\n\nexport type EnvironmentSummary = z.infer<typeof EnvironmentSummarySchema>;\n\n// path: ordered array of ancestor folder IDs from root → direct parent.\n// empty array means the item lives at the project root.\nexport const FolderSchema = z\n .object({\n _id: EntityIdSchema,\n name: z.string().min(1).max(240),\n projectId: EntityIdSchema,\n path: z.array(EntityIdSchema),\n })\n .strict();\n\nexport type Folder = z.infer<typeof FolderSchema>;\n\nexport const FeatureSchema = z\n .object({\n _id: EntityIdSchema,\n name: z.string().min(1).max(240),\n projectId: EntityIdSchema,\n path: z.array(EntityIdSchema),\n tagIds: z.array(EntityIdSchema).optional(),\n })\n .strict();\n\nexport type Feature = z.infer<typeof FeatureSchema>;\n","import { z } from \"zod\";\nimport { EntityIdSchema } from \"../base.schema\";\n\n/*\ninterface Project {\n name: string;\n description?: string;\n createdBy: string; // Reference to User\n\n}\ninterface ProjectMemberShipModel {\n userId: string; // Reference to User\n projectId: string; // Reference to Project\n role: \"Owner\" | \"Admin\" | \"Member\" | \"Guest\"; // Owner: full + delete/transfer, Admin: manage members, Member: edit, Guest: view-only\n joinedAt: Date; // When the user became a member\n}\n*/\n\nexport const ProjectSchema = z\n .object({\n _id: EntityIdSchema,\n name: z.string().min(1).max(240),\n description: z.string().max(4000).optional(),\n createdBy: z.string().min(1), // Reference to User\n projectType: z.enum([\"standard\", \"demo\"]).optional(),\n })\n .strict();\n\nexport type Project = z.infer<typeof ProjectSchema>;\n\nexport const ProjectMembershipRoles = [\"Owner\", \"Admin\", \"Member\", \"Guest\"] as const;\nexport type ProjectMembershipRole = (typeof ProjectMembershipRoles)[number];\n\nexport const ProjectMembershipSchema = z\n .object({\n _id: EntityIdSchema,\n userId: EntityIdSchema,\n projectId: EntityIdSchema,\n role: z.enum(ProjectMembershipRoles), // Owner: full access + delete/transfer, Admin: manage members, Member: edit, Guest: view-only\n joinedAt: z.date(), // When the user became a member (accepted invite or created project)\n })\n .strict();\n\nexport type ProjectMembership = z.infer<typeof ProjectMembershipSchema>;\n\nexport const ProjectViewportSchema = z\n .object({\n width: z.number().int().positive().default(1280),\n height: z.number().int().positive().default(900),\n })\n .strict();\n\nexport const ProjectBrowserContextConfigurationSchema = z\n .object({\n viewport: ProjectViewportSchema.default({\n width: 1280,\n height: 900,\n }),\n })\n .strict();\n\nexport const ProjectBrowserLaunchConfigurationSchema = z\n .object({\n browser: z.object({}).default({}),\n browserContext: ProjectBrowserContextConfigurationSchema.default({\n viewport: {\n width: 1280,\n height: 900,\n },\n }),\n })\n .strict();\n\nexport const ProjectSettingsSchema = z\n .object({\n _id: EntityIdSchema,\n projectId: EntityIdSchema,\n browerLaunchConfiguration: ProjectBrowserLaunchConfigurationSchema.default({\n browser: {},\n browserContext: {\n viewport: {\n width: 1280,\n height: 900,\n },\n },\n }),\n })\n .strict();\nexport type ProjectSettings = z.infer<typeof ProjectSettingsSchema>;\n\nexport const ProjectSettingsUpdatableFieldsSchema = ProjectSettingsSchema.omit({\n _id: true,\n projectId: true,\n});\nexport type ProjectSettingsUpdatableFields = z.infer<typeof ProjectSettingsUpdatableFieldsSchema>;\n\nexport const DEFAULT_PROJECT_SETTINGS = ProjectSettingsUpdatableFieldsSchema.parse({});\n\nexport const GetProjectSettingsInputSchema = z\n .object({\n projectId: EntityIdSchema,\n })\n .strict();\nexport type GetProjectSettingsInput = z.infer<typeof GetProjectSettingsInputSchema>;\n\nexport const UpdateProjectSettingsInputSchema = z\n .object({\n projectId: EntityIdSchema,\n settings: ProjectSettingsUpdatableFieldsSchema,\n })\n .strict();\nexport type UpdateProjectSettingsInput = z.infer<typeof UpdateProjectSettingsInputSchema>;\n","import { z } from \"zod\";\nimport { EntityIdSchema } from \"../base.schema\";\n\nexport const InvitationStatuses = [\"pending\", \"accepted\", \"declined\"] as const;\nexport type InvitationStatus = (typeof InvitationStatuses)[number];\n\nexport const InvitationRoles = [\"Admin\", \"Member\", \"Guest\"] as const;\nexport type InvitationRole = (typeof InvitationRoles)[number];\n\nexport const InvitationSchema = z\n .object({\n _id: EntityIdSchema,\n projectId: EntityIdSchema,\n invitedBy: EntityIdSchema,\n email: z.string().trim().email(),\n status: z.enum(InvitationStatuses),\n role: z.enum(InvitationRoles),\n })\n .strict();\n\nexport type Invitation = z.infer<typeof InvitationSchema>;\n","import { z } from \"zod\";\nimport { EntityIdSchema } from \"../base.schema\";\n\nexport const UserSchema = z\n .object({\n _id: EntityIdSchema,\n name: z.string().min(1).max(240),\n email: z.email(),\n externalUserId: z.string().optional(),\n hasFinishedTour1: z.boolean().optional(),\n hasFinishedTour2: z.boolean().optional(),\n showDemoProjectInSidebar: z.boolean().optional(),\n maxProjects: z.number().int().positive().optional(),\n })\n .strict();\n\nexport type User = z.infer<typeof UserSchema>;\n","import { z } from \"zod\";\n\nimport { EntityIdSchema } from \"../base.schema\";\n\nexport const ReportStatusSchema = z.enum([\"InProgress\", \"Completed\", \"Aborted\", \"Crashed\"]);\nexport const ReportResultSchema = z.enum([\"Passed\", \"Failed\", \"Error\", \"Skipped\"]);\nexport const ReportProducerTypeSchema = z.enum([\"Desktop\", \"Web\", \"ExecutionPlanner\"]);\n\nexport const ReportEnvironmentSchema = z\n .object({\n name: z.string().min(1).max(240),\n baseUrl: z.string().min(1).max(4_000),\n })\n .strict();\n\nexport const ReportProducerSchema = z\n .object({\n type: ReportProducerTypeSchema,\n id: z.string().min(1).max(255).optional(),\n })\n .strict();\n\nexport const ReportStatsSchema = z\n .object({\n totalTests: z.number().int().min(0),\n passedTests: z.number().int().min(0),\n failedTests: z.number().int().min(0),\n skippedTests: z.number().int().min(0),\n })\n .strict();\n\nexport type ReportStatus = z.infer<typeof ReportStatusSchema>;\nexport type ReportResult = z.infer<typeof ReportResultSchema>;\nexport type ReportProducerType = z.infer<typeof ReportProducerTypeSchema>;\nexport type ReportEnvironment = z.infer<typeof ReportEnvironmentSchema>;\nexport type ReportProducer = z.infer<typeof ReportProducerSchema>;\nexport type ReportStats = z.infer<typeof ReportStatsSchema>;\n\nexport const ReportSchema = z\n .object({\n _id: EntityIdSchema,\n projectId: EntityIdSchema,\n status: ReportStatusSchema,\n abortedBy: z.union([EntityIdSchema, z.literal(\"system\")]).optional(),\n result: ReportResultSchema.nullable(),\n startedAt: z.date(),\n startedBy: EntityIdSchema,\n env: ReportEnvironmentSchema,\n completedAt: z.date().nullable(),\n name: z.string().min(1).max(240),\n producer: ReportProducerSchema.optional(),\n stats: ReportStatsSchema,\n })\n .strict();\n\nexport type Report = z.infer<typeof ReportSchema>;\n","import { z } from \"zod\";\nimport { EntityIdSchema } from \"../base.schema\";\nimport { ReportResultSchema } from \"../report/report.schema\";\nimport { StepReplayTelemetrySchema } from \"../selector/replay-context.schema\";\nimport { RecoveryMetadataSchema } from \"../recovery/recovery.schema\";\n\nexport const ExecResultSchema = z.discriminatedUnion(\"type\", [\n z\n .object({\n type: z.literal(\"success\"),\n })\n .strict(),\n z\n .object({\n type: z.literal(\"failure\"),\n errorMessage: z.string().min(1).max(10_000),\n errorStack: z.string().max(100_000).optional(),\n })\n .strict(),\n z\n .object({\n type: z.literal(\"skipped\"),\n })\n .strict(),\n]);\n\nexport type ExecResult = z.infer<typeof ExecResultSchema>;\n\nexport const CommandResultSchema = z\n .object({\n commandId: z.string().min(1).max(255),\n startedAt: z.date().optional(),\n completedAt: z.date().optional(),\n result: ExecResultSchema,\n recovery: RecoveryMetadataSchema.optional(),\n })\n .strict();\n\nexport type CommandResult = z.infer<typeof CommandResultSchema>;\n\nexport const StepResultSchema = z\n .object({\n stepId: z.string().min(1).max(255),\n commands: z.array(CommandResultSchema),\n result: ExecResultSchema,\n replayTelemetry: StepReplayTelemetrySchema.optional(),\n recovery: RecoveryMetadataSchema.optional(),\n })\n .strict();\n\nexport type StepResult = z.infer<typeof StepResultSchema>;\n\nexport const TestCaseStatusSchema = z.enum([\"InProgress\", \"Completed\", \"Failed\"]);\nexport const TestCaseResultSchema = ReportResultSchema.exclude([\"Skipped\"]);\nexport const TestCaseErrorSchema = z\n .object({\n message: z.string().min(1).max(10_000),\n stack: z.string().max(100_000).optional(),\n })\n .strict();\nexport const TestCaseAiRecoveryStatusSchema = z.enum([\"recovered_pending_approval\"]);\nexport const TestCaseAiRecoverySchema = z\n .object({\n status: TestCaseAiRecoveryStatusSchema,\n artifactId: EntityIdSchema.optional(),\n scenarioId: EntityIdSchema,\n recoveredAt: z.string().datetime(),\n })\n .strict();\n\nexport const TestCaseWarningReasonSchema = z.enum([\n \"TraceUploadFailed\",\n \"ScenarioEmpty\",\n \"AIRecoveryPendingApproval\",\n \"AIRecoveryArtifactFailed\",\n \"AIRecoveryFailed\",\n]);\n\nexport const TestCaseWarningSchema = z\n .object({\n reason: TestCaseWarningReasonSchema,\n message: z.string().min(1).max(10_000),\n stack: z.string().max(100_000).optional(),\n })\n .strict();\n\nexport const TestCaseSchema = z\n .object({\n _id: EntityIdSchema,\n parentReportId: EntityIdSchema,\n projectId: EntityIdSchema,\n scenarioId: EntityIdSchema,\n status: TestCaseStatusSchema,\n result: TestCaseResultSchema.nullable(),\n error: TestCaseErrorSchema.optional(),\n aiRecovery: TestCaseAiRecoverySchema.optional(),\n warnings: z.array(TestCaseWarningSchema).optional(),\n startedAt: z.date(),\n completedAt: z.date().nullable(),\n stepResults: z.array(StepResultSchema),\n stageIndex: z.number().int().min(0).optional(),\n executionInstanceId: z.string().min(1).max(255).optional(),\n attemptNumber: z.number().int().min(1),\n scenarioVersion: z.number().int().min(0),\n parameterValues: z.record(z.string(), z.string()),\n })\n .strict();\n\nexport type TestCase = z.infer<typeof TestCaseSchema>;\nexport type TestCaseWarning = z.infer<typeof TestCaseWarningSchema>;\nexport type TestCaseAiRecovery = z.infer<typeof TestCaseAiRecoverySchema>;\n","import { z } from \"zod\";\nexport const BrowserObserverStateKSchema = z.union([\n z.enum([\"none\", \"input\", \"hover\", \"text\", \"snapshot\", \"element\", \"context\", \"ai\", \"picker\"]),\n z.null(),\n]);\n\nexport type BrowserObserverStateK = z.infer<typeof BrowserObserverStateKSchema>;\n","// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis\nfunction getGlobal() {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n }\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n}\nfunction getDevTools() {\n const w = getGlobal();\n if (w.__xstate__) {\n return w.__xstate__;\n }\n return undefined;\n}\nfunction registerService(service) {\n if (typeof window === 'undefined') {\n return;\n }\n const devTools = getDevTools();\n if (devTools) {\n devTools.register(service);\n }\n}\nconst devToolsAdapter = service => {\n if (typeof window === 'undefined') {\n return;\n }\n const devTools = getDevTools();\n if (devTools) {\n devTools.register(service);\n }\n};\n\nexport { devToolsAdapter, getGlobal, registerService };\n","import { devToolsAdapter } from '../dev/dist/xstate-dev.esm.js';\n\nclass Mailbox {\n constructor(_process) {\n this._process = _process;\n this._active = false;\n this._current = null;\n this._last = null;\n }\n start() {\n this._active = true;\n this.flush();\n }\n clear() {\n // we can't set _current to null because we might be currently processing\n // and enqueue following clear shouldn't start processing the enqueued item immediately\n if (this._current) {\n this._current.next = null;\n this._last = this._current;\n }\n }\n enqueue(event) {\n const enqueued = {\n value: event,\n next: null\n };\n if (this._current) {\n this._last.next = enqueued;\n this._last = enqueued;\n return;\n }\n this._current = enqueued;\n this._last = enqueued;\n if (this._active) {\n this.flush();\n }\n }\n flush() {\n while (this._current) {\n // atm the given _process is responsible for implementing proper try/catch handling\n // we assume here that this won't throw in a way that can affect this mailbox\n const consumed = this._current;\n this._process(consumed.value);\n this._current = consumed.next;\n }\n this._last = null;\n }\n}\n\nconst STATE_DELIMITER = '.';\nconst TARGETLESS_KEY = '';\nconst NULL_EVENT = '';\nconst STATE_IDENTIFIER = '#';\nconst WILDCARD = '*';\nconst XSTATE_INIT = 'xstate.init';\nconst XSTATE_ERROR = 'xstate.error';\nconst XSTATE_STOP = 'xstate.stop';\n\n/**\n * Returns an event that represents an implicit event that is sent after the\n * specified `delay`.\n *\n * @param delayRef The delay in milliseconds\n * @param id The state node ID where this event is handled\n */\nfunction createAfterEvent(delayRef, id) {\n return {\n type: `xstate.after.${delayRef}.${id}`\n };\n}\n\n/**\n * Returns an event that represents that a final state node has been reached in\n * the parent state node.\n *\n * @param id The final state node's parent state node `id`\n * @param output The data to pass into the event\n */\nfunction createDoneStateEvent(id, output) {\n return {\n type: `xstate.done.state.${id}`,\n output\n };\n}\n\n/**\n * Returns an event that represents that an invoked service has terminated.\n *\n * An invoked service is terminated when it has reached a top-level final state\n * node, but not when it is canceled.\n *\n * @param invokeId The invoked service ID\n * @param output The data to pass into the event\n */\nfunction createDoneActorEvent(invokeId, output) {\n return {\n type: `xstate.done.actor.${invokeId}`,\n output,\n actorId: invokeId\n };\n}\nfunction createErrorActorEvent(id, error) {\n return {\n type: `xstate.error.actor.${id}`,\n error,\n actorId: id\n };\n}\nfunction createInitEvent(input) {\n return {\n type: XSTATE_INIT,\n input\n };\n}\n\n/**\n * This function makes sure that unhandled errors are thrown in a separate\n * macrotask. It allows those errors to be detected by global error handlers and\n * reported to bug tracking services without interrupting our own stack of\n * execution.\n *\n * @param err Error to be thrown\n */\nfunction reportUnhandledError(err) {\n setTimeout(() => {\n throw err;\n });\n}\n\nconst symbolObservable = (() => typeof Symbol === 'function' && Symbol.observable || '@@observable')();\n\nfunction matchesState(parentStateId, childStateId) {\n const parentStateValue = toStateValue(parentStateId);\n const childStateValue = toStateValue(childStateId);\n if (typeof childStateValue === 'string') {\n if (typeof parentStateValue === 'string') {\n return childStateValue === parentStateValue;\n }\n\n // Parent more specific than child\n return false;\n }\n if (typeof parentStateValue === 'string') {\n return parentStateValue in childStateValue;\n }\n return Object.keys(parentStateValue).every(key => {\n if (!(key in childStateValue)) {\n return false;\n }\n return matchesState(parentStateValue[key], childStateValue[key]);\n });\n}\nfunction toStatePath(stateId) {\n if (isArray(stateId)) {\n return stateId;\n }\n const result = [];\n let segment = '';\n for (let i = 0; i < stateId.length; i++) {\n const char = stateId.charCodeAt(i);\n switch (char) {\n // \\\n case 92:\n // consume the next character\n segment += stateId[i + 1];\n // and skip over it\n i++;\n continue;\n // .\n case 46:\n result.push(segment);\n segment = '';\n continue;\n }\n segment += stateId[i];\n }\n result.push(segment);\n return result;\n}\nfunction toStateValue(stateValue) {\n if (isMachineSnapshot(stateValue)) {\n return stateValue.value;\n }\n if (typeof stateValue !== 'string') {\n return stateValue;\n }\n const statePath = toStatePath(stateValue);\n return pathToStateValue(statePath);\n}\nfunction pathToStateValue(statePath) {\n if (statePath.length === 1) {\n return statePath[0];\n }\n const value = {};\n let marker = value;\n for (let i = 0; i < statePath.length - 1; i++) {\n if (i === statePath.length - 2) {\n marker[statePath[i]] = statePath[i + 1];\n } else {\n const previous = marker;\n marker = {};\n previous[statePath[i]] = marker;\n }\n }\n return value;\n}\nfunction mapValues(collection, iteratee) {\n const result = {};\n const collectionKeys = Object.keys(collection);\n for (let i = 0; i < collectionKeys.length; i++) {\n const key = collectionKeys[i];\n result[key] = iteratee(collection[key], key, collection, i);\n }\n return result;\n}\nfunction toArrayStrict(value) {\n if (isArray(value)) {\n return value;\n }\n return [value];\n}\nfunction toArray(value) {\n if (value === undefined) {\n return [];\n }\n return toArrayStrict(value);\n}\nfunction resolveOutput(mapper, context, event, self) {\n if (typeof mapper === 'function') {\n return mapper({\n context,\n event,\n self\n });\n }\n return mapper;\n}\nfunction isArray(value) {\n return Array.isArray(value);\n}\nfunction isErrorActorEvent(event) {\n return event.type.startsWith('xstate.error.actor');\n}\nfunction toTransitionConfigArray(configLike) {\n return toArrayStrict(configLike).map(transitionLike => {\n if (typeof transitionLike === 'undefined' || typeof transitionLike === 'string') {\n return {\n target: transitionLike\n };\n }\n return transitionLike;\n });\n}\nfunction normalizeTarget(target) {\n if (target === undefined || target === TARGETLESS_KEY) {\n return undefined;\n }\n return toArray(target);\n}\nfunction toObserver(nextHandler, errorHandler, completionHandler) {\n const isObserver = typeof nextHandler === 'object';\n const self = isObserver ? nextHandler : undefined;\n return {\n next: (isObserver ? nextHandler.next : nextHandler)?.bind(self),\n error: (isObserver ? nextHandler.error : errorHandler)?.bind(self),\n complete: (isObserver ? nextHandler.complete : completionHandler)?.bind(self)\n };\n}\nfunction createInvokeId(stateNodeId, index) {\n return `${index}.${stateNodeId}`;\n}\nfunction resolveReferencedActor(machine, src) {\n const match = src.match(/^xstate\\.invoke\\.(\\d+)\\.(.*)/);\n if (!match) {\n return machine.implementations.actors[src];\n }\n const [, indexStr, nodeId] = match;\n const node = machine.getStateNodeById(nodeId);\n const invokeConfig = node.config.invoke;\n return (Array.isArray(invokeConfig) ? invokeConfig[indexStr] : invokeConfig).src;\n}\nfunction getAllOwnEventDescriptors(snapshot) {\n return [...new Set([...snapshot._nodes.flatMap(sn => sn.ownEvents)])];\n}\n\n/**\n * Checks if an event type matches an event descriptor, supporting wildcards.\n * Event descriptors can be:\n *\n * - Exact matches: \"event.type\"\n * - Wildcard: \"*\"\n * - Partial matches: \"event.*\"\n *\n * @param eventType - The actual event type string\n * @param descriptor - The event descriptor to match against\n * @returns True if the event type matches the descriptor\n */\nfunction matchesEventDescriptor(eventType, descriptor) {\n if (descriptor === eventType) {\n return true;\n }\n if (descriptor === WILDCARD) {\n return true;\n }\n if (!descriptor.endsWith('.*')) {\n return false;\n }\n const partialEventTokens = descriptor.split('.');\n const eventTokens = eventType.split('.');\n for (let tokenIndex = 0; tokenIndex < partialEventTokens.length; tokenIndex++) {\n const partialEventToken = partialEventTokens[tokenIndex];\n const eventToken = eventTokens[tokenIndex];\n if (partialEventToken === '*') {\n const isLastToken = tokenIndex === partialEventTokens.length - 1;\n return isLastToken;\n }\n if (partialEventToken !== eventToken) {\n return false;\n }\n }\n return true;\n}\n\nfunction createScheduledEventId(actorRef, id) {\n return `${actorRef.sessionId}.${id}`;\n}\nlet idCounter = 0;\nfunction createSystem(rootActor, options) {\n const children = new Map();\n const keyedActors = new Map();\n const reverseKeyedActors = new WeakMap();\n const inspectionObservers = new Set();\n const timerMap = {};\n const {\n clock,\n logger\n } = options;\n const scheduler = {\n schedule: (source, target, event, delay, id = Math.random().toString(36).slice(2)) => {\n const scheduledEvent = {\n source,\n target,\n event,\n delay,\n id,\n startedAt: Date.now()\n };\n const scheduledEventId = createScheduledEventId(source, id);\n system._snapshot._scheduledEvents[scheduledEventId] = scheduledEvent;\n const timeout = clock.setTimeout(() => {\n delete timerMap[scheduledEventId];\n delete system._snapshot._scheduledEvents[scheduledEventId];\n system._relay(source, target, event);\n }, delay);\n timerMap[scheduledEventId] = timeout;\n },\n cancel: (source, id) => {\n const scheduledEventId = createScheduledEventId(source, id);\n const timeout = timerMap[scheduledEventId];\n delete timerMap[scheduledEventId];\n delete system._snapshot._scheduledEvents[scheduledEventId];\n if (timeout !== undefined) {\n clock.clearTimeout(timeout);\n }\n },\n cancelAll: actorRef => {\n for (const scheduledEventId in system._snapshot._scheduledEvents) {\n const scheduledEvent = system._snapshot._scheduledEvents[scheduledEventId];\n if (scheduledEvent.source === actorRef) {\n scheduler.cancel(actorRef, scheduledEvent.id);\n }\n }\n }\n };\n const sendInspectionEvent = event => {\n if (!inspectionObservers.size) {\n return;\n }\n const resolvedInspectionEvent = {\n ...event,\n rootId: rootActor.sessionId\n };\n inspectionObservers.forEach(observer => observer.next?.(resolvedInspectionEvent));\n };\n const system = {\n _snapshot: {\n _scheduledEvents: (options?.snapshot && options.snapshot.scheduler) ?? {}\n },\n _bookId: () => `x:${idCounter++}`,\n _register: (sessionId, actorRef) => {\n children.set(sessionId, actorRef);\n return sessionId;\n },\n _unregister: actorRef => {\n children.delete(actorRef.sessionId);\n const systemId = reverseKeyedActors.get(actorRef);\n if (systemId !== undefined) {\n keyedActors.delete(systemId);\n reverseKeyedActors.delete(actorRef);\n }\n },\n get: systemId => {\n return keyedActors.get(systemId);\n },\n getAll: () => {\n return Object.fromEntries(keyedActors.entries());\n },\n _set: (systemId, actorRef) => {\n const existing = keyedActors.get(systemId);\n if (existing && existing !== actorRef) {\n throw new Error(`Actor with system ID '${systemId}' already exists.`);\n }\n keyedActors.set(systemId, actorRef);\n reverseKeyedActors.set(actorRef, systemId);\n },\n inspect: observerOrFn => {\n const observer = toObserver(observerOrFn);\n inspectionObservers.add(observer);\n return {\n unsubscribe() {\n inspectionObservers.delete(observer);\n }\n };\n },\n _sendInspectionEvent: sendInspectionEvent,\n _relay: (source, target, event) => {\n system._sendInspectionEvent({\n type: '@xstate.event',\n sourceRef: source,\n actorRef: target,\n event\n });\n target._send(event);\n },\n scheduler,\n getSnapshot: () => {\n return {\n _scheduledEvents: {\n ...system._snapshot._scheduledEvents\n }\n };\n },\n start: () => {\n const scheduledEvents = system._snapshot._scheduledEvents;\n system._snapshot._scheduledEvents = {};\n for (const scheduledId in scheduledEvents) {\n const {\n source,\n target,\n event,\n delay,\n id\n } = scheduledEvents[scheduledId];\n scheduler.schedule(source, target, event, delay, id);\n }\n },\n _clock: clock,\n _logger: logger\n };\n return system;\n}\n\n// those are needed to make JSDoc `@link` work properly\n\nlet executingCustomAction = false;\nconst $$ACTOR_TYPE = 1;\n\n// those values are currently used by @xstate/react directly so it's important to keep the assigned values in sync\nlet ProcessingStatus = /*#__PURE__*/function (ProcessingStatus) {\n ProcessingStatus[ProcessingStatus[\"NotStarted\"] = 0] = \"NotStarted\";\n ProcessingStatus[ProcessingStatus[\"Running\"] = 1] = \"Running\";\n ProcessingStatus[ProcessingStatus[\"Stopped\"] = 2] = \"Stopped\";\n return ProcessingStatus;\n}({});\nconst defaultOptions = {\n clock: {\n setTimeout: (fn, ms) => {\n return setTimeout(fn, ms);\n },\n clearTimeout: id => {\n return clearTimeout(id);\n }\n },\n logger: console.log.bind(console),\n devTools: false\n};\n\n/**\n * An Actor is a running process that can receive events, send events and change\n * its behavior based on the events it receives, which can cause effects outside\n * of the actor. When you run a state machine, it becomes an actor.\n */\nclass Actor {\n /**\n * Creates a new actor instance for the given logic with the provided options,\n * if any.\n *\n * @param logic The logic to create an actor from\n * @param options Actor options\n */\n constructor(logic, options) {\n this.logic = logic;\n /** The current internal state of the actor. */\n this._snapshot = void 0;\n /**\n * The clock that is responsible for setting and clearing timeouts, such as\n * delayed events and transitions.\n */\n this.clock = void 0;\n this.options = void 0;\n /** The unique identifier for this actor relative to its parent. */\n this.id = void 0;\n this.mailbox = new Mailbox(this._process.bind(this));\n this.observers = new Set();\n this.eventListeners = new Map();\n this.logger = void 0;\n /** @internal */\n this._processingStatus = ProcessingStatus.NotStarted;\n // Actor Ref\n this._parent = void 0;\n /** @internal */\n this._syncSnapshot = void 0;\n this.ref = void 0;\n // TODO: add typings for system\n this._actorScope = void 0;\n this.systemId = void 0;\n /** The globally unique process ID for this invocation. */\n this.sessionId = void 0;\n /** The system to which this actor belongs. */\n this.system = void 0;\n this._doneEvent = void 0;\n this.src = void 0;\n // array of functions to defer\n this._deferred = [];\n const resolvedOptions = {\n ...defaultOptions,\n ...options\n };\n const {\n clock,\n logger,\n parent,\n syncSnapshot,\n id,\n systemId,\n inspect\n } = resolvedOptions;\n this.system = parent ? parent.system : createSystem(this, {\n clock,\n logger\n });\n if (inspect && !parent) {\n // Always inspect at the system-level\n this.system.inspect(toObserver(inspect));\n }\n this.sessionId = this.system._bookId();\n this.id = id ?? this.sessionId;\n this.logger = options?.logger ?? this.system._logger;\n this.clock = options?.clock ?? this.system._clock;\n this._parent = parent;\n this._syncSnapshot = syncSnapshot;\n this.options = resolvedOptions;\n this.src = resolvedOptions.src ?? logic;\n this.ref = this;\n this._actorScope = {\n self: this,\n id: this.id,\n sessionId: this.sessionId,\n logger: this.logger,\n defer: fn => {\n this._deferred.push(fn);\n },\n system: this.system,\n stopChild: child => {\n if (child._parent !== this) {\n throw new Error(`Cannot stop child actor ${child.id} of ${this.id} because it is not a child`);\n }\n child._stop();\n },\n emit: emittedEvent => {\n const listeners = this.eventListeners.get(emittedEvent.type);\n const wildcardListener = this.eventListeners.get('*');\n if (!listeners && !wildcardListener) {\n return;\n }\n const allListeners = [...(listeners ? listeners.values() : []), ...(wildcardListener ? wildcardListener.values() : [])];\n for (const handler of allListeners) {\n try {\n handler(emittedEvent);\n } catch (err) {\n reportUnhandledError(err);\n }\n }\n },\n actionExecutor: action => {\n const exec = () => {\n this._actorScope.system._sendInspectionEvent({\n type: '@xstate.action',\n actorRef: this,\n action: {\n type: action.type,\n params: action.params\n }\n });\n if (!action.exec) {\n return;\n }\n const saveExecutingCustomAction = executingCustomAction;\n try {\n executingCustomAction = true;\n action.exec(action.info, action.params);\n } finally {\n executingCustomAction = saveExecutingCustomAction;\n }\n };\n if (this._processingStatus === ProcessingStatus.Running) {\n exec();\n } else {\n this._deferred.push(exec);\n }\n }\n };\n\n // Ensure that the send method is bound to this Actor instance\n // if destructured\n this.send = this.send.bind(this);\n this.system._sendInspectionEvent({\n type: '@xstate.actor',\n actorRef: this\n });\n if (systemId) {\n this.systemId = systemId;\n this.system._set(systemId, this);\n }\n this._initState(options?.snapshot ?? options?.state);\n if (systemId && this._snapshot.status !== 'active') {\n this.system._unregister(this);\n }\n }\n _initState(persistedState) {\n try {\n this._snapshot = persistedState ? this.logic.restoreSnapshot ? this.logic.restoreSnapshot(persistedState, this._actorScope) : persistedState : this.logic.getInitialSnapshot(this._actorScope, this.options?.input);\n } catch (err) {\n // if we get here then it means that we assign a value to this._snapshot that is not of the correct type\n // we can't get the true `TSnapshot & { status: 'error'; }`, it's impossible\n // so right now this is a lie of sorts\n this._snapshot = {\n status: 'error',\n output: undefined,\n error: err\n };\n }\n }\n update(snapshot, event) {\n // Update state\n this._snapshot = snapshot;\n\n // Execute deferred effects\n let deferredFn;\n while (deferredFn = this._deferred.shift()) {\n try {\n deferredFn();\n } catch (err) {\n // this error can only be caught when executing *initial* actions\n // it's the only time when we call actions provided by the user through those deferreds\n // when the actor is already running we always execute them synchronously while transitioning\n // no \"builtin deferred\" should actually throw an error since they are either safe\n // or the control flow is passed through the mailbox and errors should be caught by the `_process` used by the mailbox\n this._deferred.length = 0;\n this._snapshot = {\n ...snapshot,\n status: 'error',\n error: err\n };\n }\n }\n switch (this._snapshot.status) {\n case 'active':\n for (const observer of this.observers) {\n try {\n observer.next?.(snapshot);\n } catch (err) {\n reportUnhandledError(err);\n }\n }\n break;\n case 'done':\n // next observers are meant to be notified about done snapshots\n // this can be seen as something that is different from how observable work\n // but with observables `complete` callback is called without any arguments\n // it's more ergonomic for XState to treat a done snapshot as a \"next\" value\n // and the completion event as something that is separate,\n // something that merely follows emitting that done snapshot\n for (const observer of this.observers) {\n try {\n observer.next?.(snapshot);\n } catch (err) {\n reportUnhandledError(err);\n }\n }\n this._stopProcedure();\n this._complete();\n this._doneEvent = createDoneActorEvent(this.id, this._snapshot.output);\n if (this._parent) {\n this.system._relay(this, this._parent, this._doneEvent);\n }\n break;\n case 'error':\n this._error(this._snapshot.error);\n break;\n }\n this.system._sendInspectionEvent({\n type: '@xstate.snapshot',\n actorRef: this,\n event,\n snapshot\n });\n }\n\n /**\n * Subscribe an observer to an actor’s snapshot values.\n *\n * @remarks\n * The observer will receive the actor’s snapshot value when it is emitted.\n * The observer can be:\n *\n * - A plain function that receives the latest snapshot, or\n * - An observer object whose `.next(snapshot)` method receives the latest\n * snapshot\n *\n * @example\n *\n * ```ts\n * // Observer as a plain function\n * const subscription = actor.subscribe((snapshot) => {\n * console.log(snapshot);\n * });\n * ```\n *\n * @example\n *\n * ```ts\n * // Observer as an object\n * const subscription = actor.subscribe({\n * next(snapshot) {\n * console.log(snapshot);\n * },\n * error(err) {\n * // ...\n * },\n * complete() {\n * // ...\n * }\n * });\n * ```\n *\n * The return value of `actor.subscribe(observer)` is a subscription object\n * that has an `.unsubscribe()` method. You can call\n * `subscription.unsubscribe()` to unsubscribe the observer:\n *\n * @example\n *\n * ```ts\n * const subscription = actor.subscribe((snapshot) => {\n * // ...\n * });\n *\n * // Unsubscribe the observer\n * subscription.unsubscribe();\n * ```\n *\n * When the actor is stopped, all of its observers will automatically be\n * unsubscribed.\n *\n * @param observer - Either a plain function that receives the latest\n * snapshot, or an observer object whose `.next(snapshot)` method receives\n * the latest snapshot\n */\n\n subscribe(nextListenerOrObserver, errorListener, completeListener) {\n const observer = toObserver(nextListenerOrObserver, errorListener, completeListener);\n if (this._processingStatus !== ProcessingStatus.Stopped) {\n this.observers.add(observer);\n } else {\n switch (this._snapshot.status) {\n case 'done':\n try {\n observer.complete?.();\n } catch (err) {\n reportUnhandledError(err);\n }\n break;\n case 'error':\n {\n const err = this._snapshot.error;\n if (!observer.error) {\n reportUnhandledError(err);\n } else {\n try {\n observer.error(err);\n } catch (err) {\n reportUnhandledError(err);\n }\n }\n break;\n }\n }\n }\n return {\n unsubscribe: () => {\n this.observers.delete(observer);\n }\n };\n }\n on(type, handler) {\n let listeners = this.eventListeners.get(type);\n if (!listeners) {\n listeners = new Set();\n this.eventListeners.set(type, listeners);\n }\n const wrappedHandler = handler.bind(undefined);\n listeners.add(wrappedHandler);\n return {\n unsubscribe: () => {\n listeners.delete(wrappedHandler);\n }\n };\n }\n\n /** Starts the Actor from the initial state */\n start() {\n if (this._processingStatus === ProcessingStatus.Running) {\n // Do not restart the service if it is already started\n return this;\n }\n if (this._syncSnapshot) {\n this.subscribe({\n next: snapshot => {\n if (snapshot.status === 'active') {\n this.system._relay(this, this._parent, {\n type: `xstate.snapshot.${this.id}`,\n snapshot\n });\n }\n },\n error: () => {}\n });\n }\n this.system._register(this.sessionId, this);\n if (this.systemId) {\n this.system._set(this.systemId, this);\n }\n this._processingStatus = ProcessingStatus.Running;\n\n // TODO: this isn't correct when rehydrating\n const initEvent = createInitEvent(this.options.input);\n this.system._sendInspectionEvent({\n type: '@xstate.event',\n sourceRef: this._parent,\n actorRef: this,\n event: initEvent\n });\n const status = this._snapshot.status;\n switch (status) {\n case 'done':\n // a state machine can be \"done\" upon initialization (it could reach a final state using initial microsteps)\n // we still need to complete observers, flush deferreds etc\n this.update(this._snapshot, initEvent);\n // TODO: rethink cleanup of observers, mailbox, etc\n return this;\n case 'error':\n this._error(this._snapshot.error);\n return this;\n }\n if (!this._parent) {\n this.system.start();\n }\n if (this.logic.start) {\n try {\n this.logic.start(this._snapshot, this._actorScope);\n } catch (err) {\n this._snapshot = {\n ...this._snapshot,\n status: 'error',\n error: err\n };\n this._error(err);\n return this;\n }\n }\n\n // TODO: this notifies all subscribers but usually this is redundant\n // there is no real change happening here\n // we need to rethink if this needs to be refactored\n this.update(this._snapshot, initEvent);\n if (this.options.devTools) {\n this.attachDevTools();\n }\n this.mailbox.start();\n return this;\n }\n _process(event) {\n let nextState;\n let caughtError;\n try {\n nextState = this.logic.transition(this._snapshot, event, this._actorScope);\n } catch (err) {\n // we wrap it in a box so we can rethrow it later even if falsy value gets caught here\n caughtError = {\n err\n };\n }\n if (caughtError) {\n const {\n err\n } = caughtError;\n this._snapshot = {\n ...this._snapshot,\n status: 'error',\n error: err\n };\n this._error(err);\n return;\n }\n this.update(nextState, event);\n if (event.type === XSTATE_STOP) {\n this._stopProcedure();\n this._complete();\n }\n }\n _stop() {\n if (this._processingStatus === ProcessingStatus.Stopped) {\n return this;\n }\n this.mailbox.clear();\n if (this._processingStatus === ProcessingStatus.NotStarted) {\n this._processingStatus = ProcessingStatus.Stopped;\n return this;\n }\n this.mailbox.enqueue({\n type: XSTATE_STOP\n });\n return this;\n }\n\n /** Stops the Actor and unsubscribe all listeners. */\n stop() {\n if (this._parent) {\n throw new Error('A non-root actor cannot be stopped directly.');\n }\n return this._stop();\n }\n _complete() {\n for (const observer of this.observers) {\n try {\n observer.complete?.();\n } catch (err) {\n reportUnhandledError(err);\n }\n }\n this.observers.clear();\n this.eventListeners.clear();\n }\n _reportError(err) {\n if (!this.observers.size) {\n if (!this._parent) {\n reportUnhandledError(err);\n }\n this.eventListeners.clear();\n return;\n }\n let reportError = false;\n for (const observer of this.observers) {\n const errorListener = observer.error;\n reportError ||= !errorListener;\n try {\n errorListener?.(err);\n } catch (err2) {\n reportUnhandledError(err2);\n }\n }\n this.observers.clear();\n this.eventListeners.clear();\n if (reportError) {\n reportUnhandledError(err);\n }\n }\n _error(err) {\n this._stopProcedure();\n this._reportError(err);\n if (this._parent) {\n this.system._relay(this, this._parent, createErrorActorEvent(this.id, err));\n }\n }\n // TODO: atm children don't belong entirely to the actor so\n // in a way - it's not even super aware of them\n // so we can't stop them from here but we really should!\n // right now, they are being stopped within the machine's transition\n // but that could throw and leave us with \"orphaned\" active actors\n _stopProcedure() {\n if (this._processingStatus !== ProcessingStatus.Running) {\n // Actor already stopped; do nothing\n return this;\n }\n\n // Cancel all delayed events\n this.system.scheduler.cancelAll(this);\n\n // TODO: mailbox.reset\n this.mailbox.clear();\n // TODO: after `stop` we must prepare ourselves for receiving events again\n // events sent *after* stop signal must be queued\n // it seems like this should be the common behavior for all of our consumers\n // so perhaps this should be unified somehow for all of them\n this.mailbox = new Mailbox(this._process.bind(this));\n this._processingStatus = ProcessingStatus.Stopped;\n this.system._unregister(this);\n return this;\n }\n\n /** @internal */\n _send(event) {\n if (this._processingStatus === ProcessingStatus.Stopped) {\n return;\n }\n this.mailbox.enqueue(event);\n }\n\n /**\n * Sends an event to the running Actor to trigger a transition.\n *\n * @param event The event to send\n */\n send(event) {\n this.system._relay(undefined, this, event);\n }\n attachDevTools() {\n const {\n devTools\n } = this.options;\n if (devTools) {\n const resolvedDevToolsAdapter = typeof devTools === 'function' ? devTools : devToolsAdapter;\n resolvedDevToolsAdapter(this);\n }\n }\n toJSON() {\n return {\n xstate$$type: $$ACTOR_TYPE,\n id: this.id\n };\n }\n\n /**\n * Obtain the internal state of the actor, which can be persisted.\n *\n * @remarks\n * The internal state can be persisted from any actor, not only machines.\n *\n * Note that the persisted state is not the same as the snapshot from\n * {@link Actor.getSnapshot}. Persisted state represents the internal state of\n * the actor, while snapshots represent the actor's last emitted value.\n *\n * Can be restored with {@link ActorOptions.state}\n * @see https://stately.ai/docs/persistence\n */\n\n getPersistedSnapshot(options) {\n return this.logic.getPersistedSnapshot(this._snapshot, options);\n }\n [symbolObservable]() {\n return this;\n }\n\n /**\n * Read an actor’s snapshot synchronously.\n *\n * @remarks\n * The snapshot represent an actor's last emitted value.\n *\n * When an actor receives an event, its internal state may change. An actor\n * may emit a snapshot when a state transition occurs.\n *\n * Note that some actors, such as callback actors generated with\n * `fromCallback`, will not emit snapshots.\n * @see {@link Actor.subscribe} to subscribe to an actor’s snapshot values.\n * @see {@link Actor.getPersistedSnapshot} to persist the internal state of an actor (which is more than just a snapshot).\n */\n getSnapshot() {\n return this._snapshot;\n }\n}\n/**\n * Creates a new actor instance for the given actor logic with the provided\n * options, if any.\n *\n * @remarks\n * When you create an actor from actor logic via `createActor(logic)`, you\n * implicitly create an actor system where the created actor is the root actor.\n * Any actors spawned from this root actor and its descendants are part of that\n * actor system.\n * @example\n *\n * ```ts\n * import { createActor } from 'xstate';\n * import { someActorLogic } from './someActorLogic.ts';\n *\n * // Creating the actor, which implicitly creates an actor system with itself as the root actor\n * const actor = createActor(someActorLogic);\n *\n * actor.subscribe((snapshot) => {\n * console.log(snapshot);\n * });\n *\n * // Actors must be started by calling `actor.start()`, which will also start the actor system.\n * actor.start();\n *\n * // Actors can receive events\n * actor.send({ type: 'someEvent' });\n *\n * // You can stop root actors by calling `actor.stop()`, which will also stop the actor system and all actors in that system.\n * actor.stop();\n * ```\n *\n * @param logic - The actor logic to create an actor from. For a state machine\n * actor logic creator, see {@link createMachine}. Other actor logic creators\n * include {@link fromCallback}, {@link fromEventObservable},\n * {@link fromObservable}, {@link fromPromise}, and {@link fromTransition}.\n * @param options - Actor options\n */\nfunction createActor(logic, ...[options]) {\n return new Actor(logic, options);\n}\n\n/**\n * Creates a new Interpreter instance for the given machine with the provided\n * options, if any.\n *\n * @deprecated Use `createActor` instead\n * @alias\n */\nconst interpret = createActor;\n\n/**\n * @deprecated Use `Actor` instead.\n * @alias\n */\n\nfunction resolveCancel(_, snapshot, actionArgs, actionParams, {\n sendId\n}) {\n const resolvedSendId = typeof sendId === 'function' ? sendId(actionArgs, actionParams) : sendId;\n return [snapshot, {\n sendId: resolvedSendId\n }, undefined];\n}\nfunction executeCancel(actorScope, params) {\n actorScope.defer(() => {\n actorScope.system.scheduler.cancel(actorScope.self, params.sendId);\n });\n}\n/**\n * Cancels a delayed `sendTo(...)` action that is waiting to be executed. The\n * canceled `sendTo(...)` action will not send its event or execute, unless the\n * `delay` has already elapsed before `cancel(...)` is called.\n *\n * @example\n *\n * ```ts\n * import { createMachine, sendTo, cancel } from 'xstate';\n *\n * const machine = createMachine({\n * // ...\n * on: {\n * sendEvent: {\n * actions: sendTo(\n * 'some-actor',\n * { type: 'someEvent' },\n * {\n * id: 'some-id',\n * delay: 1000\n * }\n * )\n * },\n * cancelEvent: {\n * actions: cancel('some-id')\n * }\n * }\n * });\n * ```\n *\n * @param sendId The `id` of the `sendTo(...)` action to cancel.\n */\nfunction cancel(sendId) {\n function cancel(_args, _params) {\n }\n cancel.type = 'xstate.cancel';\n cancel.sendId = sendId;\n cancel.resolve = resolveCancel;\n cancel.execute = executeCancel;\n return cancel;\n}\n\nfunction resolveSpawn(actorScope, snapshot, actionArgs, _actionParams, {\n id,\n systemId,\n src,\n input,\n syncSnapshot\n}) {\n const logic = typeof src === 'string' ? resolveReferencedActor(snapshot.machine, src) : src;\n const resolvedId = typeof id === 'function' ? id(actionArgs) : id;\n let actorRef;\n let resolvedInput = undefined;\n if (logic) {\n resolvedInput = typeof input === 'function' ? input({\n context: snapshot.context,\n event: actionArgs.event,\n self: actorScope.self\n }) : input;\n actorRef = createActor(logic, {\n id: resolvedId,\n src,\n parent: actorScope.self,\n syncSnapshot,\n systemId,\n input: resolvedInput\n });\n }\n return [cloneMachineSnapshot(snapshot, {\n children: {\n ...snapshot.children,\n [resolvedId]: actorRef\n }\n }), {\n id,\n systemId,\n actorRef,\n src,\n input: resolvedInput\n }, undefined];\n}\nfunction executeSpawn(actorScope, {\n actorRef\n}) {\n if (!actorRef) {\n return;\n }\n actorScope.defer(() => {\n if (actorRef._processingStatus === ProcessingStatus.Stopped) {\n return;\n }\n actorRef.start();\n });\n}\nfunction spawnChild(...[src, {\n id,\n systemId,\n input,\n syncSnapshot = false\n} = {}]) {\n function spawnChild(_args, _params) {\n }\n spawnChild.type = 'xstate.spawnChild';\n spawnChild.id = id;\n spawnChild.systemId = systemId;\n spawnChild.src = src;\n spawnChild.input = input;\n spawnChild.syncSnapshot = syncSnapshot;\n spawnChild.resolve = resolveSpawn;\n spawnChild.execute = executeSpawn;\n return spawnChild;\n}\n\nfunction resolveStop(_, snapshot, args, actionParams, {\n actorRef\n}) {\n const actorRefOrString = typeof actorRef === 'function' ? actorRef(args, actionParams) : actorRef;\n const resolvedActorRef = typeof actorRefOrString === 'string' ? snapshot.children[actorRefOrString] : actorRefOrString;\n let children = snapshot.children;\n if (resolvedActorRef) {\n children = {\n ...children\n };\n delete children[resolvedActorRef.id];\n }\n return [cloneMachineSnapshot(snapshot, {\n children\n }), resolvedActorRef, undefined];\n}\nfunction unregisterRecursively(actorScope, actorRef) {\n // unregister children first (depth-first)\n const snapshot = actorRef.getSnapshot();\n if (snapshot && 'children' in snapshot) {\n for (const child of Object.values(snapshot.children)) {\n unregisterRecursively(actorScope, child);\n }\n }\n actorScope.system._unregister(actorRef);\n}\nfunction executeStop(actorScope, actorRef) {\n if (!actorRef) {\n return;\n }\n\n // we need to eagerly unregister it here so a new actor with the same systemId can be registered immediately\n // since we defer actual stopping of the actor but we don't defer actor creations (and we can't do that)\n // this could throw on `systemId` collision, for example, when dealing with reentering transitions\n // we also need to recursively unregister all nested children's systemIds\n unregisterRecursively(actorScope, actorRef);\n\n // this allows us to prevent an actor from being started if it gets stopped within the same macrostep\n // this can happen, for example, when the invoking state is being exited immediately by an always transition\n if (actorRef._processingStatus !== ProcessingStatus.Running) {\n actorScope.stopChild(actorRef);\n return;\n }\n // stopping a child enqueues a stop event in the child actor's mailbox\n // we need for all of the already enqueued events to be processed before we stop the child\n // the parent itself might want to send some events to a child (for example from exit actions on the invoking state)\n // and we don't want to ignore those events\n actorScope.defer(() => {\n actorScope.stopChild(actorRef);\n });\n}\n/**\n * Stops a child actor.\n *\n * @param actorRef The actor to stop.\n */\nfunction stopChild(actorRef) {\n function stop(_args, _params) {\n }\n stop.type = 'xstate.stopChild';\n stop.actorRef = actorRef;\n stop.resolve = resolveStop;\n stop.execute = executeStop;\n return stop;\n}\n\n/**\n * Stops a child actor.\n *\n * @deprecated Use `stopChild(...)` instead\n * @alias\n */\nconst stop = stopChild;\n\nfunction checkStateIn(snapshot, _, {\n stateValue\n}) {\n if (typeof stateValue === 'string' && isStateId(stateValue)) {\n const target = snapshot.machine.getStateNodeById(stateValue);\n return snapshot._nodes.some(sn => sn === target);\n }\n return snapshot.matches(stateValue);\n}\nfunction stateIn(stateValue) {\n function stateIn() {\n return false;\n }\n stateIn.check = checkStateIn;\n stateIn.stateValue = stateValue;\n return stateIn;\n}\nfunction checkNot(snapshot, {\n context,\n event\n}, {\n guards\n}) {\n return !evaluateGuard(guards[0], context, event, snapshot);\n}\n\n/**\n * Higher-order guard that evaluates to `true` if the `guard` passed to it\n * evaluates to `false`.\n *\n * @category Guards\n * @example\n *\n * ```ts\n * import { setup, not } from 'xstate';\n *\n * const machine = setup({\n * guards: {\n * someNamedGuard: () => false\n * }\n * }).createMachine({\n * on: {\n * someEvent: {\n * guard: not('someNamedGuard'),\n * actions: () => {\n * // will be executed if guard in `not(...)`\n * // evaluates to `false`\n * }\n * }\n * }\n * });\n * ```\n *\n * @returns A guard\n */\nfunction not(guard) {\n function not(_args, _params) {\n return false;\n }\n not.check = checkNot;\n not.guards = [guard];\n return not;\n}\nfunction checkAnd(snapshot, {\n context,\n event\n}, {\n guards\n}) {\n return guards.every(guard => evaluateGuard(guard, context, event, snapshot));\n}\n\n/**\n * Higher-order guard that evaluates to `true` if all `guards` passed to it\n * evaluate to `true`.\n *\n * @category Guards\n * @example\n *\n * ```ts\n * import { setup, and } from 'xstate';\n *\n * const machine = setup({\n * guards: {\n * someNamedGuard: () => true\n * }\n * }).createMachine({\n * on: {\n * someEvent: {\n * guard: and([({ context }) => context.value > 0, 'someNamedGuard']),\n * actions: () => {\n * // will be executed if all guards in `and(...)`\n * // evaluate to true\n * }\n * }\n * }\n * });\n * ```\n *\n * @returns A guard action object\n */\nfunction and(guards) {\n function and(_args, _params) {\n return false;\n }\n and.check = checkAnd;\n and.guards = guards;\n return and;\n}\nfunction checkOr(snapshot, {\n context,\n event\n}, {\n guards\n}) {\n return guards.some(guard => evaluateGuard(guard, context, event, snapshot));\n}\n\n/**\n * Higher-order guard that evaluates to `true` if any of the `guards` passed to\n * it evaluate to `true`.\n *\n * @category Guards\n * @example\n *\n * ```ts\n * import { setup, or } from 'xstate';\n *\n * const machine = setup({\n * guards: {\n * someNamedGuard: () => true\n * }\n * }).createMachine({\n * on: {\n * someEvent: {\n * guard: or([({ context }) => context.value > 0, 'someNamedGuard']),\n * actions: () => {\n * // will be executed if any of the guards in `or(...)`\n * // evaluate to true\n * }\n * }\n * }\n * });\n * ```\n *\n * @returns A guard action object\n */\nfunction or(guards) {\n function or(_args, _params) {\n return false;\n }\n or.check = checkOr;\n or.guards = guards;\n return or;\n}\n\n// TODO: throw on cycles (depth check should be enough)\nfunction evaluateGuard(guard, context, event, snapshot) {\n const {\n machine\n } = snapshot;\n const isInline = typeof guard === 'function';\n const resolved = isInline ? guard : machine.implementations.guards[typeof guard === 'string' ? guard : guard.type];\n if (!isInline && !resolved) {\n throw new Error(`Guard '${typeof guard === 'string' ? guard : guard.type}' is not implemented.'.`);\n }\n if (typeof resolved !== 'function') {\n return evaluateGuard(resolved, context, event, snapshot);\n }\n const guardArgs = {\n context,\n event\n };\n const guardParams = isInline || typeof guard === 'string' ? undefined : 'params' in guard ? typeof guard.params === 'function' ? guard.params({\n context,\n event\n }) : guard.params : undefined;\n if (!('check' in resolved)) {\n // the existing type of `.guards` assumes non-nullable `TExpressionGuard`\n // inline guards expect `TExpressionGuard` to be set to `undefined`\n // it's fine to cast this here, our logic makes sure that we call those 2 \"variants\" correctly\n return resolved(guardArgs, guardParams);\n }\n const builtinGuard = resolved;\n return builtinGuard.check(snapshot, guardArgs, resolved // this holds all params\n );\n}\n\nfunction isAtomicStateNode(stateNode) {\n return stateNode.type === 'atomic' || stateNode.type === 'final';\n}\nfunction getChildren(stateNode) {\n return Object.values(stateNode.states).filter(sn => sn.type !== 'history');\n}\nfunction getProperAncestors(stateNode, toStateNode) {\n const ancestors = [];\n if (toStateNode === stateNode) {\n return ancestors;\n }\n\n // add all ancestors\n let m = stateNode.parent;\n while (m && m !== toStateNode) {\n ancestors.push(m);\n m = m.parent;\n }\n return ancestors;\n}\nfunction getAllStateNodes(stateNodes) {\n const nodeSet = new Set(stateNodes);\n const adjList = getAdjList(nodeSet);\n\n // add descendants\n for (const s of nodeSet) {\n // if previously active, add existing child nodes\n if (s.type === 'compound' && (!adjList.get(s) || !adjList.get(s).length)) {\n getInitialStateNodesWithTheirAncestors(s).forEach(sn => nodeSet.add(sn));\n } else {\n if (s.type === 'parallel') {\n for (const child of getChildren(s)) {\n if (child.type === 'history') {\n continue;\n }\n if (!nodeSet.has(child)) {\n const initialStates = getInitialStateNodesWithTheirAncestors(child);\n for (const initialStateNode of initialStates) {\n nodeSet.add(initialStateNode);\n }\n }\n }\n }\n }\n }\n\n // add all ancestors\n for (const s of nodeSet) {\n let m = s.parent;\n while (m) {\n nodeSet.add(m);\n m = m.parent;\n }\n }\n return nodeSet;\n}\nfunction getValueFromAdj(baseNode, adjList) {\n const childStateNodes = adjList.get(baseNode);\n if (!childStateNodes) {\n return {}; // todo: fix?\n }\n if (baseNode.type === 'compound') {\n const childStateNode = childStateNodes[0];\n if (childStateNode) {\n if (isAtomicStateNode(childStateNode)) {\n return childStateNode.key;\n }\n } else {\n return {};\n }\n }\n const stateValue = {};\n for (const childStateNode of childStateNodes) {\n stateValue[childStateNode.key] = getValueFromAdj(childStateNode, adjList);\n }\n return stateValue;\n}\nfunction getAdjList(stateNodes) {\n const adjList = new Map();\n for (const s of stateNodes) {\n if (!adjList.has(s)) {\n adjList.set(s, []);\n }\n if (s.parent) {\n if (!adjList.has(s.parent)) {\n adjList.set(s.parent, []);\n }\n adjList.get(s.parent).push(s);\n }\n }\n return adjList;\n}\nfunction getStateValue(rootNode, stateNodes) {\n const config = getAllStateNodes(stateNodes);\n return getValueFromAdj(rootNode, getAdjList(config));\n}\nfunction isInFinalState(stateNodeSet, stateNode) {\n if (stateNode.type === 'compound') {\n return getChildren(stateNode).some(s => s.type === 'final' && stateNodeSet.has(s));\n }\n if (stateNode.type === 'parallel') {\n return getChildren(stateNode).every(sn => isInFinalState(stateNodeSet, sn));\n }\n return stateNode.type === 'final';\n}\nconst isStateId = str => str[0] === STATE_IDENTIFIER;\nfunction getCandidates(stateNode, receivedEventType) {\n const candidates = stateNode.transitions.get(receivedEventType) || [...stateNode.transitions.keys()].filter(eventDescriptor => matchesEventDescriptor(receivedEventType, eventDescriptor)).sort((a, b) => b.length - a.length).flatMap(key => stateNode.transitions.get(key));\n return candidates;\n}\n\n/** All delayed transitions from the config. */\nfunction getDelayedTransitions(stateNode) {\n const afterConfig = stateNode.config.after;\n if (!afterConfig) {\n return [];\n }\n const mutateEntryExit = delay => {\n const afterEvent = createAfterEvent(delay, stateNode.id);\n const eventType = afterEvent.type;\n stateNode.entry.push(raise(afterEvent, {\n id: eventType,\n delay\n }));\n stateNode.exit.push(cancel(eventType));\n return eventType;\n };\n const delayedTransitions = Object.keys(afterConfig).flatMap(delay => {\n const configTransition = afterConfig[delay];\n const resolvedTransition = typeof configTransition === 'string' ? {\n target: configTransition\n } : configTransition;\n const resolvedDelay = Number.isNaN(+delay) ? delay : +delay;\n const eventType = mutateEntryExit(resolvedDelay);\n return toArray(resolvedTransition).map(transition => ({\n ...transition,\n event: eventType,\n delay: resolvedDelay\n }));\n });\n return delayedTransitions.map(delayedTransition => {\n const {\n delay\n } = delayedTransition;\n return {\n ...formatTransition(stateNode, delayedTransition.event, delayedTransition),\n delay\n };\n });\n}\nfunction formatTransition(stateNode, descriptor, transitionConfig) {\n const normalizedTarget = normalizeTarget(transitionConfig.target);\n const reenter = transitionConfig.reenter ?? false;\n const target = resolveTarget(stateNode, normalizedTarget);\n const transition = {\n ...transitionConfig,\n actions: toArray(transitionConfig.actions),\n guard: transitionConfig.guard,\n target,\n source: stateNode,\n reenter,\n eventType: descriptor,\n toJSON: () => ({\n ...transition,\n source: `#${stateNode.id}`,\n target: target ? target.map(t => `#${t.id}`) : undefined\n })\n };\n return transition;\n}\nfunction formatTransitions(stateNode) {\n const transitions = new Map();\n if (stateNode.config.on) {\n for (const descriptor of Object.keys(stateNode.config.on)) {\n if (descriptor === NULL_EVENT) {\n throw new Error('Null events (\"\") cannot be specified as a transition key. Use `always: { ... }` instead.');\n }\n const transitionsConfig = stateNode.config.on[descriptor];\n transitions.set(descriptor, toTransitionConfigArray(transitionsConfig).map(t => formatTransition(stateNode, descriptor, t)));\n }\n }\n if (stateNode.config.onDone) {\n const descriptor = `xstate.done.state.${stateNode.id}`;\n transitions.set(descriptor, toTransitionConfigArray(stateNode.config.onDone).map(t => formatTransition(stateNode, descriptor, t)));\n }\n for (const invokeDef of stateNode.invoke) {\n if (invokeDef.onDone) {\n const descriptor = `xstate.done.actor.${invokeDef.id}`;\n transitions.set(descriptor, toTransitionConfigArray(invokeDef.onDone).map(t => formatTransition(stateNode, descriptor, t)));\n }\n if (invokeDef.onError) {\n const descriptor = `xstate.error.actor.${invokeDef.id}`;\n transitions.set(descriptor, toTransitionConfigArray(invokeDef.onError).map(t => formatTransition(stateNode, descriptor, t)));\n }\n if (invokeDef.onSnapshot) {\n const descriptor = `xstate.snapshot.${invokeDef.id}`;\n transitions.set(descriptor, toTransitionConfigArray(invokeDef.onSnapshot).map(t => formatTransition(stateNode, descriptor, t)));\n }\n }\n for (const delayedTransition of stateNode.after) {\n let existing = transitions.get(delayedTransition.eventType);\n if (!existing) {\n existing = [];\n transitions.set(delayedTransition.eventType, existing);\n }\n existing.push(delayedTransition);\n }\n return transitions;\n}\n\n/**\n * Collects route transitions from all descendants with explicit IDs. Called\n * once on the root node to avoid O(N²) repeated traversals.\n */\nfunction formatRouteTransitions(rootStateNode) {\n const routeTransitions = [];\n const collectRoutes = states => {\n Object.values(states).forEach(sn => {\n if (sn.config.route && sn.config.id) {\n const routeId = sn.config.id;\n const userGuard = sn.config.route.guard;\n const routeGuard = (args, params) => {\n if (args.event.to !== `#${routeId}`) {\n return false;\n }\n if (!userGuard) {\n return true;\n }\n if (typeof userGuard === 'function') {\n return userGuard(args, params);\n }\n return true;\n };\n const transition = {\n ...sn.config.route,\n guard: routeGuard,\n target: `#${routeId}`\n };\n routeTransitions.push(formatTransition(rootStateNode, 'xstate.route', transition));\n }\n if (sn.states) {\n collectRoutes(sn.states);\n }\n });\n };\n collectRoutes(rootStateNode.states);\n if (routeTransitions.length > 0) {\n rootStateNode.transitions.set('xstate.route', routeTransitions);\n }\n}\nfunction formatInitialTransition(stateNode, _target) {\n const resolvedTarget = typeof _target === 'string' ? stateNode.states[_target] : _target ? stateNode.states[_target.target] : undefined;\n if (!resolvedTarget && _target) {\n throw new Error(\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions, @typescript-eslint/no-base-to-string\n `Initial state node \"${_target}\" not found on parent state node #${stateNode.id}`);\n }\n const transition = {\n source: stateNode,\n actions: !_target || typeof _target === 'string' ? [] : toArray(_target.actions),\n eventType: null,\n reenter: false,\n target: resolvedTarget ? [resolvedTarget] : [],\n toJSON: () => ({\n ...transition,\n source: `#${stateNode.id}`,\n target: resolvedTarget ? [`#${resolvedTarget.id}`] : []\n })\n };\n return transition;\n}\nfunction resolveTarget(stateNode, targets) {\n if (targets === undefined) {\n // an undefined target signals that the state node should not transition from that state when receiving that event\n return undefined;\n }\n return targets.map(target => {\n if (typeof target !== 'string') {\n return target;\n }\n if (isStateId(target)) {\n return stateNode.machine.getStateNodeById(target);\n }\n const isInternalTarget = target[0] === STATE_DELIMITER;\n // If internal target is defined on machine,\n // do not include machine key on target\n if (isInternalTarget && !stateNode.parent) {\n return getStateNodeByPath(stateNode, target.slice(1));\n }\n const resolvedTarget = isInternalTarget ? stateNode.key + target : target;\n if (stateNode.parent) {\n try {\n const targetStateNode = getStateNodeByPath(stateNode.parent, resolvedTarget);\n return targetStateNode;\n } catch (err) {\n throw new Error(`Invalid transition definition for state node '${stateNode.id}':\\n${err.message}`);\n }\n } else {\n throw new Error(`Invalid target: \"${target}\" is not a valid target from the root node. Did you mean \".${target}\"?`);\n }\n });\n}\nfunction resolveHistoryDefaultTransition(stateNode) {\n const normalizedTarget = normalizeTarget(stateNode.config.target);\n if (!normalizedTarget) {\n return stateNode.parent.initial;\n }\n return {\n target: normalizedTarget.map(t => typeof t === 'string' ? getStateNodeByPath(stateNode.parent, t) : t)\n };\n}\nfunction isHistoryNode(stateNode) {\n return stateNode.type === 'history';\n}\nfunction getInitialStateNodesWithTheirAncestors(stateNode) {\n const states = getInitialStateNodes(stateNode);\n for (const initialState of states) {\n for (const ancestor of getProperAncestors(initialState, stateNode)) {\n states.add(ancestor);\n }\n }\n return states;\n}\nfunction getInitialStateNodes(stateNode) {\n const set = new Set();\n function iter(descStateNode) {\n if (set.has(descStateNode)) {\n return;\n }\n set.add(descStateNode);\n if (descStateNode.type === 'compound') {\n iter(descStateNode.initial.target[0]);\n } else if (descStateNode.type === 'parallel') {\n for (const child of getChildren(descStateNode)) {\n iter(child);\n }\n }\n }\n iter(stateNode);\n return set;\n}\n/** Returns the child state node from its relative `stateKey`, or throws. */\nfunction getStateNode(stateNode, stateKey) {\n if (isStateId(stateKey)) {\n return stateNode.machine.getStateNodeById(stateKey);\n }\n if (!stateNode.states) {\n throw new Error(`Unable to retrieve child state '${stateKey}' from '${stateNode.id}'; no child states exist.`);\n }\n const result = stateNode.states[stateKey];\n if (!result) {\n throw new Error(`Child state '${stateKey}' does not exist on '${stateNode.id}'`);\n }\n return result;\n}\n\n/**\n * Returns the relative state node from the given `statePath`, or throws.\n *\n * @param statePath The string or string array relative path to the state node.\n */\nfunction getStateNodeByPath(stateNode, statePath) {\n if (typeof statePath === 'string' && isStateId(statePath)) {\n try {\n return stateNode.machine.getStateNodeById(statePath);\n } catch {\n // try individual paths\n // throw e;\n }\n }\n const arrayStatePath = toStatePath(statePath).slice();\n let currentStateNode = stateNode;\n while (arrayStatePath.length) {\n const key = arrayStatePath.shift();\n if (!key.length) {\n break;\n }\n currentStateNode = getStateNode(currentStateNode, key);\n }\n return currentStateNode;\n}\n\n/**\n * Returns the state nodes represented by the current state value.\n *\n * @param stateValue The state value or State instance\n */\nfunction getStateNodes(stateNode, stateValue) {\n if (typeof stateValue === 'string') {\n const childStateNode = stateNode.states[stateValue];\n if (!childStateNode) {\n throw new Error(`State '${stateValue}' does not exist on '${stateNode.id}'`);\n }\n return [stateNode, childStateNode];\n }\n const childStateKeys = Object.keys(stateValue);\n const childStateNodes = childStateKeys.map(subStateKey => getStateNode(stateNode, subStateKey)).filter(Boolean);\n return [stateNode.machine.root, stateNode].concat(childStateNodes, childStateKeys.reduce((allSubStateNodes, subStateKey) => {\n const subStateNode = getStateNode(stateNode, subStateKey);\n if (!subStateNode) {\n return allSubStateNodes;\n }\n const subStateNodes = getStateNodes(subStateNode, stateValue[subStateKey]);\n return allSubStateNodes.concat(subStateNodes);\n }, []));\n}\nfunction transitionAtomicNode(stateNode, stateValue, snapshot, event) {\n const childStateNode = getStateNode(stateNode, stateValue);\n const next = childStateNode.next(snapshot, event);\n if (!next || !next.length) {\n return stateNode.next(snapshot, event);\n }\n return next;\n}\nfunction transitionCompoundNode(stateNode, stateValue, snapshot, event) {\n const subStateKeys = Object.keys(stateValue);\n const childStateNode = getStateNode(stateNode, subStateKeys[0]);\n const next = transitionNode(childStateNode, stateValue[subStateKeys[0]], snapshot, event);\n if (!next || !next.length) {\n return stateNode.next(snapshot, event);\n }\n return next;\n}\nfunction transitionParallelNode(stateNode, stateValue, snapshot, event) {\n const allInnerTransitions = [];\n for (const subStateKey of Object.keys(stateValue)) {\n const subStateValue = stateValue[subStateKey];\n if (!subStateValue) {\n continue;\n }\n const subStateNode = getStateNode(stateNode, subStateKey);\n const innerTransitions = transitionNode(subStateNode, subStateValue, snapshot, event);\n if (innerTransitions) {\n allInnerTransitions.push(...innerTransitions);\n }\n }\n if (!allInnerTransitions.length) {\n return stateNode.next(snapshot, event);\n }\n return allInnerTransitions;\n}\nfunction transitionNode(stateNode, stateValue, snapshot, event) {\n // leaf node\n if (typeof stateValue === 'string') {\n return transitionAtomicNode(stateNode, stateValue, snapshot, event);\n }\n\n // compound node\n if (Object.keys(stateValue).length === 1) {\n return transitionCompoundNode(stateNode, stateValue, snapshot, event);\n }\n\n // parallel node\n return transitionParallelNode(stateNode, stateValue, snapshot, event);\n}\nfunction getHistoryNodes(stateNode) {\n return Object.keys(stateNode.states).map(key => stateNode.states[key]).filter(sn => sn.type === 'history');\n}\nfunction isDescendant(childStateNode, parentStateNode) {\n let marker = childStateNode;\n while (marker.parent && marker.parent !== parentStateNode) {\n marker = marker.parent;\n }\n return marker.parent === parentStateNode;\n}\nfunction hasIntersection(s1, s2) {\n const set1 = new Set(s1);\n const set2 = new Set(s2);\n for (const item of set1) {\n if (set2.has(item)) {\n return true;\n }\n }\n for (const item of set2) {\n if (set1.has(item)) {\n return true;\n }\n }\n return false;\n}\nfunction removeConflictingTransitions(enabledTransitions, stateNodeSet, historyValue) {\n const filteredTransitions = new Set();\n for (const t1 of enabledTransitions) {\n let t1Preempted = false;\n const transitionsToRemove = new Set();\n for (const t2 of filteredTransitions) {\n if (hasIntersection(computeExitSet([t1], stateNodeSet, historyValue), computeExitSet([t2], stateNodeSet, historyValue))) {\n if (isDescendant(t1.source, t2.source)) {\n transitionsToRemove.add(t2);\n } else {\n t1Preempted = true;\n break;\n }\n }\n }\n if (!t1Preempted) {\n for (const t3 of transitionsToRemove) {\n filteredTransitions.delete(t3);\n }\n filteredTransitions.add(t1);\n }\n }\n return Array.from(filteredTransitions);\n}\nfunction findLeastCommonAncestor(stateNodes) {\n const [head, ...tail] = stateNodes;\n for (const ancestor of getProperAncestors(head, undefined)) {\n if (tail.every(sn => isDescendant(sn, ancestor))) {\n return ancestor;\n }\n }\n}\nfunction getEffectiveTargetStates(transition, historyValue) {\n if (!transition.target) {\n return [];\n }\n const targets = new Set();\n for (const targetNode of transition.target) {\n if (isHistoryNode(targetNode)) {\n if (historyValue[targetNode.id]) {\n for (const node of historyValue[targetNode.id]) {\n targets.add(node);\n }\n } else {\n for (const node of getEffectiveTargetStates(resolveHistoryDefaultTransition(targetNode), historyValue)) {\n targets.add(node);\n }\n }\n } else {\n targets.add(targetNode);\n }\n }\n return [...targets];\n}\nfunction getTransitionDomain(transition, historyValue) {\n const targetStates = getEffectiveTargetStates(transition, historyValue);\n if (!targetStates) {\n return;\n }\n if (!transition.reenter && targetStates.every(target => target === transition.source || isDescendant(target, transition.source))) {\n return transition.source;\n }\n const lca = findLeastCommonAncestor(targetStates.concat(transition.source));\n if (lca) {\n return lca;\n }\n\n // at this point we know that it's a root transition since LCA couldn't be found\n if (transition.reenter) {\n return;\n }\n return transition.source.machine.root;\n}\nfunction computeExitSet(transitions, stateNodeSet, historyValue) {\n const statesToExit = new Set();\n for (const t of transitions) {\n if (t.target?.length) {\n const domain = getTransitionDomain(t, historyValue);\n if (t.reenter && t.source === domain) {\n statesToExit.add(domain);\n }\n for (const stateNode of stateNodeSet) {\n if (isDescendant(stateNode, domain)) {\n statesToExit.add(stateNode);\n }\n }\n }\n }\n return [...statesToExit];\n}\nfunction areStateNodeCollectionsEqual(prevStateNodes, nextStateNodeSet) {\n if (prevStateNodes.length !== nextStateNodeSet.size) {\n return false;\n }\n for (const node of prevStateNodes) {\n if (!nextStateNodeSet.has(node)) {\n return false;\n }\n }\n return true;\n}\nfunction initialMicrostep(root, preInitialState, actorScope, initEvent, internalQueue) {\n return microstep([{\n target: [...getInitialStateNodes(root)],\n source: root,\n reenter: true,\n actions: [],\n eventType: null,\n toJSON: null\n }], preInitialState, actorScope, initEvent, true, internalQueue);\n}\n\n/** https://www.w3.org/TR/scxml/#microstepProcedure */\nfunction microstep(transitions, currentSnapshot, actorScope, event, isInitial, internalQueue) {\n const actions = [];\n if (!transitions.length) {\n return [currentSnapshot, actions];\n }\n const originalExecutor = actorScope.actionExecutor;\n actorScope.actionExecutor = action => {\n actions.push(action);\n originalExecutor(action);\n };\n try {\n const mutStateNodeSet = new Set(currentSnapshot._nodes);\n let historyValue = currentSnapshot.historyValue;\n const filteredTransitions = removeConflictingTransitions(transitions, mutStateNodeSet, historyValue);\n let nextState = currentSnapshot;\n\n // Exit states\n if (!isInitial) {\n [nextState, historyValue] = exitStates(nextState, event, actorScope, filteredTransitions, mutStateNodeSet, historyValue, internalQueue, actorScope.actionExecutor);\n }\n\n // Execute transition content\n nextState = resolveActionsAndContext(nextState, event, actorScope, filteredTransitions.flatMap(t => t.actions), internalQueue, undefined);\n\n // Enter states\n nextState = enterStates(nextState, event, actorScope, filteredTransitions, mutStateNodeSet, internalQueue, historyValue, isInitial);\n const nextStateNodes = [...mutStateNodeSet];\n if (nextState.status === 'done') {\n nextState = resolveActionsAndContext(nextState, event, actorScope, nextStateNodes.sort((a, b) => b.order - a.order).flatMap(state => state.exit), internalQueue, undefined);\n }\n\n // eslint-disable-next-line no-useless-catch\n try {\n if (historyValue === currentSnapshot.historyValue && areStateNodeCollectionsEqual(currentSnapshot._nodes, mutStateNodeSet)) {\n return [nextState, actions];\n }\n return [cloneMachineSnapshot(nextState, {\n _nodes: nextStateNodes,\n historyValue\n }), actions];\n } catch (e) {\n // TODO: Refactor this once proper error handling is implemented.\n // See https://github.com/statelyai/rfcs/pull/4\n throw e;\n }\n } finally {\n actorScope.actionExecutor = originalExecutor;\n }\n}\nfunction getMachineOutput(snapshot, event, actorScope, rootNode, rootCompletionNode) {\n if (rootNode.output === undefined) {\n return;\n }\n const doneStateEvent = createDoneStateEvent(rootCompletionNode.id, rootCompletionNode.output !== undefined && rootCompletionNode.parent ? resolveOutput(rootCompletionNode.output, snapshot.context, event, actorScope.self) : undefined);\n return resolveOutput(rootNode.output, snapshot.context, doneStateEvent, actorScope.self);\n}\nfunction enterStates(currentSnapshot, event, actorScope, filteredTransitions, mutStateNodeSet, internalQueue, historyValue, isInitial) {\n let nextSnapshot = currentSnapshot;\n const statesToEnter = new Set();\n // those are states that were directly targeted or indirectly targeted by the explicit target\n // in other words, those are states for which initial actions should be executed\n // when we target `#deep_child` initial actions of its ancestors shouldn't be executed\n const statesForDefaultEntry = new Set();\n computeEntrySet(filteredTransitions, historyValue, statesForDefaultEntry, statesToEnter);\n\n // In the initial state, the root state node is \"entered\".\n if (isInitial) {\n statesForDefaultEntry.add(currentSnapshot.machine.root);\n }\n const completedNodes = new Set();\n for (const stateNodeToEnter of [...statesToEnter].sort((a, b) => a.order - b.order)) {\n mutStateNodeSet.add(stateNodeToEnter);\n const actions = [];\n\n // Add entry actions\n actions.push(...stateNodeToEnter.entry);\n for (const invokeDef of stateNodeToEnter.invoke) {\n actions.push(spawnChild(invokeDef.src, {\n ...invokeDef,\n syncSnapshot: !!invokeDef.onSnapshot\n }));\n }\n if (statesForDefaultEntry.has(stateNodeToEnter)) {\n const initialActions = stateNodeToEnter.initial.actions;\n actions.push(...initialActions);\n }\n nextSnapshot = resolveActionsAndContext(nextSnapshot, event, actorScope, actions, internalQueue, stateNodeToEnter.invoke.map(invokeDef => invokeDef.id));\n if (stateNodeToEnter.type === 'final') {\n const parent = stateNodeToEnter.parent;\n let ancestorMarker = parent?.type === 'parallel' ? parent : parent?.parent;\n let rootCompletionNode = ancestorMarker || stateNodeToEnter;\n if (parent?.type === 'compound') {\n internalQueue.push(createDoneStateEvent(parent.id, stateNodeToEnter.output !== undefined ? resolveOutput(stateNodeToEnter.output, nextSnapshot.context, event, actorScope.self) : undefined));\n }\n while (ancestorMarker?.type === 'parallel' && !completedNodes.has(ancestorMarker) && isInFinalState(mutStateNodeSet, ancestorMarker)) {\n completedNodes.add(ancestorMarker);\n internalQueue.push(createDoneStateEvent(ancestorMarker.id));\n rootCompletionNode = ancestorMarker;\n ancestorMarker = ancestorMarker.parent;\n }\n if (ancestorMarker) {\n continue;\n }\n nextSnapshot = cloneMachineSnapshot(nextSnapshot, {\n status: 'done',\n output: getMachineOutput(nextSnapshot, event, actorScope, nextSnapshot.machine.root, rootCompletionNode)\n });\n }\n }\n return nextSnapshot;\n}\nfunction computeEntrySet(transitions, historyValue, statesForDefaultEntry, statesToEnter) {\n for (const t of transitions) {\n const domain = getTransitionDomain(t, historyValue);\n for (const s of t.target || []) {\n if (!isHistoryNode(s) && (\n // if the target is different than the source then it will *definitely* be entered\n t.source !== s ||\n // we know that the domain can't lie within the source\n // if it's different than the source then it's outside of it and it means that the target has to be entered as well\n t.source !== domain ||\n // reentering transitions always enter the target, even if it's the source itself\n t.reenter)) {\n statesToEnter.add(s);\n statesForDefaultEntry.add(s);\n }\n addDescendantStatesToEnter(s, historyValue, statesForDefaultEntry, statesToEnter);\n }\n const targetStates = getEffectiveTargetStates(t, historyValue);\n for (const s of targetStates) {\n const ancestors = getProperAncestors(s, domain);\n if (domain?.type === 'parallel') {\n ancestors.push(domain);\n }\n addAncestorStatesToEnter(statesToEnter, historyValue, statesForDefaultEntry, ancestors, !t.source.parent && t.reenter ? undefined : domain);\n }\n }\n}\nfunction addDescendantStatesToEnter(stateNode, historyValue, statesForDefaultEntry, statesToEnter) {\n if (isHistoryNode(stateNode)) {\n if (historyValue[stateNode.id]) {\n const historyStateNodes = historyValue[stateNode.id];\n for (const s of historyStateNodes) {\n statesToEnter.add(s);\n addDescendantStatesToEnter(s, historyValue, statesForDefaultEntry, statesToEnter);\n }\n for (const s of historyStateNodes) {\n addProperAncestorStatesToEnter(s, stateNode.parent, statesToEnter, historyValue, statesForDefaultEntry);\n }\n } else {\n const historyDefaultTransition = resolveHistoryDefaultTransition(stateNode);\n for (const s of historyDefaultTransition.target) {\n statesToEnter.add(s);\n if (historyDefaultTransition === stateNode.parent?.initial) {\n statesForDefaultEntry.add(stateNode.parent);\n }\n addDescendantStatesToEnter(s, historyValue, statesForDefaultEntry, statesToEnter);\n }\n for (const s of historyDefaultTransition.target) {\n addProperAncestorStatesToEnter(s, stateNode.parent, statesToEnter, historyValue, statesForDefaultEntry);\n }\n }\n } else {\n if (stateNode.type === 'compound') {\n const [initialState] = stateNode.initial.target;\n if (!isHistoryNode(initialState)) {\n statesToEnter.add(initialState);\n statesForDefaultEntry.add(initialState);\n }\n addDescendantStatesToEnter(initialState, historyValue, statesForDefaultEntry, statesToEnter);\n addProperAncestorStatesToEnter(initialState, stateNode, statesToEnter, historyValue, statesForDefaultEntry);\n } else {\n if (stateNode.type === 'parallel') {\n for (const child of getChildren(stateNode).filter(sn => !isHistoryNode(sn))) {\n if (![...statesToEnter].some(s => isDescendant(s, child))) {\n if (!isHistoryNode(child)) {\n statesToEnter.add(child);\n statesForDefaultEntry.add(child);\n }\n addDescendantStatesToEnter(child, historyValue, statesForDefaultEntry, statesToEnter);\n }\n }\n }\n }\n }\n}\nfunction addAncestorStatesToEnter(statesToEnter, historyValue, statesForDefaultEntry, ancestors, reentrancyDomain) {\n for (const anc of ancestors) {\n if (!reentrancyDomain || isDescendant(anc, reentrancyDomain)) {\n statesToEnter.add(anc);\n }\n if (anc.type === 'parallel') {\n for (const child of getChildren(anc).filter(sn => !isHistoryNode(sn))) {\n if (![...statesToEnter].some(s => isDescendant(s, child))) {\n statesToEnter.add(child);\n addDescendantStatesToEnter(child, historyValue, statesForDefaultEntry, statesToEnter);\n }\n }\n }\n }\n}\nfunction addProperAncestorStatesToEnter(stateNode, toStateNode, statesToEnter, historyValue, statesForDefaultEntry) {\n addAncestorStatesToEnter(statesToEnter, historyValue, statesForDefaultEntry, getProperAncestors(stateNode, toStateNode));\n}\nfunction exitStates(currentSnapshot, event, actorScope, transitions, mutStateNodeSet, historyValue, internalQueue, _actionExecutor) {\n let nextSnapshot = currentSnapshot;\n const statesToExit = computeExitSet(transitions, mutStateNodeSet, historyValue);\n statesToExit.sort((a, b) => b.order - a.order);\n let changedHistory;\n\n // From SCXML algorithm: https://www.w3.org/TR/scxml/#exitStates\n for (const exitStateNode of statesToExit) {\n for (const historyNode of getHistoryNodes(exitStateNode)) {\n let predicate;\n if (historyNode.history === 'deep') {\n predicate = sn => isAtomicStateNode(sn) && isDescendant(sn, exitStateNode);\n } else {\n predicate = sn => {\n return sn.parent === exitStateNode;\n };\n }\n changedHistory ??= {\n ...historyValue\n };\n changedHistory[historyNode.id] = Array.from(mutStateNodeSet).filter(predicate);\n }\n }\n for (const s of statesToExit) {\n nextSnapshot = resolveActionsAndContext(nextSnapshot, event, actorScope, [...s.exit, ...s.invoke.map(def => stopChild(def.id))], internalQueue, undefined);\n mutStateNodeSet.delete(s);\n }\n return [nextSnapshot, changedHistory || historyValue];\n}\nfunction getAction(machine, actionType) {\n return machine.implementations.actions[actionType];\n}\nfunction resolveAndExecuteActionsWithContext(currentSnapshot, event, actorScope, actions, extra, retries) {\n const {\n machine\n } = currentSnapshot;\n let intermediateSnapshot = currentSnapshot;\n for (const action of actions) {\n const isInline = typeof action === 'function';\n const resolvedAction = isInline ? action :\n // the existing type of `.actions` assumes non-nullable `TExpressionAction`\n // it's fine to cast this here to get a common type and lack of errors in the rest of the code\n // our logic below makes sure that we call those 2 \"variants\" correctly\n\n getAction(machine, typeof action === 'string' ? action : action.type);\n const actionArgs = {\n context: intermediateSnapshot.context,\n event,\n self: actorScope.self,\n system: actorScope.system\n };\n const actionParams = isInline || typeof action === 'string' ? undefined : 'params' in action ? typeof action.params === 'function' ? action.params({\n context: intermediateSnapshot.context,\n event\n }) : action.params : undefined;\n if (!resolvedAction || !('resolve' in resolvedAction)) {\n actorScope.actionExecutor({\n type: typeof action === 'string' ? action : typeof action === 'object' ? action.type : action.name || '(anonymous)',\n info: actionArgs,\n params: actionParams,\n exec: resolvedAction\n });\n continue;\n }\n const builtinAction = resolvedAction;\n const [nextState, params, actions] = builtinAction.resolve(actorScope, intermediateSnapshot, actionArgs, actionParams, resolvedAction,\n // this holds all params\n extra);\n intermediateSnapshot = nextState;\n if ('retryResolve' in builtinAction) {\n retries?.push([builtinAction, params]);\n }\n if ('execute' in builtinAction) {\n actorScope.actionExecutor({\n type: builtinAction.type,\n info: actionArgs,\n params,\n exec: builtinAction.execute.bind(null, actorScope, params)\n });\n }\n if (actions) {\n intermediateSnapshot = resolveAndExecuteActionsWithContext(intermediateSnapshot, event, actorScope, actions, extra, retries);\n }\n }\n return intermediateSnapshot;\n}\nfunction resolveActionsAndContext(currentSnapshot, event, actorScope, actions, internalQueue, deferredActorIds) {\n const retries = deferredActorIds ? [] : undefined;\n const nextState = resolveAndExecuteActionsWithContext(currentSnapshot, event, actorScope, actions, {\n internalQueue,\n deferredActorIds\n }, retries);\n retries?.forEach(([builtinAction, params]) => {\n builtinAction.retryResolve(actorScope, nextState, params);\n });\n return nextState;\n}\nfunction macrostep(snapshot, event, actorScope, internalQueue) {\n let nextSnapshot = snapshot;\n const microsteps = [];\n function addMicrostep(step, event, transitions) {\n actorScope.system._sendInspectionEvent({\n type: '@xstate.microstep',\n actorRef: actorScope.self,\n event,\n snapshot: step[0],\n _transitions: transitions\n });\n microsteps.push(step);\n }\n\n // Handle stop event\n if (event.type === XSTATE_STOP) {\n nextSnapshot = cloneMachineSnapshot(stopChildren(nextSnapshot, event, actorScope), {\n status: 'stopped'\n });\n addMicrostep([nextSnapshot, []], event, []);\n return {\n snapshot: nextSnapshot,\n microsteps\n };\n }\n let nextEvent = event;\n\n // Assume the state is at rest (no raised events)\n // Determine the next state based on the next microstep\n if (nextEvent.type !== XSTATE_INIT) {\n const currentEvent = nextEvent;\n const isErr = isErrorActorEvent(currentEvent);\n const transitions = selectTransitions(currentEvent, nextSnapshot);\n if (isErr && !transitions.length) {\n // TODO: we should likely only allow transitions selected by very explicit descriptors\n // `*` shouldn't be matched, likely `xstate.error.*` shouldn't be either\n // similarly `xstate.error.actor.*` and `xstate.error.actor.todo.*` have to be considered too\n nextSnapshot = cloneMachineSnapshot(snapshot, {\n status: 'error',\n error: currentEvent.error\n });\n addMicrostep([nextSnapshot, []], currentEvent, []);\n return {\n snapshot: nextSnapshot,\n microsteps\n };\n }\n const step = microstep(transitions, snapshot, actorScope, nextEvent, false,\n // isInitial\n internalQueue);\n nextSnapshot = step[0];\n addMicrostep(step, currentEvent, transitions);\n }\n let shouldSelectEventlessTransitions = true;\n while (nextSnapshot.status === 'active') {\n let enabledTransitions = shouldSelectEventlessTransitions ? selectEventlessTransitions(nextSnapshot, nextEvent) : [];\n\n // eventless transitions should always be selected after selecting *regular* transitions\n // by assigning `undefined` to `previousState` we ensure that `shouldSelectEventlessTransitions` gets always computed to true in such a case\n const previousState = enabledTransitions.length ? nextSnapshot : undefined;\n if (!enabledTransitions.length) {\n if (!internalQueue.length) {\n break;\n }\n nextEvent = internalQueue.shift();\n enabledTransitions = selectTransitions(nextEvent, nextSnapshot);\n }\n const step = microstep(enabledTransitions, nextSnapshot, actorScope, nextEvent, false, internalQueue);\n nextSnapshot = step[0];\n shouldSelectEventlessTransitions = nextSnapshot !== previousState;\n addMicrostep(step, nextEvent, enabledTransitions);\n }\n if (nextSnapshot.status !== 'active') {\n stopChildren(nextSnapshot, nextEvent, actorScope);\n }\n return {\n snapshot: nextSnapshot,\n microsteps\n };\n}\nfunction stopChildren(nextState, event, actorScope) {\n return resolveActionsAndContext(nextState, event, actorScope, Object.values(nextState.children).map(child => stopChild(child)), [], undefined);\n}\nfunction selectTransitions(event, nextState) {\n return nextState.machine.getTransitionData(nextState, event);\n}\nfunction selectEventlessTransitions(nextState, event) {\n const enabledTransitionSet = new Set();\n const atomicStates = nextState._nodes.filter(isAtomicStateNode);\n for (const stateNode of atomicStates) {\n loop: for (const s of [stateNode].concat(getProperAncestors(stateNode, undefined))) {\n if (!s.always) {\n continue;\n }\n for (const transition of s.always) {\n if (transition.guard === undefined || evaluateGuard(transition.guard, nextState.context, event, nextState)) {\n enabledTransitionSet.add(transition);\n break loop;\n }\n }\n }\n }\n return removeConflictingTransitions(Array.from(enabledTransitionSet), new Set(nextState._nodes), nextState.historyValue);\n}\n\n/**\n * Resolves a partial state value with its full representation in the state\n * node's machine.\n *\n * @param stateValue The partial state value to resolve.\n */\nfunction resolveStateValue(rootNode, stateValue) {\n const allStateNodes = getAllStateNodes(getStateNodes(rootNode, stateValue));\n return getStateValue(rootNode, [...allStateNodes]);\n}\n\nfunction isMachineSnapshot(value) {\n return !!value && typeof value === 'object' && 'machine' in value && 'value' in value;\n}\nconst machineSnapshotMatches = function matches(testValue) {\n return matchesState(testValue, this.value);\n};\nconst machineSnapshotHasTag = function hasTag(tag) {\n return this.tags.has(tag);\n};\nconst machineSnapshotCan = function can(event) {\n const transitionData = this.machine.getTransitionData(this, event);\n return !!transitionData?.length &&\n // Check that at least one transition is not forbidden\n transitionData.some(t => t.target !== undefined || t.actions.length);\n};\nconst machineSnapshotToJSON = function toJSON() {\n const {\n _nodes: nodes,\n tags,\n machine,\n getMeta,\n toJSON,\n can,\n hasTag,\n matches,\n ...jsonValues\n } = this;\n return {\n ...jsonValues,\n tags: Array.from(tags)\n };\n};\nconst machineSnapshotGetMeta = function getMeta() {\n return this._nodes.reduce((acc, stateNode) => {\n if (stateNode.meta !== undefined) {\n acc[stateNode.id] = stateNode.meta;\n }\n return acc;\n }, {});\n};\nfunction createMachineSnapshot(config, machine) {\n return {\n status: config.status,\n output: config.output,\n error: config.error,\n machine,\n context: config.context,\n _nodes: config._nodes,\n value: getStateValue(machine.root, config._nodes),\n tags: new Set(config._nodes.flatMap(sn => sn.tags)),\n children: config.children,\n historyValue: config.historyValue || {},\n matches: machineSnapshotMatches,\n hasTag: machineSnapshotHasTag,\n can: machineSnapshotCan,\n getMeta: machineSnapshotGetMeta,\n toJSON: machineSnapshotToJSON\n };\n}\nfunction cloneMachineSnapshot(snapshot, config = {}) {\n return createMachineSnapshot({\n ...snapshot,\n ...config\n }, snapshot.machine);\n}\nfunction serializeHistoryValue(historyValue) {\n if (typeof historyValue !== 'object' || historyValue === null) {\n return {};\n }\n const result = {};\n for (const key in historyValue) {\n const value = historyValue[key];\n if (Array.isArray(value)) {\n result[key] = value.map(item => ({\n id: item.id\n }));\n }\n }\n return result;\n}\nfunction getPersistedSnapshot(snapshot, options) {\n const {\n _nodes: nodes,\n tags,\n machine,\n children,\n context,\n can,\n hasTag,\n matches,\n getMeta,\n toJSON,\n ...jsonValues\n } = snapshot;\n const childrenJson = {};\n for (const id in children) {\n const child = children[id];\n childrenJson[id] = {\n snapshot: child.getPersistedSnapshot(options),\n src: child.src,\n systemId: child.systemId,\n syncSnapshot: child._syncSnapshot\n };\n }\n const persisted = {\n ...jsonValues,\n context: persistContext(context),\n children: childrenJson,\n historyValue: serializeHistoryValue(jsonValues.historyValue)\n };\n return persisted;\n}\nfunction persistContext(contextPart) {\n let copy;\n for (const key in contextPart) {\n const value = contextPart[key];\n if (value && typeof value === 'object') {\n if ('sessionId' in value && 'send' in value && 'ref' in value) {\n copy ??= Array.isArray(contextPart) ? contextPart.slice() : {\n ...contextPart\n };\n copy[key] = {\n xstate$$type: $$ACTOR_TYPE,\n id: value.id\n };\n } else {\n const result = persistContext(value);\n if (result !== value) {\n copy ??= Array.isArray(contextPart) ? contextPart.slice() : {\n ...contextPart\n };\n copy[key] = result;\n }\n }\n }\n }\n return copy ?? contextPart;\n}\n\nfunction resolveRaise(_, snapshot, args, actionParams, {\n event: eventOrExpr,\n id,\n delay\n}, {\n internalQueue\n}) {\n const delaysMap = snapshot.machine.implementations.delays;\n if (typeof eventOrExpr === 'string') {\n throw new Error(\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `Only event objects may be used with raise; use raise({ type: \"${eventOrExpr}\" }) instead`);\n }\n const resolvedEvent = typeof eventOrExpr === 'function' ? eventOrExpr(args, actionParams) : eventOrExpr;\n let resolvedDelay;\n if (typeof delay === 'string') {\n const configDelay = delaysMap && delaysMap[delay];\n resolvedDelay = typeof configDelay === 'function' ? configDelay(args, actionParams) : configDelay;\n } else {\n resolvedDelay = typeof delay === 'function' ? delay(args, actionParams) : delay;\n }\n if (typeof resolvedDelay !== 'number') {\n internalQueue.push(resolvedEvent);\n }\n return [snapshot, {\n event: resolvedEvent,\n id,\n delay: resolvedDelay\n }, undefined];\n}\nfunction executeRaise(actorScope, params) {\n const {\n event,\n delay,\n id\n } = params;\n if (typeof delay === 'number') {\n actorScope.defer(() => {\n const self = actorScope.self;\n actorScope.system.scheduler.schedule(self, self, event, delay, id);\n });\n return;\n }\n}\n/**\n * Raises an event. This places the event in the internal event queue, so that\n * the event is immediately consumed by the machine in the current step.\n *\n * @param eventType The event to raise.\n */\nfunction raise(eventOrExpr, options) {\n function raise(_args, _params) {\n }\n raise.type = 'xstate.raise';\n raise.event = eventOrExpr;\n raise.id = options?.id;\n raise.delay = options?.delay;\n raise.resolve = resolveRaise;\n raise.execute = executeRaise;\n return raise;\n}\n\nexport { $$ACTOR_TYPE as $, Actor as A, toTransitionConfigArray as B, formatTransition as C, evaluateGuard as D, createInvokeId as E, getDelayedTransitions as F, formatInitialTransition as G, getCandidates as H, formatRouteTransitions as I, resolveStateValue as J, getAllStateNodes as K, createMachineSnapshot as L, isInFinalState as M, NULL_EVENT as N, transitionNode as O, resolveActionsAndContext as P, toStatePath as Q, isStateId as R, STATE_DELIMITER as S, getStateNodeByPath as T, getPersistedSnapshot as U, resolveReferencedActor as V, XSTATE_ERROR as W, XSTATE_STOP as X, createErrorActorEvent as Y, ProcessingStatus as Z, cloneMachineSnapshot as _, cancel as a, spawnChild as b, createActor as c, macrostep as d, createInitEvent as e, isAtomicStateNode as f, getProperAncestors as g, interpret as h, initialMicrostep as i, and as j, stateIn as k, isMachineSnapshot as l, matchesEventDescriptor as m, not as n, or as o, getStateNodes as p, getAllOwnEventDescriptors as q, raise as r, stopChild as s, toArray as t, matchesState as u, pathToStateValue as v, toObserver as w, stop as x, mapValues as y, formatTransitions as z };\n","import { X as XSTATE_STOP, c as createActor } from '../../dist/raise-34c45204.esm.js';\nimport '../../dev/dist/xstate-dev.esm.js';\n\n/**\n * Represents an actor created by `fromTransition`.\n *\n * The type of `self` within the actor's logic.\n *\n * @example\n *\n * ```ts\n * import {\n * fromTransition,\n * createActor,\n * type AnyActorSystem\n * } from 'xstate';\n *\n * //* The actor's stored context.\n * type Context = {\n * // The current count.\n * count: number;\n * // The amount to increase `count` by.\n * step: number;\n * };\n * // The events the actor receives.\n * type Event = { type: 'increment' };\n * // The actor's input.\n * type Input = { step?: number };\n *\n * // Actor logic that increments `count` by `step` when it receives an event of\n * // type `increment`.\n * const logic = fromTransition<Context, Event, AnyActorSystem, Input>(\n * (state, event, actorScope) => {\n * actorScope.self;\n * // ^? TransitionActorRef<Context, Event>\n *\n * if (event.type === 'increment') {\n * return {\n * ...state,\n * count: state.count + state.step\n * };\n * }\n * return state;\n * },\n * ({ input, self }) => {\n * self;\n * // ^? TransitionActorRef<Context, Event>\n *\n * return {\n * count: 0,\n * step: input.step ?? 1\n * };\n * }\n * );\n *\n * const actor = createActor(logic, { input: { step: 10 } });\n * // ^? TransitionActorRef<Context, Event>\n * ```\n *\n * @see {@link fromTransition}\n */\n\n/**\n * Returns actor logic given a transition function and its initial state.\n *\n * A “transition function” is a function that takes the current `state` and\n * received `event` object as arguments, and returns the next state, similar to\n * a reducer.\n *\n * Actors created from transition logic (“transition actors”) can:\n *\n * - Receive events\n * - Emit snapshots of its state\n *\n * The transition function’s `state` is used as its transition actor’s\n * `context`.\n *\n * Note that the \"state\" for a transition function is provided by the initial\n * state argument, and is not the same as the State object of an actor or a\n * state within a machine configuration.\n *\n * @example\n *\n * ```ts\n * const transitionLogic = fromTransition(\n * (state, event) => {\n * if (event.type === 'increment') {\n * return {\n * ...state,\n * count: state.count + 1\n * };\n * }\n * return state;\n * },\n * { count: 0 }\n * );\n *\n * const transitionActor = createActor(transitionLogic);\n * transitionActor.subscribe((snapshot) => {\n * console.log(snapshot);\n * });\n * transitionActor.start();\n * // => {\n * // status: 'active',\n * // context: { count: 0 },\n * // ...\n * // }\n *\n * transitionActor.send({ type: 'increment' });\n * // => {\n * // status: 'active',\n * // context: { count: 1 },\n * // ...\n * // }\n * ```\n *\n * @param transition The transition function used to describe the transition\n * logic. It should return the next state given the current state and event.\n * It receives the following arguments:\n *\n * - `state` - the current state.\n * - `event` - the received event.\n * - `actorScope` - the actor scope object, with properties like `self` and\n * `system`.\n *\n * @param initialContext The initial state of the transition function, either an\n * object representing the state, or a function which returns a state object.\n * If a function, it will receive as its only argument an object with the\n * following properties:\n *\n * - `input` - the `input` provided to its parent transition actor.\n * - `self` - a reference to its parent transition actor.\n *\n * @returns Actor logic\n * @see {@link https://stately.ai/docs/input | Input docs} for more information about how input is passed\n */\nfunction fromTransition(transition, initialContext) {\n return {\n config: transition,\n transition: (snapshot, event, actorScope) => {\n return {\n ...snapshot,\n context: transition(snapshot.context, event, actorScope)\n };\n },\n getInitialSnapshot: (_, input) => {\n return {\n status: 'active',\n output: undefined,\n error: undefined,\n context: typeof initialContext === 'function' ? initialContext({\n input\n }) : initialContext\n };\n },\n getPersistedSnapshot: snapshot => snapshot,\n restoreSnapshot: snapshot => snapshot\n };\n}\n\nconst instanceStates = /* #__PURE__ */new WeakMap();\n\n/**\n * Represents an actor created by `fromCallback`.\n *\n * The type of `self` within the actor's logic.\n *\n * @example\n *\n * ```ts\n * import { fromCallback, createActor } from 'xstate';\n *\n * // The events the actor receives.\n * type Event = { type: 'someEvent' };\n * // The actor's input.\n * type Input = { name: string };\n *\n * // Actor logic that logs whenever it receives an event of type `someEvent`.\n * const logic = fromCallback<Event, Input>(({ self, input, receive }) => {\n * self;\n * // ^? CallbackActorRef<Event, Input>\n *\n * receive((event) => {\n * if (event.type === 'someEvent') {\n * console.log(`${input.name}: received \"someEvent\" event`);\n * // logs 'myActor: received \"someEvent\" event'\n * }\n * });\n * });\n *\n * const actor = createActor(logic, { input: { name: 'myActor' } });\n * // ^? CallbackActorRef<Event, Input>\n * ```\n *\n * @see {@link fromCallback}\n */\n\n/**\n * An actor logic creator which returns callback logic as defined by a callback\n * function.\n *\n * @remarks\n * Useful for subscription-based or other free-form logic that can send events\n * back to the parent actor.\n *\n * Actors created from callback logic (“callback actors”) can:\n *\n * - Receive events via the `receive` function\n * - Send events to the parent actor via the `sendBack` function\n *\n * Callback actors are a bit different from other actors in that they:\n *\n * - Do not work with `onDone`\n * - Do not produce a snapshot using `.getSnapshot()`\n * - Do not emit values when used with `.subscribe()`\n * - Can not be stopped with `.stop()`\n *\n * @example\n *\n * ```typescript\n * const callbackLogic = fromCallback(({ sendBack, receive }) => {\n * let lockStatus = 'unlocked';\n *\n * const handler = (event) => {\n * if (lockStatus === 'locked') {\n * return;\n * }\n * sendBack(event);\n * };\n *\n * receive((event) => {\n * if (event.type === 'lock') {\n * lockStatus = 'locked';\n * } else if (event.type === 'unlock') {\n * lockStatus = 'unlocked';\n * }\n * });\n *\n * document.body.addEventListener('click', handler);\n *\n * return () => {\n * document.body.removeEventListener('click', handler);\n * };\n * });\n * ```\n *\n * @param callback - The callback function used to describe the callback logic\n * The callback function is passed an object with the following properties:\n *\n * - `receive` - A function that can send events back to the parent actor; the\n * listener is then called whenever events are received by the callback\n * actor\n * - `sendBack` - A function that can send events back to the parent actor\n * - `input` - Data that was provided to the callback actor\n * - `self` - The parent actor of the callback actor\n * - `system` - The actor system to which the callback actor belongs The callback\n * function can (optionally) return a cleanup function, which is called\n * when the actor is stopped.\n *\n * @returns Callback logic\n * @see {@link CallbackLogicFunction} for more information about the callback function and its object argument\n * @see {@link https://stately.ai/docs/input | Input docs} for more information about how input is passed\n */\nfunction fromCallback(callback) {\n const logic = {\n config: callback,\n start: (state, actorScope) => {\n const {\n self,\n system,\n emit\n } = actorScope;\n const callbackState = {\n receivers: undefined,\n dispose: undefined\n };\n instanceStates.set(self, callbackState);\n callbackState.dispose = callback({\n input: state.input,\n system,\n self,\n sendBack: event => {\n if (self.getSnapshot().status === 'stopped') {\n return;\n }\n if (self._parent) {\n system._relay(self, self._parent, event);\n }\n },\n receive: listener => {\n callbackState.receivers ??= new Set();\n callbackState.receivers.add(listener);\n },\n emit\n });\n },\n transition: (state, event, actorScope) => {\n const callbackState = instanceStates.get(actorScope.self);\n if (event.type === XSTATE_STOP) {\n state = {\n ...state,\n status: 'stopped',\n error: undefined\n };\n instanceStates.delete(actorScope.self);\n callbackState.receivers?.clear();\n callbackState.dispose?.();\n return state;\n }\n callbackState.receivers?.forEach(receiver => receiver(event));\n return state;\n },\n getInitialSnapshot: (_, input) => {\n return {\n status: 'active',\n output: undefined,\n error: undefined,\n input\n };\n },\n getPersistedSnapshot: snapshot => snapshot,\n restoreSnapshot: snapshot => snapshot\n };\n return logic;\n}\n\nconst XSTATE_OBSERVABLE_NEXT = 'xstate.observable.next';\nconst XSTATE_OBSERVABLE_ERROR = 'xstate.observable.error';\nconst XSTATE_OBSERVABLE_COMPLETE = 'xstate.observable.complete';\n\n/**\n * Represents an actor created by `fromObservable` or `fromEventObservable`.\n *\n * The type of `self` within the actor's logic.\n *\n * @example\n *\n * ```ts\n * import { fromObservable, createActor } from 'xstate';\n * import { interval } from 'rxjs';\n *\n * // The type of the value observed by the actor's logic.\n * type Context = number;\n * // The actor's input.\n * type Input = { period?: number };\n *\n * // Actor logic that observes a number incremented every `input.period`\n * // milliseconds (default: 1_000).\n * const logic = fromObservable<Context, Input>(({ input, self }) => {\n * self;\n * // ^? ObservableActorRef<Event, Input>\n *\n * return interval(input.period ?? 1_000);\n * });\n *\n * const actor = createActor(logic, { input: { period: 2_000 } });\n * // ^? ObservableActorRef<Event, Input>\n * ```\n *\n * @see {@link fromObservable}\n * @see {@link fromEventObservable}\n */\n\n/**\n * Observable actor logic is described by an observable stream of values. Actors\n * created from observable logic (“observable actors”) can:\n *\n * - Emit snapshots of the observable’s emitted value\n *\n * The observable’s emitted value is used as its observable actor’s `context`.\n *\n * Sending events to observable actors will have no effect.\n *\n * @example\n *\n * ```ts\n * import { fromObservable, createActor } from 'xstate';\n * import { interval } from 'rxjs';\n *\n * const logic = fromObservable((obj) => interval(1000));\n *\n * const actor = createActor(logic);\n *\n * actor.subscribe((snapshot) => {\n * console.log(snapshot.context);\n * });\n *\n * actor.start();\n * // At every second:\n * // Logs 0\n * // Logs 1\n * // Logs 2\n * // ...\n * ```\n *\n * @param observableCreator A function that creates an observable. It receives\n * one argument, an object with the following properties:\n *\n * - `input` - Data that was provided to the observable actor\n * - `self` - The parent actor\n * - `system` - The actor system to which the observable actor belongs\n *\n * It should return a {@link Subscribable}, which is compatible with an RxJS\n * Observable, although RxJS is not required to create them.\n * @see {@link https://rxjs.dev} for documentation on RxJS Observable and observable creators.\n * @see {@link Subscribable} interface in XState, which is based on and compatible with RxJS Observable.\n */\nfunction fromObservable(observableCreator) {\n // TODO: add event types\n const logic = {\n config: observableCreator,\n transition: (snapshot, event) => {\n if (snapshot.status !== 'active') {\n return snapshot;\n }\n switch (event.type) {\n case XSTATE_OBSERVABLE_NEXT:\n {\n const newSnapshot = {\n ...snapshot,\n context: event.data\n };\n return newSnapshot;\n }\n case XSTATE_OBSERVABLE_ERROR:\n return {\n ...snapshot,\n status: 'error',\n error: event.data,\n input: undefined,\n _subscription: undefined\n };\n case XSTATE_OBSERVABLE_COMPLETE:\n return {\n ...snapshot,\n status: 'done',\n input: undefined,\n _subscription: undefined\n };\n case XSTATE_STOP:\n snapshot._subscription.unsubscribe();\n return {\n ...snapshot,\n status: 'stopped',\n input: undefined,\n _subscription: undefined\n };\n default:\n return snapshot;\n }\n },\n getInitialSnapshot: (_, input) => {\n return {\n status: 'active',\n output: undefined,\n error: undefined,\n context: undefined,\n input,\n _subscription: undefined\n };\n },\n start: (state, {\n self,\n system,\n emit\n }) => {\n if (state.status === 'done') {\n // Do not restart a completed observable\n return;\n }\n state._subscription = observableCreator({\n input: state.input,\n system,\n self,\n emit\n }).subscribe({\n next: value => {\n system._relay(self, self, {\n type: XSTATE_OBSERVABLE_NEXT,\n data: value\n });\n },\n error: err => {\n system._relay(self, self, {\n type: XSTATE_OBSERVABLE_ERROR,\n data: err\n });\n },\n complete: () => {\n system._relay(self, self, {\n type: XSTATE_OBSERVABLE_COMPLETE\n });\n }\n });\n },\n getPersistedSnapshot: ({\n _subscription,\n ...state\n }) => state,\n restoreSnapshot: state => ({\n ...state,\n _subscription: undefined\n })\n };\n return logic;\n}\n\n/**\n * Creates event observable logic that listens to an observable that delivers\n * event objects.\n *\n * Event observable actor logic is described by an observable stream of\n * {@link https://stately.ai/docs/transitions#event-objects | event objects}.\n * Actors created from event observable logic (“event observable actors”) can:\n *\n * - Implicitly send events to its parent actor\n * - Emit snapshots of its emitted event objects\n *\n * Sending events to event observable actors will have no effect.\n *\n * @example\n *\n * ```ts\n * import {\n * fromEventObservable,\n * Subscribable,\n * EventObject,\n * createMachine,\n * createActor\n * } from 'xstate';\n * import { fromEvent } from 'rxjs';\n *\n * const mouseClickLogic = fromEventObservable(\n * () => fromEvent(document.body, 'click') as Subscribable<EventObject>\n * );\n *\n * const canvasMachine = createMachine({\n * invoke: {\n * // Will send mouse `click` events to the canvas actor\n * src: mouseClickLogic\n * }\n * });\n *\n * const canvasActor = createActor(canvasMachine);\n * canvasActor.start();\n * ```\n *\n * @param lazyObservable A function that creates an observable that delivers\n * event objects. It receives one argument, an object with the following\n * properties:\n *\n * - `input` - Data that was provided to the event observable actor\n * - `self` - The parent actor\n * - `system` - The actor system to which the event observable actor belongs.\n *\n * It should return a {@link Subscribable}, which is compatible with an RxJS\n * Observable, although RxJS is not required to create them.\n */\nfunction fromEventObservable(lazyObservable) {\n // TODO: event types\n const logic = {\n config: lazyObservable,\n transition: (state, event) => {\n if (state.status !== 'active') {\n return state;\n }\n switch (event.type) {\n case XSTATE_OBSERVABLE_ERROR:\n return {\n ...state,\n status: 'error',\n error: event.data,\n input: undefined,\n _subscription: undefined\n };\n case XSTATE_OBSERVABLE_COMPLETE:\n return {\n ...state,\n status: 'done',\n input: undefined,\n _subscription: undefined\n };\n case XSTATE_STOP:\n state._subscription.unsubscribe();\n return {\n ...state,\n status: 'stopped',\n input: undefined,\n _subscription: undefined\n };\n default:\n return state;\n }\n },\n getInitialSnapshot: (_, input) => {\n return {\n status: 'active',\n output: undefined,\n error: undefined,\n context: undefined,\n input,\n _subscription: undefined\n };\n },\n start: (state, {\n self,\n system,\n emit\n }) => {\n if (state.status === 'done') {\n // Do not restart a completed observable\n return;\n }\n state._subscription = lazyObservable({\n input: state.input,\n system,\n self,\n emit\n }).subscribe({\n next: value => {\n if (self._parent) {\n system._relay(self, self._parent, value);\n }\n },\n error: err => {\n system._relay(self, self, {\n type: XSTATE_OBSERVABLE_ERROR,\n data: err\n });\n },\n complete: () => {\n system._relay(self, self, {\n type: XSTATE_OBSERVABLE_COMPLETE\n });\n }\n });\n },\n getPersistedSnapshot: ({\n _subscription,\n ...snapshot\n }) => snapshot,\n restoreSnapshot: snapshot => ({\n ...snapshot,\n _subscription: undefined\n })\n };\n return logic;\n}\n\nconst XSTATE_PROMISE_RESOLVE = 'xstate.promise.resolve';\nconst XSTATE_PROMISE_REJECT = 'xstate.promise.reject';\n\n/**\n * Represents an actor created by `fromPromise`.\n *\n * The type of `self` within the actor's logic.\n *\n * @example\n *\n * ```ts\n * import { fromPromise, createActor } from 'xstate';\n *\n * // The actor's resolved output\n * type Output = string;\n * // The actor's input.\n * type Input = { message: string };\n *\n * // Actor logic that fetches the url of an image of a cat saying `input.message`.\n * const logic = fromPromise<Output, Input>(async ({ input, self }) => {\n * self;\n * // ^? PromiseActorRef<Output, Input>\n *\n * const data = await fetch(\n * `https://cataas.com/cat/says/${input.message}`\n * );\n * const url = await data.json();\n * return url;\n * });\n *\n * const actor = createActor(logic, { input: { message: 'hello world' } });\n * // ^? PromiseActorRef<Output, Input>\n * ```\n *\n * @see {@link fromPromise}\n */\n\nconst controllerMap = new WeakMap();\n\n/**\n * An actor logic creator which returns promise logic as defined by an async\n * process that resolves or rejects after some time.\n *\n * Actors created from promise actor logic (“promise actors”) can:\n *\n * - Emit the resolved value of the promise\n * - Output the resolved value of the promise\n *\n * Sending events to promise actors will have no effect.\n *\n * @example\n *\n * ```ts\n * const promiseLogic = fromPromise(async () => {\n * const result = await fetch('https://example.com/...').then((data) =>\n * data.json()\n * );\n *\n * return result;\n * });\n *\n * const promiseActor = createActor(promiseLogic);\n * promiseActor.subscribe((snapshot) => {\n * console.log(snapshot);\n * });\n * promiseActor.start();\n * // => {\n * // output: undefined,\n * // status: 'active'\n * // ...\n * // }\n *\n * // After promise resolves\n * // => {\n * // output: { ... },\n * // status: 'done',\n * // ...\n * // }\n * ```\n *\n * @param promiseCreator A function which returns a Promise, and accepts an\n * object with the following properties:\n *\n * - `input` - Data that was provided to the promise actor\n * - `self` - The parent actor of the promise actor\n * - `system` - The actor system to which the promise actor belongs\n *\n * @see {@link https://stately.ai/docs/input | Input docs} for more information about how input is passed\n */\nfunction fromPromise(promiseCreator) {\n const logic = {\n config: promiseCreator,\n transition: (state, event, scope) => {\n if (state.status !== 'active') {\n return state;\n }\n switch (event.type) {\n case XSTATE_PROMISE_RESOLVE:\n {\n const resolvedValue = event.data;\n return {\n ...state,\n status: 'done',\n output: resolvedValue,\n input: undefined\n };\n }\n case XSTATE_PROMISE_REJECT:\n return {\n ...state,\n status: 'error',\n error: event.data,\n input: undefined\n };\n case XSTATE_STOP:\n {\n controllerMap.get(scope.self)?.abort();\n controllerMap.delete(scope.self);\n return {\n ...state,\n status: 'stopped',\n input: undefined\n };\n }\n default:\n return state;\n }\n },\n start: (state, {\n self,\n system,\n emit\n }) => {\n // TODO: determine how to allow customizing this so that promises\n // can be restarted if necessary\n if (state.status !== 'active') {\n return;\n }\n const controller = new AbortController();\n controllerMap.set(self, controller);\n const resolvedPromise = Promise.resolve(promiseCreator({\n input: state.input,\n system,\n self,\n signal: controller.signal,\n emit\n }));\n resolvedPromise.then(response => {\n if (self.getSnapshot().status !== 'active') {\n return;\n }\n controllerMap.delete(self);\n system._relay(self, self, {\n type: XSTATE_PROMISE_RESOLVE,\n data: response\n });\n }, errorData => {\n if (self.getSnapshot().status !== 'active') {\n return;\n }\n controllerMap.delete(self);\n system._relay(self, self, {\n type: XSTATE_PROMISE_REJECT,\n data: errorData\n });\n });\n },\n getInitialSnapshot: (_, input) => {\n return {\n status: 'active',\n output: undefined,\n error: undefined,\n input\n };\n },\n getPersistedSnapshot: snapshot => snapshot,\n restoreSnapshot: snapshot => snapshot\n };\n return logic;\n}\n\nconst emptyLogic = fromTransition(_ => undefined, undefined);\nfunction createEmptyActor() {\n return createActor(emptyLogic);\n}\n\nexport { createEmptyActor, fromCallback, fromEventObservable, fromObservable, fromPromise, fromTransition };\n","import { Z as ProcessingStatus, V as resolveReferencedActor, c as createActor, _ as cloneMachineSnapshot } from './raise-34c45204.esm.js';\n\nfunction createSpawner(actorScope, {\n machine,\n context\n}, event, spawnedChildren) {\n const spawn = (src, options) => {\n if (typeof src === 'string') {\n const logic = resolveReferencedActor(machine, src);\n if (!logic) {\n throw new Error(`Actor logic '${src}' not implemented in machine '${machine.id}'`);\n }\n const actorRef = createActor(logic, {\n id: options?.id,\n parent: actorScope.self,\n syncSnapshot: options?.syncSnapshot,\n input: typeof options?.input === 'function' ? options.input({\n context,\n event,\n self: actorScope.self\n }) : options?.input,\n src,\n systemId: options?.systemId\n });\n spawnedChildren[actorRef.id] = actorRef;\n return actorRef;\n } else {\n const actorRef = createActor(src, {\n id: options?.id,\n parent: actorScope.self,\n syncSnapshot: options?.syncSnapshot,\n input: options?.input,\n src,\n systemId: options?.systemId\n });\n return actorRef;\n }\n };\n return (src, options) => {\n const actorRef = spawn(src, options); // TODO: fix types\n spawnedChildren[actorRef.id] = actorRef;\n actorScope.defer(() => {\n if (actorRef._processingStatus === ProcessingStatus.Stopped) {\n return;\n }\n actorRef.start();\n });\n return actorRef;\n };\n}\n\nfunction resolveAssign(actorScope, snapshot, actionArgs, actionParams, {\n assignment\n}) {\n if (!snapshot.context) {\n throw new Error('Cannot assign to undefined `context`. Ensure that `context` is defined in the machine config.');\n }\n const spawnedChildren = {};\n const assignArgs = {\n context: snapshot.context,\n event: actionArgs.event,\n spawn: createSpawner(actorScope, snapshot, actionArgs.event, spawnedChildren),\n self: actorScope.self,\n system: actorScope.system\n };\n let partialUpdate = {};\n if (typeof assignment === 'function') {\n partialUpdate = assignment(assignArgs, actionParams);\n } else {\n for (const key of Object.keys(assignment)) {\n const propAssignment = assignment[key];\n partialUpdate[key] = typeof propAssignment === 'function' ? propAssignment(assignArgs, actionParams) : propAssignment;\n }\n }\n const updatedContext = Object.assign({}, snapshot.context, partialUpdate);\n return [cloneMachineSnapshot(snapshot, {\n context: updatedContext,\n children: Object.keys(spawnedChildren).length ? {\n ...snapshot.children,\n ...spawnedChildren\n } : snapshot.children\n }), undefined, undefined];\n}\n/**\n * Updates the current context of the machine.\n *\n * @example\n *\n * ```ts\n * import { createMachine, assign } from 'xstate';\n *\n * const countMachine = createMachine({\n * context: {\n * count: 0,\n * message: ''\n * },\n * on: {\n * inc: {\n * actions: assign({\n * count: ({ context }) => context.count + 1\n * })\n * },\n * updateMessage: {\n * actions: assign(({ context, event }) => {\n * return {\n * message: event.message.trim()\n * };\n * })\n * }\n * }\n * });\n * ```\n *\n * @param assignment An object that represents the partial context to update, or\n * a function that returns an object that represents the partial context to\n * update.\n */\nfunction assign(assignment) {\n function assign(_args, _params) {\n }\n assign.type = 'xstate.assign';\n assign.assignment = assignment;\n assign.resolve = resolveAssign;\n return assign;\n}\n\nexport { assign as a };\n","import { S as STATE_DELIMITER, y as mapValues, t as toArray, z as formatTransitions, B as toTransitionConfigArray, C as formatTransition, N as NULL_EVENT, D as evaluateGuard, E as createInvokeId, F as getDelayedTransitions, G as formatInitialTransition, H as getCandidates, I as formatRouteTransitions, J as resolveStateValue, K as getAllStateNodes, p as getStateNodes, L as createMachineSnapshot, M as isInFinalState, d as macrostep, O as transitionNode, P as resolveActionsAndContext, e as createInitEvent, i as initialMicrostep, Q as toStatePath, R as isStateId, T as getStateNodeByPath, U as getPersistedSnapshot, V as resolveReferencedActor, c as createActor, $ as $$ACTOR_TYPE } from './raise-34c45204.esm.js';\nimport { a as assign } from './assign-5f7ff891.esm.js';\n\nconst cache = new WeakMap();\nfunction memo(object, key, fn) {\n let memoizedData = cache.get(object);\n if (!memoizedData) {\n memoizedData = {\n [key]: fn()\n };\n cache.set(object, memoizedData);\n } else if (!(key in memoizedData)) {\n memoizedData[key] = fn();\n }\n return memoizedData[key];\n}\n\nconst EMPTY_OBJECT = {};\nconst toSerializableAction = action => {\n if (typeof action === 'string') {\n return {\n type: action\n };\n }\n if (typeof action === 'function') {\n if ('resolve' in action) {\n return {\n type: action.type\n };\n }\n return {\n type: action.name\n };\n }\n return action;\n};\nclass StateNode {\n constructor(/** The raw config used to create the machine. */\n config, options) {\n this.config = config;\n /**\n * The relative key of the state node, which represents its location in the\n * overall state value.\n */\n this.key = void 0;\n /** The unique ID of the state node. */\n this.id = void 0;\n /**\n * The type of this state node:\n *\n * - `'atomic'` - no child state nodes\n * - `'compound'` - nested child state nodes (XOR)\n * - `'parallel'` - orthogonal nested child state nodes (AND)\n * - `'history'` - history state node\n * - `'final'` - final state node\n */\n this.type = void 0;\n /** The string path from the root machine node to this node. */\n this.path = void 0;\n /** The child state nodes. */\n this.states = void 0;\n /**\n * The type of history on this state node. Can be:\n *\n * - `'shallow'` - recalls only top-level historical state value\n * - `'deep'` - recalls historical state value at all levels\n */\n this.history = void 0;\n /** The action(s) to be executed upon entering the state node. */\n this.entry = void 0;\n /** The action(s) to be executed upon exiting the state node. */\n this.exit = void 0;\n /** The parent state node. */\n this.parent = void 0;\n /** The root machine node. */\n this.machine = void 0;\n /**\n * The meta data associated with this state node, which will be returned in\n * State instances.\n */\n this.meta = void 0;\n /**\n * The output data sent with the \"xstate.done.state._id_\" event if this is a\n * final state node.\n */\n this.output = void 0;\n /**\n * The order this state node appears. Corresponds to the implicit document\n * order.\n */\n this.order = -1;\n this.description = void 0;\n this.tags = [];\n this.transitions = void 0;\n this.always = void 0;\n this.parent = options._parent;\n this.key = options._key;\n this.machine = options._machine;\n this.path = this.parent ? this.parent.path.concat(this.key) : [];\n this.id = this.config.id || [this.machine.id, ...this.path].join(STATE_DELIMITER);\n this.type = this.config.type || (this.config.states && Object.keys(this.config.states).length ? 'compound' : this.config.history ? 'history' : 'atomic');\n this.description = this.config.description;\n this.order = this.machine.idMap.size;\n this.machine.idMap.set(this.id, this);\n this.states = this.config.states ? mapValues(this.config.states, (stateConfig, key) => {\n const stateNode = new StateNode(stateConfig, {\n _parent: this,\n _key: key,\n _machine: this.machine\n });\n return stateNode;\n }) : EMPTY_OBJECT;\n if (this.type === 'compound' && !this.config.initial) {\n throw new Error(`No initial state specified for compound state node \"#${this.id}\". Try adding { initial: \"${Object.keys(this.states)[0]}\" } to the state config.`);\n }\n\n // History config\n this.history = this.config.history === true ? 'shallow' : this.config.history || false;\n this.entry = toArray(this.config.entry).slice();\n this.exit = toArray(this.config.exit).slice();\n this.meta = this.config.meta;\n this.output = this.type === 'final' || !this.parent ? this.config.output : undefined;\n this.tags = toArray(config.tags).slice();\n }\n\n /** @internal */\n _initialize() {\n this.transitions = formatTransitions(this);\n if (this.config.always) {\n this.always = toTransitionConfigArray(this.config.always).map(t => formatTransition(this, NULL_EVENT, t));\n }\n Object.keys(this.states).forEach(key => {\n this.states[key]._initialize();\n });\n }\n\n /** The well-structured state node definition. */\n get definition() {\n return {\n id: this.id,\n key: this.key,\n version: this.machine.version,\n type: this.type,\n initial: this.initial ? {\n target: this.initial.target,\n source: this,\n actions: this.initial.actions.map(toSerializableAction),\n eventType: null,\n reenter: false,\n toJSON: () => ({\n target: this.initial.target.map(t => `#${t.id}`),\n source: `#${this.id}`,\n actions: this.initial.actions.map(toSerializableAction),\n eventType: null\n })\n } : undefined,\n history: this.history,\n states: mapValues(this.states, state => {\n return state.definition;\n }),\n on: this.on,\n transitions: [...this.transitions.values()].flat().map(t => ({\n ...t,\n actions: t.actions.map(toSerializableAction)\n })),\n entry: this.entry.map(toSerializableAction),\n exit: this.exit.map(toSerializableAction),\n meta: this.meta,\n order: this.order || -1,\n output: this.output,\n invoke: this.invoke,\n description: this.description,\n tags: this.tags\n };\n }\n\n /** @internal */\n toJSON() {\n return this.definition;\n }\n\n /** The logic invoked as actors by this state node. */\n get invoke() {\n return memo(this, 'invoke', () => toArray(this.config.invoke).map((invokeConfig, i) => {\n const {\n src,\n systemId\n } = invokeConfig;\n const resolvedId = invokeConfig.id ?? createInvokeId(this.id, i);\n const sourceName = typeof src === 'string' ? src : `xstate.invoke.${createInvokeId(this.id, i)}`;\n return {\n ...invokeConfig,\n src: sourceName,\n id: resolvedId,\n systemId: systemId,\n toJSON() {\n const {\n onDone,\n onError,\n ...invokeDefValues\n } = invokeConfig;\n return {\n ...invokeDefValues,\n type: 'xstate.invoke',\n src: sourceName,\n id: resolvedId\n };\n }\n };\n }));\n }\n\n /** The mapping of events to transitions. */\n get on() {\n return memo(this, 'on', () => {\n const transitions = this.transitions;\n return [...transitions].flatMap(([descriptor, t]) => t.map(t => [descriptor, t])).reduce((map, [descriptor, transition]) => {\n map[descriptor] = map[descriptor] || [];\n map[descriptor].push(transition);\n return map;\n }, {});\n });\n }\n get after() {\n return memo(this, 'delayedTransitions', () => getDelayedTransitions(this));\n }\n get initial() {\n return memo(this, 'initial', () => formatInitialTransition(this, this.config.initial));\n }\n\n /** @internal */\n next(snapshot, event) {\n const eventType = event.type;\n const actions = [];\n let selectedTransition;\n const candidates = memo(this, `candidates-${eventType}`, () => getCandidates(this, eventType));\n for (const candidate of candidates) {\n const {\n guard\n } = candidate;\n const resolvedContext = snapshot.context;\n let guardPassed = false;\n try {\n guardPassed = !guard || evaluateGuard(guard, resolvedContext, event, snapshot);\n } catch (err) {\n const guardType = typeof guard === 'string' ? guard : typeof guard === 'object' ? guard.type : undefined;\n throw new Error(`Unable to evaluate guard ${guardType ? `'${guardType}' ` : ''}in transition for event '${eventType}' in state node '${this.id}':\\n${err.message}`);\n }\n if (guardPassed) {\n actions.push(...candidate.actions);\n selectedTransition = candidate;\n break;\n }\n }\n return selectedTransition ? [selectedTransition] : undefined;\n }\n\n /** All the event types accepted by this state node and its descendants. */\n get events() {\n return memo(this, 'events', () => {\n const {\n states\n } = this;\n const events = new Set(this.ownEvents);\n if (states) {\n for (const stateId of Object.keys(states)) {\n const state = states[stateId];\n if (state.states) {\n for (const event of state.events) {\n events.add(`${event}`);\n }\n }\n }\n }\n return Array.from(events);\n });\n }\n\n /**\n * All the events that have transitions directly from this state node.\n *\n * Excludes any inert events.\n */\n get ownEvents() {\n const keys = Object.keys(Object.fromEntries(this.transitions));\n const events = new Set(keys.filter(descriptor => {\n return this.transitions.get(descriptor).some(transition => !(!transition.target && !transition.actions.length && !transition.reenter));\n }));\n return Array.from(events);\n }\n}\n\nconst STATE_IDENTIFIER = '#';\nclass StateMachine {\n constructor(/** The raw config used to create the machine. */\n config, implementations) {\n this.config = config;\n /** The machine's own version. */\n this.version = void 0;\n this.schemas = void 0;\n this.implementations = void 0;\n /** @internal */\n this.__xstatenode = true;\n /** @internal */\n this.idMap = new Map();\n this.root = void 0;\n this.id = void 0;\n this.states = void 0;\n this.events = void 0;\n this.id = config.id || '(machine)';\n this.implementations = {\n actors: implementations?.actors ?? {},\n actions: implementations?.actions ?? {},\n delays: implementations?.delays ?? {},\n guards: implementations?.guards ?? {}\n };\n this.version = this.config.version;\n this.schemas = this.config.schemas;\n this.transition = this.transition.bind(this);\n this.getInitialSnapshot = this.getInitialSnapshot.bind(this);\n this.getPersistedSnapshot = this.getPersistedSnapshot.bind(this);\n this.restoreSnapshot = this.restoreSnapshot.bind(this);\n this.start = this.start.bind(this);\n this.root = new StateNode(config, {\n _key: this.id,\n _machine: this\n });\n this.root._initialize();\n formatRouteTransitions(this.root);\n this.states = this.root.states; // TODO: remove!\n this.events = this.root.events;\n }\n\n /**\n * Clones this state machine with the provided implementations.\n *\n * @param implementations Options (`actions`, `guards`, `actors`, `delays`) to\n * recursively merge with the existing options.\n * @returns A new `StateMachine` instance with the provided implementations.\n */\n provide(implementations) {\n const {\n actions,\n guards,\n actors,\n delays\n } = this.implementations;\n return new StateMachine(this.config, {\n actions: {\n ...actions,\n ...implementations.actions\n },\n guards: {\n ...guards,\n ...implementations.guards\n },\n actors: {\n ...actors,\n ...implementations.actors\n },\n delays: {\n ...delays,\n ...implementations.delays\n }\n });\n }\n resolveState(config) {\n const resolvedStateValue = resolveStateValue(this.root, config.value);\n const nodeSet = getAllStateNodes(getStateNodes(this.root, resolvedStateValue));\n return createMachineSnapshot({\n _nodes: [...nodeSet],\n context: config.context || {},\n children: {},\n status: isInFinalState(nodeSet, this.root) ? 'done' : config.status || 'active',\n output: config.output,\n error: config.error,\n historyValue: config.historyValue\n }, this);\n }\n\n /**\n * Determines the next snapshot given the current `snapshot` and received\n * `event`. Calculates a full macrostep from all microsteps.\n *\n * @param snapshot The current snapshot\n * @param event The received event\n */\n transition(snapshot, event, actorScope) {\n return macrostep(snapshot, event, actorScope, []).snapshot;\n }\n\n /**\n * Determines the next state given the current `state` and `event`. Calculates\n * a microstep.\n *\n * @param state The current state\n * @param event The received event\n */\n microstep(snapshot, event, actorScope) {\n return macrostep(snapshot, event, actorScope, []).microsteps.map(([s]) => s);\n }\n getTransitionData(snapshot, event) {\n return transitionNode(this.root, snapshot.value, snapshot, event) || [];\n }\n\n /**\n * The initial state _before_ evaluating any microsteps. This \"pre-initial\"\n * state is provided to initial actions executed in the initial state.\n *\n * @internal\n */\n _getPreInitialState(actorScope, initEvent, internalQueue) {\n const {\n context\n } = this.config;\n const preInitial = createMachineSnapshot({\n context: typeof context !== 'function' && context ? context : {},\n _nodes: [this.root],\n children: {},\n status: 'active'\n }, this);\n if (typeof context === 'function') {\n const assignment = ({\n spawn,\n event,\n self\n }) => context({\n spawn,\n input: event.input,\n self\n });\n return resolveActionsAndContext(preInitial, initEvent, actorScope, [assign(assignment)], internalQueue, undefined);\n }\n return preInitial;\n }\n\n /**\n * Returns the initial `State` instance, with reference to `self` as an\n * `ActorRef`.\n */\n getInitialSnapshot(actorScope, input) {\n const initEvent = createInitEvent(input); // TODO: fix;\n const internalQueue = [];\n const preInitialState = this._getPreInitialState(actorScope, initEvent, internalQueue);\n const [nextState] = initialMicrostep(this.root, preInitialState, actorScope, initEvent, internalQueue);\n const {\n snapshot: macroState\n } = macrostep(nextState, initEvent, actorScope, internalQueue);\n return macroState;\n }\n start(snapshot) {\n Object.values(snapshot.children).forEach(child => {\n if (child.getSnapshot().status === 'active') {\n child.start();\n }\n });\n }\n getStateNodeById(stateId) {\n const fullPath = toStatePath(stateId);\n const relativePath = fullPath.slice(1);\n const resolvedStateId = isStateId(fullPath[0]) ? fullPath[0].slice(STATE_IDENTIFIER.length) : fullPath[0];\n const stateNode = this.idMap.get(resolvedStateId);\n if (!stateNode) {\n throw new Error(`Child state node '#${resolvedStateId}' does not exist on machine '${this.id}'`);\n }\n return getStateNodeByPath(stateNode, relativePath);\n }\n get definition() {\n return this.root.definition;\n }\n toJSON() {\n return this.definition;\n }\n getPersistedSnapshot(snapshot, options) {\n return getPersistedSnapshot(snapshot, options);\n }\n restoreSnapshot(snapshot, _actorScope) {\n const children = {};\n const snapshotChildren = snapshot.children;\n Object.keys(snapshotChildren).forEach(actorId => {\n const actorData = snapshotChildren[actorId];\n const childState = actorData.snapshot;\n const src = actorData.src;\n const logic = typeof src === 'string' ? resolveReferencedActor(this, src) : src;\n if (!logic) {\n return;\n }\n const actorRef = createActor(logic, {\n id: actorId,\n parent: _actorScope.self,\n syncSnapshot: actorData.syncSnapshot,\n snapshot: childState,\n src,\n systemId: actorData.systemId\n });\n children[actorId] = actorRef;\n });\n function resolveHistoryReferencedState(root, referenced) {\n if (referenced instanceof StateNode) {\n return referenced;\n }\n try {\n return root.machine.getStateNodeById(referenced.id);\n } catch {\n }\n }\n function reviveHistoryValue(root, historyValue) {\n if (!historyValue || typeof historyValue !== 'object') {\n return {};\n }\n const revived = {};\n for (const key in historyValue) {\n const arr = historyValue[key];\n for (const item of arr) {\n const resolved = resolveHistoryReferencedState(root, item);\n if (!resolved) {\n continue;\n }\n revived[key] ??= [];\n revived[key].push(resolved);\n }\n }\n return revived;\n }\n const revivedHistoryValue = reviveHistoryValue(this.root, snapshot.historyValue);\n const restoredSnapshot = createMachineSnapshot({\n ...snapshot,\n children,\n _nodes: Array.from(getAllStateNodes(getStateNodes(this.root, snapshot.value))),\n historyValue: revivedHistoryValue\n }, this);\n const seen = new Set();\n function reviveContext(contextPart, children) {\n if (seen.has(contextPart)) {\n return;\n }\n seen.add(contextPart);\n for (const key in contextPart) {\n const value = contextPart[key];\n if (value && typeof value === 'object') {\n if ('xstate$$type' in value && value.xstate$$type === $$ACTOR_TYPE) {\n contextPart[key] = children[value.id];\n continue;\n }\n reviveContext(value, children);\n }\n }\n }\n reviveContext(restoredSnapshot.context, children);\n return restoredSnapshot;\n }\n}\n\nexport { StateMachine as S, StateNode as a };\n","import { W as XSTATE_ERROR, Y as createErrorActorEvent, D as evaluateGuard, a as cancel, r as raise, b as spawnChild, s as stopChild } from './raise-34c45204.esm.js';\nimport { a as assign } from './assign-5f7ff891.esm.js';\n\nfunction resolveEmit(_, snapshot, args, actionParams, {\n event: eventOrExpr\n}) {\n const resolvedEvent = typeof eventOrExpr === 'function' ? eventOrExpr(args, actionParams) : eventOrExpr;\n return [snapshot, {\n event: resolvedEvent\n }, undefined];\n}\nfunction executeEmit(actorScope, {\n event\n}) {\n actorScope.defer(() => actorScope.emit(event));\n}\n/**\n * Emits an event to event handlers registered on the actor via `actor.on(event,\n * handler)`.\n *\n * @example\n *\n * ```ts\n * import { emit } from 'xstate';\n *\n * const machine = createMachine({\n * // ...\n * on: {\n * something: {\n * actions: emit({\n * type: 'emitted',\n * some: 'data'\n * })\n * }\n * }\n * // ...\n * });\n *\n * const actor = createActor(machine).start();\n *\n * actor.on('emitted', (event) => {\n * console.log(event);\n * });\n *\n * actor.send({ type: 'something' });\n * // logs:\n * // {\n * // type: 'emitted',\n * // some: 'data'\n * // }\n * ```\n */\nfunction emit(/** The event to emit, or an expression that returns an event to emit. */\neventOrExpr) {\n function emit(_args, _params) {\n }\n emit.type = 'xstate.emit';\n emit.event = eventOrExpr;\n emit.resolve = resolveEmit;\n emit.execute = executeEmit;\n return emit;\n}\n\n// this is needed to make JSDoc `@link` work properly\n\n/**\n * @remarks\n * `T | unknown` reduces to `unknown` and that can be problematic when it comes\n * to contextual typing. It especially is a problem when the union has a\n * function member, like here:\n *\n * ```ts\n * declare function test(\n * cbOrVal: ((arg: number) => unknown) | unknown\n * ): void;\n * test((arg) => {}); // oops, implicit any\n * ```\n *\n * This type can be used to avoid this problem. This union represents the same\n * value space as `unknown`.\n */\n\n// https://github.com/microsoft/TypeScript/issues/23182#issuecomment-379091887\n\n// @TODO: we can't use native `NoInfer` as we need those:\n// https://github.com/microsoft/TypeScript/pull/61092\n// https://github.com/microsoft/TypeScript/pull/61077\n// but even with those fixes native NoInfer still doesn't work - further issues have to be reproduced and fixed\n\n/** @deprecated Use the built-in `NoInfer` type instead */\n\n/** The full definition of an event, with a string `type`. */\n\n/**\n * The string or object representing the state value relative to the parent\n * state node.\n *\n * @remarks\n * - For a child atomic state node, this is a string, e.g., `\"pending\"`.\n * - For complex state nodes, this is an object, e.g., `{ success:\n * \"someChildState\" }`.\n */\n\n/** @deprecated Use `AnyMachineSnapshot` instead */\n\n// TODO: possibly refactor this somehow, use even a simpler type, and maybe even make `machine.options` private or something\n/** @ignore */\n\nlet SpecialTargets = /*#__PURE__*/function (SpecialTargets) {\n SpecialTargets[\"Parent\"] = \"#_parent\";\n SpecialTargets[\"Internal\"] = \"#_internal\";\n return SpecialTargets;\n}({});\n\n/** @deprecated Use `AnyActor` instead. */\n\n// Based on RxJS types\n\n// TODO: in v6, this should only accept AnyActorLogic, like ActorRefFromLogic\n\n/** @deprecated Use `Actor<T>` instead. */\n\n/**\n * Represents logic which can be used by an actor.\n *\n * @template TSnapshot - The type of the snapshot.\n * @template TEvent - The type of the event object.\n * @template TInput - The type of the input.\n * @template TSystem - The type of the actor system.\n */\n\n/** @deprecated */\n\n// TODO: cover all that can be actually returned\n\nfunction resolveSendTo(actorScope, snapshot, args, actionParams, {\n to,\n event: eventOrExpr,\n id,\n delay\n}, extra) {\n const delaysMap = snapshot.machine.implementations.delays;\n if (typeof eventOrExpr === 'string') {\n throw new Error(\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `Only event objects may be used with sendTo; use sendTo({ type: \"${eventOrExpr}\" }) instead`);\n }\n const resolvedEvent = typeof eventOrExpr === 'function' ? eventOrExpr(args, actionParams) : eventOrExpr;\n let resolvedDelay;\n if (typeof delay === 'string') {\n const configDelay = delaysMap && delaysMap[delay];\n resolvedDelay = typeof configDelay === 'function' ? configDelay(args, actionParams) : configDelay;\n } else {\n resolvedDelay = typeof delay === 'function' ? delay(args, actionParams) : delay;\n }\n const resolvedTarget = typeof to === 'function' ? to(args, actionParams) : to;\n let targetActorRef;\n if (typeof resolvedTarget === 'string') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison\n if (resolvedTarget === SpecialTargets.Parent) {\n targetActorRef = actorScope.self._parent;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison\n else if (resolvedTarget === SpecialTargets.Internal) {\n targetActorRef = actorScope.self;\n } else if (resolvedTarget.startsWith('#_')) {\n // SCXML compatibility: https://www.w3.org/TR/scxml/#SCXMLEventProcessor\n // #_invokeid. If the target is the special term '#_invokeid', where invokeid is the invokeid of an SCXML session that the sending session has created by <invoke>, the Processor must add the event to the external queue of that session.\n targetActorRef = snapshot.children[resolvedTarget.slice(2)];\n } else {\n targetActorRef = extra.deferredActorIds?.includes(resolvedTarget) ? resolvedTarget : snapshot.children[resolvedTarget];\n }\n if (!targetActorRef) {\n throw new Error(`Unable to send event to actor '${resolvedTarget}' from machine '${snapshot.machine.id}'.`);\n }\n } else {\n targetActorRef = resolvedTarget || actorScope.self;\n }\n return [snapshot, {\n to: targetActorRef,\n targetId: typeof resolvedTarget === 'string' ? resolvedTarget : undefined,\n event: resolvedEvent,\n id,\n delay: resolvedDelay\n }, undefined];\n}\nfunction retryResolveSendTo(_, snapshot, params) {\n if (typeof params.to === 'string') {\n params.to = snapshot.children[params.to];\n }\n}\nfunction executeSendTo(actorScope, params) {\n // this forms an outgoing events queue\n // thanks to that the recipient actors are able to read the *updated* snapshot value of the sender\n actorScope.defer(() => {\n const {\n to,\n event,\n delay,\n id\n } = params;\n if (typeof delay === 'number') {\n actorScope.system.scheduler.schedule(actorScope.self, to, event, delay, id);\n return;\n }\n actorScope.system._relay(actorScope.self,\n // at this point, in a deferred task, it should already be mutated by retryResolveSendTo\n // if it initially started as a string\n to, event.type === XSTATE_ERROR ? createErrorActorEvent(actorScope.self.id, event.data) : event);\n });\n}\n/**\n * Sends an event to an actor.\n *\n * @param actor The `ActorRef` to send the event to.\n * @param event The event to send, or an expression that evaluates to the event\n * to send\n * @param options Send action options\n *\n * - `id` - The unique send event identifier (used with `cancel()`).\n * - `delay` - The number of milliseconds to delay the sending of the event.\n */\nfunction sendTo(to, eventOrExpr, options) {\n function sendTo(_args, _params) {\n }\n sendTo.type = 'xstate.sendTo';\n sendTo.to = to;\n sendTo.event = eventOrExpr;\n sendTo.id = options?.id;\n sendTo.delay = options?.delay;\n sendTo.resolve = resolveSendTo;\n sendTo.retryResolve = retryResolveSendTo;\n sendTo.execute = executeSendTo;\n return sendTo;\n}\n\n/**\n * Sends an event to this machine's parent.\n *\n * @param event The event to send to the parent machine.\n * @param options Options to pass into the send event.\n */\nfunction sendParent(event, options) {\n return sendTo(SpecialTargets.Parent, event, options);\n}\n/**\n * Forwards (sends) an event to the `target` actor.\n *\n * @param target The target actor to forward the event to.\n * @param options Options to pass into the send action creator.\n */\nfunction forwardTo(target, options) {\n return sendTo(target, ({\n event\n }) => event, options);\n}\n\nfunction resolveEnqueueActions(actorScope, snapshot, args, actionParams, {\n collect\n}) {\n const actions = [];\n const enqueue = function enqueue(action) {\n actions.push(action);\n };\n enqueue.assign = (...args) => {\n actions.push(assign(...args));\n };\n enqueue.cancel = (...args) => {\n actions.push(cancel(...args));\n };\n enqueue.raise = (...args) => {\n // for some reason it fails to infer `TDelay` from `...args` here and picks its default (`never`)\n // then it fails to typecheck that because `...args` use `string` in place of `TDelay`\n actions.push(raise(...args));\n };\n enqueue.sendTo = (...args) => {\n // for some reason it fails to infer `TDelay` from `...args` here and picks its default (`never`)\n // then it fails to typecheck that because `...args` use `string` in place of `TDelay\n actions.push(sendTo(...args));\n };\n enqueue.sendParent = (...args) => {\n actions.push(sendParent(...args));\n };\n enqueue.spawnChild = (...args) => {\n actions.push(spawnChild(...args));\n };\n enqueue.stopChild = (...args) => {\n actions.push(stopChild(...args));\n };\n enqueue.emit = (...args) => {\n actions.push(emit(...args));\n };\n collect({\n context: args.context,\n event: args.event,\n enqueue,\n check: guard => evaluateGuard(guard, snapshot.context, args.event, snapshot),\n self: actorScope.self,\n system: actorScope.system\n }, actionParams);\n return [snapshot, undefined, actions];\n}\n/**\n * Creates an action object that will execute actions that are queued by the\n * `enqueue(action)` function.\n *\n * @example\n *\n * ```ts\n * import { createMachine, enqueueActions } from 'xstate';\n *\n * const machine = createMachine({\n * entry: enqueueActions(({ enqueue, check }) => {\n * enqueue.assign({ count: 0 });\n *\n * if (check('someGuard')) {\n * enqueue.assign({ count: 1 });\n * }\n *\n * enqueue('someAction');\n * })\n * });\n * ```\n */\nfunction enqueueActions(collect) {\n function enqueueActions(_args, _params) {\n }\n enqueueActions.type = 'xstate.enqueueActions';\n enqueueActions.collect = collect;\n enqueueActions.resolve = resolveEnqueueActions;\n return enqueueActions;\n}\n\nfunction resolveLog(_, snapshot, actionArgs, actionParams, {\n value,\n label\n}) {\n return [snapshot, {\n value: typeof value === 'function' ? value(actionArgs, actionParams) : value,\n label\n }, undefined];\n}\nfunction executeLog({\n logger\n}, {\n value,\n label\n}) {\n if (label) {\n logger(label, value);\n } else {\n logger(value);\n }\n}\n/**\n * @param expr The expression function to evaluate which will be logged. Takes\n * in 2 arguments:\n *\n * - `ctx` - the current state context\n * - `event` - the event that caused this action to be executed.\n *\n * @param label The label to give to the logged expression.\n */\nfunction log(value = ({\n context,\n event\n}) => ({\n context,\n event\n}), label) {\n function log(_args, _params) {\n }\n log.type = 'xstate.log';\n log.value = value;\n log.label = label;\n log.resolve = resolveLog;\n log.execute = executeLog;\n return log;\n}\n\nexport { SpecialTargets as S, emit as a, sendParent as b, enqueueActions as e, forwardTo as f, log as l, sendTo as s };\n","export { createEmptyActor, fromCallback, fromEventObservable, fromObservable, fromPromise, fromTransition } from '../actors/dist/xstate-actors.esm.js';\nimport { m as matchesEventDescriptor, t as toArray, c as createActor, r as raise, a as cancel, s as stopChild, b as spawnChild, d as macrostep, e as createInitEvent, i as initialMicrostep, f as isAtomicStateNode, g as getProperAncestors } from './raise-34c45204.esm.js';\nexport { A as Actor, q as __unsafe_getAllOwnEventDescriptors, j as and, a as cancel, c as createActor, p as getStateNodes, h as interpret, l as isMachineSnapshot, u as matchesState, n as not, o as or, v as pathToStateValue, r as raise, b as spawnChild, k as stateIn, x as stop, s as stopChild, w as toObserver } from './raise-34c45204.esm.js';\nimport { S as StateMachine } from './StateMachine-9ef88566.esm.js';\nexport { S as StateMachine, a as StateNode } from './StateMachine-9ef88566.esm.js';\nimport { a as assign } from './assign-5f7ff891.esm.js';\nexport { a as assign } from './assign-5f7ff891.esm.js';\nimport { s as sendTo, l as log, e as enqueueActions, a as emit } from './log-1324d455.esm.js';\nexport { S as SpecialTargets, a as emit, e as enqueueActions, f as forwardTo, l as log, b as sendParent, s as sendTo } from './log-1324d455.esm.js';\nimport '../dev/dist/xstate-dev.esm.js';\n\n/**\n * Asserts that the given event object is of the specified type or types. Throws\n * an error if the event object is not of the specified types.\n *\n * @example\n *\n * ```ts\n * // ...\n * entry: ({ event }) => {\n * assertEvent(event, 'doNothing');\n * // event is { type: 'doNothing' }\n * },\n * // ...\n * exit: ({ event }) => {\n * assertEvent(event, 'greet');\n * // event is { type: 'greet'; message: string }\n *\n * assertEvent(event, ['greet', 'notify']);\n * // event is { type: 'greet'; message: string }\n * // or { type: 'notify'; message: string; level: 'info' | 'error' }\n * },\n * ```\n */\nfunction assertEvent(event, type) {\n const types = toArray(type);\n const matches = types.some(descriptor => matchesEventDescriptor(event.type, descriptor));\n if (!matches) {\n const typesText = types.length === 1 ? `type matching \"${types[0]}\"` : `one of types matching \"${types.join('\", \"')}\"`;\n throw new Error(`Expected event ${JSON.stringify(event)} to have ${typesText}`);\n }\n}\n\n/**\n * Creates a state machine (statechart) with the given configuration.\n *\n * The state machine represents the pure logic of a state machine actor.\n *\n * @example\n *\n * ```ts\n * import { createMachine } from 'xstate';\n *\n * const lightMachine = createMachine({\n * id: 'light',\n * initial: 'green',\n * states: {\n * green: {\n * on: {\n * TIMER: { target: 'yellow' }\n * }\n * },\n * yellow: {\n * on: {\n * TIMER: { target: 'red' }\n * }\n * },\n * red: {\n * on: {\n * TIMER: { target: 'green' }\n * }\n * }\n * }\n * });\n *\n * const lightActor = createActor(lightMachine);\n * lightActor.start();\n *\n * lightActor.send({ type: 'TIMER' });\n * ```\n *\n * @param config The state machine configuration.\n * @param options DEPRECATED: use `setup({ ... })` or `machine.provide({ ... })`\n * to provide machine implementations instead.\n */\nfunction createMachine(config, implementations) {\n return new StateMachine(config, implementations);\n}\n\n/** @internal */\nfunction createInertActorScope(actorLogic) {\n const self = createActor(actorLogic);\n const inertActorScope = {\n self,\n defer: () => {},\n id: '',\n logger: () => {},\n sessionId: '',\n stopChild: () => {},\n system: self.system,\n emit: () => {},\n actionExecutor: () => {}\n };\n return inertActorScope;\n}\n\n/** @deprecated Use `initialTransition(…)` instead. */\nfunction getInitialSnapshot(actorLogic, ...[input]) {\n const actorScope = createInertActorScope(actorLogic);\n return actorLogic.getInitialSnapshot(actorScope, input);\n}\n\n/**\n * Determines the next snapshot for the given `actorLogic` based on the given\n * `snapshot` and `event`.\n *\n * If the `snapshot` is `undefined`, the initial snapshot of the `actorLogic` is\n * used.\n *\n * @deprecated Use `transition(…)` instead.\n * @example\n *\n * ```ts\n * import { getNextSnapshot } from 'xstate';\n * import { trafficLightMachine } from './trafficLightMachine.ts';\n *\n * const nextSnapshot = getNextSnapshot(\n * trafficLightMachine, // actor logic\n * undefined, // snapshot (or initial state if undefined)\n * { type: 'TIMER' }\n * ); // event object\n *\n * console.log(nextSnapshot.value);\n * // => 'yellow'\n *\n * const nextSnapshot2 = getNextSnapshot(\n * trafficLightMachine, // actor logic\n * nextSnapshot, // snapshot\n * { type: 'TIMER' }\n * ); // event object\n *\n * console.log(nextSnapshot2.value);\n * // =>'red'\n * ```\n */\nfunction getNextSnapshot(actorLogic, snapshot, event) {\n const inertActorScope = createInertActorScope(actorLogic);\n inertActorScope.self._snapshot = snapshot;\n return actorLogic.transition(snapshot, event, inertActorScope);\n}\n\n// at the moment we allow extra actors - ones that are not specified by `children`\n// this could be reconsidered in the future\n\n// used to keep only StateSchema relevant keys\n// this helps with type serialization as it makes the inferred type much shorter when dealing with huge configs\n\nfunction setup({\n schemas,\n actors,\n actions,\n guards,\n delays\n}) {\n return {\n assign,\n sendTo,\n raise,\n log,\n cancel,\n stopChild,\n enqueueActions,\n emit,\n spawnChild,\n createStateConfig: config => config,\n createAction: fn => fn,\n createMachine: config => createMachine({\n ...config,\n schemas\n }, {\n actors,\n actions,\n guards,\n delays\n }),\n extend: extended => setup({\n schemas,\n actors,\n actions: {\n ...actions,\n ...extended.actions\n },\n guards: {\n ...guards,\n ...extended.guards\n },\n delays: {\n ...delays,\n ...extended.delays\n }\n })\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nclass SimulatedClock {\n constructor() {\n this.timeouts = new Map();\n this._now = 0;\n this._id = 0;\n this._flushing = false;\n this._flushingInvalidated = false;\n }\n now() {\n return this._now;\n }\n getId() {\n return this._id++;\n }\n setTimeout(fn, timeout) {\n this._flushingInvalidated = this._flushing;\n const id = this.getId();\n this.timeouts.set(id, {\n start: this.now(),\n timeout,\n fn\n });\n return id;\n }\n clearTimeout(id) {\n this._flushingInvalidated = this._flushing;\n this.timeouts.delete(id);\n }\n set(time) {\n if (this._now > time) {\n throw new Error('Unable to travel back in time');\n }\n this._now = time;\n this.flushTimeouts();\n }\n flushTimeouts() {\n if (this._flushing) {\n this._flushingInvalidated = true;\n return;\n }\n this._flushing = true;\n const sorted = [...this.timeouts].sort(([_idA, timeoutA], [_idB, timeoutB]) => {\n const endA = timeoutA.start + timeoutA.timeout;\n const endB = timeoutB.start + timeoutB.timeout;\n return endB > endA ? -1 : 1;\n });\n for (const [id, timeout] of sorted) {\n if (this._flushingInvalidated) {\n this._flushingInvalidated = false;\n this._flushing = false;\n this.flushTimeouts();\n return;\n }\n if (this.now() - timeout.start >= timeout.timeout) {\n this.timeouts.delete(id);\n timeout.fn.call(null);\n }\n }\n this._flushing = false;\n }\n increment(ms) {\n this._now += ms;\n this.flushTimeouts();\n }\n}\n\n/**\n * Returns a promise that resolves to the `output` of the actor when it is done.\n *\n * @example\n *\n * ```ts\n * const machine = createMachine({\n * // ...\n * output: {\n * count: 42\n * }\n * });\n *\n * const actor = createActor(machine);\n *\n * actor.start();\n *\n * const output = await toPromise(actor);\n *\n * console.log(output);\n * // logs { count: 42 }\n * ```\n */\nfunction toPromise(actor) {\n return new Promise((resolve, reject) => {\n actor.subscribe({\n complete: () => {\n resolve(actor.getSnapshot().output);\n },\n error: reject\n });\n });\n}\n\n/**\n * Given actor `logic`, a `snapshot`, and an `event`, returns a tuple of the\n * `nextSnapshot` and `actions` to execute.\n *\n * This is a pure function that does not execute `actions`.\n */\nfunction transition(logic, snapshot, event) {\n const executableActions = [];\n const actorScope = createInertActorScope(logic);\n actorScope.actionExecutor = action => {\n executableActions.push(action);\n };\n const nextSnapshot = logic.transition(snapshot, event, actorScope);\n return [nextSnapshot, executableActions];\n}\n\n/**\n * Given actor `logic` and optional `input`, returns a tuple of the\n * `nextSnapshot` and `actions` to execute from the initial transition (no\n * previous state).\n *\n * This is a pure function that does not execute `actions`.\n */\nfunction initialTransition(logic, ...[input]) {\n const executableActions = [];\n const actorScope = createInertActorScope(logic);\n actorScope.actionExecutor = action => {\n executableActions.push(action);\n };\n const nextSnapshot = logic.getInitialSnapshot(actorScope, input);\n return [nextSnapshot, executableActions];\n}\n\n/**\n * Given a state `machine`, a `snapshot`, and an `event`, returns an array of\n * microsteps, where each microstep is a tuple of `[snapshot, actions]`.\n *\n * This is a pure function that does not execute `actions`.\n */\nfunction getMicrosteps(machine, snapshot, event) {\n const actorScope = createInertActorScope(machine);\n const {\n microsteps\n } = macrostep(snapshot, event, actorScope, []);\n return microsteps;\n}\n\n/**\n * Given a state `machine` and optional `input`, returns an array of microsteps\n * from the initial transition, where each microstep is a tuple of `[snapshot,\n * actions]`.\n *\n * This is a pure function that does not execute `actions`.\n */\nfunction getInitialMicrosteps(machine, ...[input]) {\n const actorScope = createInertActorScope(machine);\n const initEvent = createInitEvent(input);\n const internalQueue = [];\n const preInitialSnapshot = machine._getPreInitialState(actorScope, initEvent, internalQueue);\n const first = initialMicrostep(machine.root, preInitialSnapshot, actorScope, initEvent, internalQueue);\n const {\n microsteps\n } = macrostep(first[0], initEvent, actorScope, internalQueue);\n return [first, ...microsteps];\n}\n\n/**\n * Gets all potential next transitions from the current state.\n *\n * Returns all transitions that are available from the current state, including:\n *\n * - All transitions from atomic states (leaf states in the current state\n * configuration)\n * - All transitions from ancestor states (parent states that may handle events)\n * - All guarded transitions (regardless of whether their guards would pass)\n * - Always (eventless) transitions\n * - After (delayed) transitions\n *\n * The order of transitions is deterministic:\n *\n * 1. Atomic states are processed in document order\n * 2. For each atomic state, transitions are collected from the state itself first,\n * then its ancestors\n * 3. Within each state node, transitions are in the order they appear in the state\n * definition\n *\n * @param state - The current machine snapshot\n * @returns Array of transition definitions from the current state, in\n * deterministic order\n */\nfunction getNextTransitions(state) {\n const potentialTransitions = [];\n const atomicStates = state._nodes.filter(isAtomicStateNode);\n const visited = new Set();\n\n // Collect all transitions from atomic states and their ancestors\n // Process atomic states in document order (as they appear in state._nodes)\n for (const stateNode of atomicStates) {\n // For each atomic state, process the state itself first, then its ancestors\n // This ensures child state transitions come before parent state transitions\n for (const s of [stateNode].concat(getProperAncestors(stateNode, undefined))) {\n if (visited.has(s.id)) {\n continue;\n }\n visited.add(s.id);\n\n // Get all transitions for each event type\n // Include ALL transitions, even if the same event type appears in multiple state nodes\n // This is important for guarded transitions - all are \"potential\" regardless of guard evaluation\n for (const [, transitions] of s.transitions) {\n potentialTransitions.push(...transitions);\n }\n\n // Also include always (eventless) transitions\n if (s.always) {\n potentialTransitions.push(...s.always);\n }\n }\n }\n return potentialTransitions;\n}\n\nconst defaultWaitForOptions = {\n timeout: Infinity // much more than 10 seconds\n};\n\n/**\n * Subscribes to an actor ref and waits for its emitted value to satisfy a\n * predicate, and then resolves with that value. Will throw if the desired state\n * is not reached after an optional timeout. (defaults to Infinity).\n *\n * @example\n *\n * ```js\n * const state = await waitFor(someService, (state) => {\n * return state.hasTag('loaded');\n * });\n *\n * state.hasTag('loaded'); // true\n * ```\n *\n * @param actorRef The actor ref to subscribe to\n * @param predicate Determines if a value matches the condition to wait for\n * @param options\n * @returns A promise that eventually resolves to the emitted value that matches\n * the condition\n */\nfunction waitFor(actorRef, predicate, options) {\n const resolvedOptions = {\n ...defaultWaitForOptions,\n ...options\n };\n return new Promise((res, rej) => {\n const {\n signal\n } = resolvedOptions;\n if (signal?.aborted) {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n rej(signal.reason);\n return;\n }\n let done = false;\n const handle = resolvedOptions.timeout === Infinity ? undefined : setTimeout(() => {\n dispose();\n rej(new Error(`Timeout of ${resolvedOptions.timeout} ms exceeded`));\n }, resolvedOptions.timeout);\n const dispose = () => {\n clearTimeout(handle);\n done = true;\n sub?.unsubscribe();\n if (abortListener) {\n signal.removeEventListener('abort', abortListener);\n }\n };\n function checkEmitted(emitted) {\n if (predicate(emitted)) {\n dispose();\n res(emitted);\n }\n }\n\n /**\n * If the `signal` option is provided, this will be the listener for its\n * `abort` event\n */\n let abortListener;\n // eslint-disable-next-line prefer-const\n let sub; // avoid TDZ when disposing synchronously\n\n // See if the current snapshot already matches the predicate\n checkEmitted(actorRef.getSnapshot());\n if (done) {\n return;\n }\n\n // only define the `abortListener` if the `signal` option is provided\n if (signal) {\n abortListener = () => {\n dispose();\n // XState does not \"own\" the signal, so we should reject with its reason (if any)\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n rej(signal.reason);\n };\n signal.addEventListener('abort', abortListener);\n }\n sub = actorRef.subscribe({\n next: checkEmitted,\n error: err => {\n dispose();\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n rej(err);\n },\n complete: () => {\n dispose();\n rej(new Error(`Actor terminated without satisfying predicate`));\n }\n });\n if (done) {\n sub.unsubscribe();\n }\n });\n}\n\nexport { SimulatedClock, assertEvent, createMachine, getInitialMicrosteps, getInitialSnapshot, getMicrosteps, getNextSnapshot, getNextTransitions, initialTransition, setup, toPromise, transition, waitFor };\n","import { z } from \"zod\";\n\nexport const AiChatHttpMutationMethodSchema = z.enum([\"POST\", \"PUT\", \"PATCH\", \"DELETE\"]);\nexport type AiChatHttpMutationMethod = z.infer<typeof AiChatHttpMutationMethodSchema>;\n\nexport const AiChatCookieActionSchema = z.enum([\"added\", \"modified\", \"deleted\"]);\nexport type AiChatCookieAction = z.infer<typeof AiChatCookieActionSchema>;\n\nconst MutationKeySetSchema = z\n .object({\n added: z.array(z.string()),\n modified: z.array(z.string()),\n deleted: z.array(z.string()),\n })\n .strict();\n\nexport const SegmentMutationSignalsSchema = z\n .object({\n httpMutations: z.array(\n z\n .object({\n method: AiChatHttpMutationMethodSchema,\n url: z.string().url(),\n status: z.number().int().nonnegative(),\n timestampMs: z.number().nonnegative(),\n })\n .strict(),\n ),\n cookieChanges: z.array(\n z\n .object({\n name: z.string().min(1),\n action: AiChatCookieActionSchema,\n suspectedAuth: z.boolean(),\n })\n .strict(),\n ),\n storageMutations: z\n .object({\n localStorage: MutationKeySetSchema,\n sessionStorage: MutationKeySetSchema,\n })\n .strict(),\n navigationEvents: z.array(\n z\n .object({\n url: z.string().url(),\n timestampMs: z.number().nonnegative(),\n })\n .strict(),\n ),\n dialogEvents: z.array(\n z\n .object({\n type: z.enum([\"alert\", \"confirm\", \"prompt\"]),\n message: z.string(),\n })\n .strict(),\n ),\n downloadCount: z.number().int().nonnegative(),\n pageErrorCount: z.number().int().nonnegative(),\n })\n .strict();\n\nexport type SegmentMutationSignals = z.infer<typeof SegmentMutationSignalsSchema>;\n\nexport const RunMutationSignalsSchema = z\n .object({\n perSegment: z.array(SegmentMutationSignalsSchema),\n sessionTokenRotated: z.boolean(),\n totalMutationRequestCount: z.number().int().nonnegative(),\n navigatedAwayFromBaseline: z.boolean(),\n finalUrlMatchesBaseline: z.boolean(),\n hadDialogs: z.boolean(),\n hadDownloads: z.boolean(),\n hadPageErrors: z.boolean(),\n })\n .strict();\n\nexport type RunMutationSignals = z.infer<typeof RunMutationSignalsSchema>;\n\nconst AUTH_COOKIE_PATTERN = /(session|csrf|xsrf|token|auth|jsessionid|sid)/i;\n\nexport function looksLikeAuthCookie(\n name: string,\n flags: { httpOnly?: boolean } = {},\n): boolean {\n return AUTH_COOKIE_PATTERN.test(name) || flags.httpOnly === true;\n}\n","import { z } from \"zod\";\nimport { UniqueSelectorSchema } from \"../selector/selector.schema\";\nimport { ReplayLocatorCandidateSchema } from \"../selector/replay-context.schema\";\nimport { TestDataTypeSchema, TestDataSourceSchema } from \"../test-data/test-data.schema\";\nimport { ScopeTypeSchema } from \"../test-data/scope.schema\";\n\n/** Fence-strip helper: removes markdown code fences from a code string.\n * Used as a transform in ExecuteGeneratedCodeArgsSchema so worker never\n * receives a fenced payload regardless of upstream hygiene.\n */\nconst FENCE_RE = /^\\s*```(?:js|javascript|ts|typescript)?\\s*\\n([\\s\\S]*?)\\n```\\s*$/;\n\nexport function stripMarkdownCodeFence(input: string): string {\n const m = input.match(FENCE_RE);\n return m ? m[1]!.trim() : input.trim();\n}\n\nexport const NavigateToArgsSchema = z\n .object({\n url: z.string().url(),\n waitUntil: z.enum([\"load\", \"domcontentloaded\", \"networkidle\", \"commit\"]).default(\"load\"),\n timeoutMs: z.number().int().positive().max(120_000).default(30_000),\n })\n .strict();\n\nexport type NavigateToArgs = z.infer<typeof NavigateToArgsSchema>;\n\nexport const EvaluateScriptArgsSchema = z\n .object({\n script: z.string().min(1),\n })\n .strict();\n\nexport type EvaluateScriptArgs = z.infer<typeof EvaluateScriptArgsSchema>;\n\nexport const ExecuteGeneratedCodeArgsSchema = z\n .object({\n stepId: z.string().min(1),\n code: z.string().min(1).transform(stripMarkdownCodeFence),\n })\n .strict();\n\nexport type ExecuteGeneratedCodeArgs = z.infer<typeof ExecuteGeneratedCodeArgsSchema>;\n\nexport const PageContextFieldSchema = z.enum([\n \"url\",\n \"title\",\n \"accessibilityTree\",\n \"visibleText\",\n \"domSnapshot\",\n \"screenshotBase64\",\n]);\n\nexport const GetPageSnapshotArgsSchema = z\n .object({\n fields: z.array(PageContextFieldSchema).optional(),\n })\n .strict();\n\nexport type GetPageSnapshotArgs = z.infer<typeof GetPageSnapshotArgsSchema>;\n\nexport const PickedElementSchema = z\n .object({\n uniqueSelector: UniqueSelectorSchema,\n locatorCandidates: z.array(ReplayLocatorCandidateSchema).max(20),\n\n role: z.string().optional(),\n accessibleName: z.string().max(300).optional(),\n tagName: z.string(),\n inputType: z.string().optional(),\n\n visibleText: z.string().max(500).optional(),\n placeholder: z.string().max(200).optional(),\n ariaLabel: z.string().max(200).optional(),\n title: z.string().max(200).optional(),\n alt: z.string().max(200).optional(),\n\n attributes: z\n .record(z.string().max(100), z.string().max(1024))\n .refine((r) => Object.keys(r).length <= 30, {\n message: \"attributes capped at 30\",\n }),\n boundingBox: z.object({\n x: z.number(),\n y: z.number(),\n width: z.number(),\n height: z.number(),\n }),\n parentChain: z\n .array(\n z.object({\n tagName: z.string(),\n role: z.string().optional(),\n accessibleName: z.string().optional(),\n }),\n )\n .max(4),\n\n pageUrl: z.string().url(),\n pageTitle: z.string().max(500),\n viewportSize: z.object({ width: z.number(), height: z.number() }),\n pickedAt: z.number().nonnegative(),\n\n // ~1.5 MB after base64 decode. Caps payload bloat in AiChatRequest + step meta.\n croppedScreenshotBase64: z\n .string()\n .max(2 * 1024 * 1024)\n .optional(),\n\n stale: z.boolean().optional(),\n })\n .strict();\n\nexport type PickedElement = z.infer<typeof PickedElementSchema>;\n\nexport const VerifyPinnedElementArgsSchema = z\n .object({\n uniqueSelector: UniqueSelectorSchema,\n pageUrl: z.string().url(),\n })\n .strict();\nexport type VerifyPinnedElementArgs = z.infer<typeof VerifyPinnedElementArgsSchema>;\n\nexport const VerifyPinnedElementResultSchema = z\n .object({\n resolved: z.boolean(),\n urlMatches: z.boolean(),\n stale: z.boolean(),\n })\n .strict();\nexport type VerifyPinnedElementResult = z.infer<typeof VerifyPinnedElementResultSchema>;\n\n// ── listAvailableTestData schemas ──────────────────────────────────────────\n\nexport const ListAvailableTestDataArgsSchema = z.object({}).strict();\n\nexport type ListAvailableTestDataArgs = z.infer<typeof ListAvailableTestDataArgsSchema>;\n\nexport const ListAvailableTestDataEntrySchema = z\n .object({\n key: z.string().min(1),\n dataType: TestDataTypeSchema,\n scope: ScopeTypeSchema,\n source: TestDataSourceSchema,\n })\n .strict();\n\nexport type ListAvailableTestDataEntry = z.infer<typeof ListAvailableTestDataEntrySchema>;\n\nexport const ListAvailableTestDataResultSchema = z\n .object({\n entries: z.array(ListAvailableTestDataEntrySchema),\n })\n .strict();\n\nexport type ListAvailableTestDataResult = z.infer<typeof ListAvailableTestDataResultSchema>;\n\n// ── fillFormBatch schemas ──────────────────────────────────────────────────\n\nconst LocatorSpecSchema = z\n .object({\n role: z.string().optional(),\n name: z.string().optional(),\n testId: z.string().optional(),\n text: z.string().optional(),\n selector: z.string().optional(),\n })\n .strict();\n\nconst FieldKindSchema = z.enum([\n \"text\",\n \"email\",\n \"password\",\n \"tel\",\n \"url\",\n \"number\",\n \"date\",\n \"select\",\n \"multiselect\",\n \"checkbox\",\n \"radio\",\n \"textarea\",\n \"autocomplete\",\n \"file\",\n]);\n\nexport const FillFormBatchFieldSchema = z\n .object({\n fieldId: z.string().min(1),\n locator: LocatorSpecSchema,\n kind: FieldKindSchema,\n value: z.union([z.string(), z.array(z.string())]),\n autocompleteSettleMs: z.number().int().positive().optional(),\n })\n .strict();\n\nexport const FillFormBatchArgsSchema = z\n .object({\n fields: z.array(FillFormBatchFieldSchema).min(1).max(50),\n stopOnError: z.boolean().default(false),\n })\n .strict();\n\nexport type FillFormBatchArgs = z.infer<typeof FillFormBatchArgsSchema>;\n\nexport const FillFormBatchResultEntrySchema = z\n .object({\n fieldId: z.string().min(1),\n status: z.enum([\"filled\", \"skipped\", \"error\"]),\n error: z.string().optional(),\n actualValue: z.string().optional(),\n })\n .strict();\n\nexport const FillFormBatchResultSchema = z\n .object({\n results: z.array(FillFormBatchResultEntrySchema),\n domGrew: z.boolean(),\n })\n .strict();\n\nexport type FillFormBatchResult = z.infer<typeof FillFormBatchResultSchema>;\n","import { z } from \"zod\";\nimport { CommandSchema } from \"../command/command.schema\";\nimport { UniqueSelectorSchema } from \"../selector/selector.schema\";\nimport { SegmentMutationSignalsSchema } from \"../ai-chat-mutation-signals\";\nimport { PickedElementSchema } from \"./tool-args\";\n\nexport const NavigateCommandSchema = z.object({\n type: z.literal(\"navigate\"),\n path: z.string(),\n title: z.string().optional(),\n});\n\nexport type NavigateCommand = z.infer<typeof NavigateCommandSchema>;\n\nexport const StepCommandSchema = z.union([z.lazy(() => CommandSchema), NavigateCommandSchema]);\nexport type StepCommand = z.infer<typeof StepCommandSchema>;\n\nconst SessionContextItemSchema = z.object({\n name: z.string(),\n stepType: z.enum([\"Given\", \"When\", \"Then\"]),\n index: z.number(),\n});\n\nconst MapItemSchema = z.object({\n key: z.string(),\n value: z.string(),\n _id: z.string().optional(),\n});\n\nconst ConfigSchema = z.object({\n enableRerunFallback: z.boolean().default(true),\n maxRetries: z.number().default(1),\n});\n\nexport const GenerateStepRequestSchema = z.object({\n commands: z.array(StepCommandSchema),\n screenshot: z.string().optional(),\n map: z.array(MapItemSchema).optional().default([]),\n stepsNames: z.array(z.string()).optional(),\n sessionContext: z.array(SessionContextItemSchema).optional().default([]),\n config: ConfigSchema.optional().default({ enableRerunFallback: true, maxRetries: 1 }),\n userPrompt: z.string().optional(),\n /**\n * Top-level correlation IDs so cross-service Logs Insights queries\n * (filtering on `sessionId`) catch ai-server step-generation rows the same\n * way they catch client-web rows. Optional so older callers (worker\n * versions without recorder session attribution) keep working. `reportId`\n * is recorder-only and intentionally omitted.\n */\n sessionId: z.string().min(1).optional(),\n scenarioId: z.string().min(1).optional(),\n projectId: z.string().min(1).optional(),\n});\n\nexport type GenerateStepRequest = z.infer<typeof GenerateStepRequestSchema>;\n\nexport const GenerateParameterizedStepNameRequestSchema = z.object({\n commands: z.array(z.string()),\n tempStepParameters: z.record(z.string(), z.string()),\n otherStepNames: z.array(z.string()).optional(),\n /**\n * Top-level correlation IDs so cross-service Logs Insights queries\n * (filtering on `sessionId`) catch ai-server parameterized-step-name rows\n * the same way they catch client-web rows. Optional so older callers keep\n * working. `reportId` is recorder-only and intentionally omitted.\n */\n sessionId: z.string().min(1).optional(),\n scenarioId: z.string().min(1).optional(),\n projectId: z.string().min(1).optional(),\n});\n\nexport type GenerateParameterizedStepNameRequest = z.infer<\n typeof GenerateParameterizedStepNameRequestSchema\n>;\n\nexport const AiChatPageContextSchema = z\n .object({\n url: z.string().url(),\n title: z.string().min(1),\n accessibilityTree: z.string().min(1),\n visibleText: z.string().min(1).optional(),\n domSnapshot: z.string().min(1).optional(),\n screenshotBase64: z.string().min(1).optional(),\n })\n .strict();\n\nexport const AvailableModelSchema = z.object({\n provider: z.string(),\n model: z.string(),\n name: z.string().optional(),\n});\n\nexport type AvailableModel = z.infer<typeof AvailableModelSchema>;\n\nexport const ValidationComplexitySchema = z.enum([\"simple\", \"moderate\", \"complex\"]);\n\nexport const AiChatValidationResultSchema = z\n .object({\n valid: z.boolean(),\n complexity: ValidationComplexitySchema,\n errors: z.array(z.string()),\n warnings: z.array(z.string()),\n })\n .strict();\n\nexport const CheckpointSchema = z\n .object({\n label: z.string().min(1),\n timestampMs: z.number().nonnegative(),\n data: z.unknown().optional(),\n })\n .strict();\n\nexport const ExecutionResultSchema = z\n .object({\n success: z.boolean(),\n result: z.unknown().optional(),\n error: z.string().optional(),\n userMessage: z.string().optional(),\n logs: z.array(z.string()),\n checkpoints: z.array(CheckpointSchema).optional().default([]),\n duration: z.number().nonnegative(),\n screenshotAfter: z.string().optional(),\n mutationSignals: SegmentMutationSignalsSchema.optional(),\n })\n .strict();\n\nexport const PreviousExecutionSchema = z\n .object({\n success: z.boolean(),\n error: z.string().optional(),\n checkpoints: z.array(CheckpointSchema).optional(),\n })\n .strict();\n\nexport const DEFAULT_MAX_SEMANTIC_ACTIONS_PER_AI_STEP = 5;\nexport const AI_STEP_CODE_HISTORY_LIMIT = 10;\n\nexport const AiStepDraftModeSchema = z.enum([\"new-ai-step\", \"edit-ai-step\"]);\n\nexport const AiStepEditContextSchema = z\n .object({\n sourceStepId: z.string().min(1),\n originalPrompt: z.string().min(1),\n currentStepName: z.string().min(1),\n currentCode: z.string().min(1),\n baseCodeHash: z.string().min(1),\n })\n .strict();\n\nexport const AiStepCodeRevisionSourceSchema = z.enum([\"edit\", \"background-repair\", \"rollback\"]);\n\nexport const AiCodeSegmentSchema = z\n .object({\n code: z.string().min(1),\n label: z.string().min(1),\n })\n .strict();\nexport type AiCodeSegment = z.infer<typeof AiCodeSegmentSchema>;\n\nexport const AiStepCodeRevisionSchema = z\n .object({\n id: z.string().min(1),\n createdAt: z.string().min(1),\n source: AiStepCodeRevisionSourceSchema,\n prompt: z.string(),\n code: z.string().min(1),\n codeHash: z.string().min(1),\n displayName: z.string().min(1).optional(),\n execution: ExecutionResultSchema.optional(),\n provider: z.string().min(1).optional(),\n model: z.string().min(1).optional(),\n codeSegments: z.array(AiCodeSegmentSchema).min(1).optional(),\n })\n .strict();\n\nexport function normalizeAiStepCodeRevision(revision: AiStepCodeRevision): AiStepCodeRevision {\n if (revision.codeSegments && revision.codeSegments.length > 0) {\n return revision;\n }\n return {\n ...revision,\n codeSegments: [{ code: revision.code, label: revision.displayName ?? \"Step\" }],\n };\n}\n\nexport const AiStepCodeHistorySchema = z\n .array(AiStepCodeRevisionSchema)\n .max(AI_STEP_CODE_HISTORY_LIMIT);\n\nexport function normalizeAiStepCodeHistory(raw: unknown): AiStepCodeRevision[] {\n if (!Array.isArray(raw)) {\n return [];\n }\n\n return raw\n .map((entry) => AiStepCodeRevisionSchema.safeParse(entry))\n .filter((result): result is { success: true; data: AiStepCodeRevision } => result.success)\n .map((result) => normalizeAiStepCodeRevision(result.data))\n .slice(-AI_STEP_CODE_HISTORY_LIMIT);\n}\n\nexport const AiSegmentEditContextSchema = z\n .object({\n segmentIndex: z.number().int().nonnegative(),\n segment: AiCodeSegmentSchema,\n prevSegment: AiCodeSegmentSchema.optional(),\n nextSegment: AiCodeSegmentSchema.optional(),\n /** Overall step intent — gives the regen agent context for why this segment exists. */\n stepIntent: z.string().min(1),\n /** Free-form user follow-up prompt scoped to this segment. */\n userPrompt: z.string().min(1),\n })\n .strict();\nexport type AiSegmentEditContext = z.infer<typeof AiSegmentEditContextSchema>;\n\nexport const AiStepEditBaseSegmentSchema = z\n .object({\n order: z.number().int().nonnegative(),\n code: z.string().min(1),\n label: z.string().min(1),\n })\n .strict();\nexport type AiStepEditBaseSegment = z.infer<typeof AiStepEditBaseSegmentSchema>;\n\nexport const AiStepEditIntentBaselineSchema = z\n .object({\n url: z.string().min(1),\n title: z.string(),\n accessibilityTreeHash: z.string().min(1),\n })\n .strict();\nexport type AiStepEditIntentBaseline = z.infer<typeof AiStepEditIntentBaselineSchema>;\n\nexport const AiStepEditModeContextSchema = z\n .object({\n baseSegments: z.array(AiStepEditBaseSegmentSchema).min(1),\n baseCodeHash: z.string().min(1),\n intentBaseline: AiStepEditIntentBaselineSchema,\n })\n .strict();\nexport type AiStepEditModeContext = z.infer<typeof AiStepEditModeContextSchema>;\n\n/**\n * FNV-1a 32-bit hash. Shared primitive used by all edit-mode hash helpers so\n * client and server always produce identical digests for identical inputs.\n */\nexport function computeFnv1a32Hash(value: string): string {\n let hash = 0x811c9dc5;\n for (let index = 0; index < value.length; index += 1) {\n hash ^= value.charCodeAt(index);\n hash = Math.imul(hash, 0x01000193);\n }\n return `fnv1a32:${(hash >>> 0).toString(16).padStart(8, \"0\")}`;\n}\n\n/**\n * Canonical edit-mode base-code hasher shared by client and server.\n *\n * Algorithm:\n * 1. Sort segments by `order`.\n * 2. Normalize each segment's code (CRLF → LF, trim).\n * 3. Join with `\\n\\n`.\n * 4. FNV-1a 32-bit hash of the resulting string.\n *\n * Both sides MUST call this function (not a local copy) so hash inputs are\n * always identical.\n */\nexport function computeEditModeBaseCodeHash(\n segments: ReadonlyArray<{ order: number; code: string }>,\n): string {\n const normalized = [...segments]\n .sort((a, b) => a.order - b.order)\n .map((s) => s.code.replace(/\\r\\n/g, \"\\n\").trim())\n .join(\"\\n\\n\");\n return computeFnv1a32Hash(normalized);\n}\n\nexport const AiChatRequestSchema = z\n .object({\n sessionId: z.string().min(1),\n stepId: z.string().min(1).optional(),\n /**\n * Top-level correlation IDs so cross-service Logs Insights queries\n * (filtering on `sessionId`) catch ai-server rows the same way they\n * catch client-web rows. Optional so older callers (recorder versions\n * without scenario/project context) keep working. `reportId` is\n * intentionally omitted: it is recorder-only.\n */\n scenarioId: z.string().min(1).optional(),\n projectId: z.string().min(1).optional(),\n prompt: z.string().min(1),\n messages: z.array(z.record(z.string(), z.unknown())).optional(),\n pageContext: AiChatPageContextSchema.optional(),\n workerUrl: z.url().optional(),\n provider: z.string().optional(),\n model: z.string().optional(),\n maxExecutionRetries: z.number().int().nonnegative().default(5),\n maxSuccessfulStepsPerRun: z.number().int().positive().default(8).optional(),\n maxSemanticActionsPerAiStep: z\n .number()\n .int()\n .positive()\n .default(DEFAULT_MAX_SEMANTIC_ACTIONS_PER_AI_STEP),\n stepEditContext: AiStepEditContextSchema.optional(),\n segmentEditContext: AiSegmentEditContextSchema.optional(),\n mode: z.literal(\"edit\").optional(),\n baseSegments: z.array(AiStepEditBaseSegmentSchema).min(1).optional(),\n baseCodeHash: z.string().min(1).optional(),\n intentBaseline: AiStepEditIntentBaselineSchema.optional(),\n existingCode: z.string().min(1).optional(),\n existingCodeAuthoritative: z.boolean().optional(),\n existingCodeSegments: z.array(AiCodeSegmentSchema).min(1).optional(),\n previousExecution: PreviousExecutionSchema.optional(),\n /**\n * @deprecated Retained only so mixed-version callers still passing the legacy\n * `agentVariant` field don't hit a 400 from the strict schema. The server\n * ignores any value here; observe-act-loop is the only supported variant.\n * Remove this field after every producer (client, worker, orchestrator) is\n * confirmed upgraded past the removal point.\n */\n agentVariant: z.enum([\"classic\", \"observeActLoop\"]).optional(),\n pickedElement: PickedElementSchema.optional(),\n runId: z.string().min(1).optional(),\n })\n .strict();\n\nexport const AiChatToolErrorSchema = z\n .object({\n __toolError: z.literal(true),\n message: z.string().min(1),\n })\n .strict();\n\nexport const AiChatToolNameSchema = z.enum([\n \"getPageSnapshot\",\n \"getPageScreenshot\",\n \"navigateTo\",\n \"evaluateScript\",\n \"executeGeneratedCode\",\n \"getPageContext\",\n \"listAvailableTestData\",\n \"getStepTraceExcerpt\",\n \"fillFormBatch\",\n]);\n\nexport const TraceActionSchema = z\n .object({\n action: z.string().min(1),\n target: z.string().optional(),\n timestamp: z.number().optional(),\n })\n .strict();\n\nexport const NetworkFailureSchema = z\n .object({\n url: z.string().min(1),\n status: z.number().optional(),\n error: z.string().optional(),\n })\n .strict();\n\nexport const GetStepTraceExcerptArgsSchema = z\n .object({\n stepId: z.string().min(1),\n })\n .strict();\n\nexport const GetStepTraceExcerptResultSchema = z\n .object({\n actions: z.array(TraceActionSchema),\n consoleErrors: z.array(z.string()),\n networkFailures: z.array(NetworkFailureSchema),\n domSnapshotRef: z.string().optional(),\n note: z.string().optional(),\n })\n .strict();\n\nexport const PageAgentAnalysisSchema = z\n .object({\n suggestions: z.array(z.string()),\n evidence: z.array(z.string()),\n url: z.string(),\n screenshot: z.string().optional(),\n })\n .strict();\n\nexport const AiChatToolCallSchema = z\n .object({\n toolName: AiChatToolNameSchema,\n args: z.unknown(),\n })\n .strict();\n\nexport const AiChatThinkingEventSchema = z\n .object({\n type: z.literal(\"thinking\"),\n content: z.string().min(1),\n })\n .strict();\n\nexport const AiChatExplorationEventSchema = z\n .object({\n type: z.literal(\"exploration\"),\n toolName: z.string().min(1),\n args: z.unknown(),\n result: z.unknown(),\n })\n .strict();\n\nexport const AiChatErrorEventSchema = z\n .object({\n type: z.literal(\"error\"),\n message: z.string().min(1),\n userMessage: z.string().min(1).optional(),\n nextSuggestion: z.string().min(1).optional(),\n code: z.string().min(1).optional(),\n })\n .strict();\n\nexport const AiChatCompleteEventSchema = z\n .object({\n type: z.literal(\"complete\"),\n code: z.string().min(1),\n validation: AiChatValidationResultSchema,\n mode: z.string().min(1),\n codeSegments: z.array(AiCodeSegmentSchema).min(1).optional(),\n })\n .strict();\n\nexport const AiChatExecutionCompleteEventSchema = z\n .object({\n type: z.literal(\"execution-complete\"),\n /** Per-step display code for the iteration just executed. */\n code: z.string().min(1),\n /**\n * Full accumulated code across every successful iteration in this run\n * up to and including the iteration this event reports on. Optional for\n * backward compatibility with older producers. When present, the client\n * MUST prefer this over `code` so a user-triggered Finish before the\n * terminal `complete` event commits the full run, not just the last\n * iteration. Always carried by the observe-act loop's per-iteration\n * yield path.\n */\n accumulatedCode: z.string().min(1).optional(),\n accumulatedCodeSegments: z.array(AiCodeSegmentSchema).min(1).optional(),\n execution: ExecutionResultSchema,\n })\n .strict();\n\nexport const AiChatWorkerToolCallEventSchema = z\n .object({\n type: z.literal(\"worker-tool-call\"),\n callId: z.string().min(1),\n toolName: AiChatToolNameSchema,\n args: z.unknown(),\n runId: z.string().optional(),\n })\n .strict();\n\nexport const PlanSummaryCommittedStepSchema = z\n .object({\n stepId: z.string().min(1),\n intent: z.string().min(1),\n code: z.string().min(1),\n success: z.boolean(),\n failureCode: z.string().min(1).optional(),\n codeSegments: z.array(AiCodeSegmentSchema).min(1).optional(),\n })\n .strict();\n\nexport const AiChatPlanSummaryStatusSchema = z.enum([\"complete\", \"partial\", \"aborted\"]);\n\nexport const AiChatPlanSummarySchema = z\n .object({\n status: AiChatPlanSummaryStatusSchema,\n mode: AiStepDraftModeSchema,\n sourceStepId: z.string().min(1).optional(),\n baseCodeHash: z.string().min(1).optional(),\n committedSteps: z.array(PlanSummaryCommittedStepSchema),\n stoppedAfterIndex: z.number().int().nonnegative().optional(),\n nextSuggestion: z.string().min(1).optional(),\n })\n .strict();\n\nexport const AiChatCohesionPlanSchema = z\n .object({\n steps: z.array(z.object({ id: z.string().min(1), intent: z.string().min(1) }).passthrough()),\n modelMeta: z.record(z.string(), z.unknown()).optional(),\n sourceInput: z.unknown().optional(),\n })\n .passthrough();\n\nexport const AiChatPlanRevisionSchema = z\n .object({\n id: z.string().min(1),\n createdAt: z.string().min(1),\n summary: AiChatPlanSummarySchema,\n cohesionPlan: AiChatCohesionPlanSchema.optional(),\n })\n .strict();\n\nexport const AiChatPlanSummaryEventSchema = z\n .object({\n type: z.literal(\"plan-summary\"),\n summary: AiChatPlanSummarySchema,\n })\n .strict();\n\nexport const AiChatEventSchema = z.discriminatedUnion(\"type\", [\n AiChatThinkingEventSchema,\n AiChatExplorationEventSchema,\n AiChatErrorEventSchema,\n AiChatCompleteEventSchema,\n AiChatExecutionCompleteEventSchema,\n AiChatWorkerToolCallEventSchema,\n AiChatPlanSummaryEventSchema,\n]);\n\nexport type AiChatPageContext = z.infer<typeof AiChatPageContextSchema>;\nexport type AiStepDraftMode = z.infer<typeof AiStepDraftModeSchema>;\nexport type AiStepEditContext = z.infer<typeof AiStepEditContextSchema>;\nexport type AiStepCodeRevisionSource = z.infer<typeof AiStepCodeRevisionSourceSchema>;\nexport type AiStepCodeRevision = z.infer<typeof AiStepCodeRevisionSchema>;\nexport type AiStepCodeHistory = z.infer<typeof AiStepCodeHistorySchema>;\nexport type AiChatRequest = z.input<typeof AiChatRequestSchema>;\nexport type ParsedAiChatRequest = z.infer<typeof AiChatRequestSchema>;\nexport type ValidationComplexity = z.infer<typeof ValidationComplexitySchema>;\nexport type AiChatValidationResult = z.infer<typeof AiChatValidationResultSchema>;\nexport type Checkpoint = z.infer<typeof CheckpointSchema>;\nexport type ExecutionResult = z.infer<typeof ExecutionResultSchema>;\nexport type AiChatToolError = z.infer<typeof AiChatToolErrorSchema>;\nexport type AiChatToolCall = z.infer<typeof AiChatToolCallSchema>;\nexport type PageAgentAnalysis = z.infer<typeof PageAgentAnalysisSchema>;\nexport type AiChatThinkingEvent = z.infer<typeof AiChatThinkingEventSchema>;\nexport type AiChatExplorationEvent = z.infer<typeof AiChatExplorationEventSchema>;\nexport type AiChatErrorEvent = z.infer<typeof AiChatErrorEventSchema>;\nexport type AiChatCompleteEvent = z.infer<typeof AiChatCompleteEventSchema>;\nexport type AiChatExecutionCompleteEvent = z.infer<typeof AiChatExecutionCompleteEventSchema>;\nexport type AiChatWorkerToolCallEvent = z.infer<typeof AiChatWorkerToolCallEventSchema>;\nexport type AiChatPlanSummaryStatus = z.infer<typeof AiChatPlanSummaryStatusSchema>;\nexport type PlanSummaryCommittedStep = z.infer<typeof PlanSummaryCommittedStepSchema>;\nexport type AiChatPlanSummary = z.infer<typeof AiChatPlanSummarySchema>;\nexport type AiChatCohesionPlan = z.infer<typeof AiChatCohesionPlanSchema>;\nexport type AiChatPlanRevision = z.infer<typeof AiChatPlanRevisionSchema>;\nexport type AiChatPlanSummaryEvent = z.infer<typeof AiChatPlanSummaryEventSchema>;\nexport type AiChatEvent = z.infer<typeof AiChatEventSchema>;\n\n// ─────────────────────────────────────────────────────────────────────────\n// AiChatDataPart — wire shapes flowing from worker `aiChatUiAdapter` into\n// the client's `@ai-sdk/react` `chat.data` stream.\n//\n// Distinct from `AiChatEvent` (ai-server -> worker SSE payloads): the worker\n// renames `execution-complete` -> `data-execution-status`, `complete` ->\n// `data-complete`, etc. before forwarding. These schemas are the canonical\n// client-facing contract — every recorder UI surface that consumes `chat.data`\n// MUST validate through this discriminated union, not via ad-hoc\n// `Record<string, unknown>` casts. Drift between server and client surfaces\n// as a typed parse failure instead of a silent UI bug.\n//\n// Variant authority: see apps/worker/src/services/aiChatUiAdapter.ts\n// `dataStream.writeData({ type: \"data-*\", ... })` calls.\n// ─────────────────────────────────────────────────────────────────────────\n\nconst AiChatDataThinkingPartSchema = z.object({\n type: z.literal(\"data-thinking\"),\n content: z.string(),\n});\n\nconst AiChatDataExecutionStatusPartSchema = z.object({\n type: z.literal(\"data-execution-status\"),\n code: z.string(),\n accumulatedCode: z.string().optional(),\n accumulatedCodeSegments: z.array(AiCodeSegmentSchema).optional(),\n success: z.boolean(),\n duration: z.number(),\n logs: z.array(z.string()),\n checkpoints: z.array(CheckpointSchema).optional().default([]),\n error: z.string().optional(),\n userMessage: z.string().optional(),\n screenshotAfter: z.string().optional(),\n});\n\n/**\n * Wire-level mode values emitted by ai-server in `complete` events. Enumerated\n * from the call sites in `apps/ai-server/src/mastra/agents/`:\n * - `observe-act-loop` (observe-act-completion happy path)\n * - `observe-act-loop-cap-reached` (loop hit iteration cap mid-run)\n * - `segment-followup` (apps/ai-server/src/trpc/router.ts segment-followup path)\n * Plus the AiStepDraftMode values used by client-side fixtures that did not\n * originate from the observe-act loop (legacy: `new-ai-step`, `edit-ai-step`).\n *\n * Keep this in lock-step with ai-server emitters. A new mode means BOTH adding\n * it here AND updating the consumer surfaces (selector helpers, panel UI).\n */\nconst AiChatDataCompleteModeSchema = z.enum([\n \"observe-act-loop\",\n \"observe-act-loop-cap-reached\",\n \"segment-followup\",\n \"new-ai-step\",\n \"edit-ai-step\",\n]);\n\nexport type AiChatDataCompleteMode = z.infer<typeof AiChatDataCompleteModeSchema>;\n\nconst AiChatDataCompletePartSchema = z.object({\n type: z.literal(\"data-complete\"),\n code: z.string(),\n codeSegments: z.array(AiCodeSegmentSchema).min(1).optional(),\n validation: AiChatValidationResultSchema,\n mode: AiChatDataCompleteModeSchema,\n});\n\nconst AiChatDataErrorPartSchema = z.object({\n type: z.literal(\"data-error\"),\n message: z.string(),\n userMessage: z.string().optional(),\n nextSuggestion: z.string().min(1).optional(),\n code: z.string().optional(),\n});\n\nconst AiChatDataPlanSummaryPartSchema = z.object({\n type: z.literal(\"data-plan-summary\"),\n summary: AiChatPlanSummarySchema,\n});\n\nconst AiChatDataExplorationPartSchema = z.object({\n type: z.literal(\"exploration\"),\n toolName: z.string(),\n args: z.unknown(),\n result: z.unknown(),\n});\n\nconst AiChatDataGeneratedCodePartSchema = z.object({\n type: z.literal(\"data-generated-code\"),\n code: z.string(),\n validation: AiChatValidationResultSchema,\n});\n\nexport const AiChatDataPartSchema = z.discriminatedUnion(\"type\", [\n AiChatDataThinkingPartSchema,\n AiChatDataExecutionStatusPartSchema,\n AiChatDataCompletePartSchema,\n AiChatDataErrorPartSchema,\n AiChatDataPlanSummaryPartSchema,\n AiChatDataExplorationPartSchema,\n AiChatDataGeneratedCodePartSchema,\n]);\n\nexport type AiChatDataPart = z.infer<typeof AiChatDataPartSchema>;\nexport type AiChatDataThinkingPart = z.infer<typeof AiChatDataThinkingPartSchema>;\nexport type AiChatDataExecutionStatusPart = z.infer<typeof AiChatDataExecutionStatusPartSchema>;\nexport type AiChatDataCompletePart = z.infer<typeof AiChatDataCompletePartSchema>;\nexport type AiChatDataErrorPart = z.infer<typeof AiChatDataErrorPartSchema>;\nexport type AiChatDataPlanSummaryPart = z.infer<typeof AiChatDataPlanSummaryPartSchema>;\nexport type AiChatDataExplorationPart = z.infer<typeof AiChatDataExplorationPartSchema>;\nexport type AiChatDataGeneratedCodePart = z.infer<typeof AiChatDataGeneratedCodePartSchema>;\n\n/**\n * Parse an arbitrary `chat.data` array into a typed AiChatDataPart array.\n * Invalid entries are dropped with a structured warning to the supplied\n * callback so callers can route the warning to their renderer logger.\n *\n * Use this at the @ai-sdk/react boundary in client hooks. Memoize the result\n * to avoid re-parsing on every render.\n */\nexport function parseAiChatDataParts(\n raw: unknown,\n onWarn?: (entry: { index: number; type: unknown; issue: string }) => void,\n): AiChatDataPart[] {\n if (!Array.isArray(raw)) return [];\n const parsed: AiChatDataPart[] = [];\n raw.forEach((entry, index) => {\n const result = AiChatDataPartSchema.safeParse(entry);\n if (result.success) {\n parsed.push(result.data);\n } else if (onWarn) {\n onWarn({\n index,\n type: (entry as { type?: unknown })?.type,\n issue: result.error.issues[0]?.message ?? \"validation failed\",\n });\n }\n });\n return parsed;\n}\n\n/** Schema for multi-turn continuation prompts. pageContext is REQUIRED (fixes bug 4 structurally). */\nexport const ContinuationPromptInputSchema = z\n .object({\n originalPrompt: z.string().min(1),\n committedStepsSummary: z.string(),\n executedActionBullets: z.array(z.string()),\n failureClassification: z.string().optional(),\n pageContext: AiChatPageContextSchema,\n })\n .strict();\n\nexport type ContinuationPromptInput = z.infer<typeof ContinuationPromptInputSchema>;\n\nexport type TraceAction = z.infer<typeof TraceActionSchema>;\nexport type NetworkFailure = z.infer<typeof NetworkFailureSchema>;\nexport type GetStepTraceExcerptArgs = z.infer<typeof GetStepTraceExcerptArgsSchema>;\nexport type GetStepTraceExcerptResult = z.infer<typeof GetStepTraceExcerptResultSchema>;\n","import { setup, assign, emit, fromCallback } from \"xstate\";\nimport type { SnapshotFrom, EventFrom } from \"xstate\";\nimport { z } from \"zod\";\nimport {\n AiChatPageContextSchema,\n AiChatCohesionPlanSchema,\n AiChatPlanRevisionSchema,\n AiChatPlanSummarySchema,\n normalizeAiStepCodeHistory,\n type AiChatCohesionPlan,\n type AiChatPlanRevision,\n type AiChatPlanSummary,\n type AiStepCodeRevision,\n} from \"./types\";\n\n/** Minimal message shape used by the machine's transcript array.\n * Matches the role/content structure used by ai-server. */\nexport type AiChatMessage = {\n role: \"user\" | \"assistant\";\n content: string;\n};\n\nexport const AiChatMessageSchema = z.object({\n role: z.enum([\"user\", \"assistant\"]),\n content: z.string(),\n});\n\nexport type AiChatPageContext = z.infer<typeof AiChatPageContextSchema>;\n\n/**\n * AiChatContext — machine-scoped state persisted into step meta on snapshot.\n * transcript: committed assistant/user messages for the current step.\n * lastPrompt: last userPrompt submitted (for Retry).\n * lastFailure: { code, reason } when codegen or execution failed.\n * pendingCode: streamed code not yet committed.\n * executionResult: last worker verdict summary.\n */\nexport interface AiChatContext {\n transcript: AiChatMessage[];\n lastPrompt: string | null;\n lastFailure: { code: string; reason: string } | null;\n pendingCode: string | null;\n executionResult: { success: boolean; summary?: string } | null;\n\n planSummary: AiChatPlanSummary | null;\n cohesionPlan: AiChatCohesionPlan | null;\n planRevisions: AiChatPlanRevision[];\n codeHistory: AiStepCodeRevision[];\n pageContext: AiChatPageContext | null;\n pickedElement: import(\"./tool-args\").PickedElement | null;\n}\n\nexport type AiChatEvent =\n | { type: \"SUBMIT\"; prompt: string; pageContext: AiChatPageContext }\n | { type: \"SSE_THINKING\"; chunk?: string }\n | { type: \"SSE_CODE_CHUNK\"; chunk: string }\n | { type: \"SSE_COMPLETE\"; code: string }\n | { type: \"SSE_ERROR\"; reason: string }\n | { type: \"SSE_EXECUTION_STATUS\"; success: boolean; summary?: string }\n | {\n type: \"SSE_PLAN_SUMMARY_RECEIVED\";\n planSummary: AiChatPlanSummary;\n cohesionPlan?: AiChatCohesionPlan;\n }\n | { type: \"SSE_TRANSCRIPT_APPEND\"; message: AiChatMessage }\n | { type: \"CANCEL\" }\n | { type: \"DISCARD\" }\n | { type: \"SAVE\" }\n | { type: \"RETRY\" }\n | { type: \"RESET_TO_IDLE\" }\n | { type: \"SNAPSHOT_PERSISTED\" };\n\n/**\n * AiChatEmittedEvent — outbound machine notifications consumed by surrounding\n * code (recorder hooks, telemetry). Use `actor.on(\"type\", handler)` to subscribe.\n *\n * `aichat.contract.violation` fires when the AI chat stream produced a terminal\n * `complete` event without a preceding successful `execution-status`. This is a\n * server-side contract bug or a transport drop — never a legitimate flow.\n * Distinguishes from `completedWithSalvage` (execution ran and failed; legit recovery).\n */\nexport type AiChatEmittedEvent = {\n type: \"aichat.contract.violation\";\n reason: \"complete-without-execution-status\";\n hasPendingCode: boolean;\n};\n\nexport const aiChatMachine = setup({\n types: {} as {\n context: AiChatContext;\n events: AiChatEvent;\n emitted: AiChatEmittedEvent;\n input: {\n stepId: string;\n /** Plain-JSON context fields hydrated from step.meta.aiChat on remount. */\n hydratedContext?: {\n transcript: AiChatMessage[];\n lastPrompt: string | null;\n lastFailure: { code: string; reason: string } | null;\n pendingCode?: string | null;\n executionResult?: { success: boolean; summary?: string } | null;\n\n planSummary?: AiChatPlanSummary | null;\n cohesionPlan?: AiChatCohesionPlan | null;\n planRevisions?: AiChatPlanRevision[];\n codeHistory?: AiStepCodeRevision[];\n pickedElement?: import(\"./tool-args\").PickedElement | null;\n };\n };\n },\n actors: {\n /**\n * SSE invoked actor. The @blinq/schemas package declares the CONTRACT only\n * (fromCallback signature). Concrete implementation is injected by the\n * client via `aiChatMachine.provide({ actors: { sseStream: ... } })`.\n * The callback receives `input` (prompt + pageContext) and sends typed\n * AiChatEvents back into the parent machine via `sendBack`.\n */\n sseStream: fromCallback<AiChatEvent, { prompt: string; pageContext: AiChatPageContext }>(\n ({ sendBack: _sendBack, input: _input }) => {\n // Default no-op — overridden in client. Keeps type-check green in @blinq/schemas tests.\n return () => {};\n },\n ),\n },\n guards: {\n /**\n * True when no SSE_EXECUTION_STATUS has been observed during the current\n * streaming session. Set against `executionResult` because `captureSubmission`\n * clears it on every SUBMIT, so this is per-stream, not cross-session.\n */\n noExecutionStatusYet: ({ context }) => context.executionResult === null,\n /**\n * True when the most recent execution status reported failure. Used to route\n * SSE_COMPLETE to `completedWithSalvage` instead of `completed` — the worker\n * ran code but it failed; salvage is a legit recovery flow, NOT a contract bug.\n */\n lastExecutionFailed: ({ context }) =>\n context.executionResult !== null && context.executionResult.success === false,\n },\n actions: {\n appendTranscript: assign({\n transcript: ({ context, event }) =>\n event.type === \"SSE_TRANSCRIPT_APPEND\"\n ? [...context.transcript, event.message]\n : context.transcript,\n }),\n setPendingCode: assign({\n pendingCode: ({ event }) => (event.type === \"SSE_COMPLETE\" ? event.code : null),\n }),\n setFailure: assign({\n lastFailure: ({ event }) =>\n event.type === \"SSE_ERROR\"\n ? { code: \"\", reason: event.reason }\n : event.type === \"SSE_EXECUTION_STATUS\" && !event.success\n ? { code: \"\", reason: event.summary ?? \"execution failed\" }\n : null,\n }),\n setExecutionResult: assign({\n executionResult: ({ event }) =>\n event.type === \"SSE_EXECUTION_STATUS\"\n ? { success: event.success, summary: event.summary }\n : null,\n }),\n setPlanSummary: assign({\n planSummary: ({ event, context }) => {\n if (event.type !== \"SSE_PLAN_SUMMARY_RECEIVED\") {\n return context.planSummary;\n }\n const parsed = AiChatPlanSummarySchema.safeParse(event.planSummary);\n return parsed.success ? parsed.data : context.planSummary;\n },\n cohesionPlan: ({ event, context }) => {\n if (event.type !== \"SSE_PLAN_SUMMARY_RECEIVED\") {\n return context.cohesionPlan;\n }\n const parsed = AiChatCohesionPlanSchema.safeParse(event.cohesionPlan);\n return parsed.success ? parsed.data : context.cohesionPlan;\n },\n planRevisions: ({ event, context }) => {\n if (event.type !== \"SSE_PLAN_SUMMARY_RECEIVED\") {\n return context.planRevisions;\n }\n const parsedSummary = AiChatPlanSummarySchema.safeParse(event.planSummary);\n if (!parsedSummary.success) {\n return context.planRevisions;\n }\n const parsedCohesionPlan = AiChatCohesionPlanSchema.safeParse(event.cohesionPlan);\n const nextRevision = {\n id: `plan-revision-${context.planRevisions.length + 1}`,\n createdAt: new Date().toISOString(),\n summary: parsedSummary.data,\n ...(parsedCohesionPlan.success ? { cohesionPlan: parsedCohesionPlan.data } : {}),\n };\n const parsedRevision = AiChatPlanRevisionSchema.parse(nextRevision);\n return [...context.planRevisions, parsedRevision];\n },\n }),\n captureSubmission: assign({\n lastPrompt: ({ event }) => (event.type === \"SUBMIT\" ? event.prompt : null),\n pageContext: ({ event }) => (event.type === \"SUBMIT\" ? event.pageContext : null),\n lastFailure: () => null,\n pendingCode: () => null,\n executionResult: () => null,\n\n planSummary: () => null,\n cohesionPlan: () => null,\n }),\n clearPending: assign({\n pendingCode: () => null,\n lastFailure: () => null,\n }),\n emitContractViolation: emit(({ context }) => ({\n type: \"aichat.contract.violation\" as const,\n reason: \"complete-without-execution-status\" as const,\n hasPendingCode: context.pendingCode !== null,\n })),\n },\n}).createMachine({\n id: \"aiChat\",\n type: \"parallel\",\n context: ({ input }) => ({\n transcript: input?.hydratedContext?.transcript ? [...input.hydratedContext.transcript] : [],\n lastPrompt: input?.hydratedContext?.lastPrompt ?? null,\n lastFailure: input?.hydratedContext?.lastFailure ?? null,\n pendingCode: input?.hydratedContext?.pendingCode ?? null,\n executionResult: input?.hydratedContext?.executionResult ?? null,\n\n planSummary: input?.hydratedContext?.planSummary ?? null,\n cohesionPlan: input?.hydratedContext?.cohesionPlan ?? null,\n planRevisions: input?.hydratedContext?.planRevisions\n ? [...input.hydratedContext.planRevisions]\n : [],\n codeHistory: normalizeAiStepCodeHistory(input?.hydratedContext?.codeHistory),\n pageContext: null,\n pickedElement: input?.hydratedContext?.pickedElement ?? null,\n }),\n states: {\n /**\n * codegen region — streams code from ai-server.\n * Final states: completed, failed. History on failed so RETRY re-enters streaming.\n */\n codegen: {\n initial: \"idle\",\n states: {\n idle: {\n on: {\n SUBMIT: { target: \"streaming\", actions: \"captureSubmission\" },\n },\n },\n streaming: {\n invoke: {\n src: \"sseStream\",\n input: ({ context }) => ({\n prompt: context.lastPrompt!,\n pageContext: context.pageContext!,\n }),\n },\n on: {\n SSE_THINKING: {},\n SSE_CODE_CHUNK: {},\n SSE_TRANSCRIPT_APPEND: { actions: \"appendTranscript\" },\n // Terminal SSE_COMPLETE is routed to one of three states based on\n // whether (and how) the worker reported execution status. Order matters —\n // first matching guard wins.\n //\n // noExecutionStatusYet -> contractViolation (bug: server omitted execution-status)\n // lastExecutionFailed -> completedWithSalvage (legit: worker ran, code failed)\n // else -> completed (happy path)\n SSE_COMPLETE: [\n {\n guard: \"noExecutionStatusYet\",\n target: \"contractViolation\",\n actions: [\"setPendingCode\", \"emitContractViolation\"],\n },\n {\n guard: \"lastExecutionFailed\",\n target: \"completedWithSalvage\",\n actions: \"setPendingCode\",\n },\n { target: \"completed\", actions: \"setPendingCode\" },\n ],\n SSE_ERROR: { target: \"failed\", actions: \"setFailure\" },\n CANCEL: { target: \"idle\", actions: \"clearPending\" },\n DISCARD: { target: \"idle\", actions: \"clearPending\" },\n },\n },\n completed: {\n tags: [\"committable\", \"has-code\"],\n on: {\n SAVE: { target: \"idle\", actions: \"clearPending\" },\n DISCARD: { target: \"idle\", actions: \"clearPending\" },\n RETRY: { target: \"streaming\" },\n RESET_TO_IDLE: { target: \"idle\" },\n },\n },\n completedWithSalvage: {\n tags: [\"salvage\", \"has-code\"],\n on: {\n SAVE: { target: \"idle\", actions: \"clearPending\" },\n DISCARD: { target: \"idle\", actions: \"clearPending\" },\n RETRY: { target: \"streaming\", actions: \"captureSubmission\" },\n RESET_TO_IDLE: { target: \"idle\" },\n },\n },\n contractViolation: {\n tags: [\"invalid-contract\", \"has-code\"],\n on: {\n RETRY: { target: \"streaming\", actions: \"captureSubmission\" },\n DISCARD: { target: \"idle\", actions: \"clearPending\" },\n RESET_TO_IDLE: { target: \"idle\" },\n },\n },\n failed: {\n on: {\n SAVE: { target: \"idle\" },\n DISCARD: { target: \"idle\", actions: \"clearPending\" },\n RETRY: { target: \"streaming\" },\n RESET_TO_IDLE: { target: \"idle\" },\n },\n // Note: transcript/lastPrompt survive in context across state transitions —\n // no history pseudo-state needed for RETRY continuity.\n },\n },\n },\n /**\n * execution region — worker verdict.\n */\n execution: {\n initial: \"idle\",\n states: {\n idle: {\n on: {\n SSE_EXECUTION_STATUS: [\n {\n guard: ({ event }) => event.success === true,\n target: \"succeeded\",\n actions: \"setExecutionResult\",\n },\n {\n target: \"failed\",\n actions: [\"setExecutionResult\", \"setFailure\"],\n },\n ],\n },\n },\n succeeded: {\n on: {\n SAVE: { target: \"idle\" },\n DISCARD: { target: \"idle\" },\n SUBMIT: { target: \"idle\" },\n },\n },\n failed: {\n on: {\n SAVE: { target: \"idle\" },\n DISCARD: { target: \"idle\" },\n RETRY: { target: \"idle\" },\n SUBMIT: { target: \"idle\" },\n },\n },\n },\n },\n /**\n * persistence region — tracks whether the current snapshot has been\n * written to step.meta. Parent actor observes transitions into `dirty`\n * and issues PERSIST_AI_CHAT_SNAPSHOT.\n */\n persistence: {\n initial: \"clean\",\n states: {\n clean: {\n on: {\n SSE_TRANSCRIPT_APPEND: { target: \"dirty\" },\n SSE_COMPLETE: { target: \"dirty\" },\n SSE_EXECUTION_STATUS: { target: \"dirty\" },\n\n SSE_PLAN_SUMMARY_RECEIVED: { target: \"dirty\", actions: \"setPlanSummary\" },\n SSE_ERROR: { target: \"dirty\" },\n SAVE: { target: \"dirty\" },\n },\n },\n dirty: {\n on: {\n SNAPSHOT_PERSISTED: { target: \"clean\" },\n },\n },\n },\n },\n },\n});\n\nexport type AiChatMachine = typeof aiChatMachine;\nexport type AiChatSnapshot = SnapshotFrom<typeof aiChatMachine>;\nexport type AiChatMachineActorEvent = EventFrom<typeof aiChatMachine>;\n\n// ──────────────────────────────────────────────────────────\n// Selector helpers — JSX reads these, not inline compositions.\n// ──────────────────────────────────────────────────────────\n\nexport function canSubmit(s: AiChatSnapshot): boolean {\n return (\n s.matches({ codegen: \"idle\" }) &&\n (s.matches({ execution: \"idle\" }) ||\n s.matches({ execution: \"succeeded\" }) ||\n s.matches({ execution: \"failed\" }))\n );\n}\n\nexport function canSave(s: AiChatSnapshot): boolean {\n // Save is always possible when there is something worth keeping:\n // - execution.succeeded → save the generated code + transcript (normal happy path)\n // - codegen.failed → save transcript + prompts even though no code was produced\n // (user requirement: no work/prompts lost on codegen failure)\n // - execution.failed → save the generated code + transcript for inspection/retry later\n // - hydrated context → remount restored pendingCode or executionResult from\n // step.aiChat but the machine rehydrates at idle/idle;\n // without this branch, users lose the only save path for\n // persisted-but-not-yet-committed work. Scoped to the\n // idle/idle state so an in-session \"codegen completed,\n // not yet executed\" draft still blocks save (forcing a\n // run first).\n // Saving when codegen or execution failed persists transcript-only; the component layer\n // must distinguish code-save vs transcript-save via the machine state.\n const isIdleIdle = s.matches({ codegen: \"idle\" }) && s.matches({ execution: \"idle\" });\n const hasHydratedContext = Boolean(s.context.pendingCode) || s.context.executionResult !== null;\n return (\n s.matches({ execution: \"succeeded\" }) ||\n s.matches({ codegen: \"failed\" }) ||\n s.matches({ execution: \"failed\" }) ||\n (isIdleIdle && hasHydratedContext)\n );\n}\n\nexport function canDiscard(s: AiChatSnapshot): boolean {\n return !s.matches({ codegen: \"idle\" }) || s.context.transcript.length > 0;\n}\n\nexport function canRetry(s: AiChatSnapshot): boolean {\n return (\n s.matches({ codegen: \"failed\" }) ||\n s.matches({ codegen: \"completed\" }) ||\n s.matches({ execution: \"failed\" })\n );\n}\n\nexport function canEditTranscript(s: AiChatSnapshot): boolean {\n return s.matches({ codegen: \"idle\" });\n}\n\n/**\n * commitsToStep — the ONLY state from which the recorder may mark the AI step\n * complete. Salvage and contract-violation expose code in the UI but must NOT\n * trigger a step commit.\n */\nexport function commitsToStep(s: AiChatSnapshot): boolean {\n return s.matches({ codegen: \"completed\" });\n}\n\n/**\n * isContractViolation — terminal `complete` arrived without execution-status.\n * Indicates a server contract bug or transport drop. UI should keep the step\n * editable and surface a diagnostic. Listen for the `aichat.contract.violation`\n * emitted event for the logging side-effect.\n */\nexport function isContractViolation(s: AiChatSnapshot): boolean {\n return s.matches({ codegen: \"contractViolation\" });\n}\n\n/**\n * isCompletedWithSalvage — terminal `complete` arrived with the most recent\n * execution-status reporting failure. Worker ran code, it failed, salvageable\n * fragments returned. Legit recovery flow — NOT a contract bug. UI may show\n * the code for inspection/retry but must not commit it as the step result.\n */\nexport function isCompletedWithSalvage(s: AiChatSnapshot): boolean {\n return s.matches({ codegen: \"completedWithSalvage\" });\n}\n\n/**\n * AiChatMachineDebugSnapshot — flat, log-safe projection of the parallel-state\n * machine for telemetry and on-call debugging.\n *\n * Consumers: drec-desktop.log (renderer console via logRecorderAiChat) for\n * /recorder-dev, and the recorder telemetry pipeline for /blinq-debugging\n * CloudWatch correlation. Field naming is intentionally flat so CloudWatch\n * Insights queries can filter on `codegen`, `execution`, `tags`, etc. without\n * traversing nested objects.\n *\n * IMPORTANT: this projection MUST NOT include free-form payloads (code bodies,\n * prompts, transcript content, page accessibility tree) — those may contain\n * customer-secret-bearing strings. Use booleans + lengths instead.\n */\nexport interface AiChatMachineDebugSnapshot {\n codegen:\n | \"idle\"\n | \"streaming\"\n | \"completed\"\n | \"completedWithSalvage\"\n | \"contractViolation\"\n | \"failed\";\n execution: \"idle\" | \"succeeded\" | \"failed\";\n persistence: \"clean\" | \"dirty\";\n tags: string[];\n hasPendingCode: boolean;\n hasLastPrompt: boolean;\n hasLastFailure: boolean;\n executionResult: { success: boolean; summary?: string } | null;\n transcriptLength: number;\n planRevisionsLength: number;\n}\n\nfunction readCodegenMode(s: AiChatSnapshot): AiChatMachineDebugSnapshot[\"codegen\"] {\n const candidates = [\n \"idle\",\n \"streaming\",\n \"completed\",\n \"completedWithSalvage\",\n \"contractViolation\",\n \"failed\",\n ] as const;\n for (const mode of candidates) {\n if (s.matches({ codegen: mode })) return mode;\n }\n return \"idle\";\n}\n\nfunction readExecutionMode(s: AiChatSnapshot): AiChatMachineDebugSnapshot[\"execution\"] {\n if (s.matches({ execution: \"succeeded\" })) return \"succeeded\";\n if (s.matches({ execution: \"failed\" })) return \"failed\";\n return \"idle\";\n}\n\nfunction readPersistenceMode(s: AiChatSnapshot): AiChatMachineDebugSnapshot[\"persistence\"] {\n return s.matches({ persistence: \"dirty\" }) ? \"dirty\" : \"clean\";\n}\n\nexport function aiChatMachineDebugSnapshot(s: AiChatSnapshot): AiChatMachineDebugSnapshot {\n return {\n codegen: readCodegenMode(s),\n execution: readExecutionMode(s),\n persistence: readPersistenceMode(s),\n tags: Array.from(s.tags),\n hasPendingCode: s.context.pendingCode !== null,\n hasLastPrompt: s.context.lastPrompt !== null,\n hasLastFailure: s.context.lastFailure !== null,\n executionResult: s.context.executionResult,\n transcriptLength: s.context.transcript.length,\n planRevisionsLength: s.context.planRevisions.length,\n };\n}\n\n// ──────────────────────────────────────────────────────────\n// Persistence snapshot — JSON-serializable shape for step.meta.\n//\n// We store explicit plain-JSON fields (transcript, lastPrompt, lastFailure)\n// rather than the XState v5 snapshot object. Rationale:\n//\n// 1. XState v5 JSON.parse(JSON.stringify(snapshot)) does NOT restore context\n// on createActor() rehydrate — the actor reverts to initial state.\n// 2. We don't want to restore machine state value across focus changes anyway\n// (restoring \"streaming\" on remount is wrong). Only transcript data matters.\n// 3. Plain fields are version-stable, readable in DB/debug, and survive\n// XState minor upgrades without breakage.\n//\n// On rehydrate, useStepAiChatMachine injects transcript/lastPrompt/lastFailure\n// as initial context overrides — machine starts at idle with history populated.\n// ──────────────────────────────────────────────────────────\n\n// Held at 3 even though pickedElement was added: the field is backward-compatible\n// (null-default in readAiChatMeta when absent), so v3 snapshots remain readable\n// without a migration.\nexport const AI_CHAT_SNAPSHOT_SCHEMA_VERSION = 3;\n\nexport interface PersistedAiChatSnapshot {\n schemaVersion: number;\n /** Full message transcript for the step — plain JSON array. */\n transcript: AiChatMessage[];\n /** Last user-submitted prompt, for pre-populating Retry. */\n lastPrompt: string | null;\n /** Failure info if the last turn failed. */\n lastFailure: { code: string; reason: string } | null;\n /**\n * Last code produced by the observe-act loop for this step (authoritative\n * committed code, or streamed partial). Persisted so remount restores the\n * code block UI without needing to replay SSE or re-execute the action.\n * Null when no code has been produced yet.\n */\n pendingCode: string | null;\n /**\n * Last execution verdict summary (success/failure + error surface). Persisted\n * so remount can show the post-execution status without re-running.\n */\n executionResult: { success: boolean; summary?: string } | null;\n /**\n * Reviewable draft units generated by AI Chat but not yet committed to\n * recorder steps. Null when there is no active draft set.\n */\n\n planSummary?: AiChatPlanSummary | null;\n cohesionPlan?: AiChatCohesionPlan | null;\n planRevisions?: AiChatPlanRevision[];\n /** Bounded selected-step code revisions used for AI-code rollback. */\n codeHistory: AiStepCodeRevision[];\n /**\n * User-pinned element from the element picker tool. Null when no pin is\n * active. Survives remounts so the chip + adaptive placeholder can restore\n * from step.meta without re-picking.\n */\n pickedElement: import(\"./tool-args\").PickedElement | null;\n}\n\nexport function persistenceSnapshot(s: AiChatSnapshot): PersistedAiChatSnapshot {\n return {\n schemaVersion: AI_CHAT_SNAPSHOT_SCHEMA_VERSION,\n transcript: s.context.transcript,\n lastPrompt: s.context.lastPrompt,\n lastFailure: s.context.lastFailure,\n pendingCode: s.context.pendingCode,\n executionResult: s.context.executionResult,\n\n planSummary: s.context.planSummary,\n cohesionPlan: s.context.cohesionPlan,\n planRevisions: s.context.planRevisions,\n codeHistory: normalizeAiStepCodeHistory(s.context.codeHistory),\n pickedElement: s.context.pickedElement ?? null,\n };\n}\n","import { z } from \"zod\";\nimport { EntityIdSchema } from \"../base.schema\";\n\nexport const PlanNameEnum = z.enum([\"Freemium\", \"Pro\", \"Team\", \"Enterprise\"]);\nexport type PlanName = z.infer<typeof PlanNameEnum>;\n\nexport const PlanFeaturesSchema = z\n .object({\n daily: z\n .object({\n maxTestRuns: z.number().int().nonnegative(),\n maxExecutionTime: z.number().int().nonnegative(), // minutes\n maxRecordingTime: z.number().int().nonnegative(), // minutes\n })\n .strict(),\n monthly: z\n .object({\n maxTestRuns: z.number().int().nonnegative(),\n maxExecutionTime: z.number().int().nonnegative(), // minutes\n maxRecordingTime: z.number().int().nonnegative(), // minutes\n })\n .strict(),\n maxTeamMembers: z.number().int().positive(),\n maxScenariosAllowed: z.number().int().positive(),\n aiUsage: z\n .object({\n tokens: z.number().int().nonnegative(), // total tokens allowed per month\n })\n .strict(),\n })\n .strict();\n\nexport type PlanFeatures = z.infer<typeof PlanFeaturesSchema>;\n\nexport const PlanSchema = z\n .object({\n _id: EntityIdSchema,\n projectId: EntityIdSchema,\n name: PlanNameEnum,\n features: PlanFeaturesSchema,\n })\n .strict();\n\nexport type Plan = z.infer<typeof PlanSchema>;\n","import { z } from \"zod\";\nimport { EntityIdSchema } from \"../base.schema\";\nimport { PlanNameEnum } from \"./plan.schema\";\n\nexport const BillingCycleEnum = z.enum([\"MONTHLY\", \"ANNUALLY\", \"NONE\"]);\nexport type BillingCycle = z.infer<typeof BillingCycleEnum>;\n\nexport const BillingProviderEnum = z.enum([\"stripe\", \"none\"]);\nexport type BillingProvider = z.infer<typeof BillingProviderEnum>;\n\nexport const SubscriptionSchema = z\n .object({\n _id: EntityIdSchema,\n projectId: EntityIdSchema,\n status: z.string(),\n planName: PlanNameEnum.optional(), // the plan the user paid for — source of truth for restoration after downgrade\n billingCycle: BillingCycleEnum.optional(),\n nextBillingDate: z.date().optional(),\n autoRenew: z.boolean(),\n provider: BillingProviderEnum,\n customerId: z.string().optional(),\n subscriptionId: z.string().optional(),\n })\n .strict();\n\nexport type Subscription = z.infer<typeof SubscriptionSchema>;\n","import { z } from \"zod\";\n\n// ─── Selector string ─────────────────────────────────────────────────────────\n// Uniqueness validation (comma-list and .or() chain detection) is performed\n// by AST-based validateSelectorString() in ai-server after LLM output is\n// parsed. The schema only enforces that the selector is a non-empty string.\n\nconst SelectorString = z.string().min(1);\n\n// ─── Enums ───────────────────────────────────────────────────────────────────\n\n// Leaf kinds: no conditions/groups allowed.\nconst PostconditionLeafKindSchema = z.enum([\n \"url\",\n \"dom\",\n \"text\",\n \"dom-count\",\n \"value\",\n \"attribute\",\n \"title\",\n \"network\",\n \"expression\",\n]);\n\n// Generation kinds: includes group kinds.\nconst PostconditionKindSchema = z.enum([\n \"url\",\n \"dom\",\n \"text\",\n \"dom-count\",\n \"value\",\n \"attribute\",\n \"title\",\n \"network\",\n \"all-of\",\n \"any-of\",\n \"expression\",\n]);\n\nconst DomPostconditionStateSchema = z.enum([\n \"visible\",\n \"not-visible\",\n \"attached\",\n \"detached\",\n \"enabled\",\n \"disabled\",\n]);\n\nconst TextPostconditionMatchSchema = z.enum([\"contains\", \"exact\", \"regex\"]);\nconst ValueMatchSchema = z.enum([\"exact\", \"regex\"]);\nconst TitleMatchSchema = z.enum([\"contains\", \"exact\", \"regex\"]);\nconst DomCountOpSchema = z.enum([\"eq\", \"gt\", \"gte\", \"lt\", \"lte\"]);\n\nconst UrlPredicateKindSchema = z.enum([\n \"equals\",\n \"contains\",\n \"path-contains\",\n \"matches-regex\",\n \"changed-from-baseline\",\n]);\n\nexport type PostconditionGenerationKind = z.infer<typeof PostconditionKindSchema>;\nexport type PostconditionGenerationLeafKind = z.infer<typeof PostconditionLeafKindSchema>;\nexport type PostconditionDomState = z.infer<typeof DomPostconditionStateSchema>;\nexport type PostconditionTextMatch = z.infer<typeof TextPostconditionMatchSchema>;\nexport type UrlPredicateGenerationKind = z.infer<typeof UrlPredicateKindSchema>;\n\nexport const POSTCONDITION_GENERATION_MAX_NESTED_DEPTH = 1;\n\n// ─── URL predicate inner schema ───────────────────────────────────────────────\n\nconst PostconditionStatusSchema = z\n .number()\n .optional()\n .describe(\"Optional HTTP status code. Use an integer between 100 and 599.\");\n\n// Flat object + superRefine so JSON Schema emission stays oneOf-free.\nfunction validateUrlPredicate(\n predicate: { kind: string; value?: string; source?: string } | undefined,\n ctx: z.RefinementCtx,\n): void {\n if (!predicate) return;\n\n const hasValue = typeof predicate.value !== \"undefined\";\n const hasSource = typeof predicate.source !== \"undefined\";\n\n switch (predicate.kind) {\n case \"equals\":\n case \"contains\":\n case \"path-contains\":\n if (!hasValue) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"predicate\", \"value\"],\n message: `predicate.value is required when predicate.kind is '${predicate.kind}'.`,\n });\n }\n if (hasSource) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"predicate\", \"source\"],\n message: `predicate.source is not allowed when predicate.kind is '${predicate.kind}'.`,\n });\n }\n return;\n case \"matches-regex\":\n if (!hasSource) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"predicate\", \"source\"],\n message: \"predicate.source is required when predicate.kind is 'matches-regex'.\",\n });\n }\n if (hasValue) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"predicate\", \"value\"],\n message: \"predicate.value is not allowed when predicate.kind is 'matches-regex'.\",\n });\n }\n return;\n case \"changed-from-baseline\":\n if (hasValue) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"predicate\", \"value\"],\n message: \"predicate.value is not allowed when predicate.kind is 'changed-from-baseline'.\",\n });\n }\n if (hasSource) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"predicate\", \"source\"],\n message:\n \"predicate.source is not allowed when predicate.kind is 'changed-from-baseline'.\",\n });\n }\n return;\n default:\n return;\n }\n}\n\nexport const UrlPredicateCanonicalSchema = z\n .object({\n kind: UrlPredicateKindSchema,\n value: z.string().min(1).optional(),\n source: z.string().min(1).optional(),\n })\n .strict()\n .superRefine((v, ctx) => {\n validateUrlPredicate(v, ctx);\n });\n\nexport const UrlPredicateGenerationRouteSchema = z\n .object({\n kind: UrlPredicateKindSchema,\n })\n .strict();\n\nexport type UrlPredicateGenerationRoute = z.infer<typeof UrlPredicateGenerationRouteSchema>;\n\nconst StringValueUrlPredicateGenerationPayloadSchema = z\n .object({\n value: z.string().min(1),\n })\n .strict();\n\nexport const EqualsUrlPredicateGenerationPayloadSchema =\n StringValueUrlPredicateGenerationPayloadSchema;\nexport const ContainsUrlPredicateGenerationPayloadSchema =\n StringValueUrlPredicateGenerationPayloadSchema;\nexport const PathContainsUrlPredicateGenerationPayloadSchema =\n StringValueUrlPredicateGenerationPayloadSchema;\n\nexport const MatchesRegexUrlPredicateGenerationPayloadSchema = z\n .object({\n source: z.string().min(1),\n })\n .strict();\n\nexport const ChangedFromBaselineUrlPredicateGenerationPayloadSchema = z.object({}).strict();\n\nexport type UrlPredicateGenerationPayloadByKind = {\n equals: z.infer<typeof EqualsUrlPredicateGenerationPayloadSchema>;\n contains: z.infer<typeof ContainsUrlPredicateGenerationPayloadSchema>;\n \"path-contains\": z.infer<typeof PathContainsUrlPredicateGenerationPayloadSchema>;\n \"matches-regex\": z.infer<typeof MatchesRegexUrlPredicateGenerationPayloadSchema>;\n \"changed-from-baseline\": z.infer<typeof ChangedFromBaselineUrlPredicateGenerationPayloadSchema>;\n};\n\n// ─── Route schemas ────────────────────────────────────────────────────────────\n\nexport const PostconditionGenerationRouteSchema = z\n .object({\n kind: PostconditionKindSchema,\n })\n .strict();\n\nexport type PostconditionGenerationRoute = z.infer<typeof PostconditionGenerationRouteSchema>;\n\nexport const PostconditionGenerationLeafRouteSchema = z\n .object({\n kind: PostconditionLeafKindSchema,\n })\n .strict();\n\nexport type PostconditionGenerationLeafRoute = z.infer<\n typeof PostconditionGenerationLeafRouteSchema\n>;\n\n// ─── Per-kind generation payload schemas ─────────────────────────────────────\n\nconst CommonLeafFields = {\n negate: z.boolean().optional(),\n timeoutMs: z.number().int().positive().optional(),\n};\n\nexport const UrlPostconditionGenerationPayloadSchema = z\n .object({\n predicate: UrlPredicateGenerationRouteSchema,\n })\n .strict();\n\nexport const DomPostconditionGenerationPayloadSchema = z\n .object({\n selector: SelectorString,\n state: DomPostconditionStateSchema,\n })\n .strict();\n\nexport const TextPostconditionGenerationPayloadSchema = z\n .object({\n text: z.string().min(1),\n match: TextPostconditionMatchSchema,\n })\n .strict();\n\nexport const DomCountPostconditionGenerationPayloadSchema = z\n .object({\n selector: SelectorString,\n n: z.number().int().min(0),\n op: DomCountOpSchema.optional(),\n ...CommonLeafFields,\n })\n .strict();\n\nexport const ValuePostconditionGenerationPayloadSchema = z\n .object({\n selector: SelectorString,\n value: z.string().min(1),\n match: ValueMatchSchema,\n ...CommonLeafFields,\n })\n .strict();\n\nexport const AttributePostconditionGenerationPayloadSchema = z\n .object({\n selector: SelectorString,\n name: z.string().min(1),\n value: z.string().optional(),\n ...CommonLeafFields,\n })\n .strict();\n\nexport const TitlePostconditionGenerationPayloadSchema = z\n .object({\n text: z.string().min(1),\n match: TitleMatchSchema,\n ...CommonLeafFields,\n })\n .strict();\n\nexport const NetworkPostconditionGenerationPayloadSchema = z\n .object({\n predicate: UrlPredicateGenerationRouteSchema,\n status: PostconditionStatusSchema,\n })\n .strict()\n .superRefine((value, ctx) => {\n if (typeof value.status === \"number\" && !Number.isInteger(value.status)) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"status\"],\n message: \"status must be an integer when kind is 'network'.\",\n });\n }\n if (typeof value.status === \"number\" && (value.status < 100 || value.status > 599)) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"status\"],\n message: \"status must be between 100 and 599 when kind is 'network'.\",\n });\n }\n });\n\nexport const ExpressionPostconditionGenerationPayloadSchema = z\n .object({\n code: z.string().min(1),\n summary: z.string().min(1),\n escapeReason: z.string().min(1),\n })\n .strict();\n\nexport const AllOfPostconditionGenerationPayloadSchema = z\n .object({\n conditions: z.array(PostconditionGenerationLeafRouteSchema).min(1),\n })\n .strict();\n\nexport const AnyOfPostconditionGenerationPayloadSchema = z\n .object({\n conditions: z.array(PostconditionGenerationLeafRouteSchema).min(1),\n })\n .strict();\n\n// ─── Payload type maps ────────────────────────────────────────────────────────\n\nexport type PostconditionGenerationPayloadByKind = {\n url: z.infer<typeof UrlPostconditionGenerationPayloadSchema>;\n dom: z.infer<typeof DomPostconditionGenerationPayloadSchema>;\n text: z.infer<typeof TextPostconditionGenerationPayloadSchema>;\n \"dom-count\": z.infer<typeof DomCountPostconditionGenerationPayloadSchema>;\n value: z.infer<typeof ValuePostconditionGenerationPayloadSchema>;\n attribute: z.infer<typeof AttributePostconditionGenerationPayloadSchema>;\n title: z.infer<typeof TitlePostconditionGenerationPayloadSchema>;\n network: z.infer<typeof NetworkPostconditionGenerationPayloadSchema>;\n expression: z.infer<typeof ExpressionPostconditionGenerationPayloadSchema>;\n \"all-of\": z.infer<typeof AllOfPostconditionGenerationPayloadSchema>;\n \"any-of\": z.infer<typeof AnyOfPostconditionGenerationPayloadSchema>;\n};\n\n// ─── Per-kind payload getter ──────────────────────────────────────────────────\n\nexport function getUrlPredicateGenerationPayloadSchema(\n kind: \"equals\",\n): typeof EqualsUrlPredicateGenerationPayloadSchema;\nexport function getUrlPredicateGenerationPayloadSchema(\n kind: \"contains\",\n): typeof ContainsUrlPredicateGenerationPayloadSchema;\nexport function getUrlPredicateGenerationPayloadSchema(\n kind: \"path-contains\",\n): typeof PathContainsUrlPredicateGenerationPayloadSchema;\nexport function getUrlPredicateGenerationPayloadSchema(\n kind: \"matches-regex\",\n): typeof MatchesRegexUrlPredicateGenerationPayloadSchema;\nexport function getUrlPredicateGenerationPayloadSchema(\n kind: \"changed-from-baseline\",\n): typeof ChangedFromBaselineUrlPredicateGenerationPayloadSchema;\nexport function getUrlPredicateGenerationPayloadSchema(kind: UrlPredicateGenerationKind) {\n switch (kind) {\n case \"equals\":\n return EqualsUrlPredicateGenerationPayloadSchema;\n case \"contains\":\n return ContainsUrlPredicateGenerationPayloadSchema;\n case \"path-contains\":\n return PathContainsUrlPredicateGenerationPayloadSchema;\n case \"matches-regex\":\n return MatchesRegexUrlPredicateGenerationPayloadSchema;\n case \"changed-from-baseline\":\n return ChangedFromBaselineUrlPredicateGenerationPayloadSchema;\n default: {\n const exhaustive: never = kind;\n return exhaustive;\n }\n }\n}\n\nexport function getPostconditionGenerationPayloadSchema(\n kind: \"url\",\n): typeof UrlPostconditionGenerationPayloadSchema;\nexport function getPostconditionGenerationPayloadSchema(\n kind: \"dom\",\n): typeof DomPostconditionGenerationPayloadSchema;\nexport function getPostconditionGenerationPayloadSchema(\n kind: \"text\",\n): typeof TextPostconditionGenerationPayloadSchema;\nexport function getPostconditionGenerationPayloadSchema(\n kind: \"dom-count\",\n): typeof DomCountPostconditionGenerationPayloadSchema;\nexport function getPostconditionGenerationPayloadSchema(\n kind: \"value\",\n): typeof ValuePostconditionGenerationPayloadSchema;\nexport function getPostconditionGenerationPayloadSchema(\n kind: \"attribute\",\n): typeof AttributePostconditionGenerationPayloadSchema;\nexport function getPostconditionGenerationPayloadSchema(\n kind: \"title\",\n): typeof TitlePostconditionGenerationPayloadSchema;\nexport function getPostconditionGenerationPayloadSchema(\n kind: \"network\",\n): typeof NetworkPostconditionGenerationPayloadSchema;\nexport function getPostconditionGenerationPayloadSchema(\n kind: \"expression\",\n): typeof ExpressionPostconditionGenerationPayloadSchema;\nexport function getPostconditionGenerationPayloadSchema(\n kind: \"all-of\",\n): typeof AllOfPostconditionGenerationPayloadSchema;\nexport function getPostconditionGenerationPayloadSchema(\n kind: \"any-of\",\n): typeof AnyOfPostconditionGenerationPayloadSchema;\nexport function getPostconditionGenerationPayloadSchema(kind: PostconditionGenerationKind) {\n switch (kind) {\n case \"url\":\n return UrlPostconditionGenerationPayloadSchema;\n case \"dom\":\n return DomPostconditionGenerationPayloadSchema;\n case \"text\":\n return TextPostconditionGenerationPayloadSchema;\n case \"dom-count\":\n return DomCountPostconditionGenerationPayloadSchema;\n case \"value\":\n return ValuePostconditionGenerationPayloadSchema;\n case \"attribute\":\n return AttributePostconditionGenerationPayloadSchema;\n case \"title\":\n return TitlePostconditionGenerationPayloadSchema;\n case \"network\":\n return NetworkPostconditionGenerationPayloadSchema;\n case \"expression\":\n return ExpressionPostconditionGenerationPayloadSchema;\n case \"all-of\":\n return AllOfPostconditionGenerationPayloadSchema;\n case \"any-of\":\n return AnyOfPostconditionGenerationPayloadSchema;\n default: {\n const exhaustive: never = kind;\n return exhaustive;\n }\n }\n}\n\n// ─── PostconditionCanonical type ──────────────────────────────────────────────\n// TS-side discriminated union. Downstream consumers rely on narrowing via the\n// `kind` discriminator to reach the kind-specific required fields.\n\nexport type UrlPredicateCanonical =\n | { kind: \"equals\"; value: string }\n | { kind: \"contains\"; value: string }\n | { kind: \"path-contains\"; value: string }\n | { kind: \"matches-regex\"; source: string }\n | { kind: \"changed-from-baseline\" };\n\nexport type PostconditionCanonical =\n | {\n kind: \"url\";\n predicate: UrlPredicateCanonical;\n negate?: boolean;\n timeoutMs?: number;\n }\n | {\n kind: \"dom\";\n selector: string;\n state: z.infer<typeof DomPostconditionStateSchema>;\n negate?: boolean;\n timeoutMs?: number;\n }\n | {\n kind: \"text\";\n text: string;\n match: z.infer<typeof TextPostconditionMatchSchema>;\n negate?: boolean;\n timeoutMs?: number;\n }\n | {\n kind: \"dom-count\";\n selector: string;\n n: number;\n op?: z.infer<typeof DomCountOpSchema>;\n negate?: boolean;\n timeoutMs?: number;\n }\n | {\n kind: \"value\";\n selector: string;\n value: string;\n match: z.infer<typeof ValueMatchSchema>;\n negate?: boolean;\n timeoutMs?: number;\n }\n | {\n kind: \"attribute\";\n selector: string;\n name: string;\n value?: string;\n negate?: boolean;\n timeoutMs?: number;\n }\n | {\n kind: \"title\";\n text: string;\n match: z.infer<typeof TitleMatchSchema>;\n negate?: boolean;\n timeoutMs?: number;\n }\n | {\n kind: \"network\";\n predicate: UrlPredicateCanonical;\n status?: number;\n negate?: boolean;\n timeoutMs?: number;\n }\n | {\n kind: \"expression\";\n code: string;\n summary: string;\n escapeReason: string;\n }\n | {\n kind: \"legacy-code\";\n code: string;\n }\n | { kind: \"all-of\"; conditions: PostconditionCanonical[] }\n | { kind: \"any-of\"; conditions: PostconditionCanonical[] };\n\n// ─── Flat-object canonical schemas + superRefine ──────────────────────────────\n\ntype PostconditionRawInput = {\n kind: PostconditionGenerationKind | \"legacy-code\";\n predicate?: { kind: string; value?: string; source?: string };\n selector?: string;\n state?: string;\n text?: string;\n match?: string;\n n?: number;\n op?: z.infer<typeof DomCountOpSchema>;\n value?: string;\n name?: string;\n status?: number;\n code?: string;\n summary?: string;\n escapeReason?: string;\n negate?: boolean;\n timeoutMs?: number;\n conditions?: unknown[];\n};\n\nfunction addCustomIssue(ctx: z.RefinementCtx, path: (string | number)[], message: string): void {\n ctx.addIssue({ code: \"custom\", path, message });\n}\n\nfunction forbidFields(\n ctx: z.RefinementCtx,\n value: PostconditionRawInput,\n fields: (keyof PostconditionRawInput)[],\n kind: string,\n): void {\n for (const f of fields) {\n if (typeof value[f] !== \"undefined\") {\n addCustomIssue(ctx, [f as string], `${String(f)} is not allowed when kind is '${kind}'.`);\n }\n }\n}\n\nfunction validatePostconditionGenerationObject(opts: {\n allowGroups: boolean;\n}): (value: PostconditionRawInput, ctx: z.RefinementCtx) => void {\n return (value, ctx) => {\n const conditions = value.conditions;\n\n switch (value.kind) {\n case \"url\": {\n if (!value.predicate) {\n addCustomIssue(ctx, [\"predicate\"], \"predicate is required when kind is 'url'.\");\n }\n if (\n value.timeoutMs !== undefined &&\n (!Number.isInteger(value.timeoutMs) || value.timeoutMs <= 0)\n ) {\n addCustomIssue(ctx, [\"timeoutMs\"], \"timeoutMs must be a positive integer.\");\n }\n forbidFields(\n ctx,\n value,\n [\n \"selector\",\n \"state\",\n \"text\",\n \"match\",\n \"n\",\n \"op\",\n \"value\",\n \"name\",\n \"status\",\n \"code\",\n \"summary\",\n \"escapeReason\",\n ],\n \"url\",\n );\n if (typeof conditions !== \"undefined\") {\n addCustomIssue(ctx, [\"conditions\"], \"conditions is not allowed when kind is 'url'.\");\n }\n return;\n }\n case \"dom\": {\n if (!value.selector) {\n addCustomIssue(ctx, [\"selector\"], \"selector is required when kind is 'dom'.\");\n }\n if (!value.state) {\n addCustomIssue(ctx, [\"state\"], \"state is required when kind is 'dom'.\");\n }\n if (\n value.timeoutMs !== undefined &&\n (!Number.isInteger(value.timeoutMs) || value.timeoutMs <= 0)\n ) {\n addCustomIssue(ctx, [\"timeoutMs\"], \"timeoutMs must be a positive integer.\");\n }\n forbidFields(\n ctx,\n value,\n [\n \"predicate\",\n \"text\",\n \"match\",\n \"n\",\n \"op\",\n \"value\",\n \"name\",\n \"status\",\n \"code\",\n \"summary\",\n \"escapeReason\",\n ],\n \"dom\",\n );\n if (typeof conditions !== \"undefined\") {\n addCustomIssue(ctx, [\"conditions\"], \"conditions is not allowed when kind is 'dom'.\");\n }\n return;\n }\n case \"text\": {\n if (!value.text) {\n addCustomIssue(ctx, [\"text\"], \"text is required when kind is 'text'.\");\n }\n if (!value.match) {\n addCustomIssue(ctx, [\"match\"], \"match is required when kind is 'text'.\");\n } else if (!TextPostconditionMatchSchema.safeParse(value.match).success) {\n addCustomIssue(\n ctx,\n [\"match\"],\n `match must be one of: contains, exact, regex. Got: ${String(value.match)}`,\n );\n }\n if (\n value.timeoutMs !== undefined &&\n (!Number.isInteger(value.timeoutMs) || value.timeoutMs <= 0)\n ) {\n addCustomIssue(ctx, [\"timeoutMs\"], \"timeoutMs must be a positive integer.\");\n }\n forbidFields(\n ctx,\n value,\n [\n \"predicate\",\n \"selector\",\n \"state\",\n \"n\",\n \"op\",\n \"value\",\n \"name\",\n \"status\",\n \"code\",\n \"summary\",\n \"escapeReason\",\n ],\n \"text\",\n );\n if (typeof conditions !== \"undefined\") {\n addCustomIssue(ctx, [\"conditions\"], \"conditions is not allowed when kind is 'text'.\");\n }\n return;\n }\n case \"dom-count\": {\n if (!value.selector) {\n addCustomIssue(ctx, [\"selector\"], \"selector is required when kind is 'dom-count'.\");\n }\n if (typeof value.n !== \"number\") {\n addCustomIssue(ctx, [\"n\"], \"n is required when kind is 'dom-count'.\");\n } else if (!Number.isInteger(value.n) || value.n < 0) {\n addCustomIssue(ctx, [\"n\"], \"n must be a non-negative integer.\");\n }\n if (\n value.timeoutMs !== undefined &&\n (!Number.isInteger(value.timeoutMs) || value.timeoutMs <= 0)\n ) {\n addCustomIssue(ctx, [\"timeoutMs\"], \"timeoutMs must be a positive integer.\");\n }\n forbidFields(\n ctx,\n value,\n [\n \"predicate\",\n \"state\",\n \"text\",\n \"match\",\n \"value\",\n \"name\",\n \"status\",\n \"code\",\n \"summary\",\n \"escapeReason\",\n ],\n \"dom-count\",\n );\n if (typeof conditions !== \"undefined\") {\n addCustomIssue(\n ctx,\n [\"conditions\"],\n \"conditions is not allowed when kind is 'dom-count'.\",\n );\n }\n return;\n }\n case \"value\": {\n if (!value.selector) {\n addCustomIssue(ctx, [\"selector\"], \"selector is required when kind is 'value'.\");\n }\n if (!value.value) {\n addCustomIssue(ctx, [\"value\"], \"value is required when kind is 'value'.\");\n }\n if (!value.match) {\n addCustomIssue(ctx, [\"match\"], \"match is required when kind is 'value'.\");\n }\n if (value.match && value.match !== \"exact\" && value.match !== \"regex\") {\n addCustomIssue(ctx, [\"match\"], \"match must be 'exact' or 'regex' when kind is 'value'.\");\n }\n if (\n value.timeoutMs !== undefined &&\n (!Number.isInteger(value.timeoutMs) || value.timeoutMs <= 0)\n ) {\n addCustomIssue(ctx, [\"timeoutMs\"], \"timeoutMs must be a positive integer.\");\n }\n forbidFields(\n ctx,\n value,\n [\n \"predicate\",\n \"state\",\n \"text\",\n \"n\",\n \"op\",\n \"name\",\n \"status\",\n \"code\",\n \"summary\",\n \"escapeReason\",\n ],\n \"value\",\n );\n if (typeof conditions !== \"undefined\") {\n addCustomIssue(ctx, [\"conditions\"], \"conditions is not allowed when kind is 'value'.\");\n }\n return;\n }\n case \"attribute\": {\n if (!value.selector) {\n addCustomIssue(ctx, [\"selector\"], \"selector is required when kind is 'attribute'.\");\n }\n if (!value.name) {\n addCustomIssue(ctx, [\"name\"], \"name is required when kind is 'attribute'.\");\n }\n if (\n value.timeoutMs !== undefined &&\n (!Number.isInteger(value.timeoutMs) || value.timeoutMs <= 0)\n ) {\n addCustomIssue(ctx, [\"timeoutMs\"], \"timeoutMs must be a positive integer.\");\n }\n forbidFields(\n ctx,\n value,\n [\n \"predicate\",\n \"state\",\n \"text\",\n \"match\",\n \"n\",\n \"op\",\n \"status\",\n \"code\",\n \"summary\",\n \"escapeReason\",\n ],\n \"attribute\",\n );\n if (typeof conditions !== \"undefined\") {\n addCustomIssue(\n ctx,\n [\"conditions\"],\n \"conditions is not allowed when kind is 'attribute'.\",\n );\n }\n return;\n }\n case \"title\": {\n if (!value.text) {\n addCustomIssue(ctx, [\"text\"], \"text is required when kind is 'title'.\");\n }\n if (!value.match) {\n addCustomIssue(ctx, [\"match\"], \"match is required when kind is 'title'.\");\n } else if (!TitleMatchSchema.safeParse(value.match).success) {\n addCustomIssue(\n ctx,\n [\"match\"],\n `match must be one of: contains, exact, regex. Got: ${String(value.match)}`,\n );\n }\n if (\n value.timeoutMs !== undefined &&\n (!Number.isInteger(value.timeoutMs) || value.timeoutMs <= 0)\n ) {\n addCustomIssue(ctx, [\"timeoutMs\"], \"timeoutMs must be a positive integer.\");\n }\n forbidFields(\n ctx,\n value,\n [\n \"predicate\",\n \"selector\",\n \"state\",\n \"n\",\n \"op\",\n \"value\",\n \"name\",\n \"status\",\n \"code\",\n \"summary\",\n \"escapeReason\",\n ],\n \"title\",\n );\n if (typeof conditions !== \"undefined\") {\n addCustomIssue(ctx, [\"conditions\"], \"conditions is not allowed when kind is 'title'.\");\n }\n return;\n }\n case \"network\": {\n if (!value.predicate) {\n addCustomIssue(ctx, [\"predicate\"], \"predicate is required when kind is 'network'.\");\n }\n if (typeof value.status === \"number\") {\n if (!Number.isInteger(value.status)) {\n addCustomIssue(ctx, [\"status\"], \"status must be an integer when kind is 'network'.\");\n }\n if (value.status < 100 || value.status > 599) {\n addCustomIssue(\n ctx,\n [\"status\"],\n \"status must be between 100 and 599 when kind is 'network'.\",\n );\n }\n }\n if (\n value.timeoutMs !== undefined &&\n (!Number.isInteger(value.timeoutMs) || value.timeoutMs <= 0)\n ) {\n addCustomIssue(ctx, [\"timeoutMs\"], \"timeoutMs must be a positive integer.\");\n }\n forbidFields(\n ctx,\n value,\n [\n \"selector\",\n \"state\",\n \"text\",\n \"match\",\n \"n\",\n \"op\",\n \"value\",\n \"name\",\n \"code\",\n \"summary\",\n \"escapeReason\",\n ],\n \"network\",\n );\n if (typeof conditions !== \"undefined\") {\n addCustomIssue(ctx, [\"conditions\"], \"conditions is not allowed when kind is 'network'.\");\n }\n return;\n }\n case \"expression\": {\n if (!value.code) {\n addCustomIssue(ctx, [\"code\"], \"code is required when kind is 'expression'.\");\n }\n if (!value.summary) {\n addCustomIssue(ctx, [\"summary\"], \"summary is required when kind is 'expression'.\");\n }\n if (!value.escapeReason) {\n addCustomIssue(\n ctx,\n [\"escapeReason\"],\n \"escapeReason is required when kind is 'expression'.\",\n );\n }\n forbidFields(\n ctx,\n value,\n [\n \"predicate\",\n \"selector\",\n \"state\",\n \"text\",\n \"match\",\n \"n\",\n \"op\",\n \"value\",\n \"name\",\n \"status\",\n \"negate\",\n \"timeoutMs\",\n ],\n \"expression\",\n );\n if (typeof conditions !== \"undefined\") {\n addCustomIssue(\n ctx,\n [\"conditions\"],\n \"conditions is not allowed when kind is 'expression'.\",\n );\n }\n return;\n }\n case \"legacy-code\": {\n // legacy-code is read-only; accepted at the top-level Canonical schema\n // but rejected by PostconditionNodeGenerationSchema.\n if (!value.code) {\n addCustomIssue(ctx, [\"code\"], \"code is required when kind is 'legacy-code'.\");\n }\n forbidFields(\n ctx,\n value,\n [\n \"predicate\",\n \"selector\",\n \"state\",\n \"text\",\n \"match\",\n \"n\",\n \"op\",\n \"value\",\n \"name\",\n \"status\",\n \"summary\",\n \"escapeReason\",\n \"negate\",\n \"timeoutMs\",\n ],\n \"legacy-code\",\n );\n if (typeof conditions !== \"undefined\") {\n addCustomIssue(\n ctx,\n [\"conditions\"],\n \"conditions is not allowed when kind is 'legacy-code'.\",\n );\n }\n return;\n }\n case \"all-of\":\n case \"any-of\": {\n if (!opts.allowGroups) {\n addCustomIssue(\n ctx,\n [\"kind\"],\n `group postconditions are not allowed when kind is '${value.kind}'.`,\n );\n return;\n }\n if (!Array.isArray(conditions) || conditions.length === 0) {\n addCustomIssue(\n ctx,\n [\"conditions\"],\n `conditions is required when kind is '${value.kind}'.`,\n );\n } else {\n // Enforce POSTCONDITION_GENERATION_MAX_NESTED_DEPTH = 1:\n // conditions items must be leaf kinds only (no nested groups).\n for (let i = 0; i < conditions.length; i++) {\n const item = conditions[i];\n if (\n item !== null &&\n typeof item === \"object\" &&\n \"kind\" in item &&\n (item.kind === \"all-of\" || item.kind === \"any-of\")\n ) {\n addCustomIssue(\n ctx,\n [\"conditions\", i],\n `Nested group postconditions are not allowed (max depth ${POSTCONDITION_GENERATION_MAX_NESTED_DEPTH}). ` +\n `conditions[${i}] has kind '${item.kind}'.`,\n );\n }\n }\n }\n forbidFields(\n ctx,\n value,\n [\n \"predicate\",\n \"selector\",\n \"state\",\n \"text\",\n \"match\",\n \"n\",\n \"op\",\n \"value\",\n \"name\",\n \"status\",\n \"code\",\n \"summary\",\n \"escapeReason\",\n \"negate\",\n \"timeoutMs\",\n ],\n value.kind,\n );\n return;\n }\n default:\n return;\n }\n };\n}\n\n// Leaf canonical: no conditions, no groups.\nconst PostconditionLeafCanonicalKindSchema = z.enum([\n \"url\",\n \"dom\",\n \"text\",\n \"dom-count\",\n \"value\",\n \"attribute\",\n \"title\",\n \"network\",\n \"expression\",\n \"legacy-code\",\n]);\n\nexport const PostconditionLeafCanonicalSchema = z\n .object({\n kind: PostconditionLeafCanonicalKindSchema,\n predicate: UrlPredicateCanonicalSchema.optional(),\n selector: SelectorString.optional(),\n state: DomPostconditionStateSchema.optional(),\n text: z.string().min(1).optional(),\n match: z.string().min(1).optional(),\n // n and timeoutMs use plain z.number() to avoid emitting \"minimum\"/\"maximum\"\n // in the provider-facing JSON Schema. Range/int validation is enforced in\n // the per-kind payload schemas and via superRefine.\n n: z.number().optional(),\n op: DomCountOpSchema.optional(),\n value: z.string().optional(),\n name: z.string().min(1).optional(),\n status: z.number().optional(),\n code: z.string().min(1).optional(),\n summary: z.string().min(1).optional(),\n escapeReason: z.string().min(1).optional(),\n negate: z.boolean().optional(),\n timeoutMs: z.number().optional(),\n })\n .strict()\n .superRefine(validatePostconditionGenerationObject({ allowGroups: false }));\n\nconst PostconditionCanonicalKindSchema = z.enum([\n \"url\",\n \"dom\",\n \"text\",\n \"dom-count\",\n \"value\",\n \"attribute\",\n \"title\",\n \"network\",\n \"expression\",\n \"legacy-code\",\n \"all-of\",\n \"any-of\",\n]);\n\nexport const PostconditionCanonicalSchema = z\n .object({\n kind: PostconditionCanonicalKindSchema,\n predicate: UrlPredicateCanonicalSchema.optional(),\n selector: SelectorString.optional(),\n state: DomPostconditionStateSchema.optional(),\n text: z.string().min(1).optional(),\n match: z.string().min(1).optional(),\n // n and timeoutMs use plain z.number() to avoid emitting \"minimum\"/\"maximum\"\n // in the provider-facing JSON Schema.\n n: z.number().optional(),\n op: DomCountOpSchema.optional(),\n value: z.string().optional(),\n name: z.string().min(1).optional(),\n status: z.number().optional(),\n code: z.string().min(1).optional(),\n summary: z.string().min(1).optional(),\n escapeReason: z.string().min(1).optional(),\n negate: z.boolean().optional(),\n timeoutMs: z.number().optional(),\n // conditions uses PostconditionLeafCanonicalSchema (no groups) to stay\n // oneOf-free in JSON Schema and enforce max-depth = 1.\n conditions: z.array(PostconditionLeafCanonicalSchema).min(1).optional(),\n })\n .strict()\n .superRefine(validatePostconditionGenerationObject({ allowGroups: true }));\n\nexport type PostconditionCanonicalInput = z.infer<typeof PostconditionCanonicalSchema>;\n\n// ─── PostconditionNodeGenerationSchema ────────────────────────────────────────\n\n/**\n * containsLegacyCode — returns true if the postcondition tree contains any\n * legacy-code leaf. Used by PostconditionNodeGenerationSchema to reject LLM\n * output that attempts to emit legacy-code.\n */\nexport function containsLegacyCode(node: PostconditionCanonical): boolean {\n if (node.kind === \"legacy-code\") return true;\n if (node.kind === \"all-of\" || node.kind === \"any-of\") {\n return node.conditions.some(containsLegacyCode);\n }\n return false;\n}\n\n/**\n * PostconditionNodeGenerationSchema — rejects legacy-code leaf.\n * Use this when validating LLM-emitted postconditions.\n * Use PostconditionCanonicalSchema for storage reads that may include\n * legacy-code from the read shim.\n */\nexport const PostconditionNodeGenerationSchema: z.ZodType<PostconditionCanonical> =\n PostconditionCanonicalSchema.refine(\n (node) => !containsLegacyCode(node as unknown as PostconditionCanonical),\n {\n message: \"legacy-code leaf is read-only and must not appear in generation output.\",\n },\n ) as unknown as z.ZodType<PostconditionCanonical>;\n\n// ─── Resolved-payload helpers ─────────────────────────────────────────────────\n\nconst ResolvedAllOfPostconditionGenerationPayloadSchema = z\n .object({\n conditions: z.array(PostconditionLeafCanonicalSchema).min(1),\n })\n .strict();\n\nconst ResolvedAnyOfPostconditionGenerationPayloadSchema = z\n .object({\n conditions: z.array(PostconditionLeafCanonicalSchema).min(1),\n })\n .strict();\n\nconst ResolvedUrlPostconditionGenerationPayloadSchema = z\n .object({\n predicate: UrlPredicateCanonicalSchema,\n })\n .strict();\n\nconst ResolvedNetworkPostconditionGenerationPayloadSchema = z\n .object({\n predicate: UrlPredicateCanonicalSchema,\n status: PostconditionStatusSchema,\n })\n .strict()\n .superRefine((value, ctx) => {\n if (typeof value.status === \"number\" && !Number.isInteger(value.status)) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"status\"],\n message: \"status must be an integer when kind is 'network'.\",\n });\n }\n if (typeof value.status === \"number\" && (value.status < 100 || value.status > 599)) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"status\"],\n message: \"status must be between 100 and 599 when kind is 'network'.\",\n });\n }\n });\n\ntype PostconditionGenerationInput = {\n // `legacy-code` is included because `toCanonicalPostcondition` (the public\n // entry point) parses with `PostconditionCanonicalSchema`, which accepts\n // legacy-code for storage reads. The narrower generation-side schemas\n // forbid it, so producers downstream cannot smuggle the kind in.\n kind: PostconditionGenerationKind | \"legacy-code\";\n predicate?: { kind: string; value?: string; source?: string };\n selector?: string;\n state?: string;\n text?: string;\n match?: string;\n n?: number;\n op?: z.infer<typeof DomCountOpSchema>;\n value?: string;\n name?: string;\n status?: number;\n code?: string;\n summary?: string;\n escapeReason?: string;\n negate?: boolean;\n timeoutMs?: number;\n conditions?: PostconditionGenerationInput[];\n};\n\ntype PostconditionGenerationResolvedPayloadByKind = {\n url: z.infer<typeof ResolvedUrlPostconditionGenerationPayloadSchema>;\n dom: z.infer<typeof DomPostconditionGenerationPayloadSchema>;\n text: z.infer<typeof TextPostconditionGenerationPayloadSchema>;\n \"dom-count\": z.infer<typeof DomCountPostconditionGenerationPayloadSchema>;\n value: z.infer<typeof ValuePostconditionGenerationPayloadSchema>;\n attribute: z.infer<typeof AttributePostconditionGenerationPayloadSchema>;\n title: z.infer<typeof TitlePostconditionGenerationPayloadSchema>;\n network: z.infer<typeof ResolvedNetworkPostconditionGenerationPayloadSchema>;\n expression: z.infer<typeof ExpressionPostconditionGenerationPayloadSchema>;\n \"all-of\": z.infer<typeof ResolvedAllOfPostconditionGenerationPayloadSchema>;\n \"any-of\": z.infer<typeof ResolvedAnyOfPostconditionGenerationPayloadSchema>;\n};\n\nfunction buildPostconditionGenerationOutputParsed(\n kind: PostconditionGenerationKind,\n payload: unknown,\n): PostconditionGenerationInput {\n switch (kind) {\n case \"url\":\n return {\n kind: \"url\",\n ...ResolvedUrlPostconditionGenerationPayloadSchema.parse(payload),\n };\n case \"dom\":\n return {\n kind: \"dom\",\n ...DomPostconditionGenerationPayloadSchema.parse(payload),\n };\n case \"text\":\n return {\n kind: \"text\",\n ...TextPostconditionGenerationPayloadSchema.parse(payload),\n };\n case \"dom-count\":\n return {\n kind: \"dom-count\",\n ...DomCountPostconditionGenerationPayloadSchema.parse(payload),\n };\n case \"value\":\n return {\n kind: \"value\",\n ...ValuePostconditionGenerationPayloadSchema.parse(payload),\n };\n case \"attribute\":\n return {\n kind: \"attribute\",\n ...AttributePostconditionGenerationPayloadSchema.parse(payload),\n };\n case \"title\":\n return {\n kind: \"title\",\n ...TitlePostconditionGenerationPayloadSchema.parse(payload),\n };\n case \"network\":\n return {\n kind: \"network\",\n ...ResolvedNetworkPostconditionGenerationPayloadSchema.parse(payload),\n };\n case \"expression\":\n return {\n kind: \"expression\",\n ...ExpressionPostconditionGenerationPayloadSchema.parse(payload),\n };\n case \"all-of\":\n return {\n kind: \"all-of\",\n ...ResolvedAllOfPostconditionGenerationPayloadSchema.parse(payload),\n } as unknown as PostconditionGenerationInput;\n case \"any-of\":\n return {\n kind: \"any-of\",\n ...ResolvedAnyOfPostconditionGenerationPayloadSchema.parse(payload),\n } as unknown as PostconditionGenerationInput;\n default: {\n const exhaustive: never = kind;\n return exhaustive;\n }\n }\n}\n\nexport function buildPostconditionGenerationOutput(\n kind: \"url\",\n payload: PostconditionGenerationResolvedPayloadByKind[\"url\"],\n): PostconditionGenerationInput;\nexport function buildPostconditionGenerationOutput(\n kind: \"dom\",\n payload: PostconditionGenerationResolvedPayloadByKind[\"dom\"],\n): PostconditionGenerationInput;\nexport function buildPostconditionGenerationOutput(\n kind: \"text\",\n payload: PostconditionGenerationResolvedPayloadByKind[\"text\"],\n): PostconditionGenerationInput;\nexport function buildPostconditionGenerationOutput(\n kind: \"dom-count\",\n payload: PostconditionGenerationResolvedPayloadByKind[\"dom-count\"],\n): PostconditionGenerationInput;\nexport function buildPostconditionGenerationOutput(\n kind: \"value\",\n payload: PostconditionGenerationResolvedPayloadByKind[\"value\"],\n): PostconditionGenerationInput;\nexport function buildPostconditionGenerationOutput(\n kind: \"attribute\",\n payload: PostconditionGenerationResolvedPayloadByKind[\"attribute\"],\n): PostconditionGenerationInput;\nexport function buildPostconditionGenerationOutput(\n kind: \"title\",\n payload: PostconditionGenerationResolvedPayloadByKind[\"title\"],\n): PostconditionGenerationInput;\nexport function buildPostconditionGenerationOutput(\n kind: \"network\",\n payload: PostconditionGenerationResolvedPayloadByKind[\"network\"],\n): PostconditionGenerationInput;\nexport function buildPostconditionGenerationOutput(\n kind: \"expression\",\n payload: PostconditionGenerationResolvedPayloadByKind[\"expression\"],\n): PostconditionGenerationInput;\nexport function buildPostconditionGenerationOutput(\n kind: \"all-of\",\n payload: PostconditionGenerationResolvedPayloadByKind[\"all-of\"],\n): PostconditionGenerationInput;\nexport function buildPostconditionGenerationOutput(\n kind: \"any-of\",\n payload: PostconditionGenerationResolvedPayloadByKind[\"any-of\"],\n): PostconditionGenerationInput;\nexport function buildPostconditionGenerationOutput(\n kind: PostconditionGenerationKind,\n payload: PostconditionGenerationResolvedPayloadByKind[PostconditionGenerationKind],\n): PostconditionGenerationInput {\n return buildPostconditionGenerationOutputParsed(kind, payload);\n}\n\nexport function buildPostconditionGenerationOutputFromUnknown(\n kind: PostconditionGenerationKind,\n payload: unknown,\n): PostconditionGenerationInput {\n return buildPostconditionGenerationOutputParsed(kind, payload);\n}\n\nfunction buildUrlPredicateGenerationOutputParsed(\n kind: UrlPredicateGenerationKind,\n payload: unknown,\n): { kind: string; value?: string; source?: string } {\n switch (kind) {\n case \"equals\":\n return { kind: \"equals\", ...EqualsUrlPredicateGenerationPayloadSchema.parse(payload) };\n case \"contains\":\n return { kind: \"contains\", ...ContainsUrlPredicateGenerationPayloadSchema.parse(payload) };\n case \"path-contains\":\n return {\n kind: \"path-contains\",\n ...PathContainsUrlPredicateGenerationPayloadSchema.parse(payload),\n };\n case \"matches-regex\":\n return {\n kind: \"matches-regex\",\n ...MatchesRegexUrlPredicateGenerationPayloadSchema.parse(payload),\n };\n case \"changed-from-baseline\":\n return {\n kind: \"changed-from-baseline\",\n ...ChangedFromBaselineUrlPredicateGenerationPayloadSchema.parse(payload),\n };\n default: {\n const exhaustive: never = kind;\n return exhaustive;\n }\n }\n}\n\nexport function buildUrlPredicateGenerationOutput(\n kind: \"equals\",\n payload: UrlPredicateGenerationPayloadByKind[\"equals\"],\n): { kind: string; value?: string; source?: string };\nexport function buildUrlPredicateGenerationOutput(\n kind: \"contains\",\n payload: UrlPredicateGenerationPayloadByKind[\"contains\"],\n): { kind: string; value?: string; source?: string };\nexport function buildUrlPredicateGenerationOutput(\n kind: \"path-contains\",\n payload: UrlPredicateGenerationPayloadByKind[\"path-contains\"],\n): { kind: string; value?: string; source?: string };\nexport function buildUrlPredicateGenerationOutput(\n kind: \"matches-regex\",\n payload: UrlPredicateGenerationPayloadByKind[\"matches-regex\"],\n): { kind: string; value?: string; source?: string };\nexport function buildUrlPredicateGenerationOutput(\n kind: \"changed-from-baseline\",\n payload: UrlPredicateGenerationPayloadByKind[\"changed-from-baseline\"],\n): { kind: string; value?: string; source?: string };\nexport function buildUrlPredicateGenerationOutput(\n kind: UrlPredicateGenerationKind,\n payload: UrlPredicateGenerationPayloadByKind[UrlPredicateGenerationKind],\n): { kind: string; value?: string; source?: string } {\n return buildUrlPredicateGenerationOutputParsed(kind, payload);\n}\n\nexport function buildUrlPredicateGenerationOutputFromUnknown(\n kind: UrlPredicateGenerationKind,\n payload: unknown,\n): { kind: string; value?: string; source?: string } {\n return buildUrlPredicateGenerationOutputParsed(kind, payload);\n}\n\n// ─── toCanonicalPostcondition ─────────────────────────────────────────────────\n\nfunction requireDefined<T>(value: T | undefined, message: string): T {\n if (typeof value === \"undefined\") {\n throw new Error(message);\n }\n return value;\n}\n\nfunction toCanonicalUrlPredicateFrom(predicate: {\n kind: string;\n value?: string;\n source?: string;\n}): UrlPredicateCanonical {\n switch (predicate.kind) {\n case \"equals\":\n case \"contains\":\n case \"path-contains\":\n return {\n kind: predicate.kind as \"equals\" | \"contains\" | \"path-contains\",\n value: requireDefined(\n predicate.value,\n `Missing predicate.value for predicate kind '${predicate.kind}'.`,\n ),\n };\n case \"matches-regex\":\n return {\n kind: \"matches-regex\",\n source: requireDefined(\n predicate.source,\n \"Missing predicate.source for predicate kind 'matches-regex'.\",\n ),\n };\n case \"changed-from-baseline\":\n return { kind: \"changed-from-baseline\" };\n default:\n throw new Error(`Unsupported url predicate kind: ${predicate.kind}`);\n }\n}\n\nfunction toCanonicalPostconditionParsed(\n input: PostconditionGenerationInput,\n): PostconditionCanonical {\n switch (input.kind) {\n case \"url\":\n return {\n kind: \"url\",\n predicate: toCanonicalUrlPredicateFrom(\n requireDefined(input.predicate, \"Missing predicate for postcondition kind 'url'.\"),\n ),\n ...(input.negate !== undefined ? { negate: input.negate } : {}),\n ...(input.timeoutMs !== undefined ? { timeoutMs: input.timeoutMs } : {}),\n };\n case \"dom\":\n return {\n kind: \"dom\",\n selector: requireDefined(input.selector, \"Missing selector for postcondition kind 'dom'.\"),\n state: requireDefined(\n input.state as PostconditionDomState | undefined,\n \"Missing state for postcondition kind 'dom'.\",\n ),\n ...(input.negate !== undefined ? { negate: input.negate } : {}),\n ...(input.timeoutMs !== undefined ? { timeoutMs: input.timeoutMs } : {}),\n };\n case \"text\":\n return {\n kind: \"text\",\n text: requireDefined(input.text, \"Missing text for postcondition kind 'text'.\"),\n match: requireDefined(\n input.match as PostconditionTextMatch | undefined,\n \"Missing match for postcondition kind 'text'.\",\n ),\n ...(input.negate !== undefined ? { negate: input.negate } : {}),\n ...(input.timeoutMs !== undefined ? { timeoutMs: input.timeoutMs } : {}),\n };\n case \"dom-count\":\n return {\n kind: \"dom-count\",\n selector: requireDefined(\n input.selector,\n \"Missing selector for postcondition kind 'dom-count'.\",\n ),\n n: requireDefined(input.n, \"Missing n for postcondition kind 'dom-count'.\"),\n ...(input.op !== undefined ? { op: input.op } : {}),\n ...(input.negate !== undefined ? { negate: input.negate } : {}),\n ...(input.timeoutMs !== undefined ? { timeoutMs: input.timeoutMs } : {}),\n };\n case \"value\":\n return {\n kind: \"value\",\n selector: requireDefined(\n input.selector,\n \"Missing selector for postcondition kind 'value'.\",\n ),\n value: requireDefined(input.value, \"Missing value for postcondition kind 'value'.\"),\n match: requireDefined(\n input.match as \"exact\" | \"regex\" | undefined,\n \"Missing match for postcondition kind 'value'.\",\n ),\n ...(input.negate !== undefined ? { negate: input.negate } : {}),\n ...(input.timeoutMs !== undefined ? { timeoutMs: input.timeoutMs } : {}),\n };\n case \"attribute\":\n return {\n kind: \"attribute\",\n selector: requireDefined(\n input.selector,\n \"Missing selector for postcondition kind 'attribute'.\",\n ),\n name: requireDefined(input.name, \"Missing name for postcondition kind 'attribute'.\"),\n ...(input.value !== undefined ? { value: input.value } : {}),\n ...(input.negate !== undefined ? { negate: input.negate } : {}),\n ...(input.timeoutMs !== undefined ? { timeoutMs: input.timeoutMs } : {}),\n };\n case \"title\":\n return {\n kind: \"title\",\n text: requireDefined(input.text, \"Missing text for postcondition kind 'title'.\"),\n match: requireDefined(\n input.match as \"contains\" | \"exact\" | \"regex\" | undefined,\n \"Missing match for postcondition kind 'title'.\",\n ),\n ...(input.negate !== undefined ? { negate: input.negate } : {}),\n ...(input.timeoutMs !== undefined ? { timeoutMs: input.timeoutMs } : {}),\n };\n case \"network\":\n return {\n kind: \"network\",\n predicate: toCanonicalUrlPredicateFrom(\n requireDefined(input.predicate, \"Missing predicate for postcondition kind 'network'.\"),\n ),\n ...(typeof input.status === \"number\" ? { status: input.status } : {}),\n ...(input.negate !== undefined ? { negate: input.negate } : {}),\n ...(input.timeoutMs !== undefined ? { timeoutMs: input.timeoutMs } : {}),\n };\n case \"expression\":\n return {\n kind: \"expression\",\n code: requireDefined(input.code, \"Missing code for postcondition kind 'expression'.\"),\n summary: requireDefined(\n input.summary,\n \"Missing summary for postcondition kind 'expression'.\",\n ),\n escapeReason: requireDefined(\n input.escapeReason,\n \"Missing escapeReason for postcondition kind 'expression'.\",\n ),\n };\n // `legacy-code` exists for backward-compat reads from storage that pre-date\n // the structured-postcondition rollout. It is rejected by\n // `PostconditionNodeGenerationSchema` (see `containsLegacyCode`) so the\n // LLM cannot produce it — but storage-side data already on disk lands\n // here, so the canonical mapper must round-trip it instead of crashing\n // with \"Unsupported postcondition kind: legacy-code\".\n case \"legacy-code\":\n return {\n kind: \"legacy-code\",\n code: requireDefined(input.code, \"Missing code for postcondition kind 'legacy-code'.\"),\n };\n case \"all-of\":\n return {\n kind: \"all-of\",\n conditions: requireDefined(\n input.conditions,\n \"Missing conditions for postcondition kind 'all-of'.\",\n ).map(toCanonicalPostconditionParsed),\n };\n case \"any-of\":\n return {\n kind: \"any-of\",\n conditions: requireDefined(\n input.conditions,\n \"Missing conditions for postcondition kind 'any-of'.\",\n ).map(toCanonicalPostconditionParsed),\n };\n default:\n throw new Error(`Unsupported postcondition kind: ${input.kind}`);\n }\n}\n\nexport function toCanonicalPostcondition(value: unknown): PostconditionCanonical {\n const parsed = PostconditionCanonicalSchema.parse(value);\n return toCanonicalPostconditionParsed(parsed as unknown as PostconditionGenerationInput);\n}\n","import { z } from \"zod\";\n\nexport const LocatorCandidateSchema = z.object({\n elementName: z.string().min(1),\n locators: z.array(z.string()),\n});\n\nexport const LocatorsMapListSchema = z.array(LocatorCandidateSchema);\nexport type LocatorsMapList = z.infer<typeof LocatorsMapListSchema>;\n\nexport const LocatorLabelsEntrySchema = z.object({\n elementName: z.string().min(1),\n labels: z.array(z.string()),\n});\n\nexport const LocatorLabelsListSchema = z.array(LocatorLabelsEntrySchema);\nexport type LocatorLabelsList = z.infer<typeof LocatorLabelsListSchema>;\n","import { z } from \"zod\";\n\nconst JsonSchemaObjectSchema = z.record(z.string(), z.unknown());\n\nexport const WorkerClientToolManifestEntrySchema = z\n .object({\n id: z.string().min(1),\n description: z.string().min(1),\n inputSchema: JsonSchemaObjectSchema.optional(),\n outputSchema: JsonSchemaObjectSchema.optional(),\n })\n .strict();\n\nexport const WorkerClientToolsManifestSchema = z\n .object({\n protocolVersion: z.literal(1),\n tools: z.array(WorkerClientToolManifestEntrySchema),\n })\n .strict();\n\nexport const WorkerClientToolExecutionContextSchema = z\n .object({\n sessionId: z.string().min(1).optional(),\n runId: z.string().min(1).optional(),\n })\n .strict();\n\nexport const WorkerClientToolExecuteRequestSchema = z\n .object({\n toolName: z.string().min(1),\n args: z.unknown().optional(),\n context: WorkerClientToolExecutionContextSchema.optional(),\n })\n .strict();\n\nexport const WorkerClientToolExecuteResponseSchema = z\n .object({\n result: z.unknown(),\n })\n .strict();\n\nexport type WorkerClientToolManifestEntry = z.infer<typeof WorkerClientToolManifestEntrySchema>;\nexport type WorkerClientToolsManifest = z.infer<typeof WorkerClientToolsManifestSchema>;\nexport type WorkerClientToolExecutionContext = z.infer<\n typeof WorkerClientToolExecutionContextSchema\n>;\nexport type WorkerClientToolExecuteRequest = z.infer<typeof WorkerClientToolExecuteRequestSchema>;\nexport type WorkerClientToolExecuteResponse = z.infer<typeof WorkerClientToolExecuteResponseSchema>;\n","import { z } from \"zod\";\nimport { UniqueSelectorSchema } from \"../selector/selector.schema\";\nimport { ListAvailableTestDataEntrySchema } from \"./tool-args\";\nimport {\n AiChatPageContextSchema,\n AiStepEditContextSchema,\n AiStepEditModeContextSchema,\n} from \"./types\";\nimport {\n buildPostconditionGenerationOutput,\n buildPostconditionGenerationOutputFromUnknown,\n getPostconditionGenerationPayloadSchema,\n PostconditionLeafCanonicalSchema,\n PostconditionGenerationRouteSchema,\n PostconditionCanonicalSchema,\n type PostconditionCanonical,\n toCanonicalPostcondition,\n} from \"./postcondition-generation.schema\";\n\nconst ObserveActGenerationCheckpointSchema = z\n .object({\n label: z.string().min(1),\n timestampMs: z.number().nonnegative(),\n })\n .strict();\n\nexport type ObserveActGenerationCheckpoint = z.infer<typeof ObserveActGenerationCheckpointSchema>;\n\nconst ObserveActGenerationFailureTypeSchema = z.enum([\n \"pointer_intercept\",\n \"strict_mode\",\n \"timeout_wait\",\n \"timeout_wait_url\",\n \"hidden_or_disabled_target\",\n \"unknown\",\n]);\n\nexport const ObserveActGenerationRetryContextSchema = z\n .object({\n attempt: z.number().int().positive(),\n error: z.string().min(1),\n failureType: ObserveActGenerationFailureTypeSchema.optional(),\n failedActionSignature: z.string().min(1).optional(),\n pageProgressChanged: z.boolean().optional(),\n checkpointDelta: z.number().int().optional(),\n durationMs: z.number().nonnegative(),\n checkpoints: z.array(ObserveActGenerationCheckpointSchema),\n priorActionLanded: z\n .object({\n actionCode: z.string().min(1),\n reason: z.string().min(1),\n })\n .strict()\n .optional(),\n })\n .strict();\n\nexport type ObserveActGenerationRetryContext = z.infer<\n typeof ObserveActGenerationRetryContextSchema\n>;\n\nexport const ObserveActGenerationRecoveryContextSchema = z\n .object({\n blockedSignatures: z.array(z.string().min(1)),\n progressionGoal: z.string().min(1),\n advisorySuggestions: z.array(z.string().min(1)).optional(),\n advisoryEvidence: z.array(z.string().min(1)).optional(),\n })\n .strict();\n\nexport type ObserveActGenerationRecoveryContext = z.infer<\n typeof ObserveActGenerationRecoveryContextSchema\n>;\n\nexport const ObserveActGenerationContinuationContextSchema = z\n .object({\n existingCode: z.string().min(1),\n previousExecution: z\n .object({\n success: z.boolean(),\n error: z.string().min(1).optional(),\n checkpoints: z.array(ObserveActGenerationCheckpointSchema).optional(),\n })\n .strict()\n .optional(),\n })\n .strict();\n\nexport type ObserveActGenerationContinuationContext = z.infer<\n typeof ObserveActGenerationContinuationContextSchema\n>;\n\nconst ObserveActGenerationPinnedElementParentSchema = z\n .object({\n tagName: z.string().min(1),\n role: z.string().min(1).optional(),\n accessibleName: z.string().min(1).optional(),\n })\n .strict();\n\nexport const ObserveActGenerationPinnedElementSchema = z\n .object({\n uniqueSelector: UniqueSelectorSchema,\n role: z.string().min(1).optional(),\n accessibleName: z.string().min(1).optional(),\n tagName: z.string().min(1),\n inputType: z.string().min(1).optional(),\n visibleText: z.string().max(500).optional(),\n placeholder: z.string().max(200).optional(),\n ariaLabel: z.string().max(200).optional(),\n title: z.string().max(200).optional(),\n attributes: z\n .record(z.string().max(100), z.string().max(1024))\n .refine((attributes) => Object.keys(attributes).length <= 30, {\n message: \"attributes capped at 30\",\n }),\n parentChain: z.array(ObserveActGenerationPinnedElementParentSchema).max(4),\n pageUrl: z.string().url(),\n pickedAt: z.number().nonnegative(),\n stale: z.boolean().optional(),\n })\n .strict();\n\nexport type ObserveActGenerationPinnedElement = z.infer<\n typeof ObserveActGenerationPinnedElementSchema\n>;\n\nexport const ObserveActGenerationInputSchema = z\n .object({\n originalIntent: z.string().min(1),\n pageContext: z.lazy(() => AiChatPageContextSchema),\n committedStepsSummary: z.string(),\n retryContext: ObserveActGenerationRetryContextSchema.optional(),\n recoveryContext: ObserveActGenerationRecoveryContextSchema.optional(),\n iterationsRemaining: z.number().int().positive(),\n continuationContext: ObserveActGenerationContinuationContextSchema.optional(),\n stepEditContext: z.lazy(() => AiStepEditContextSchema).optional(),\n editModeContext: z.lazy(() => AiStepEditModeContextSchema).optional(),\n pinnedElement: ObserveActGenerationPinnedElementSchema.optional(),\n availableTestData: z.array(ListAvailableTestDataEntrySchema).readonly().optional(),\n })\n .strict();\n\nexport type ObserveActGenerationInput = z.infer<typeof ObserveActGenerationInputSchema>;\n\nconst ObserveActGenerationTypeSchema = z.enum([\"step\", \"assertion\", \"complete\"]);\n\nexport type ObserveActGenerationType = z.infer<typeof ObserveActGenerationTypeSchema>;\n\nexport const ObserveActGenerationRouteSchema = z\n .object({\n type: ObserveActGenerationTypeSchema,\n })\n .strict();\n\nexport type ObserveActGenerationRoute = z.infer<typeof ObserveActGenerationRouteSchema>;\n\nexport const ObserveActGenerationStepShellPayloadSchema = z\n .object({\n stepGoal: z.string().min(1),\n actionCode: z.string().min(1),\n postcondition: PostconditionGenerationRouteSchema,\n })\n .strict();\n\nexport type ObserveActGenerationStepShellPayload = z.infer<\n typeof ObserveActGenerationStepShellPayloadSchema\n>;\n\nexport const ObserveActGenerationResolvedStepPayloadSchema = z\n .object({\n stepGoal: z.string().min(1),\n actionCode: z.string().min(1),\n postcondition: PostconditionCanonicalSchema,\n })\n .strict();\n\nexport type ObserveActGenerationResolvedStepPayload = z.infer<\n typeof ObserveActGenerationResolvedStepPayloadSchema\n>;\n\nexport const ObserveActGenerationAssertionPayloadSchema = z\n .object({\n assertionGoal: z.string().min(1),\n assertionCode: z.string().min(1),\n })\n .strict();\n\nexport type ObserveActGenerationAssertionPayload = z.infer<\n typeof ObserveActGenerationAssertionPayloadSchema\n>;\n\nexport const ObserveActGenerationCompletePayloadSchema = z\n .object({\n reason: z.string().min(1),\n })\n .strict();\n\nexport type ObserveActGenerationCompletePayload = z.infer<\n typeof ObserveActGenerationCompletePayloadSchema\n>;\n\nconst ObserveActGenerationResolvedGroupPostconditionPayloadSchema = z\n .object({\n conditions: z.array(PostconditionLeafCanonicalSchema).min(1),\n })\n .strict();\n\nexport type ObserveActGenerationPayloadByType = {\n step: ObserveActGenerationResolvedStepPayload;\n assertion: ObserveActGenerationAssertionPayload;\n complete: ObserveActGenerationCompletePayload;\n};\n\nexport type ObserveActGenerationCanonicalEnvelope =\n | {\n type: \"step\";\n step: ObserveActGenerationResolvedStepPayload;\n }\n | {\n type: \"assertion\";\n assertion: ObserveActGenerationAssertionPayload;\n }\n | {\n type: \"complete\";\n complete: ObserveActGenerationCompletePayload;\n };\n\nexport function getObserveActGenerationPayloadSchema(\n type: \"step\",\n): typeof ObserveActGenerationStepShellPayloadSchema;\nexport function getObserveActGenerationPayloadSchema(\n type: \"assertion\",\n): typeof ObserveActGenerationAssertionPayloadSchema;\nexport function getObserveActGenerationPayloadSchema(\n type: \"complete\",\n): typeof ObserveActGenerationCompletePayloadSchema;\nexport function getObserveActGenerationPayloadSchema(type: ObserveActGenerationType) {\n switch (type) {\n case \"step\":\n return ObserveActGenerationStepShellPayloadSchema;\n case \"assertion\":\n return ObserveActGenerationAssertionPayloadSchema;\n case \"complete\":\n return ObserveActGenerationCompletePayloadSchema;\n default: {\n const exhaustive: never = type;\n return exhaustive;\n }\n }\n}\n\nexport function buildObserveActGenerationStepPayload(\n shell: ObserveActGenerationStepShellPayload,\n postconditionPayload: unknown,\n): ObserveActGenerationResolvedStepPayload {\n return {\n stepGoal: shell.stepGoal,\n actionCode: shell.actionCode,\n postcondition: (() => {\n switch (shell.postcondition.kind) {\n case \"all-of\":\n return PostconditionCanonicalSchema.parse(\n buildPostconditionGenerationOutput(\n \"all-of\",\n ObserveActGenerationResolvedGroupPostconditionPayloadSchema.parse(\n postconditionPayload,\n ),\n ),\n );\n case \"any-of\":\n return PostconditionCanonicalSchema.parse(\n buildPostconditionGenerationOutput(\n \"any-of\",\n ObserveActGenerationResolvedGroupPostconditionPayloadSchema.parse(\n postconditionPayload,\n ),\n ),\n );\n default:\n return PostconditionCanonicalSchema.parse(\n buildPostconditionGenerationOutputFromUnknown(\n shell.postcondition.kind,\n postconditionPayload,\n ),\n );\n }\n })(),\n };\n}\n\nexport function buildObserveActGenerationOutput(\n type: \"step\",\n payload: ObserveActGenerationPayloadByType[\"step\"],\n): ObserveActGenerationCanonicalEnvelope;\nexport function buildObserveActGenerationOutput(\n type: \"assertion\",\n payload: ObserveActGenerationPayloadByType[\"assertion\"],\n): ObserveActGenerationCanonicalEnvelope;\nexport function buildObserveActGenerationOutput(\n type: \"complete\",\n payload: ObserveActGenerationPayloadByType[\"complete\"],\n): ObserveActGenerationCanonicalEnvelope;\nexport function buildObserveActGenerationOutput(\n type: ObserveActGenerationType,\n payload: ObserveActGenerationPayloadByType[ObserveActGenerationType],\n): ObserveActGenerationCanonicalEnvelope {\n switch (type) {\n case \"step\":\n return {\n type: \"step\",\n step: ObserveActGenerationResolvedStepPayloadSchema.parse(payload),\n };\n case \"assertion\":\n return {\n type: \"assertion\",\n assertion: ObserveActGenerationAssertionPayloadSchema.parse(payload),\n };\n case \"complete\":\n return {\n type: \"complete\",\n complete: ObserveActGenerationCompletePayloadSchema.parse(payload),\n };\n default: {\n const exhaustive: never = type;\n return exhaustive;\n }\n }\n}\n\nexport const ObserveActGenerationCanonicalSchema = z\n .object({\n type: ObserveActGenerationTypeSchema,\n step: ObserveActGenerationResolvedStepPayloadSchema.optional(),\n assertion: ObserveActGenerationAssertionPayloadSchema.optional(),\n complete: ObserveActGenerationCompletePayloadSchema.optional(),\n })\n .strict()\n .superRefine((value, ctx) => {\n if (value.type === \"step\") {\n if (!value.step) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"step\"],\n message: \"step is required when type is 'step'.\",\n });\n }\n if (value.assertion) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"assertion\"],\n message: \"assertion is not allowed when type is 'step'.\",\n });\n }\n if (value.complete) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"complete\"],\n message: \"complete is not allowed when type is 'step'.\",\n });\n }\n return;\n }\n\n if (value.type === \"assertion\") {\n if (!value.assertion) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"assertion\"],\n message: \"assertion is required when type is 'assertion'.\",\n });\n }\n if (value.step) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"step\"],\n message: \"step is not allowed when type is 'assertion'.\",\n });\n }\n if (value.complete) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"complete\"],\n message: \"complete is not allowed when type is 'assertion'.\",\n });\n }\n return;\n }\n\n if (!value.complete) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"complete\"],\n message: \"complete is required when type is 'complete'.\",\n });\n }\n if (value.step) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"step\"],\n message: \"step is not allowed when type is 'complete'.\",\n });\n }\n if (value.assertion) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"assertion\"],\n message: \"assertion is not allowed when type is 'complete'.\",\n });\n }\n });\n\nexport type ObserveActStepOutput =\n | {\n type: \"step\";\n stepGoal: string;\n actionCode: string;\n postcondition: PostconditionCanonical;\n }\n | {\n type: \"assertion\";\n assertionGoal: string;\n assertionCode: string;\n }\n | {\n type: \"complete\";\n reason: string;\n };\n\nfunction requireDefined<T>(value: T | undefined, message: string): T {\n if (typeof value === \"undefined\") {\n throw new Error(message);\n }\n return value;\n}\n\nexport function toObserveActStepOutput(value: unknown): ObserveActStepOutput {\n const parsed = ObserveActGenerationCanonicalSchema.parse(value);\n\n switch (parsed.type) {\n case \"step\": {\n const step = requireDefined(parsed.step, \"Observe-act output is missing a step payload.\");\n return {\n type: \"step\",\n stepGoal: step.stepGoal,\n actionCode: step.actionCode,\n postcondition: toCanonicalPostcondition(step.postcondition),\n };\n }\n case \"assertion\": {\n const assertion = requireDefined(\n parsed.assertion,\n \"Observe-act output is missing an assertion payload.\",\n );\n return {\n type: \"assertion\",\n assertionGoal: assertion.assertionGoal,\n assertionCode: assertion.assertionCode,\n };\n }\n case \"complete\": {\n const complete = requireDefined(\n parsed.complete,\n \"Observe-act output is missing a complete payload.\",\n );\n return {\n type: \"complete\",\n reason: complete.reason,\n };\n }\n default: {\n const exhaustive: never = parsed.type;\n return exhaustive;\n }\n }\n}\n\n// Re-export PostconditionCanonical for callers that previously used\n// ObserveActStepOutput.postcondition as PostconditionCanonical.\nexport type { PostconditionCanonical };\n","/**\n * Failure codes for AI Chat plan-and-execute pipeline.\n *\n * Each code uniquely identifies a failure mode so healers, classifiers,\n * and observability can route and aggregate without free-text parsing.\n *\n * Appended-only. Do not reorder or remove entries.\n */\n\nexport const FAILURE_CODES = {\n /** Recipe loader could not read or parse the recipe file. */\n E_RECIPE_LOAD_ERROR: \"E_RECIPE_LOAD_ERROR\",\n\n /** Recipe was pinned to a version that is not present in the corpus. */\n E_RECIPE_VERSION_PINNED_MISSING: \"E_RECIPE_VERSION_PINNED_MISSING\",\n\n /** Form field dependency resolved to a different DOM state than expected. */\n E_FORM_DEPENDENCY_DRIFT: \"E_FORM_DEPENDENCY_DRIFT\",\n\n /** Form async validation (e.g. username availability check) did not resolve. */\n E_FORM_ASYNC_VALIDATE_FAIL: \"E_FORM_ASYNC_VALIDATE_FAIL\",\n\n /** Form required field was not populated by the executor. */\n E_FORM_REQUIRED_FIELD_MISSING: \"E_FORM_REQUIRED_FIELD_MISSING\",\n\n /** Executor step timed out before completing. */\n E_EXECUTOR_STEP_TIMEOUT: \"E_EXECUTOR_STEP_TIMEOUT\",\n\n /** Postcondition verification failed after all retries. */\n E_POSTCONDITION_FAILED: \"E_POSTCONDITION_FAILED\",\n\n /** Playwright script failed to parse (syntax error). */\n E_PLAYWRIGHT_SYNTAX_ERROR: \"E_PLAYWRIGHT_SYNTAX_ERROR\",\n\n /** Playwright script threw at runtime. */\n E_PLAYWRIGHT_RUNTIME_ERROR: \"E_PLAYWRIGHT_RUNTIME_ERROR\",\n\n /** Selector was not found on page (element missing or page changed). */\n E_SELECTOR_NOT_FOUND: \"E_SELECTOR_NOT_FOUND\",\n\n /** Recipe corpus returned no match for the detected CMP/widget. */\n E_RECIPE_NO_MATCH: \"E_RECIPE_NO_MATCH\",\n\n /** Replan exceeded the per-turn budget. */\n E_REPLAN_BUDGET_EXCEEDED: \"E_REPLAN_BUDGET_EXCEEDED\",\n\n /** Generic code fallback when no specialized healer path applies. */\n E_CODE_FALLBACK: \"E_CODE_FALLBACK\",\n} as const;\n\nexport type FailureCode = (typeof FAILURE_CODES)[keyof typeof FAILURE_CODES];\n\n/** All valid failure codes as a readonly array. */\nexport const FAILURE_CODE_VALUES: readonly FailureCode[] = Object.values(FAILURE_CODES);\n\n/**\n * Returns true if the given string is a known FailureCode.\n */\nexport function isFailureCode(value: string): value is FailureCode {\n return FAILURE_CODE_VALUES.includes(value as FailureCode);\n}\n","import { z } from \"zod\";\n\nimport { EntityIdSchema } from \"../base.schema\";\n\nexport const FEATURE_FLAG_KEYS = [\n \"NewTourGuide\",\n \"NewFirstUserFlow_DemoPage\",\n \"EnvReachabilityCheck\",\n \"SlackIntegration\",\n \"ExecutionNotifications\",\n] as const;\n\nexport const FeatureFlagKeySchema = z.enum(FEATURE_FLAG_KEYS);\nexport type FeatureFlagKey = z.infer<typeof FeatureFlagKeySchema>;\n\nexport const FeatureFlagSchema = z\n .object({\n _id: EntityIdSchema,\n key: FeatureFlagKeySchema,\n enabled: z.boolean(),\n description: z.string().max(1000).optional(),\n })\n .strict();\n\nexport type FeatureFlag = z.infer<typeof FeatureFlagSchema>;\n\nexport const FeatureFlagAuditLogSchema = z\n .object({\n flagId: EntityIdSchema,\n flagKey: FeatureFlagKeySchema,\n userId: z.string().min(1),\n username: z.string().min(1),\n previousEnabled: z.boolean(),\n newEnabled: z.boolean(),\n reason: z.string().min(1).max(1000).optional(),\n })\n .strict();\n\nexport type FeatureFlagAuditLog = z.infer<typeof FeatureFlagAuditLogSchema>;\n","import { z } from \"zod\";\n\nexport const ObservabilitySourceSchema = z.enum([\"service\", \"client\"]);\nexport const ObservabilityClientTypeSchema = z.enum([\"web\", \"desktop\"]);\nexport const ObservabilityLogLevelSchema = z.enum([\"debug\", \"info\", \"warn\", \"error\"]);\nexport const ObservabilityMetricTypeSchema = z.enum([\"count\", \"latency\", \"gauge\"]);\n\nexport const ObservabilityServiceTopicSchema = z.enum([\n \"main\",\n \"ai\",\n \"orchestrator\",\n \"execution-planner\",\n]);\nexport const ObservabilityClientTopicSchema = z.enum([\"web\", \"desktop\"]);\n\nexport const OBSERVABILITY_LOG_TOPIC_PARTITIONS = 12;\nexport const OBSERVABILITY_METRIC_TOPIC_PARTITIONS = 6;\n\nconst JsonRecordSchema = z.record(z.string(), z.unknown());\nconst StringRecordSchema = z.record(z.string(), z.string());\n\nconst BaseObservabilityEnvelopeSchema = z\n .object({\n source: ObservabilitySourceSchema,\n service: z.string().min(1),\n environment: z.string().min(1),\n clientType: ObservabilityClientTypeSchema.optional(),\n userId: z.string().min(1).optional(),\n externalUserId: z.string().min(1).optional(),\n projectId: z.string().min(1).optional(),\n sessionId: z.string().min(1).optional(),\n reportId: z.string().min(1).optional(),\n scenarioId: z.string().min(1).optional(),\n })\n .strict();\n\nexport const KafkaLogEnvelopeSchema = BaseObservabilityEnvelopeSchema.extend({\n message: z.string().min(1),\n eventName: z.string().min(1).optional(),\n level: ObservabilityLogLevelSchema,\n timestamp: z.iso.datetime(),\n metadata: JsonRecordSchema.optional(),\n}).strict();\n\nexport type KafkaLogEnvelope = z.infer<typeof KafkaLogEnvelopeSchema>;\n\nexport const KafkaMetricEnvelopeSchema = BaseObservabilityEnvelopeSchema.extend({\n name: z.string().min(1),\n value: z.number().finite(),\n type: ObservabilityMetricTypeSchema,\n timestamp: z.iso.datetime(),\n tags: StringRecordSchema.optional(),\n}).strict();\n\nexport type KafkaMetricEnvelope = z.infer<typeof KafkaMetricEnvelopeSchema>;\n\nexport const ClientLogIngestRequestSchema = KafkaLogEnvelopeSchema.omit({\n timestamp: true,\n source: true,\n}).extend({\n source: z.literal(\"client\"),\n});\n\nexport type ClientLogIngestRequest = z.infer<typeof ClientLogIngestRequestSchema>;\n\nexport const ClientMetricIngestRequestSchema = KafkaMetricEnvelopeSchema.omit({\n timestamp: true,\n source: true,\n}).extend({\n source: z.literal(\"client\"),\n});\n\nexport type ClientMetricIngestRequest = z.infer<typeof ClientMetricIngestRequestSchema>;\n\nexport const ClientQueuedLogEventSchema = z\n .object({\n type: z.literal(\"log\"),\n name: z.string().min(1),\n timestamp: z.number().int().nonnegative(),\n payload: ClientLogIngestRequestSchema,\n })\n .strict();\n\nexport type ClientQueuedLogEvent = z.infer<typeof ClientQueuedLogEventSchema>;\n\nexport const ClientQueuedMetricEventSchema = z\n .object({\n type: z.literal(\"metric\"),\n name: z.string().min(1),\n timestamp: z.number().int().nonnegative(),\n payload: ClientMetricIngestRequestSchema,\n })\n .strict();\n\nexport type ClientQueuedMetricEvent = z.infer<typeof ClientQueuedMetricEventSchema>;\n\nexport const ClientQueuedEventSchema = z.discriminatedUnion(\"type\", [\n ClientQueuedLogEventSchema,\n ClientQueuedMetricEventSchema,\n]);\n\nexport type ClientQueuedEvent = z.infer<typeof ClientQueuedEventSchema>;\n\nexport const ClientQueuedEventBatchSchema = z.array(ClientQueuedEventSchema).max(5_000);\n\nexport type ClientQueuedEventBatch = z.infer<typeof ClientQueuedEventBatchSchema>;\n\nexport function normalizeObservabilityTopicPrefix(prefix?: string | null): string {\n const trimmed = prefix?.trim().replace(/\\.+$/u, \"\") ?? \"\";\n return trimmed.length > 0 ? `${trimmed}.` : \"\";\n}\n\nfunction escapeRegex(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/gu, \"\\\\$&\");\n}\n\nfunction withTopicPrefix(baseTopic: string, prefix?: string | null): string {\n return `${normalizeObservabilityTopicPrefix(prefix)}${baseTopic}`;\n}\n\nexport function resolveServiceLogTopic(\n serviceTopic: z.infer<typeof ObservabilityServiceTopicSchema>,\n prefix?: string | null,\n): string {\n return withTopicPrefix(`observability.logs.service.${serviceTopic}`, prefix);\n}\n\nexport function resolveClientLogTopic(\n clientTopic: z.infer<typeof ObservabilityClientTopicSchema>,\n prefix?: string | null,\n): string {\n return withTopicPrefix(`observability.logs.client.${clientTopic}`, prefix);\n}\n\nexport function resolveServiceMetricTopic(\n serviceTopic: z.infer<typeof ObservabilityServiceTopicSchema>,\n prefix?: string | null,\n): string {\n return withTopicPrefix(`observability.metrics.service.${serviceTopic}`, prefix);\n}\n\nexport function resolveClientMetricTopic(\n clientTopic: z.infer<typeof ObservabilityClientTopicSchema>,\n prefix?: string | null,\n): string {\n return withTopicPrefix(`observability.metrics.client.${clientTopic}`, prefix);\n}\n\nexport function getAllObservabilityTopics(prefix?: string | null): string[] {\n return [\n resolveServiceLogTopic(\"main\", prefix),\n resolveServiceLogTopic(\"ai\", prefix),\n resolveServiceLogTopic(\"orchestrator\", prefix),\n resolveServiceLogTopic(\"execution-planner\", prefix),\n resolveClientLogTopic(\"web\", prefix),\n resolveClientLogTopic(\"desktop\", prefix),\n resolveServiceMetricTopic(\"main\", prefix),\n resolveServiceMetricTopic(\"ai\", prefix),\n resolveServiceMetricTopic(\"orchestrator\", prefix),\n resolveServiceMetricTopic(\"execution-planner\", prefix),\n resolveClientMetricTopic(\"web\", prefix),\n resolveClientMetricTopic(\"desktop\", prefix),\n ];\n}\n\nexport function createObservabilityTopicPattern(prefix?: string | null): RegExp {\n return new RegExp(\n `^${escapeRegex(normalizeObservabilityTopicPrefix(prefix))}observability\\\\.(logs|metrics)\\\\.`,\n \"u\",\n );\n}\n","import { z } from \"zod\";\n\nimport { EntityIdSchema } from \"../base.schema\";\nimport { TestCaseResultSchema } from \"../testcase/testcase.schema\";\n\nexport const TagInclusionModeSchema = z.enum([\"any\", \"all\"]);\nexport type TagInclusionMode = z.infer<typeof TagInclusionModeSchema>;\n\nexport const TagSelectorSchema = z\n .object({\n include: z.array(EntityIdSchema),\n exclude: z.array(EntityIdSchema),\n inclusionMode: TagInclusionModeSchema,\n })\n .strict();\nexport type TagSelector = z.infer<typeof TagSelectorSchema>;\n\nexport const ScenarioSelectorsSchema = z\n .object({\n byTags: TagSelectorSchema,\n byFolders: z.array(EntityIdSchema),\n byFeatures: z.array(EntityIdSchema),\n byScenarios: z.array(EntityIdSchema),\n })\n .strict();\nexport type ScenarioSelectors = z.infer<typeof ScenarioSelectorsSchema>;\n\nexport const StageDefinitionSchema = z\n .object({\n threads: z.number().int().min(1).max(20),\n maxRetries: z.number().int().min(0),\n selectors: ScenarioSelectorsSchema,\n blockingScenarios: z.array(EntityIdSchema),\n })\n .strict();\nexport type StageDefinition = z.infer<typeof StageDefinitionSchema>;\n\nexport const ExecutionEditorModeSchema = z.enum([\"simple\", \"advanced\"]);\nexport type ExecutionEditorMode = z.infer<typeof ExecutionEditorModeSchema>;\n\nexport const ExecutionSchema = z\n .object({\n _id: EntityIdSchema,\n name: z.string().trim().min(1).max(240),\n projectId: EntityIdSchema,\n createdBy: EntityIdSchema,\n modifiedBy: EntityIdSchema,\n createdAt: z.date(),\n modifiedAt: z.date(),\n stages: z.array(StageDefinitionSchema).min(1),\n /**\n * UI mode used when the execution was last saved. Used by the editor to\n * restore the same Simple / Advanced view on edit and is otherwise\n * ignored at runtime. Optional for back-compat with executions saved\n * before this field existed; the client falls back to a shape-based\n * heuristic when missing.\n */\n editorMode: ExecutionEditorModeSchema.optional(),\n })\n .strict();\nexport type Execution = z.infer<typeof ExecutionSchema>;\n\nexport const RuntimeConfigSchema = z\n .object({\n envId: EntityIdSchema,\n captureTrace: z.boolean(),\n runWithAiRecovery: z.boolean().default(false),\n })\n .strict();\nexport type RuntimeConfig = z.infer<typeof RuntimeConfigSchema>;\n\nconst ExecutionFailureBaseSchema = z\n .object({\n name: z.string().trim().min(1).max(255).optional(),\n message: z.string().min(1).max(10_000),\n diagnosticMessage: z.string().min(1).max(10_000).optional(),\n rootCause: z.string().trim().min(1).max(255).optional(),\n operation: z.string().trim().min(1).max(255).optional(),\n code: z.string().trim().min(1).max(255).optional(),\n httpStatus: z.number().int().min(100).max(599).optional(),\n path: z.string().trim().min(1).max(255).optional(),\n trpcCode: z.number().int().optional(),\n response: z\n .object({\n status: z.number().int().min(100).max(599).optional(),\n statusText: z.string().trim().max(255).optional(),\n contentType: z.string().trim().max(255).optional(),\n url: z.string().trim().max(2000).optional(),\n htmlTitle: z.string().trim().max(255).optional(),\n bodySnippet: z.string().max(10_000).optional(),\n })\n .strict()\n .optional(),\n stack: z.string().max(100_000).optional(),\n recordedAt: z.string().datetime(),\n })\n .strict();\n\nexport const ScheduleTriggerFailureSchema = ExecutionFailureBaseSchema;\nexport type ScheduleTriggerFailure = z.infer<typeof ScheduleTriggerFailureSchema>;\n\nexport const ScheduledJobStatusSchema = z.enum([\"active\", \"paused\"]);\nexport type ScheduledJobStatus = z.infer<typeof ScheduledJobStatusSchema>;\n\nexport const ExecutionInstanceStatusSchema = z.enum([\"Running\", \"Completed\", \"Aborted\"]);\nexport type ExecutionInstanceStatus = z.infer<typeof ExecutionInstanceStatusSchema>;\n\nexport const ExecutionInstanceResultSchema = z\n .enum([\"Passed\", \"Failed\", \"Error\", \"Aborted\"])\n .nullable();\nexport type ExecutionInstanceResult = z.infer<typeof ExecutionInstanceResultSchema>;\n\nexport const ScheduledJobLastRunSchema = z\n .object({\n executionInstanceId: EntityIdSchema,\n reportId: EntityIdSchema,\n startedAt: z.date(),\n completedAt: z.date().nullable(),\n status: ExecutionInstanceStatusSchema,\n result: ExecutionInstanceResultSchema,\n })\n .strict();\nexport type ScheduledJobLastRun = z.infer<typeof ScheduledJobLastRunSchema>;\n\nexport const ScheduledJobSchema = z\n .object({\n _id: EntityIdSchema,\n executionId: EntityIdSchema,\n projectId: EntityIdSchema,\n name: z.string().trim().min(1).max(120).optional(),\n cronExpression: z.string().trim().min(1).max(255),\n timezone: z.string().trim().min(1).max(100),\n nextFireTime: z.date(),\n status: ScheduledJobStatusSchema,\n runtimeConfig: RuntimeConfigSchema,\n scheduledBy: EntityIdSchema,\n claimedAt: z.date().nullable(),\n claimedBy: z.string().trim().min(1).max(255).nullable(),\n lastFiredAt: z.date().nullable(),\n triggerFailureAttempts: z.number().int().min(0).optional(),\n lastTriggerFailure: ScheduleTriggerFailureSchema.optional(),\n lastRun: ScheduledJobLastRunSchema.optional(),\n })\n .strict();\nexport type ScheduledJob = z.infer<typeof ScheduledJobSchema>;\n\nexport const RuntimeScenarioSchema = z\n .object({\n scenarioId: EntityIdSchema,\n isBlocking: z.boolean(),\n })\n .strict();\nexport type RuntimeScenario = z.infer<typeof RuntimeScenarioSchema>;\n\nexport const RuntimeStageSchema = z\n .object({\n maxRetries: z.number().int().min(0),\n scenarios: z.array(RuntimeScenarioSchema),\n threads: z.number().int().min(1).max(20),\n })\n .strict();\nexport type RuntimeStage = z.infer<typeof RuntimeStageSchema>;\n\nexport const ExecutionTriggerSchema = z\n .object({\n mode: z.enum([\"Manual\", \"Schedule\"]),\n triggeredBy: z.string().trim().min(1).max(255),\n })\n .strict();\nexport type ExecutionTrigger = z.infer<typeof ExecutionTriggerSchema>;\n\nexport const ExecutionInstanceSchema = z\n .object({\n _id: EntityIdSchema,\n executionId: EntityIdSchema,\n projectId: EntityIdSchema,\n trigger: ExecutionTriggerSchema,\n startedAt: z.date(),\n reportId: EntityIdSchema,\n completedAt: z.date().nullable(),\n abortedBy: z.string().trim().min(1).max(255).optional(),\n status: ExecutionInstanceStatusSchema,\n result: ExecutionInstanceResultSchema,\n lastUpdatedAt: z.date(),\n lastUpdateMessage: z.string().trim().min(1).max(4000),\n runtimeConfig: RuntimeConfigSchema,\n stages: z.array(RuntimeStageSchema),\n runningStageIndex: z.number().int().min(0),\n })\n .strict();\nexport type ExecutionInstance = z.infer<typeof ExecutionInstanceSchema>;\n\nexport const StageScenarioResultSchema = z\n .object({\n scenarioId: EntityIdSchema,\n attemptNumber: z.number().int().min(1),\n result: TestCaseResultSchema.nullable(),\n })\n .strict();\nexport type StageScenarioResult = z.infer<typeof StageScenarioResultSchema>;\n\nexport const StageStatusSchema = z\n .object({\n _id: EntityIdSchema,\n executionInstanceId: EntityIdSchema,\n stageIndex: z.number().int().min(0),\n maxRetries: z.number().int().min(0),\n pendingScenarios: z.array(EntityIdSchema),\n inFlightCount: z.number().int().min(0),\n testsPassed: z.number().int().min(0),\n testsFailed: z.number().int().min(0),\n processedAttempts: z.array(z.string().trim().min(1).max(255)).default([]),\n scenarioResults: z.array(StageScenarioResultSchema).default([]),\n })\n .strict();\nexport type StageStatus = z.infer<typeof StageStatusSchema>;\n\nexport const ThreadLeaseSchema = z\n .object({\n workerId: z.string().trim().min(1).max(255),\n scenarioId: EntityIdSchema,\n leasedAt: z.date(),\n })\n .strict();\nexport type ThreadLease = z.infer<typeof ThreadLeaseSchema>;\n\nexport const ThreadPoolSchema = z\n .object({\n _id: EntityIdSchema,\n executionInstanceId: EntityIdSchema,\n stageIndex: z.number().int().min(0),\n threads: z.number().int().min(0),\n activeLeases: z.array(ThreadLeaseSchema),\n })\n .strict();\nexport type ThreadPool = z.infer<typeof ThreadPoolSchema>;\n\nexport const OutboxEventSchema = z\n .object({\n _id: EntityIdSchema,\n topic: z.string().trim().min(1).max(255),\n partitionKey: z.string().trim().min(1).max(255).nullable(),\n payload: z.record(z.string(), z.unknown()),\n createdAt: z.date(),\n publishedAt: z.date().nullable(),\n attempts: z.number().int().min(0),\n })\n .strict();\n\nexport const ExecutionRunScenarioMessageSchema = z\n .object({\n executionInstanceId: EntityIdSchema,\n stageIndex: z.number().int().min(0),\n scenarioId: EntityIdSchema,\n projectId: EntityIdSchema,\n reportId: EntityIdSchema,\n maxRetries: z.number().int().min(0),\n attemptNumber: z.number().int().min(1).default(1),\n runtimeConfig: RuntimeConfigSchema,\n isBlocking: z.boolean(),\n })\n .strict();\nexport type ExecutionRunScenarioMessage = z.infer<typeof ExecutionRunScenarioMessageSchema>;\n\nexport const ExecutionRunResultMessageSchema = ExecutionRunScenarioMessageSchema.extend({\n result: TestCaseResultSchema,\n}).strict();\nexport type ExecutionRunResultMessage = z.infer<typeof ExecutionRunResultMessageSchema>;\n\nexport const ExecutionTriggeredMessageSchema = z\n .object({\n executionInstanceId: EntityIdSchema,\n projectId: EntityIdSchema,\n })\n .strict();\nexport type ExecutionTriggeredMessage = z.infer<typeof ExecutionTriggeredMessageSchema>;\n\nexport const ExecutionThreadsMessageSchema = z\n .object({\n projectId: EntityIdSchema,\n threads: z.number().int().min(1),\n action: z.enum([\"scale-up\"]),\n })\n .strict();\nexport type ExecutionThreadsMessage = z.infer<typeof ExecutionThreadsMessageSchema>;\n\nexport const ProcessedKafkaEventSchema = z\n .object({\n _id: EntityIdSchema,\n consumerGroupId: z.string().trim().min(1).max(255),\n topic: z.string().trim().min(1).max(255),\n eventId: EntityIdSchema,\n processedAt: z.date(),\n })\n .strict();\nexport type ProcessedKafkaEvent = z.infer<typeof ProcessedKafkaEventSchema>;\n\nexport const ExecutionScenarioDeliveryFailureSchema = ExecutionFailureBaseSchema.extend({\n workerId: z.string().trim().min(1).max(255).optional(),\n}).strict();\nexport type ExecutionScenarioDeliveryFailure = z.infer<\n typeof ExecutionScenarioDeliveryFailureSchema\n>;\n\nexport const ExecutionScenarioDeliverySchema = z\n .object({\n _id: EntityIdSchema,\n executionInstanceId: EntityIdSchema,\n stageIndex: z.number().int().min(0),\n scenarioId: EntityIdSchema,\n attemptNumber: z.number().int().min(1),\n deliveryAttempts: z.number().int().min(0),\n firstAttemptAt: z.date(),\n lastAttemptAt: z.date(),\n lastEventId: EntityIdSchema.optional(),\n lastFailure: ExecutionScenarioDeliveryFailureSchema.optional(),\n })\n .strict();\nexport type ExecutionScenarioDelivery = z.infer<typeof ExecutionScenarioDeliverySchema>;\n\nexport const ExecutionRunDlqReasonSchema = z.enum([\"InfraDeliveryAttemptsExceeded\"]);\nexport type ExecutionRunDlqReason = z.infer<typeof ExecutionRunDlqReasonSchema>;\n\nexport const ExecutionRunDlqMessageSchema = ExecutionRunScenarioMessageSchema.extend({\n workerId: z.string().trim().min(1).max(255),\n consumerGroupId: z.string().trim().min(1).max(255),\n eventId: EntityIdSchema.optional(),\n deliveryAttempts: z.number().int().min(1),\n reason: ExecutionRunDlqReasonSchema,\n message: z.string().trim().min(1).max(4000),\n failure: ExecutionScenarioDeliveryFailureSchema.optional(),\n}).strict();\nexport type ExecutionRunDlqMessage = z.infer<typeof ExecutionRunDlqMessageSchema>;\n\nexport const ExecutionScheduleDlqReasonSchema = z.enum([\"ScheduleTriggerAttemptsExceeded\"]);\nexport type ExecutionScheduleDlqReason = z.infer<typeof ExecutionScheduleDlqReasonSchema>;\n\nexport const ExecutionScheduleDlqMessageSchema = z\n .object({\n scheduledJobId: EntityIdSchema,\n executionId: EntityIdSchema,\n projectId: EntityIdSchema,\n name: z.string().trim().min(1).max(120).optional(),\n cronExpression: z.string().trim().min(1).max(255),\n timezone: z.string().trim().min(1).max(100),\n nextFireTime: z.string().datetime(),\n runtimeConfig: RuntimeConfigSchema,\n scheduledBy: EntityIdSchema,\n triggerFailureAttempts: z.number().int().min(1),\n reason: ExecutionScheduleDlqReasonSchema,\n message: z.string().trim().min(1).max(4000),\n failure: ScheduleTriggerFailureSchema,\n })\n .strict();\nexport type ExecutionScheduleDlqMessage = z.infer<typeof ExecutionScheduleDlqMessageSchema>;\n\nexport const ExecutionProgressStageStatusSchema = z.enum([\"Queued\", \"Running\", \"Completed\"]);\nexport type ExecutionProgressStageStatus = z.infer<typeof ExecutionProgressStageStatusSchema>;\n\nexport const ExecutionProgressScenarioStatusSchema = z.enum([\n \"Queued\",\n \"Running\",\n \"Passed\",\n \"Failed\",\n \"Error\",\n]);\nexport type ExecutionProgressScenarioStatus = z.infer<typeof ExecutionProgressScenarioStatusSchema>;\n\nexport const ExecutionProgressScenarioSchema = z\n .object({\n scenarioId: EntityIdSchema,\n isBlocking: z.boolean(),\n status: ExecutionProgressScenarioStatusSchema,\n })\n .strict();\nexport type ExecutionProgressScenario = z.infer<typeof ExecutionProgressScenarioSchema>;\n\nexport const ExecutionProgressStageSchema = z\n .object({\n stageIndex: z.number().int().min(0),\n threads: z.number().int().min(1),\n totalScenarios: z.number().int().min(0),\n testsPassed: z.number().int().min(0),\n testsFailed: z.number().int().min(0),\n pendingScenarios: z.number().int().min(0),\n inFlightCount: z.number().int().min(0),\n status: ExecutionProgressStageStatusSchema,\n scenarios: z.array(ExecutionProgressScenarioSchema),\n })\n .strict();\nexport type ExecutionProgressStage = z.infer<typeof ExecutionProgressStageSchema>;\n\nexport const ExecutionProgressInstanceSchema = z\n .object({\n executionInstanceId: EntityIdSchema,\n executionId: EntityIdSchema,\n projectId: EntityIdSchema,\n reportId: EntityIdSchema,\n trigger: ExecutionTriggerSchema,\n startedAt: z.date(),\n completedAt: z.date().nullable(),\n status: ExecutionInstanceStatusSchema,\n result: ExecutionInstanceResultSchema,\n lastUpdateMessage: z.string().trim().min(1).max(4000),\n runningStageIndex: z.number().int().min(0),\n runtimeConfig: RuntimeConfigSchema,\n stages: z.array(ExecutionProgressStageSchema),\n })\n .strict();\nexport type ExecutionProgressInstance = z.infer<typeof ExecutionProgressInstanceSchema>;\n\nexport const ExecutionProgressSnapshotEventSchema = z\n .object({\n instances: z.array(ExecutionProgressInstanceSchema),\n })\n .strict();\nexport type ExecutionProgressSnapshotEvent = z.infer<typeof ExecutionProgressSnapshotEventSchema>;\n\nexport const ExecutionProgressUpdateEventSchema = z.discriminatedUnion(\"type\", [\n z\n .object({\n type: z.literal(\"upsert\"),\n instance: ExecutionProgressInstanceSchema,\n })\n .strict(),\n z\n .object({\n type: z.literal(\"remove\"),\n executionInstanceId: EntityIdSchema,\n instance: ExecutionProgressInstanceSchema.optional(),\n closeAfterMs: z.number().int().min(1).optional(),\n })\n .strict(),\n]);\nexport type ExecutionProgressUpdateEvent = z.infer<typeof ExecutionProgressUpdateEventSchema>;\n\nexport const ExecutionScheduleUpdateEventSchema = z\n .object({\n scheduledJobId: EntityIdSchema,\n executionId: EntityIdSchema,\n projectId: EntityIdSchema,\n nextFireTime: z.date().optional(),\n lastFiredAt: z.date().nullable().optional(),\n status: ScheduledJobStatusSchema.optional(),\n lastRun: ScheduledJobLastRunSchema.optional(),\n })\n .strict();\nexport type ExecutionScheduleUpdateEvent = z.infer<typeof ExecutionScheduleUpdateEventSchema>;\n","import { z } from \"zod\";\nimport { EntityIdSchema } from \"../base.schema\";\n\nconst BaseIntegrationSchema = z.object({\n _id: EntityIdSchema,\n projectId: EntityIdSchema,\n accessToken: z.string().min(1), // stored encrypted\n refreshToken: z.string().min(1).optional(), // stored encrypted, not all providers use it\n tokenExpiresAt: z.date().optional(), // for proactive refresh before expiry\n createdAt: z.date(),\n updatedAt: z.date(),\n});\n\nexport const IntegrationSchema = z.discriminatedUnion(\"provider\", [\n BaseIntegrationSchema.extend({\n provider: z.literal(\"JIRA\"),\n cloudId: z.string().min(1),\n workspaceName: z.string().min(1),\n siteUrl: z.url(),\n }),\n BaseIntegrationSchema.extend({\n provider: z.literal(\"SLACK\"),\n workspaceId: z.string().min(1),\n workspaceName: z.string().min(1),\n botUserId: z.string().min(1),\n scope: z.string().min(1), // the bot token scopes Slack granted (e.g. \"chat:write,channels:read\")\n userAccessToken: z.string().min(1).optional(), // to list private channels\n userScope: z.string().min(1).optional(),\n authedUserId: z.string().min(1).optional(),\n }),\n BaseIntegrationSchema.extend({\n provider: z.literal(\"GIT\"),\n username: z.string().min(1),\n gitRepoUrl: z.url(),\n selectedBranch: z.string().min(1).optional(),\n lastCommitTimeByBranch: z\n .array(\n z.object({\n branch: z.string().min(1),\n committedAt: z.date(),\n }),\n )\n .optional(),\n }),\n]);\n\nexport type Integration = z.infer<typeof IntegrationSchema>;\nexport type JiraIntegration = Extract<Integration, { provider: \"JIRA\" }>;\nexport type SlackIntegration = Extract<Integration, { provider: \"SLACK\" }>;\nexport type GitIntegration = Extract<Integration, { provider: \"GIT\" }>;\n","export const RCA_BUNDLE_SCHEMA_VERSION = 1 as const;\nexport const RCA_BUNDLE_TOKEN_BUDGET = 20_000 as const;\nexport const RCA_TOKEN_ESTIMATE_RATIO = 0.25 as const;\n\nexport const RCA_PRIOR_EXEC_QUERY_BUDGET_MS = 100 as const;\nexport const RCA_PRIOR_EXEC_LIMIT = 5 as const;\nexport const RCA_PRIOR_REPLAY_OUTCOMES_LIMIT = 10 as const;\n\nexport const RCA_PRIOR_MATCHING_STEP_LOCATOR_LIMIT = 3 as const;\nexport const RCA_PRIOR_MATCHING_STEP_ERROR_CHAR_LIMIT = 1000 as const;\n\nexport const RCA_LOCATOR_CANDIDATE_LIMIT = 3 as const;\nexport const RCA_ERROR_MESSAGE_CHAR_LIMIT = 1000 as const;\nexport const RCA_INLINE_SNAPSHOT_CHAR_LIMIT = 50_000 as const;\n\nexport const RCA_V1_RESERVED_FUTURE_KIND = \"RCA_V1_RESERVED_FUTURE_KIND\" as const;\nexport const RCA_BUNDLE_VERSION_MISMATCH = \"RCA_BUNDLE_VERSION_MISMATCH\" as const;\n","import { z } from \"zod\";\n\nexport const PriorExecutionScenarioVersionMatchSchema = z.enum([\"exact\", \"prior\", \"newer\"]);\n\nexport type PriorExecutionScenarioVersionMatch = z.infer<\n typeof PriorExecutionScenarioVersionMatchSchema\n>;\n\nexport const PriorExecutionResultSchema = z.enum([\"Passed\", \"Failed\", \"Error\", \"Aborted\"]);\n\nexport const PriorExecutionMatchingStepResultSchema = z.enum([\"success\", \"failure\", \"skipped\"]);\n\nexport const PriorExecutionMatchingStepSchema = z\n .object({\n stepId: z.string(),\n result: PriorExecutionMatchingStepResultSchema,\n errorMessage: z.string().optional(),\n attemptedLocators: z.array(z.string()).optional(),\n fingerprintSummary: z.string().optional(),\n })\n .strict();\n\nexport type PriorExecutionMatchingStep = z.infer<typeof PriorExecutionMatchingStepSchema>;\n\nexport const PriorExecutionSummarySchema = z\n .object({\n reportId: z.string(),\n testCaseId: z.string(),\n scenarioVersion: z.number().int().nonnegative(),\n scenarioVersionMatch: PriorExecutionScenarioVersionMatchSchema,\n environmentName: z.string().optional(),\n baseUrlHost: z.string().optional(),\n result: PriorExecutionResultSchema,\n startedAtIso: z.string().datetime(),\n attemptNumber: z.number().int().nonnegative(),\n matchingStep: PriorExecutionMatchingStepSchema.optional(),\n })\n .strict();\n\nexport type PriorExecutionSummary = z.infer<typeof PriorExecutionSummarySchema>;\n","import { z } from \"zod\";\n\nexport const RcaHealLocatorReplacementSchema = z\n .object({\n kind: z.literal(\"locatorReplacement\"),\n stepId: z.string(),\n newLocator: z.string(),\n rationale: z.string(),\n })\n .strict();\n\nexport const RcaHealWaitStrategySchema = z\n .object({\n kind: z.literal(\"waitStrategy\"),\n stepId: z.string(),\n waitForSelector: z.string().optional(),\n waitForLoadState: z.enum([\"load\", \"domcontentloaded\", \"networkidle\"]).optional(),\n timeoutMs: z.number().int().positive().optional(),\n rationale: z.string(),\n })\n .strict();\n\nexport const RcaHealRetryPolicySchema = z\n .object({\n kind: z.literal(\"retryPolicy\"),\n stepId: z.string(),\n maxAttempts: z.number().int().positive(),\n backoffMs: z.number().int().nonnegative(),\n rationale: z.string(),\n })\n .strict();\n\nexport const RcaHealProposalSchema = z.discriminatedUnion(\"kind\", [\n RcaHealLocatorReplacementSchema,\n RcaHealWaitStrategySchema,\n RcaHealRetryPolicySchema,\n]);\n\nexport type RcaHealProposal = z.infer<typeof RcaHealProposalSchema>;\n","import { z } from \"zod\";\nimport {\n FailureContextSchema,\n StepReplayTelemetrySchema,\n ReplayLocatorCandidateSchema,\n FailedCommandUrlContextSchema,\n} from \"../selector/replay-context.schema\";\nimport { GetStepTraceExcerptResultSchema } from \"../ai-chat/types\";\nimport { PriorExecutionSummarySchema } from \"./prior-execution.schema\";\nimport { RCA_BUNDLE_SCHEMA_VERSION } from \"./constants\";\n\nexport const RcaInvocationKindSchema = z.enum([\"recordingReplay\", \"executionReplay\"]);\n\nexport type RcaInvocationKind = z.infer<typeof RcaInvocationKindSchema>;\n\nexport const RcaPriorRecordingReplayOutcomeSchema = z\n .object({\n ordinal: z.number().int().nonnegative(),\n result: z.enum([\"success\", \"failure\"]),\n atIso: z.string().datetime(),\n })\n .strict();\n\nexport type RcaPriorRecordingReplayOutcome = z.infer<typeof RcaPriorRecordingReplayOutcomeSchema>;\n\nexport const RcaUserPinnedElementSchema = z\n .object({\n fingerprint: z.string(),\n locatorHints: z.array(z.string()),\n })\n .strict();\n\nexport type RcaUserPinnedElement = z.infer<typeof RcaUserPinnedElementSchema>;\n\nexport const RcaInvocationSchema = z\n .object({\n kind: RcaInvocationKindSchema,\n replayOrdinal: z.number().int().nonnegative(),\n isFirstReplayAfterStepCreation: z.boolean(),\n priorRecordingReplayOutcomes: z.array(RcaPriorRecordingReplayOutcomeSchema),\n userPinnedElement: RcaUserPinnedElementSchema.optional(),\n })\n .strict();\n\nexport type RcaInvocation = z.infer<typeof RcaInvocationSchema>;\n\nexport const RcaFailureBundleV1Schema = z\n .object({\n schemaVersion: z.literal(RCA_BUNDLE_SCHEMA_VERSION),\n invocation: RcaInvocationSchema,\n failure: FailureContextSchema,\n telemetry: StepReplayTelemetrySchema.optional(),\n pageSnapshotInline: z.string().optional(),\n pageScreenshotInline: z.string().optional(),\n attemptedLocatorCandidates: z.array(ReplayLocatorCandidateSchema),\n recordedFingerprint: z.string().optional(),\n errorMessage: z.string(),\n traceExcerpt: z.lazy(() => GetStepTraceExcerptResultSchema).optional(),\n priorExecutions: z.array(PriorExecutionSummarySchema).optional(),\n commandUrlContext: FailedCommandUrlContextSchema.optional(),\n })\n .strict();\n\nexport type RcaFailureBundleV1 = z.infer<typeof RcaFailureBundleV1Schema>;\n","import type { RepairProposal, RepairActionSpec } from \"./step-repair.schema\";\nimport type { Command } from \"../command/command.schema\";\n\nexport function buildTargetSignature(target: {\n tagName?: string | null;\n role?: string | null;\n accessibleName?: string | null;\n testId?: string | null;\n}): string {\n const parts = [\n target.tagName ?? \"*\",\n target.role ?? \"*\",\n target.accessibleName ?? \"*\",\n target.testId ?? \"*\",\n ];\n return `target:${parts.join(\"|\")}`;\n}\n\nexport function buildCommandSignature(command: Command): string {\n if (command.type === \"element.action\") {\n const data = command.data as { type: string; value?: unknown };\n const valueStr = data.value !== undefined ? String(data.value) : \"*\";\n return `cmd:element.action|${data.type}|${valueStr}`;\n }\n if (command.type === \"page.action\") {\n const data = command.data as { type: string };\n return `cmd:page.action|${data.type}`;\n }\n if (command.type === \"custom\") {\n return `cmd:custom|${command.code.length}`;\n }\n return `cmd:${command.type}`;\n}\n\nexport function buildProposalSignature(proposal: RepairProposal): string {\n const action = proposal.actionSpec;\n const actionParts: string[] = [action.action];\n if (\"value\" in action) actionParts.push(String(action.value));\n if (\"checked\" in action) actionParts.push(String(action.checked));\n\n const fp = proposal.targetCandidate.fingerprint;\n const targetParts = [fp.tagName ?? \"*\", fp.role ?? \"*\", fp.accessibleName ?? \"*\"];\n\n return `proposal:${actionParts.join(\"|\")}@${targetParts.join(\"|\")}#${proposal.scope}#${proposal.representation}`;\n}\n","import { z } from \"zod\";\n\nexport const RecoveryCorrelationContextSchema = z\n .object({\n recoveryAttemptId: z.string().min(1),\n sessionId: z.string().min(1),\n projectId: z.string().min(1),\n scenarioId: z.string().min(1),\n scenarioVersion: z.string().min(1),\n stepId: z.string().min(1),\n commandId: z.string().min(1),\n failedCommandIndex: z.number().int().nonnegative(),\n attemptNumber: z.number().int().nonnegative(),\n scope: z.enum([\"single-command\", \"whole-step\"]),\n representation: z.enum([\"native\", \"custom\"]),\n model: z.string().min(1),\n promptId: z.string().min(1),\n promptVersion: z.string().min(1),\n })\n .strict();\n\nexport type RecoveryCorrelationContext = z.infer<typeof RecoveryCorrelationContextSchema>;\n","import { z } from \"zod\";\nimport { EntityIdSchema } from \"../base.schema\";\n\nexport const ExecutionCompletedEventStatusSchema = z.enum([\"successful\", \"failed\", \"cancelled\"]);\nexport type ExecutionCompletedEventStatus = z.infer<typeof ExecutionCompletedEventStatusSchema>;\n\nexport const ExecutionCompletedEventResultSchema = z\n .enum([\"Passed\", \"Failed\", \"Error\", \"Aborted\"])\n .nullable();\nexport type ExecutionCompletedEventResult = z.infer<typeof ExecutionCompletedEventResultSchema>;\n\nexport const ExecutionCompletedEventStatsSchema = z\n .object({\n totalScenarios: z.number().int().min(0),\n scenariosPassed: z.number().int().min(0),\n scenariosFailed: z.number().int().min(0),\n })\n .strict();\nexport type ExecutionCompletedEventStats = z.infer<typeof ExecutionCompletedEventStatsSchema>;\n\nexport const ExecutionCompletedEventSchema = z\n .object({\n version: z.literal(2),\n eventId: EntityIdSchema,\n occurredAt: z.string().datetime(),\n projectId: EntityIdSchema,\n executionId: EntityIdSchema,\n executionInstanceId: EntityIdSchema,\n executionName: z.string().min(1).max(240),\n status: ExecutionCompletedEventStatusSchema,\n result: ExecutionCompletedEventResultSchema,\n reportId: EntityIdSchema,\n startedBy: z\n .string()\n .min(1)\n .max(255)\n .nullish()\n .transform((v) => v ?? undefined),\n triggerMode: z.enum([\"Manual\", \"Schedule\"]),\n envId: EntityIdSchema,\n stats: ExecutionCompletedEventStatsSchema,\n })\n .strict();\nexport type ExecutionCompletedEvent = z.infer<typeof ExecutionCompletedEventSchema>;\n","import { z } from \"zod\";\nimport { EntityIdSchema } from \"../base.schema\";\n\nexport const NotificationTriggerSchema = z.enum([\"successful\", \"failed\", \"both\"]);\nexport type NotificationTrigger = z.infer<typeof NotificationTriggerSchema>;\n\nexport const NotificationScopeModeSchema = z.enum([\"all\", \"exclude\"]);\nexport type NotificationScopeMode = z.infer<typeof NotificationScopeModeSchema>;\n\nexport const NotificationScopeSchema = z\n .object({\n mode: NotificationScopeModeSchema,\n executionIds: z.array(EntityIdSchema).optional(),\n })\n .strict();\nexport type NotificationScope = z.infer<typeof NotificationScopeSchema>;\n\nexport const NotificationDestinationSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"slack\"),\n channelId: z.string().min(1).max(255),\n // false = destination data preserved but notifications suppressed\n enabled: z.boolean().default(true),\n }),\n z.object({\n type: z.literal(\"email\"),\n addresses: z.array(z.email()).min(1),\n // false = destination data preserved but notifications suppressed\n enabled: z.boolean().default(true),\n }),\n]);\nexport type NotificationDestination = z.infer<typeof NotificationDestinationSchema>;\n\nexport const NotificationRuleSchema = z\n .object({\n _id: EntityIdSchema,\n projectId: EntityIdSchema,\n name: z.string().trim().min(1).max(120),\n trigger: NotificationTriggerSchema,\n scope: NotificationScopeSchema,\n destinations: z.array(NotificationDestinationSchema),\n enabled: z.boolean(),\n createdBy: EntityIdSchema,\n createdAt: z.date(),\n updatedAt: z.date(),\n })\n .strict();\nexport type NotificationRule = z.infer<typeof NotificationRuleSchema>;\n\nexport function matchesNotificationTrigger(\n trigger: NotificationTrigger,\n status: \"successful\" | \"failed\" | \"cancelled\",\n): boolean {\n if (trigger === \"both\") return true;\n if (trigger === \"failed\") return status === \"failed\" || status === \"cancelled\";\n return status === trigger;\n}\n","import { z } from \"zod\";\nimport { EntityIdSchema } from \"../base.schema\";\n\nexport const NotificationDeliveryStatusSchema = z.enum([\"delivered\", \"failed\"]);\nexport type NotificationDeliveryStatus = z.infer<typeof NotificationDeliveryStatusSchema>;\n\n// eventId + ruleId + channelType + destination --> the four-field idempotency key\nexport const NotificationDeliverySchema = z\n .object({\n _id: EntityIdSchema,\n eventId: EntityIdSchema,\n ruleId: EntityIdSchema,\n projectId: EntityIdSchema,\n channelType: z.enum([\"slack\", \"email\"]),\n destination: z.string().min(1).max(255),\n status: NotificationDeliveryStatusSchema,\n error: z.string().max(2000).optional(),\n attemptedAt: z.date(),\n })\n .strict();\nexport type NotificationDelivery = z.infer<typeof NotificationDeliverySchema>;\n","import { z } from \"zod\";\n\nimport { EntityIdSchema } from \"../base.schema.js\";\n\nexport const NotificationEventProcessingStatusSchema = z.enum([\n \"processing\",\n \"completed\",\n \"failed\",\n]);\nexport type NotificationEventProcessingStatus = z.infer<\n typeof NotificationEventProcessingStatusSchema\n>;\n\nexport const NotificationEventProcessingSchema = z\n .object({\n _id: EntityIdSchema,\n eventId: EntityIdSchema,\n projectId: EntityIdSchema,\n processingStatus: NotificationEventProcessingStatusSchema,\n attemptCount: z.number().int().min(1),\n lastError: z.string().max(2000).optional(),\n })\n .strict();\n\nexport type NotificationEventProcessing = z.infer<typeof NotificationEventProcessingSchema>;\n","import { createWriteStream, existsSync } from \"node:fs\";\nimport { mkdir, unlink } from \"node:fs/promises\";\nimport os from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport type { Page } from \"playwright\";\n\nimport { VERIFY_DOWNLOAD_MAX_BYTES } from \"@blinq/schemas\";\n\nimport type { DownloadStore } from \"./download-store\";\n\n/**\n * Shared minimal logger surface — both Tester and Recorder use slightly\n * different observability shapes, but every implementation has `.log`,\n * `.warn`, `.error`. We only need those three here, so keep this loose.\n */\nexport interface DownloadInterceptorLogger {\n log: (message: string, payload?: Record<string, unknown>) => void;\n warn: (message: string, payload?: Record<string, unknown>) => void;\n error: (message: string, payload?: Record<string, unknown>) => void;\n}\n\nexport interface DownloadInterceptorOptions {\n /** Session-scoped log of captured downloads. Required. */\n store: DownloadStore;\n /**\n * Resolves the on-disk save path from the browser-suggested filename.\n * Owned by the caller so the worker decides FS layout in one place.\n */\n getTargetPath: (fileName: string) => string;\n logger: DownloadInterceptorLogger;\n}\n\n/**\n * Tracks which pages already have the listener attached so we never\n * double-hook. Tester registers a `browserContext.on(\"page\")` handler and so\n * does Recorder — both fire for the same page event, and if both called this\n * helper we'd process every download twice. WeakSet so closed pages drop out\n * naturally.\n */\nconst hookedPages = new WeakSet<Page>();\n\n/**\n * Reduce a user-supplied filename to a safe leaf name we can put inside the\n * downloads directory. The filename rides in from server `Content-Disposition`\n * headers (or URL path basename) — both user-influenced — so a value like\n * `../../../etc/passwd` could otherwise walk above the per-run dir and\n * overwrite arbitrary files in the pod.\n */\nexport function safeDownloadFileName(fileName: string): string {\n // basename handles both / and \\ on Linux when given a normalized string;\n // additionally split on \\ for cross-OS safety in case metadata was\n // authored on Windows.\n const stripped = fileName.replaceAll(\"\\\\\", \"/\");\n const leaf = (stripped.split(\"/\").pop() ?? \"\").replace(/[\\x00-\\x1f]/g, \"_\");\n if (!leaf || leaf === \".\" || leaf === \"..\") {\n return `download-${Date.now()}`;\n }\n return leaf;\n}\n\n/**\n * Build a `getDownloadTargetPath` function with sensible defaults: prefer\n * `/dev/shm` (RAM-backed tmpfs, fast) when available, fall back to\n * `os.tmpdir()`. Both the worker and the execution-planner consume this so\n * neither has to reinvent FS layout.\n *\n * Override `tmpRoot` to pin a specific directory in tests.\n */\nexport function createDefaultDownloadTargetPathResolver(\n options: {\n tmpRoot?: string;\n } = {},\n): (fileName: string) => string {\n const tmpRoot = options.tmpRoot ?? (existsSync(\"/dev/shm\") ? \"/dev/shm\" : os.tmpdir());\n const downloadsDir = join(tmpRoot, \"blinq-downloads\");\n return (fileName) => join(downloadsDir, safeDownloadFileName(fileName));\n}\n\n/**\n * Hook `page.on(\"download\")` on the given page. Streams the bytes to disk\n * with the 10 MB per-file cap, records each download in `store`, and writes\n * to a path resolved by `getTargetPath`.\n *\n * Safe to call multiple times for the same page — second and subsequent\n * calls are no-ops.\n *\n * Lives outside both Recorder and Tester so any browser-driving entry point\n * (recorder-mode, planner-run, future headless runners) can wire downloads\n * in one line.\n */\nexport function attachDownloadInterceptor(page: Page, options: DownloadInterceptorOptions): void {\n if (hookedPages.has(page)) return;\n hookedPages.add(page);\n\n const { store, getTargetPath, logger } = options;\n\n page.on(\"download\", async (download) => {\n const fileName = download.suggestedFilename();\n const url = (() => {\n try {\n return download.url();\n } catch {\n return undefined;\n }\n })();\n const targetPath = getTargetPath(fileName);\n\n let bytes = 0;\n let writeStream: ReturnType<typeof createWriteStream> | null = null;\n try {\n await mkdir(dirname(targetPath), { recursive: true });\n const stream = await download.createReadStream();\n if (!stream) {\n // Playwright returns null if the download failed before we got\n // here. Nothing useful to record — log + move on.\n logger.warn(\"Download produced no readable stream\", { fileName });\n return;\n }\n\n writeStream = createWriteStream(targetPath);\n\n await new Promise<void>((resolve, reject) => {\n let settled = false;\n const settle = (fn: () => void) => {\n if (settled) return;\n settled = true;\n fn();\n };\n\n stream.on(\"data\", (chunk: Buffer) => {\n bytes += chunk.length;\n if (bytes > VERIFY_DOWNLOAD_MAX_BYTES) {\n settle(() => {\n stream.destroy();\n writeStream?.destroy();\n // Best-effort cleanup of the partial file + Playwright's\n // internal copy. The store records the rejection so the\n // verify executor can surface \"rejected for size\".\n Promise.all([\n unlink(targetPath).catch(() => {}),\n download.cancel().catch(() => {}),\n download.delete().catch(() => {}),\n ]).then(() => {\n store.record({\n fileName,\n url,\n recordedAt: Date.now(),\n status: {\n kind: \"rejected_too_large\",\n observedBytes: bytes,\n capBytes: VERIFY_DOWNLOAD_MAX_BYTES,\n },\n });\n logger.warn(\"Download rejected: exceeded size cap\", {\n fileName,\n observedBytes: bytes,\n capBytes: VERIFY_DOWNLOAD_MAX_BYTES,\n });\n resolve();\n });\n });\n }\n });\n\n stream.on(\"error\", (err) => {\n settle(() => {\n writeStream?.destroy();\n reject(err);\n });\n });\n\n stream.on(\"end\", () => {\n settle(() => {\n writeStream?.end(() => {\n store.record({\n fileName,\n url,\n recordedAt: Date.now(),\n status: { kind: \"success\", localPath: targetPath, size: bytes },\n });\n logger.log(\"Download saved\", { fileName, localPath: targetPath, size: bytes });\n resolve();\n });\n });\n });\n\n stream.pipe(writeStream!, { end: false });\n });\n } catch (err) {\n logger.error(\"Failed to handle download\", {\n fileName,\n error: err instanceof Error ? err.message : String(err),\n });\n try {\n writeStream?.destroy();\n await unlink(targetPath).catch(() => {});\n } catch {\n /* ignore */\n }\n }\n });\n}\n","import type {\n Command,\n ResolutionContext,\n RecoveryAttemptId,\n HealingPhase,\n UniqueSelector,\n RecoveryDecision as SchemaRecoveryDecision,\n RecoveryArtifact,\n} from \"@blinq/schemas\";\nexport type RecoveryDecision = SchemaRecoveryDecision;\n\nexport type RecoveryResult = {\n decision: RecoveryDecision;\n artifact: RecoveryArtifact | null;\n};\n\nexport type FailureContext = {\n failedCommand: Command;\n stepDefinitionId: string;\n stepId?: string;\n stepIntent?: string;\n failedCommandIndex?: number;\n stepCommands?: Command[];\n stepParameters?: Record<string, string>;\n resolutionContext?: ResolutionContext;\n attemptedSelectors: UniqueSelector[];\n originalError: Error;\n livePageUrl: string;\n recordedPageUrlContext?: string;\n expectedPageUrlContext?: string;\n pageSnapshotRef?: string;\n abortSignal?: AbortSignal;\n};\n\nexport type CommandPatch = {\n uniqueSelector: UniqueSelector;\n summary: string;\n};\n\nexport type UserFacingMessages = {\n analyzing: string;\n trying_fix: string;\n checking_fix: string;\n fixed: string;\n failed: string;\n};\n\nexport const RECOVERY_USER_FACING_MESSAGES: UserFacingMessages = {\n analyzing: \"Analyzing failure\",\n trying_fix: \"Trying a fix\",\n checking_fix: \"Checking the fix\",\n fixed: \"Fixed automatically\",\n failed: \"Automatic fix did not pass\",\n};\n\nexport interface RecoveryController {\n analyzeAndPropose(context: FailureContext): Promise<RecoveryResult>;\n}\n","import type { RecoveryController, RecoveryResult, FailureContext } from \"./types\";\nimport { RECOVERY_USER_FACING_MESSAGES } from \"./types\";\n\nexport class NoOpRecoveryController implements RecoveryController {\n async analyzeAndPropose(_context: FailureContext): Promise<RecoveryResult> {\n return {\n decision: {\n kind: \"ineligible\",\n eligible: false,\n reason: \"ineligible_unsupported_command\",\n recoveryAttemptId: crypto.randomUUID(),\n evidenceSignalNames: [],\n userFacingMessages: RECOVERY_USER_FACING_MESSAGES,\n },\n artifact: null,\n };\n }\n}\n","import crypto from 'node:crypto';\n\n// These values should NEVER change. The values are precisely for\n// generating ULIDs.\nconst B32_CHARACTERS = \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\";\nconst ENCODING = \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\"; // Crockford's Base32\nconst ENCODING_LEN = 32; // from ENCODING.length;\nconst MAX_ULID = \"7ZZZZZZZZZZZZZZZZZZZZZZZZZ\";\nconst MIN_ULID = \"00000000000000000000000000\";\nconst RANDOM_LEN = 16;\nconst TIME_LEN = 10;\nconst TIME_MAX = 281474976710655; // from Math.pow(2, 48) - 1;\nconst ULID_REGEX = /^[0-7][0-9a-hjkmnp-tv-zA-HJKMNP-TV-Z]{25}$/;\nconst UUID_REGEX = /^[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}$/;\n\nvar ULIDErrorCode;\n(function (ULIDErrorCode) {\n ULIDErrorCode[\"Base32IncorrectEncoding\"] = \"B32_ENC_INVALID\";\n ULIDErrorCode[\"DecodeTimeInvalidCharacter\"] = \"DEC_TIME_CHAR\";\n ULIDErrorCode[\"DecodeTimeValueMalformed\"] = \"DEC_TIME_MALFORMED\";\n ULIDErrorCode[\"EncodeTimeNegative\"] = \"ENC_TIME_NEG\";\n ULIDErrorCode[\"EncodeTimeSizeExceeded\"] = \"ENC_TIME_SIZE_EXCEED\";\n ULIDErrorCode[\"EncodeTimeValueMalformed\"] = \"ENC_TIME_MALFORMED\";\n ULIDErrorCode[\"PRNGDetectFailure\"] = \"PRNG_DETECT\";\n ULIDErrorCode[\"ULIDInvalid\"] = \"ULID_INVALID\";\n ULIDErrorCode[\"Unexpected\"] = \"UNEXPECTED\";\n ULIDErrorCode[\"UUIDInvalid\"] = \"UUID_INVALID\";\n})(ULIDErrorCode || (ULIDErrorCode = {}));\nclass ULIDError extends Error {\n constructor(errorCode, message) {\n super(`${message} (${errorCode})`);\n this.name = \"ULIDError\";\n this.code = errorCode;\n }\n}\n\nfunction randomChar(prng) {\n // Currently PRNGs generate fractions from 0 to _less than_ 1, so no \"%\" is necessary.\n // However, just in case a future PRNG can generate 1,\n // we are applying \"% ENCODING LEN\" to wrap back to the first character\n const randomPosition = Math.floor(prng() * ENCODING_LEN) % ENCODING_LEN;\n return ENCODING.charAt(randomPosition);\n}\nfunction replaceCharAt(str, index, char) {\n if (index > str.length - 1) {\n return str;\n }\n return str.substr(0, index) + char + str.substr(index + 1);\n}\n\n// Code from https://github.com/devbanana/crockford-base32/blob/develop/src/index.ts\nfunction crockfordEncode(input) {\n const output = [];\n let bitsRead = 0;\n let buffer = 0;\n const reversedInput = new Uint8Array(input.slice().reverse());\n for (const byte of reversedInput) {\n buffer |= byte << bitsRead;\n bitsRead += 8;\n while (bitsRead >= 5) {\n output.unshift(buffer & 0x1f);\n buffer >>>= 5;\n bitsRead -= 5;\n }\n }\n if (bitsRead > 0) {\n output.unshift(buffer & 0x1f);\n }\n return output.map(byte => B32_CHARACTERS.charAt(byte)).join(\"\");\n}\nfunction crockfordDecode(input) {\n const sanitizedInput = input.toUpperCase().split(\"\").reverse().join(\"\");\n const output = [];\n let bitsRead = 0;\n let buffer = 0;\n for (const character of sanitizedInput) {\n const byte = B32_CHARACTERS.indexOf(character);\n if (byte === -1) {\n throw new Error(`Invalid base 32 character found in string: ${character}`);\n }\n buffer |= byte << bitsRead;\n bitsRead += 5;\n while (bitsRead >= 8) {\n output.unshift(buffer & 0xff);\n buffer >>>= 8;\n bitsRead -= 8;\n }\n }\n if (bitsRead >= 5 || buffer > 0) {\n output.unshift(buffer & 0xff);\n }\n return new Uint8Array(output);\n}\n/**\n * Fix a ULID's Base32 encoding -\n * i and l (case-insensitive) will be treated as 1 and o (case-insensitive) will be treated as 0.\n * hyphens are ignored during decoding.\n * @param id The ULID\n * @returns The cleaned up ULID\n */\nfunction fixULIDBase32(id) {\n return id.replace(/i/gi, \"1\").replace(/l/gi, \"1\").replace(/o/gi, \"0\").replace(/-/g, \"\");\n}\nfunction incrementBase32(str) {\n let done = undefined, index = str.length, char, charIndex, output = str;\n const maxCharIndex = ENCODING_LEN - 1;\n while (!done && index-- >= 0) {\n char = output[index];\n charIndex = ENCODING.indexOf(char);\n if (charIndex === -1) {\n throw new ULIDError(ULIDErrorCode.Base32IncorrectEncoding, \"Incorrectly encoded string\");\n }\n if (charIndex === maxCharIndex) {\n output = replaceCharAt(output, index, ENCODING[0]);\n continue;\n }\n done = replaceCharAt(output, index, ENCODING[charIndex + 1]);\n }\n if (typeof done === \"string\") {\n return done;\n }\n throw new ULIDError(ULIDErrorCode.Base32IncorrectEncoding, \"Failed incrementing string\");\n}\n\n/**\n * Decode time from a ULID\n * @param id The ULID\n * @returns The decoded timestamp\n */\nfunction decodeTime(id) {\n if (id.length !== TIME_LEN + RANDOM_LEN) {\n throw new ULIDError(ULIDErrorCode.DecodeTimeValueMalformed, \"Malformed ULID\");\n }\n const time = id\n .substr(0, TIME_LEN)\n .toUpperCase()\n .split(\"\")\n .reverse()\n .reduce((carry, char, index) => {\n const encodingIndex = ENCODING.indexOf(char);\n if (encodingIndex === -1) {\n throw new ULIDError(ULIDErrorCode.DecodeTimeInvalidCharacter, `Time decode error: Invalid character: ${char}`);\n }\n return (carry += encodingIndex * Math.pow(ENCODING_LEN, index));\n }, 0);\n if (time > TIME_MAX) {\n throw new ULIDError(ULIDErrorCode.DecodeTimeValueMalformed, `Malformed ULID: timestamp too large: ${time}`);\n }\n return time;\n}\n/**\n * Detect the best PRNG (pseudo-random number generator)\n * @param root The root to check from (global/window)\n * @returns The PRNG function\n */\nfunction detectPRNG(root) {\n const rootLookup = detectRoot();\n const globalCrypto = (rootLookup && (rootLookup.crypto || rootLookup.msCrypto)) ||\n (typeof crypto !== \"undefined\" ? crypto : null);\n if (typeof globalCrypto?.getRandomValues === \"function\") {\n return () => {\n const buffer = new Uint8Array(1);\n globalCrypto.getRandomValues(buffer);\n return buffer[0] / 0xff;\n };\n }\n else if (typeof globalCrypto?.randomBytes === \"function\") {\n return () => globalCrypto.randomBytes(1).readUInt8() / 0xff;\n }\n else if (crypto?.randomBytes) {\n return () => crypto.randomBytes(1).readUInt8() / 0xff;\n }\n throw new ULIDError(ULIDErrorCode.PRNGDetectFailure, \"Failed to find a reliable PRNG\");\n}\nfunction detectRoot() {\n if (inWebWorker())\n return self;\n if (typeof window !== \"undefined\") {\n return window;\n }\n if (typeof global !== \"undefined\") {\n return global;\n }\n if (typeof globalThis !== \"undefined\") {\n return globalThis;\n }\n return null;\n}\nfunction encodeRandom(len, prng) {\n let str = \"\";\n for (; len > 0; len--) {\n str = randomChar(prng) + str;\n }\n return str;\n}\n/**\n * Encode the time portion of a ULID\n * @param now The current timestamp\n * @param len Length to generate\n * @returns The encoded time\n */\nfunction encodeTime(now, len = TIME_LEN) {\n if (isNaN(now)) {\n throw new ULIDError(ULIDErrorCode.EncodeTimeValueMalformed, `Time must be a number: ${now}`);\n }\n else if (now > TIME_MAX) {\n throw new ULIDError(ULIDErrorCode.EncodeTimeSizeExceeded, `Cannot encode a time larger than ${TIME_MAX}: ${now}`);\n }\n else if (now < 0) {\n throw new ULIDError(ULIDErrorCode.EncodeTimeNegative, `Time must be positive: ${now}`);\n }\n else if (Number.isInteger(now) === false) {\n throw new ULIDError(ULIDErrorCode.EncodeTimeValueMalformed, `Time must be an integer: ${now}`);\n }\n let mod, str = \"\";\n for (let currentLen = len; currentLen > 0; currentLen--) {\n mod = now % ENCODING_LEN;\n str = ENCODING.charAt(mod) + str;\n now = (now - mod) / ENCODING_LEN;\n }\n return str;\n}\nfunction inWebWorker() {\n // @ts-ignore\n return typeof WorkerGlobalScope !== \"undefined\" && self instanceof WorkerGlobalScope;\n}\n/**\n * Check if a ULID is valid\n * @param id The ULID to test\n * @returns True if valid, false otherwise\n * @example\n * isValid(\"01HNZX8JGFACFA36RBXDHEQN6E\"); // true\n * isValid(\"\"); // false\n */\nfunction isValid(id) {\n return (typeof id === \"string\" &&\n id.length === TIME_LEN + RANDOM_LEN &&\n id\n .toUpperCase()\n .split(\"\")\n .every(char => ENCODING.indexOf(char) !== -1));\n}\n/**\n * Create a ULID factory to generate monotonically-increasing\n * ULIDs\n * @param prng The PRNG to use\n * @returns A ulid factory\n * @example\n * const ulid = monotonicFactory();\n * ulid(); // \"01HNZXD07M5CEN5XA66EMZSRZW\"\n */\nfunction monotonicFactory(prng) {\n const currentPRNG = prng || detectPRNG();\n let lastTime = 0, lastRandom;\n return function _ulid(seedTime) {\n const seed = !seedTime || isNaN(seedTime) ? Date.now() : seedTime;\n if (seed <= lastTime) {\n const incrementedRandom = (lastRandom = incrementBase32(lastRandom));\n return encodeTime(lastTime, TIME_LEN) + incrementedRandom;\n }\n lastTime = seed;\n const newRandom = (lastRandom = encodeRandom(RANDOM_LEN, currentPRNG));\n return encodeTime(seed, TIME_LEN) + newRandom;\n };\n}\n/**\n * Generate a ULID\n * @param seedTime Optional time seed\n * @param prng Optional PRNG function\n * @returns A ULID string\n * @example\n * ulid(); // \"01HNZXD07M5CEN5XA66EMZSRZW\"\n */\nfunction ulid(seedTime, prng) {\n const currentPRNG = prng || detectPRNG();\n const seed = !seedTime || isNaN(seedTime) ? Date.now() : seedTime;\n return encodeTime(seed, TIME_LEN) + encodeRandom(RANDOM_LEN, currentPRNG);\n}\n\n/**\n * Convert a ULID to a UUID\n * @param ulid The ULID to convert\n * @returns A UUID string\n */\nfunction ulidToUUID(ulid) {\n const isValid = ULID_REGEX.test(ulid);\n if (!isValid) {\n throw new ULIDError(ULIDErrorCode.ULIDInvalid, `Invalid ULID: ${ulid}`);\n }\n const uint8Array = crockfordDecode(ulid);\n let uuid = Array.from(uint8Array)\n .map(byte => byte.toString(16).padStart(2, \"0\"))\n .join(\"\");\n uuid =\n uuid.substring(0, 8) +\n \"-\" +\n uuid.substring(8, 12) +\n \"-\" +\n uuid.substring(12, 16) +\n \"-\" +\n uuid.substring(16, 20) +\n \"-\" +\n uuid.substring(20);\n return uuid.toUpperCase();\n}\n/**\n * Convert a UUID to a ULID\n * @param uuid The UUID to convert\n * @returns A ULID string\n */\nfunction uuidToULID(uuid) {\n const isValid = UUID_REGEX.test(uuid);\n if (!isValid) {\n throw new ULIDError(ULIDErrorCode.UUIDInvalid, `Invalid UUID: ${uuid}`);\n }\n const bytes = uuid.replace(/-/g, \"\").match(/.{1,2}/g);\n if (!bytes) {\n throw new ULIDError(ULIDErrorCode.Unexpected, `Failed parsing UUID bytes: ${uuid}`);\n }\n const uint8Array = new Uint8Array(bytes.map(byte => parseInt(byte, 16)));\n return crockfordEncode(uint8Array);\n}\n\nexport { MAX_ULID, MIN_ULID, TIME_LEN, TIME_MAX, ULIDError, ULIDErrorCode, decodeTime, encodeTime, fixULIDBase32, incrementBase32, isValid, monotonicFactory, ulid, ulidToUUID, uuidToULID };\n","import type { Command } from \"@blinq/schemas\";\nimport { buildCommandSignature } from \"@blinq/schemas\";\n\nexport type IdPreservingCommandDiff = {\n commands: Command[];\n preservedCommandIds: string[];\n changedCommandIds: string[];\n};\n\nfunction targetSignature(command: Command): string {\n if (!(\"target\" in command) || !command.target) {\n return \"target:*\";\n }\n\n const target = command.target as {\n name?: string;\n details?: {\n role?: string | null;\n accessibleName?: string | null;\n attributes?: Record<string, string>;\n dataSet?: Record<string, string>;\n };\n };\n const testId =\n target.details?.attributes?.[\"data-testid\"] ??\n target.details?.dataSet?.testid ??\n target.details?.dataSet?.testId ??\n \"*\";\n\n return [\n \"target\",\n target.name ?? \"*\",\n target.details?.role ?? \"*\",\n target.details?.accessibleName ?? \"*\",\n testId,\n ].join(\"|\");\n}\n\nfunction materialSignature(command: Command): string {\n return `${buildCommandSignature(command)}|${targetSignature(command)}`;\n}\n\nexport function buildIdPreservingCommandDiff(input: {\n originalCommands: readonly Command[];\n replacementCommands: readonly Command[];\n}): IdPreservingCommandDiff {\n const originalsBySignature = new Map<string, Command[]>();\n for (const command of input.originalCommands) {\n const signature = materialSignature(command);\n const existing = originalsBySignature.get(signature) ?? [];\n existing.push(command);\n originalsBySignature.set(signature, existing);\n }\n\n const preservedCommandIds: string[] = [];\n const changedCommandIds: string[] = [];\n const commands = input.replacementCommands.map((replacement) => {\n const matchingOriginals = originalsBySignature.get(materialSignature(replacement));\n const original = matchingOriginals?.shift();\n if (!original) {\n changedCommandIds.push(replacement._id);\n return replacement;\n }\n\n if (matchingOriginals?.length === 0) {\n originalsBySignature.delete(materialSignature(replacement));\n }\n preservedCommandIds.push(original._id);\n return { ...replacement, _id: original._id } as Command;\n });\n\n return {\n commands,\n preservedCommandIds,\n changedCommandIds,\n };\n}\n","import { CommandSchema, type Command, type StepRepairPlan } from \"@blinq/schemas\";\nimport { buildIdPreservingCommandDiff } from \"./id-preserving-diff\";\n\nexport type AppliedRepairPlan =\n | {\n success: true;\n commands: Command[];\n changedCommandIds: string[];\n preservedCommandIds: string[];\n }\n | {\n success: false;\n error: string;\n };\n\nfunction parseCommand(value: unknown): Command | undefined {\n const parsed = CommandSchema.safeParse(value);\n return parsed.success ? parsed.data : undefined;\n}\n\nfunction parseCommands(commands: readonly Command[]): Command[] | undefined {\n const parsedCommands: Command[] = [];\n for (const command of commands) {\n const parsedCommand = parseCommand(command);\n if (!parsedCommand) {\n return undefined;\n }\n parsedCommands.push(parsedCommand);\n }\n return parsedCommands;\n}\n\nfunction applyCommandOperations(input: {\n originalCommands: readonly Command[];\n plan: Extract<StepRepairPlan, { type: \"command-operations\" }>;\n}): AppliedRepairPlan {\n const commands = [...input.originalCommands];\n const changedCommandIds: string[] = [];\n const recordChangedCommand = (commandId: string) => {\n if (!changedCommandIds.includes(commandId)) {\n changedCommandIds.push(commandId);\n }\n };\n\n for (const operation of input.plan.operations) {\n if (operation.type === \"update\") {\n const replacementCommand = parseCommand(operation.replacementCommand);\n if (!replacementCommand) {\n return { success: false, error: \"Invalid command operation update replacement\" };\n }\n\n if (operation.commandIndex < 0 || operation.commandIndex >= commands.length) {\n return {\n success: false,\n error: `Invalid command operation update index ${operation.commandIndex}`,\n };\n }\n\n commands[operation.commandIndex] = replacementCommand;\n recordChangedCommand(replacementCommand._id);\n continue;\n }\n\n if (operation.type === \"insert\") {\n const insertedCommand = parseCommand(operation.command);\n if (!insertedCommand) {\n return { success: false, error: \"Invalid command operation insert command\" };\n }\n\n if (operation.insertIndex < 0 || operation.insertIndex > commands.length) {\n return {\n success: false,\n error: `Invalid command operation insert index ${operation.insertIndex}`,\n };\n }\n\n commands.splice(operation.insertIndex, 0, insertedCommand);\n recordChangedCommand(insertedCommand._id);\n continue;\n }\n\n if (operation.commandIndex < 0 || operation.commandIndex >= commands.length) {\n return {\n success: false,\n error: `Invalid command operation delete index ${operation.commandIndex}`,\n };\n }\n\n const [deletedCommand] = commands.splice(operation.commandIndex, 1);\n if (deletedCommand) {\n recordChangedCommand(deletedCommand._id);\n }\n }\n\n return {\n success: true,\n commands,\n changedCommandIds,\n preservedCommandIds: commands\n .filter((command) => !changedCommandIds.includes(command._id))\n .map((command) => command._id),\n };\n}\n\nexport function applyRepairPlan(input: {\n originalCommands: readonly Command[];\n plan: StepRepairPlan;\n}): AppliedRepairPlan {\n const originalCommands = parseCommands(input.originalCommands);\n if (!originalCommands) {\n return { success: false, error: \"Invalid original command in step repair input\" };\n }\n\n if (input.plan.type === \"single-command\") {\n const commandIndex = input.plan.commandIndex;\n const replacementCommand = parseCommand(input.plan.replacementCommand);\n if (!replacementCommand) {\n return { success: false, error: \"Invalid single-command step repair replacement\" };\n }\n\n if (commandIndex < 0 || commandIndex >= originalCommands.length) {\n return { success: false, error: `Invalid repair command index ${commandIndex}` };\n }\n\n const commands = [...originalCommands];\n commands[commandIndex] = replacementCommand;\n return {\n success: true,\n commands,\n changedCommandIds: [replacementCommand._id],\n preservedCommandIds: commands\n .filter((_, index) => index !== commandIndex)\n .map((command) => command._id),\n };\n }\n\n if (input.plan.type === \"command-operations\") {\n return applyCommandOperations({\n originalCommands,\n plan: input.plan,\n });\n }\n\n const replacementCommands: Command[] = [];\n for (const command of input.plan.replacementCommands) {\n const parsed = parseCommand(command);\n if (!parsed) {\n return { success: false, error: \"Invalid whole-step step repair replacement\" };\n }\n replacementCommands.push(parsed);\n }\n\n return {\n success: true,\n ...buildIdPreservingCommandDiff({\n originalCommands,\n replacementCommands,\n }),\n };\n}\n","import type { StepDefinition, StepRepairPlan } from \"@blinq/schemas\";\nimport { applyRepairPlan, type AppliedRepairPlan } from \"./apply-repair-plan\";\n\nexport type PersistStepRepairResult =\n | (Extract<AppliedRepairPlan, { success: true }> & { persistedAt: string })\n | Extract<AppliedRepairPlan, { success: false }>;\n\nexport function persistStepRepair(input: {\n stepDefinition: StepDefinition;\n plan: StepRepairPlan;\n now?: () => Date;\n}): PersistStepRepairResult {\n const applied = applyRepairPlan({\n originalCommands: input.stepDefinition.commands,\n plan: input.plan,\n });\n\n if (!applied.success) {\n return applied;\n }\n\n input.stepDefinition.commands = applied.commands;\n return {\n ...applied,\n persistedAt: (input.now ?? (() => new Date()))().toISOString(),\n };\n}\n","import type { Command, ResolutionContext } from \"@blinq/schemas\";\nimport type { TestDataApi } from \"./test-data-api\";\nimport type { ApiExecutionResponse } from \"./api-command\";\n\nexport type CommandExecutionContext = {\n stepParameters?: Record<string, string>;\n resolutionContext?: ResolutionContext;\n abortSignal?: AbortSignal;\n testDataApi?: TestDataApi;\n lastApiResponse?: ApiExecutionResponse;\n};\n\nexport type CommandPreprocessor = (\n command: Command,\n context: CommandExecutionContext,\n) => Promise<Command>;\n\nexport class CommandPreprocessorPipeline {\n constructor(private readonly preprocessors: readonly CommandPreprocessor[] = []) {}\n\n async execute(command: Command, context: CommandExecutionContext): Promise<Command> {\n let current = command;\n for (const preprocessor of this.preprocessors) {\n current = await preprocessor(current, context);\n }\n return current;\n }\n}\n","// This file was generated. Do not modify manually!\nvar astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 7, 9, 32, 4, 318, 1, 78, 5, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 68, 8, 2, 0, 3, 0, 2, 3, 2, 4, 2, 0, 15, 1, 83, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 7, 19, 58, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 199, 7, 137, 9, 54, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 55, 9, 266, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 10, 5350, 0, 7, 14, 11465, 27, 2343, 9, 87, 9, 39, 4, 60, 6, 26, 9, 535, 9, 470, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4178, 9, 519, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 245, 1, 2, 9, 233, 0, 3, 0, 8, 1, 6, 0, 475, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];\n\n// This file was generated. Do not modify manually!\nvar astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 4, 51, 13, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 7, 25, 39, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 39, 27, 10, 22, 251, 41, 7, 1, 17, 5, 57, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 31, 9, 2, 0, 3, 0, 2, 37, 2, 0, 26, 0, 2, 0, 45, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 200, 32, 32, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 24, 43, 261, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 26, 3994, 6, 582, 6842, 29, 1763, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 433, 44, 212, 63, 33, 24, 3, 24, 45, 74, 6, 0, 67, 12, 65, 1, 2, 0, 15, 4, 10, 7381, 42, 31, 98, 114, 8702, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 229, 29, 3, 0, 208, 30, 2, 2, 2, 1, 2, 6, 3, 4, 10, 1, 225, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4381, 3, 5773, 3, 7472, 16, 621, 2467, 541, 1507, 4938, 6, 8489];\n\n// This file was generated. Do not modify manually!\nvar nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0897-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1add\\u1ae0-\\u1aeb\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\u30fb\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\\uff65\";\n\n// This file was generated. Do not modify manually!\nvar nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088f\\u08a0-\\u08c9\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c5c\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdc-\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c8a\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7dc\\ua7f1-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n\n// These are a run-length and offset encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range.\n\n// Reserved word lists for various dialects of the language\n\nvar reservedWords = {\n 3: \"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\",\n 5: \"class enum extends super const export import\",\n 6: \"enum\",\n strict: \"implements interface let package private protected public static yield\",\n strictBind: \"eval arguments\"\n};\n\n// And the keywords\n\nvar ecma5AndLessKeywords = \"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\";\n\nvar keywords$1 = {\n 5: ecma5AndLessKeywords,\n \"5module\": ecma5AndLessKeywords + \" export import\",\n 6: ecma5AndLessKeywords + \" const class extends export import super\"\n};\n\nvar keywordRelationalOperator = /^in(stanceof)?$/;\n\n// ## Character categories\n\nvar nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\nvar nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code, set) {\n var pos = 0x10000;\n for (var i = 0; i < set.length; i += 2) {\n pos += set[i];\n if (pos > code) { return false }\n pos += set[i + 1];\n if (pos >= code) { return true }\n }\n return false\n}\n\n// Test whether a given character code starts an identifier.\n\nfunction isIdentifierStart(code, astral) {\n if (code < 65) { return code === 36 }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes)\n}\n\n// Test whether a given character is part of an identifier.\n\nfunction isIdentifierChar(code, astral) {\n if (code < 48) { return code === 36 }\n if (code < 58) { return true }\n if (code < 65) { return false }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes)\n}\n\n// ## Token types\n\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n\n// The `beforeExpr` property is used to disambiguate between regular\n// expressions and divisions. It is set on all token types that can\n// be followed by an expression (thus, a slash after them would be a\n// regular expression).\n//\n// The `startsExpr` property is used to check if the token ends a\n// `yield` expression. It is set on all token types that either can\n// directly start an expression (like a quotation mark) or can\n// continue an expression (like the body of a string).\n//\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\n\nvar TokenType = function TokenType(label, conf) {\n if ( conf === void 0 ) conf = {};\n\n this.label = label;\n this.keyword = conf.keyword;\n this.beforeExpr = !!conf.beforeExpr;\n this.startsExpr = !!conf.startsExpr;\n this.isLoop = !!conf.isLoop;\n this.isAssign = !!conf.isAssign;\n this.prefix = !!conf.prefix;\n this.postfix = !!conf.postfix;\n this.binop = conf.binop || null;\n this.updateContext = null;\n};\n\nfunction binop(name, prec) {\n return new TokenType(name, {beforeExpr: true, binop: prec})\n}\nvar beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true};\n\n// Map keyword names to token types.\n\nvar keywords = {};\n\n// Succinct definitions of keyword token types\nfunction kw(name, options) {\n if ( options === void 0 ) options = {};\n\n options.keyword = name;\n return keywords[name] = new TokenType(name, options)\n}\n\nvar types$1 = {\n num: new TokenType(\"num\", startsExpr),\n regexp: new TokenType(\"regexp\", startsExpr),\n string: new TokenType(\"string\", startsExpr),\n name: new TokenType(\"name\", startsExpr),\n privateId: new TokenType(\"privateId\", startsExpr),\n eof: new TokenType(\"eof\"),\n\n // Punctuation token types.\n bracketL: new TokenType(\"[\", {beforeExpr: true, startsExpr: true}),\n bracketR: new TokenType(\"]\"),\n braceL: new TokenType(\"{\", {beforeExpr: true, startsExpr: true}),\n braceR: new TokenType(\"}\"),\n parenL: new TokenType(\"(\", {beforeExpr: true, startsExpr: true}),\n parenR: new TokenType(\")\"),\n comma: new TokenType(\",\", beforeExpr),\n semi: new TokenType(\";\", beforeExpr),\n colon: new TokenType(\":\", beforeExpr),\n dot: new TokenType(\".\"),\n question: new TokenType(\"?\", beforeExpr),\n questionDot: new TokenType(\"?.\"),\n arrow: new TokenType(\"=>\", beforeExpr),\n template: new TokenType(\"template\"),\n invalidTemplate: new TokenType(\"invalidTemplate\"),\n ellipsis: new TokenType(\"...\", beforeExpr),\n backQuote: new TokenType(\"`\", startsExpr),\n dollarBraceL: new TokenType(\"${\", {beforeExpr: true, startsExpr: true}),\n\n // Operators. These carry several kinds of properties to help the\n // parser use them properly (the presence of these properties is\n // what categorizes them as operators).\n //\n // `binop`, when present, specifies that this operator is a binary\n // operator, and will refer to its precedence.\n //\n // `prefix` and `postfix` mark the operator as a prefix or postfix\n // unary operator.\n //\n // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n // binary operators with a very low precedence, that should result\n // in AssignmentExpression nodes.\n\n eq: new TokenType(\"=\", {beforeExpr: true, isAssign: true}),\n assign: new TokenType(\"_=\", {beforeExpr: true, isAssign: true}),\n incDec: new TokenType(\"++/--\", {prefix: true, postfix: true, startsExpr: true}),\n prefix: new TokenType(\"!/~\", {beforeExpr: true, prefix: true, startsExpr: true}),\n logicalOR: binop(\"||\", 1),\n logicalAND: binop(\"&&\", 2),\n bitwiseOR: binop(\"|\", 3),\n bitwiseXOR: binop(\"^\", 4),\n bitwiseAND: binop(\"&\", 5),\n equality: binop(\"==/!=/===/!==\", 6),\n relational: binop(\"</>/<=/>=\", 7),\n bitShift: binop(\"<</>>/>>>\", 8),\n plusMin: new TokenType(\"+/-\", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}),\n modulo: binop(\"%\", 10),\n star: binop(\"*\", 10),\n slash: binop(\"/\", 10),\n starstar: new TokenType(\"**\", {beforeExpr: true}),\n coalesce: binop(\"??\", 1),\n\n // Keyword token types.\n _break: kw(\"break\"),\n _case: kw(\"case\", beforeExpr),\n _catch: kw(\"catch\"),\n _continue: kw(\"continue\"),\n _debugger: kw(\"debugger\"),\n _default: kw(\"default\", beforeExpr),\n _do: kw(\"do\", {isLoop: true, beforeExpr: true}),\n _else: kw(\"else\", beforeExpr),\n _finally: kw(\"finally\"),\n _for: kw(\"for\", {isLoop: true}),\n _function: kw(\"function\", startsExpr),\n _if: kw(\"if\"),\n _return: kw(\"return\", beforeExpr),\n _switch: kw(\"switch\"),\n _throw: kw(\"throw\", beforeExpr),\n _try: kw(\"try\"),\n _var: kw(\"var\"),\n _const: kw(\"const\"),\n _while: kw(\"while\", {isLoop: true}),\n _with: kw(\"with\"),\n _new: kw(\"new\", {beforeExpr: true, startsExpr: true}),\n _this: kw(\"this\", startsExpr),\n _super: kw(\"super\", startsExpr),\n _class: kw(\"class\", startsExpr),\n _extends: kw(\"extends\", beforeExpr),\n _export: kw(\"export\"),\n _import: kw(\"import\", startsExpr),\n _null: kw(\"null\", startsExpr),\n _true: kw(\"true\", startsExpr),\n _false: kw(\"false\", startsExpr),\n _in: kw(\"in\", {beforeExpr: true, binop: 7}),\n _instanceof: kw(\"instanceof\", {beforeExpr: true, binop: 7}),\n _typeof: kw(\"typeof\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _void: kw(\"void\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _delete: kw(\"delete\", {beforeExpr: true, prefix: true, startsExpr: true})\n};\n\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\n\nvar lineBreak = /\\r\\n?|\\n|\\u2028|\\u2029/;\nvar lineBreakG = new RegExp(lineBreak.source, \"g\");\n\nfunction isNewLine(code) {\n return code === 10 || code === 13 || code === 0x2028 || code === 0x2029\n}\n\nfunction nextLineBreak(code, from, end) {\n if ( end === void 0 ) end = code.length;\n\n for (var i = from; i < end; i++) {\n var next = code.charCodeAt(i);\n if (isNewLine(next))\n { return i < end - 1 && next === 13 && code.charCodeAt(i + 1) === 10 ? i + 2 : i + 1 }\n }\n return -1\n}\n\nvar nonASCIIwhitespace = /[\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n\nvar skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\nvar ref = Object.prototype;\nvar hasOwnProperty = ref.hasOwnProperty;\nvar toString = ref.toString;\n\nvar hasOwn = Object.hasOwn || (function (obj, propName) { return (\n hasOwnProperty.call(obj, propName)\n); });\n\nvar isArray = Array.isArray || (function (obj) { return (\n toString.call(obj) === \"[object Array]\"\n); });\n\nvar regexpCache = Object.create(null);\n\nfunction wordsRegexp(words) {\n return regexpCache[words] || (regexpCache[words] = new RegExp(\"^(?:\" + words.replace(/ /g, \"|\") + \")$\"))\n}\n\nfunction codePointToString(code) {\n // UTF-16 Decoding\n if (code <= 0xFFFF) { return String.fromCharCode(code) }\n code -= 0x10000;\n return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00)\n}\n\nvar loneSurrogate = /(?:[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/;\n\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\n\nvar Position = function Position(line, col) {\n this.line = line;\n this.column = col;\n};\n\nPosition.prototype.offset = function offset (n) {\n return new Position(this.line, this.column + n)\n};\n\nvar SourceLocation = function SourceLocation(p, start, end) {\n this.start = start;\n this.end = end;\n if (p.sourceFile !== null) { this.source = p.sourceFile; }\n};\n\n// The `getLineInfo` function is mostly useful when the\n// `locations` option is off (for performance reasons) and you\n// want to find the line/column position for a given character\n// offset. `input` should be the code string that the offset refers\n// into.\n\nfunction getLineInfo(input, offset) {\n for (var line = 1, cur = 0;;) {\n var nextBreak = nextLineBreak(input, cur, offset);\n if (nextBreak < 0) { return new Position(line, offset - cur) }\n ++line;\n cur = nextBreak;\n }\n}\n\n// A second argument must be given to configure the parser process.\n// These options are recognized (only `ecmaVersion` is required):\n\nvar defaultOptions = {\n // `ecmaVersion` indicates the ECMAScript version to parse. Must be\n // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10\n // (2019), 11 (2020), 12 (2021), 13 (2022), 14 (2023), or `\"latest\"`\n // (the latest version the library supports). This influences\n // support for strict mode, the set of reserved words, and support\n // for new syntax features.\n ecmaVersion: null,\n // `sourceType` indicates the mode the code should be parsed in.\n // Can be either `\"script\"`, `\"module\"` or `\"commonjs\"`. This influences global\n // strict mode and parsing of `import` and `export` declarations.\n sourceType: \"script\",\n // `onInsertedSemicolon` can be a callback that will be called when\n // a semicolon is automatically inserted. It will be passed the\n // position of the inserted semicolon as an offset, and if\n // `locations` is enabled, it is given the location as a `{line,\n // column}` object as second argument.\n onInsertedSemicolon: null,\n // `onTrailingComma` is similar to `onInsertedSemicolon`, but for\n // trailing commas.\n onTrailingComma: null,\n // By default, reserved words are only enforced if ecmaVersion >= 5.\n // Set `allowReserved` to a boolean value to explicitly turn this on\n // an off. When this option has the value \"never\", reserved words\n // and keywords can also not be used as property names.\n allowReserved: null,\n // When enabled, a return at the top level is not considered an\n // error.\n allowReturnOutsideFunction: false,\n // When enabled, import/export statements are not constrained to\n // appearing at the top of the program, and an import.meta expression\n // in a script isn't considered an error.\n allowImportExportEverywhere: false,\n // By default, await identifiers are allowed to appear at the top-level scope only if ecmaVersion >= 2022.\n // When enabled, await identifiers are allowed to appear at the top-level scope,\n // but they are still not allowed in non-async functions.\n allowAwaitOutsideFunction: null,\n // When enabled, super identifiers are not constrained to\n // appearing in methods and do not raise an error when they appear elsewhere.\n allowSuperOutsideMethod: null,\n // When enabled, hashbang directive in the beginning of file is\n // allowed and treated as a line comment. Enabled by default when\n // `ecmaVersion` >= 2023.\n allowHashBang: false,\n // By default, the parser will verify that private properties are\n // only used in places where they are valid and have been declared.\n // Set this to false to turn such checks off.\n checkPrivateFields: true,\n // When `locations` is on, `loc` properties holding objects with\n // `start` and `end` properties in `{line, column}` form (with\n // line being 1-based and column 0-based) will be attached to the\n // nodes.\n locations: false,\n // A function can be passed as `onToken` option, which will\n // cause Acorn to call that function with object in the same\n // format as tokens returned from `tokenizer().getToken()`. Note\n // that you are not allowed to call the parser from the\n // callback—that will corrupt its internal state.\n onToken: null,\n // A function can be passed as `onComment` option, which will\n // cause Acorn to call that function with `(block, text, start,\n // end)` parameters whenever a comment is skipped. `block` is a\n // boolean indicating whether this is a block (`/* */`) comment,\n // `text` is the content of the comment, and `start` and `end` are\n // character offsets that denote the start and end of the comment.\n // When the `locations` option is on, two more parameters are\n // passed, the full `{line, column}` locations of the start and\n // end of the comments. Note that you are not allowed to call the\n // parser from the callback—that will corrupt its internal state.\n // When this option has an array as value, objects representing the\n // comments are pushed to it.\n onComment: null,\n // Nodes have their start and end characters offsets recorded in\n // `start` and `end` properties (directly on the node, rather than\n // the `loc` object, which holds line/column data. To also add a\n // [semi-standardized][range] `range` property holding a `[start,\n // end]` array with the same numbers, set the `ranges` option to\n // `true`.\n //\n // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n ranges: false,\n // It is possible to parse multiple files into a single AST by\n // passing the tree produced by parsing the first file as\n // `program` option in subsequent parses. This will add the\n // toplevel forms of the parsed file to the `Program` (top) node\n // of an existing parse tree.\n program: null,\n // When `locations` is on, you can pass this to record the source\n // file in every node's `loc` object.\n sourceFile: null,\n // This value, if given, is stored in every node, whether\n // `locations` is on or off.\n directSourceFile: null,\n // When enabled, parenthesized expressions are represented by\n // (non-standard) ParenthesizedExpression nodes\n preserveParens: false\n};\n\n// Interpret and default an options object\n\nvar warnedAboutEcmaVersion = false;\n\nfunction getOptions(opts) {\n var options = {};\n\n for (var opt in defaultOptions)\n { options[opt] = opts && hasOwn(opts, opt) ? opts[opt] : defaultOptions[opt]; }\n\n if (options.ecmaVersion === \"latest\") {\n options.ecmaVersion = 1e8;\n } else if (options.ecmaVersion == null) {\n if (!warnedAboutEcmaVersion && typeof console === \"object\" && console.warn) {\n warnedAboutEcmaVersion = true;\n console.warn(\"Since Acorn 8.0.0, options.ecmaVersion is required.\\nDefaulting to 2020, but this will stop working in the future.\");\n }\n options.ecmaVersion = 11;\n } else if (options.ecmaVersion >= 2015) {\n options.ecmaVersion -= 2009;\n }\n\n if (options.allowReserved == null)\n { options.allowReserved = options.ecmaVersion < 5; }\n\n if (!opts || opts.allowHashBang == null)\n { options.allowHashBang = options.ecmaVersion >= 14; }\n\n if (isArray(options.onToken)) {\n var tokens = options.onToken;\n options.onToken = function (token) { return tokens.push(token); };\n }\n if (isArray(options.onComment))\n { options.onComment = pushComment(options, options.onComment); }\n\n if (options.sourceType === \"commonjs\" && options.allowAwaitOutsideFunction)\n { throw new Error(\"Cannot use allowAwaitOutsideFunction with sourceType: commonjs\") }\n\n return options\n}\n\nfunction pushComment(options, array) {\n return function(block, text, start, end, startLoc, endLoc) {\n var comment = {\n type: block ? \"Block\" : \"Line\",\n value: text,\n start: start,\n end: end\n };\n if (options.locations)\n { comment.loc = new SourceLocation(this, startLoc, endLoc); }\n if (options.ranges)\n { comment.range = [start, end]; }\n array.push(comment);\n }\n}\n\n// Each scope gets a bitset that may contain these flags\nvar\n SCOPE_TOP = 1,\n SCOPE_FUNCTION = 2,\n SCOPE_ASYNC = 4,\n SCOPE_GENERATOR = 8,\n SCOPE_ARROW = 16,\n SCOPE_SIMPLE_CATCH = 32,\n SCOPE_SUPER = 64,\n SCOPE_DIRECT_SUPER = 128,\n SCOPE_CLASS_STATIC_BLOCK = 256,\n SCOPE_CLASS_FIELD_INIT = 512,\n SCOPE_SWITCH = 1024,\n SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK;\n\nfunction functionFlags(async, generator) {\n return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0)\n}\n\n// Used in checkLVal* and declareName to determine the type of a binding\nvar\n BIND_NONE = 0, // Not a binding\n BIND_VAR = 1, // Var-style binding\n BIND_LEXICAL = 2, // Let- or const-style binding\n BIND_FUNCTION = 3, // Function declaration\n BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding\n BIND_OUTSIDE = 5; // Special case for function names as bound inside the function\n\nvar Parser = function Parser(options, input, startPos) {\n this.options = options = getOptions(options);\n this.sourceFile = options.sourceFile;\n this.keywords = wordsRegexp(keywords$1[options.ecmaVersion >= 6 ? 6 : options.sourceType === \"module\" ? \"5module\" : 5]);\n var reserved = \"\";\n if (options.allowReserved !== true) {\n reserved = reservedWords[options.ecmaVersion >= 6 ? 6 : options.ecmaVersion === 5 ? 5 : 3];\n if (options.sourceType === \"module\") { reserved += \" await\"; }\n }\n this.reservedWords = wordsRegexp(reserved);\n var reservedStrict = (reserved ? reserved + \" \" : \"\") + reservedWords.strict;\n this.reservedWordsStrict = wordsRegexp(reservedStrict);\n this.reservedWordsStrictBind = wordsRegexp(reservedStrict + \" \" + reservedWords.strictBind);\n this.input = String(input);\n\n // Used to signal to callers of `readWord1` whether the word\n // contained any escape sequences. This is needed because words with\n // escape sequences must not be interpreted as keywords.\n this.containsEsc = false;\n\n // Set up token state\n\n // The current position of the tokenizer in the input.\n if (startPos) {\n this.pos = startPos;\n this.lineStart = this.input.lastIndexOf(\"\\n\", startPos - 1) + 1;\n this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;\n } else {\n this.pos = this.lineStart = 0;\n this.curLine = 1;\n }\n\n // Properties of the current token:\n // Its type\n this.type = types$1.eof;\n // For tokens that include more information than their type, the value\n this.value = null;\n // Its start and end offset\n this.start = this.end = this.pos;\n // And, if locations are used, the {line, column} object\n // corresponding to those offsets\n this.startLoc = this.endLoc = this.curPosition();\n\n // Position information for the previous token\n this.lastTokEndLoc = this.lastTokStartLoc = null;\n this.lastTokStart = this.lastTokEnd = this.pos;\n\n // The context stack is used to superficially track syntactic\n // context to predict whether a regular expression is allowed in a\n // given position.\n this.context = this.initialContext();\n this.exprAllowed = true;\n\n // Figure out if it's a module code.\n this.inModule = options.sourceType === \"module\";\n this.strict = this.inModule || this.strictDirective(this.pos);\n\n // Used to signify the start of a potential arrow function\n this.potentialArrowAt = -1;\n this.potentialArrowInForAwait = false;\n\n // Positions to delayed-check that yield/await does not exist in default parameters.\n this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;\n // Labels in scope.\n this.labels = [];\n // Thus-far undefined exports.\n this.undefinedExports = Object.create(null);\n\n // If enabled, skip leading hashbang line.\n if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === \"#!\")\n { this.skipLineComment(2); }\n\n // Scope tracking for duplicate variable names (see scope.js)\n this.scopeStack = [];\n this.enterScope(\n this.options.sourceType === \"commonjs\"\n // In commonjs, the top-level scope behaves like a function scope\n ? SCOPE_FUNCTION\n : SCOPE_TOP\n );\n\n // For RegExp validation\n this.regexpState = null;\n\n // The stack of private names.\n // Each element has two properties: 'declared' and 'used'.\n // When it exited from the outermost class definition, all used private names must be declared.\n this.privateNameStack = [];\n};\n\nvar prototypeAccessors = { inFunction: { configurable: true },inGenerator: { configurable: true },inAsync: { configurable: true },canAwait: { configurable: true },allowReturn: { configurable: true },allowSuper: { configurable: true },allowDirectSuper: { configurable: true },treatFunctionsAsVar: { configurable: true },allowNewDotTarget: { configurable: true },allowUsing: { configurable: true },inClassStaticBlock: { configurable: true } };\n\nParser.prototype.parse = function parse () {\n var node = this.options.program || this.startNode();\n this.nextToken();\n return this.parseTopLevel(node)\n};\n\nprototypeAccessors.inFunction.get = function () { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 };\n\nprototypeAccessors.inGenerator.get = function () { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 };\n\nprototypeAccessors.inAsync.get = function () { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 };\n\nprototypeAccessors.canAwait.get = function () {\n for (var i = this.scopeStack.length - 1; i >= 0; i--) {\n var ref = this.scopeStack[i];\n var flags = ref.flags;\n if (flags & (SCOPE_CLASS_STATIC_BLOCK | SCOPE_CLASS_FIELD_INIT)) { return false }\n if (flags & SCOPE_FUNCTION) { return (flags & SCOPE_ASYNC) > 0 }\n }\n return (this.inModule && this.options.ecmaVersion >= 13) || this.options.allowAwaitOutsideFunction\n};\n\nprototypeAccessors.allowReturn.get = function () {\n if (this.inFunction) { return true }\n if (this.options.allowReturnOutsideFunction && this.currentVarScope().flags & SCOPE_TOP) { return true }\n return false\n};\n\nprototypeAccessors.allowSuper.get = function () {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n return (flags & SCOPE_SUPER) > 0 || this.options.allowSuperOutsideMethod\n};\n\nprototypeAccessors.allowDirectSuper.get = function () { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 };\n\nprototypeAccessors.treatFunctionsAsVar.get = function () { return this.treatFunctionsAsVarInScope(this.currentScope()) };\n\nprototypeAccessors.allowNewDotTarget.get = function () {\n for (var i = this.scopeStack.length - 1; i >= 0; i--) {\n var ref = this.scopeStack[i];\n var flags = ref.flags;\n if (flags & (SCOPE_CLASS_STATIC_BLOCK | SCOPE_CLASS_FIELD_INIT) ||\n ((flags & SCOPE_FUNCTION) && !(flags & SCOPE_ARROW))) { return true }\n }\n return false\n};\n\nprototypeAccessors.allowUsing.get = function () {\n var ref = this.currentScope();\n var flags = ref.flags;\n if (flags & SCOPE_SWITCH) { return false }\n if (!this.inModule && flags & SCOPE_TOP) { return false }\n return true\n};\n\nprototypeAccessors.inClassStaticBlock.get = function () {\n return (this.currentVarScope().flags & SCOPE_CLASS_STATIC_BLOCK) > 0\n};\n\nParser.extend = function extend () {\n var plugins = [], len = arguments.length;\n while ( len-- ) plugins[ len ] = arguments[ len ];\n\n var cls = this;\n for (var i = 0; i < plugins.length; i++) { cls = plugins[i](cls); }\n return cls\n};\n\nParser.parse = function parse (input, options) {\n return new this(options, input).parse()\n};\n\nParser.parseExpressionAt = function parseExpressionAt (input, pos, options) {\n var parser = new this(options, input, pos);\n parser.nextToken();\n return parser.parseExpression()\n};\n\nParser.tokenizer = function tokenizer (input, options) {\n return new this(options, input)\n};\n\nObject.defineProperties( Parser.prototype, prototypeAccessors );\n\nvar pp$9 = Parser.prototype;\n\n// ## Parser utilities\n\nvar literal = /^(?:'((?:\\\\[^]|[^'\\\\])*?)'|\"((?:\\\\[^]|[^\"\\\\])*?)\")/;\npp$9.strictDirective = function(start) {\n if (this.options.ecmaVersion < 5) { return false }\n for (;;) {\n // Try to find string literal.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n var match = literal.exec(this.input.slice(start));\n if (!match) { return false }\n if ((match[1] || match[2]) === \"use strict\") {\n skipWhiteSpace.lastIndex = start + match[0].length;\n var spaceAfter = skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length;\n var next = this.input.charAt(end);\n return next === \";\" || next === \"}\" ||\n (lineBreak.test(spaceAfter[0]) &&\n !(/[(`.[+\\-/*%<>=,?^&]/.test(next) || next === \"!\" && this.input.charAt(end + 1) === \"=\"))\n }\n start += match[0].length;\n\n // Skip semicolon, if any.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n if (this.input[start] === \";\")\n { start++; }\n }\n};\n\n// Predicate that tests whether the next token is of the given\n// type, and if yes, consumes it as a side effect.\n\npp$9.eat = function(type) {\n if (this.type === type) {\n this.next();\n return true\n } else {\n return false\n }\n};\n\n// Tests whether parsed token is a contextual keyword.\n\npp$9.isContextual = function(name) {\n return this.type === types$1.name && this.value === name && !this.containsEsc\n};\n\n// Consumes contextual keyword if possible.\n\npp$9.eatContextual = function(name) {\n if (!this.isContextual(name)) { return false }\n this.next();\n return true\n};\n\n// Asserts that following token is given contextual keyword.\n\npp$9.expectContextual = function(name) {\n if (!this.eatContextual(name)) { this.unexpected(); }\n};\n\n// Test whether a semicolon can be inserted at the current position.\n\npp$9.canInsertSemicolon = function() {\n return this.type === types$1.eof ||\n this.type === types$1.braceR ||\n lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\npp$9.insertSemicolon = function() {\n if (this.canInsertSemicolon()) {\n if (this.options.onInsertedSemicolon)\n { this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc); }\n return true\n }\n};\n\n// Consume a semicolon, or, failing that, see if we are allowed to\n// pretend that there is a semicolon at this position.\n\npp$9.semicolon = function() {\n if (!this.eat(types$1.semi) && !this.insertSemicolon()) { this.unexpected(); }\n};\n\npp$9.afterTrailingComma = function(tokType, notNext) {\n if (this.type === tokType) {\n if (this.options.onTrailingComma)\n { this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc); }\n if (!notNext)\n { this.next(); }\n return true\n }\n};\n\n// Expect a token of a given type. If found, consume it, otherwise,\n// raise an unexpected token error.\n\npp$9.expect = function(type) {\n this.eat(type) || this.unexpected();\n};\n\n// Raise an unexpected token error.\n\npp$9.unexpected = function(pos) {\n this.raise(pos != null ? pos : this.start, \"Unexpected token\");\n};\n\nvar DestructuringErrors = function DestructuringErrors() {\n this.shorthandAssign =\n this.trailingComma =\n this.parenthesizedAssign =\n this.parenthesizedBind =\n this.doubleProto =\n -1;\n};\n\npp$9.checkPatternErrors = function(refDestructuringErrors, isAssign) {\n if (!refDestructuringErrors) { return }\n if (refDestructuringErrors.trailingComma > -1)\n { this.raiseRecoverable(refDestructuringErrors.trailingComma, \"Comma is not permitted after the rest element\"); }\n var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;\n if (parens > -1) { this.raiseRecoverable(parens, isAssign ? \"Assigning to rvalue\" : \"Parenthesized pattern\"); }\n};\n\npp$9.checkExpressionErrors = function(refDestructuringErrors, andThrow) {\n if (!refDestructuringErrors) { return false }\n var shorthandAssign = refDestructuringErrors.shorthandAssign;\n var doubleProto = refDestructuringErrors.doubleProto;\n if (!andThrow) { return shorthandAssign >= 0 || doubleProto >= 0 }\n if (shorthandAssign >= 0)\n { this.raise(shorthandAssign, \"Shorthand property assignments are valid only in destructuring patterns\"); }\n if (doubleProto >= 0)\n { this.raiseRecoverable(doubleProto, \"Redefinition of __proto__ property\"); }\n};\n\npp$9.checkYieldAwaitInDefaultParams = function() {\n if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos))\n { this.raise(this.yieldPos, \"Yield expression cannot be a default value\"); }\n if (this.awaitPos)\n { this.raise(this.awaitPos, \"Await expression cannot be a default value\"); }\n};\n\npp$9.isSimpleAssignTarget = function(expr) {\n if (expr.type === \"ParenthesizedExpression\")\n { return this.isSimpleAssignTarget(expr.expression) }\n return expr.type === \"Identifier\" || expr.type === \"MemberExpression\"\n};\n\nvar pp$8 = Parser.prototype;\n\n// ### Statement parsing\n\n// Parse a program. Initializes the parser, reads any number of\n// statements, and wraps them in a Program node. Optionally takes a\n// `program` argument. If present, the statements will be appended\n// to its body instead of creating a new node.\n\npp$8.parseTopLevel = function(node) {\n var exports = Object.create(null);\n if (!node.body) { node.body = []; }\n while (this.type !== types$1.eof) {\n var stmt = this.parseStatement(null, true, exports);\n node.body.push(stmt);\n }\n if (this.inModule)\n { for (var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1)\n {\n var name = list[i];\n\n this.raiseRecoverable(this.undefinedExports[name].start, (\"Export '\" + name + \"' is not defined\"));\n } }\n this.adaptDirectivePrologue(node.body);\n this.next();\n node.sourceType = this.options.sourceType === \"commonjs\" ? \"script\" : this.options.sourceType;\n return this.finishNode(node, \"Program\")\n};\n\nvar loopLabel = {kind: \"loop\"}, switchLabel = {kind: \"switch\"};\n\npp$8.isLet = function(context) {\n if (this.options.ecmaVersion < 6 || !this.isContextual(\"let\")) { return false }\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.fullCharCodeAt(next);\n // For ambiguous cases, determine if a LexicalDeclaration (or only a\n // Statement) is allowed here. If context is not empty then only a Statement\n // is allowed. However, `let [` is an explicit negative lookahead for\n // ExpressionStatement, so special-case it first.\n if (nextCh === 91 || nextCh === 92) { return true } // '[', '\\'\n if (context) { return false }\n\n if (nextCh === 123) { return true } // '{'\n if (isIdentifierStart(nextCh)) {\n var start = next;\n do { next += nextCh <= 0xffff ? 1 : 2; }\n while (isIdentifierChar(nextCh = this.fullCharCodeAt(next)))\n if (nextCh === 92) { return true }\n var ident = this.input.slice(start, next);\n if (!keywordRelationalOperator.test(ident)) { return true }\n }\n return false\n};\n\n// check 'async [no LineTerminator here] function'\n// - 'async /*foo*/ function' is OK.\n// - 'async /*\\n*/ function' is invalid.\npp$8.isAsyncFunction = function() {\n if (this.options.ecmaVersion < 8 || !this.isContextual(\"async\"))\n { return false }\n\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, after;\n return !lineBreak.test(this.input.slice(this.pos, next)) &&\n this.input.slice(next, next + 8) === \"function\" &&\n (next + 8 === this.input.length ||\n !(isIdentifierChar(after = this.fullCharCodeAt(next + 8)) || after === 92 /* '\\' */))\n};\n\npp$8.isUsingKeyword = function(isAwaitUsing, isFor) {\n if (this.options.ecmaVersion < 17 || !this.isContextual(isAwaitUsing ? \"await\" : \"using\"))\n { return false }\n\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length;\n\n if (lineBreak.test(this.input.slice(this.pos, next))) { return false }\n\n if (isAwaitUsing) {\n var usingEndPos = next + 5 /* using */, after;\n if (this.input.slice(next, usingEndPos) !== \"using\" ||\n usingEndPos === this.input.length ||\n isIdentifierChar(after = this.fullCharCodeAt(usingEndPos)) ||\n after === 92 /* '\\' */\n ) { return false }\n\n skipWhiteSpace.lastIndex = usingEndPos;\n var skipAfterUsing = skipWhiteSpace.exec(this.input);\n next = usingEndPos + skipAfterUsing[0].length;\n if (skipAfterUsing && lineBreak.test(this.input.slice(usingEndPos, next))) { return false }\n }\n\n var ch = this.fullCharCodeAt(next);\n if (!isIdentifierStart(ch) && ch !== 92 /* '\\' */) { return false }\n var idStart = next;\n do { next += ch <= 0xffff ? 1 : 2; }\n while (isIdentifierChar(ch = this.fullCharCodeAt(next)))\n if (ch === 92) { return true }\n var id = this.input.slice(idStart, next);\n if (keywordRelationalOperator.test(id) || isFor && id === \"of\") { return false }\n return true\n};\n\npp$8.isAwaitUsing = function(isFor) {\n return this.isUsingKeyword(true, isFor)\n};\n\npp$8.isUsing = function(isFor) {\n return this.isUsingKeyword(false, isFor)\n};\n\n// Parse a single statement.\n//\n// If expecting a statement and finding a slash operator, parse a\n// regular expression literal. This is to handle cases like\n// `if (foo) /blah/.exec(foo)`, where looking at the previous token\n// does not help.\n\npp$8.parseStatement = function(context, topLevel, exports) {\n var starttype = this.type, node = this.startNode(), kind;\n\n if (this.isLet(context)) {\n starttype = types$1._var;\n kind = \"let\";\n }\n\n // Most types of statements are recognized by the keyword they\n // start with. Many are trivial to parse, some require a bit of\n // complexity.\n\n switch (starttype) {\n case types$1._break: case types$1._continue: return this.parseBreakContinueStatement(node, starttype.keyword)\n case types$1._debugger: return this.parseDebuggerStatement(node)\n case types$1._do: return this.parseDoStatement(node)\n case types$1._for: return this.parseForStatement(node)\n case types$1._function:\n // Function as sole body of either an if statement or a labeled statement\n // works, but not when it is part of a labeled statement that is the sole\n // body of an if statement.\n if ((context && (this.strict || context !== \"if\" && context !== \"label\")) && this.options.ecmaVersion >= 6) { this.unexpected(); }\n return this.parseFunctionStatement(node, false, !context)\n case types$1._class:\n if (context) { this.unexpected(); }\n return this.parseClass(node, true)\n case types$1._if: return this.parseIfStatement(node)\n case types$1._return: return this.parseReturnStatement(node)\n case types$1._switch: return this.parseSwitchStatement(node)\n case types$1._throw: return this.parseThrowStatement(node)\n case types$1._try: return this.parseTryStatement(node)\n case types$1._const: case types$1._var:\n kind = kind || this.value;\n if (context && kind !== \"var\") { this.unexpected(); }\n return this.parseVarStatement(node, kind)\n case types$1._while: return this.parseWhileStatement(node)\n case types$1._with: return this.parseWithStatement(node)\n case types$1.braceL: return this.parseBlock(true, node)\n case types$1.semi: return this.parseEmptyStatement(node)\n case types$1._export:\n case types$1._import:\n if (this.options.ecmaVersion > 10 && starttype === types$1._import) {\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n if (nextCh === 40 || nextCh === 46) // '(' or '.'\n { return this.parseExpressionStatement(node, this.parseExpression()) }\n }\n\n if (!this.options.allowImportExportEverywhere) {\n if (!topLevel)\n { this.raise(this.start, \"'import' and 'export' may only appear at the top level\"); }\n if (!this.inModule)\n { this.raise(this.start, \"'import' and 'export' may appear only with 'sourceType: module'\"); }\n }\n return starttype === types$1._import ? this.parseImport(node) : this.parseExport(node, exports)\n\n // If the statement does not start with a statement keyword or a\n // brace, it's an ExpressionStatement or LabeledStatement. We\n // simply start parsing an expression, and afterwards, if the\n // next token is a colon and the expression was a simple\n // Identifier node, we switch to interpreting it as a label.\n default:\n if (this.isAsyncFunction()) {\n if (context) { this.unexpected(); }\n this.next();\n return this.parseFunctionStatement(node, true, !context)\n }\n\n var usingKind = this.isAwaitUsing(false) ? \"await using\" : this.isUsing(false) ? \"using\" : null;\n if (usingKind) {\n if (!this.allowUsing) {\n this.raise(this.start, \"Using declaration cannot appear in the top level when source type is `script` or in the bare case statement\");\n }\n if (usingKind === \"await using\") {\n if (!this.canAwait) {\n this.raise(this.start, \"Await using cannot appear outside of async function\");\n }\n this.next();\n }\n this.next();\n this.parseVar(node, false, usingKind);\n this.semicolon();\n return this.finishNode(node, \"VariableDeclaration\")\n }\n\n var maybeName = this.value, expr = this.parseExpression();\n if (starttype === types$1.name && expr.type === \"Identifier\" && this.eat(types$1.colon))\n { return this.parseLabeledStatement(node, maybeName, expr, context) }\n else { return this.parseExpressionStatement(node, expr) }\n }\n};\n\npp$8.parseBreakContinueStatement = function(node, keyword) {\n var isBreak = keyword === \"break\";\n this.next();\n if (this.eat(types$1.semi) || this.insertSemicolon()) { node.label = null; }\n else if (this.type !== types$1.name) { this.unexpected(); }\n else {\n node.label = this.parseIdent();\n this.semicolon();\n }\n\n // Verify that there is an actual destination to break or\n // continue to.\n var i = 0;\n for (; i < this.labels.length; ++i) {\n var lab = this.labels[i];\n if (node.label == null || lab.name === node.label.name) {\n if (lab.kind != null && (isBreak || lab.kind === \"loop\")) { break }\n if (node.label && isBreak) { break }\n }\n }\n if (i === this.labels.length) { this.raise(node.start, \"Unsyntactic \" + keyword); }\n return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\")\n};\n\npp$8.parseDebuggerStatement = function(node) {\n this.next();\n this.semicolon();\n return this.finishNode(node, \"DebuggerStatement\")\n};\n\npp$8.parseDoStatement = function(node) {\n this.next();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"do\");\n this.labels.pop();\n this.expect(types$1._while);\n node.test = this.parseParenExpression();\n if (this.options.ecmaVersion >= 6)\n { this.eat(types$1.semi); }\n else\n { this.semicolon(); }\n return this.finishNode(node, \"DoWhileStatement\")\n};\n\n// Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n// loop is non-trivial. Basically, we have to parse the init `var`\n// statement or expression, disallowing the `in` operator (see\n// the second parameter to `parseExpression`), and then check\n// whether the next token is `in` or `of`. When there is no init\n// part (semicolon immediately after the opening parenthesis), it\n// is a regular `for` loop.\n\npp$8.parseForStatement = function(node) {\n this.next();\n var awaitAt = (this.options.ecmaVersion >= 9 && this.canAwait && this.eatContextual(\"await\")) ? this.lastTokStart : -1;\n this.labels.push(loopLabel);\n this.enterScope(0);\n this.expect(types$1.parenL);\n if (this.type === types$1.semi) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, null)\n }\n var isLet = this.isLet();\n if (this.type === types$1._var || this.type === types$1._const || isLet) {\n var init$1 = this.startNode(), kind = isLet ? \"let\" : this.value;\n this.next();\n this.parseVar(init$1, true, kind);\n this.finishNode(init$1, \"VariableDeclaration\");\n return this.parseForAfterInit(node, init$1, awaitAt)\n }\n var startsWithLet = this.isContextual(\"let\"), isForOf = false;\n\n var usingKind = this.isUsing(true) ? \"using\" : this.isAwaitUsing(true) ? \"await using\" : null;\n if (usingKind) {\n var init$2 = this.startNode();\n this.next();\n if (usingKind === \"await using\") {\n if (!this.canAwait) {\n this.raise(this.start, \"Await using cannot appear outside of async function\");\n }\n this.next();\n }\n this.parseVar(init$2, true, usingKind);\n this.finishNode(init$2, \"VariableDeclaration\");\n return this.parseForAfterInit(node, init$2, awaitAt)\n }\n var containsEsc = this.containsEsc;\n var refDestructuringErrors = new DestructuringErrors;\n var initPos = this.start;\n var init = awaitAt > -1\n ? this.parseExprSubscripts(refDestructuringErrors, \"await\")\n : this.parseExpression(true, refDestructuringErrors);\n if (this.type === types$1._in || (isForOf = this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) {\n if (awaitAt > -1) { // implies `ecmaVersion >= 9` (see declaration of awaitAt)\n if (this.type === types$1._in) { this.unexpected(awaitAt); }\n node.await = true;\n } else if (isForOf && this.options.ecmaVersion >= 8) {\n if (init.start === initPos && !containsEsc && init.type === \"Identifier\" && init.name === \"async\") { this.unexpected(); }\n else if (this.options.ecmaVersion >= 9) { node.await = false; }\n }\n if (startsWithLet && isForOf) { this.raise(init.start, \"The left-hand side of a for-of loop may not start with 'let'.\"); }\n this.toAssignable(init, false, refDestructuringErrors);\n this.checkLValPattern(init);\n return this.parseForIn(node, init)\n } else {\n this.checkExpressionErrors(refDestructuringErrors, true);\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init)\n};\n\n// Helper method to parse for loop after variable initialization\npp$8.parseForAfterInit = function(node, init, awaitAt) {\n if ((this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) && init.declarations.length === 1) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === types$1._in) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n } else { node.await = awaitAt > -1; }\n }\n return this.parseForIn(node, init)\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init)\n};\n\npp$8.parseFunctionStatement = function(node, isAsync, declarationPosition) {\n this.next();\n return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync)\n};\n\npp$8.parseIfStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n // allow function declarations in branches, but only in non-strict mode\n node.consequent = this.parseStatement(\"if\");\n node.alternate = this.eat(types$1._else) ? this.parseStatement(\"if\") : null;\n return this.finishNode(node, \"IfStatement\")\n};\n\npp$8.parseReturnStatement = function(node) {\n if (!this.allowReturn)\n { this.raise(this.start, \"'return' outside of function\"); }\n this.next();\n\n // In `return` (and `break`/`continue`), the keywords with\n // optional arguments, we eagerly look for a semicolon or the\n // possibility to insert one.\n\n if (this.eat(types$1.semi) || this.insertSemicolon()) { node.argument = null; }\n else { node.argument = this.parseExpression(); this.semicolon(); }\n return this.finishNode(node, \"ReturnStatement\")\n};\n\npp$8.parseSwitchStatement = function(node) {\n this.next();\n node.discriminant = this.parseParenExpression();\n node.cases = [];\n this.expect(types$1.braceL);\n this.labels.push(switchLabel);\n this.enterScope(SCOPE_SWITCH);\n\n // Statements under must be grouped (by label) in SwitchCase\n // nodes. `cur` is used to keep the node that we are currently\n // adding statements to.\n\n var cur;\n for (var sawDefault = false; this.type !== types$1.braceR;) {\n if (this.type === types$1._case || this.type === types$1._default) {\n var isCase = this.type === types$1._case;\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n node.cases.push(cur = this.startNode());\n cur.consequent = [];\n this.next();\n if (isCase) {\n cur.test = this.parseExpression();\n } else {\n if (sawDefault) { this.raiseRecoverable(this.lastTokStart, \"Multiple default clauses\"); }\n sawDefault = true;\n cur.test = null;\n }\n this.expect(types$1.colon);\n } else {\n if (!cur) { this.unexpected(); }\n cur.consequent.push(this.parseStatement(null));\n }\n }\n this.exitScope();\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n this.next(); // Closing brace\n this.labels.pop();\n return this.finishNode(node, \"SwitchStatement\")\n};\n\npp$8.parseThrowStatement = function(node) {\n this.next();\n if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start)))\n { this.raise(this.lastTokEnd, \"Illegal newline after throw\"); }\n node.argument = this.parseExpression();\n this.semicolon();\n return this.finishNode(node, \"ThrowStatement\")\n};\n\n// Reused empty array added for node fields that are always empty.\n\nvar empty$1 = [];\n\npp$8.parseCatchClauseParam = function() {\n var param = this.parseBindingAtom();\n var simple = param.type === \"Identifier\";\n this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0);\n this.checkLValPattern(param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL);\n this.expect(types$1.parenR);\n\n return param\n};\n\npp$8.parseTryStatement = function(node) {\n this.next();\n node.block = this.parseBlock();\n node.handler = null;\n if (this.type === types$1._catch) {\n var clause = this.startNode();\n this.next();\n if (this.eat(types$1.parenL)) {\n clause.param = this.parseCatchClauseParam();\n } else {\n if (this.options.ecmaVersion < 10) { this.unexpected(); }\n clause.param = null;\n this.enterScope(0);\n }\n clause.body = this.parseBlock(false);\n this.exitScope();\n node.handler = this.finishNode(clause, \"CatchClause\");\n }\n node.finalizer = this.eat(types$1._finally) ? this.parseBlock() : null;\n if (!node.handler && !node.finalizer)\n { this.raise(node.start, \"Missing catch or finally clause\"); }\n return this.finishNode(node, \"TryStatement\")\n};\n\npp$8.parseVarStatement = function(node, kind, allowMissingInitializer) {\n this.next();\n this.parseVar(node, false, kind, allowMissingInitializer);\n this.semicolon();\n return this.finishNode(node, \"VariableDeclaration\")\n};\n\npp$8.parseWhileStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"while\");\n this.labels.pop();\n return this.finishNode(node, \"WhileStatement\")\n};\n\npp$8.parseWithStatement = function(node) {\n if (this.strict) { this.raise(this.start, \"'with' in strict mode\"); }\n this.next();\n node.object = this.parseParenExpression();\n node.body = this.parseStatement(\"with\");\n return this.finishNode(node, \"WithStatement\")\n};\n\npp$8.parseEmptyStatement = function(node) {\n this.next();\n return this.finishNode(node, \"EmptyStatement\")\n};\n\npp$8.parseLabeledStatement = function(node, maybeName, expr, context) {\n for (var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1)\n {\n var label = list[i$1];\n\n if (label.name === maybeName)\n { this.raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n } }\n var kind = this.type.isLoop ? \"loop\" : this.type === types$1._switch ? \"switch\" : null;\n for (var i = this.labels.length - 1; i >= 0; i--) {\n var label$1 = this.labels[i];\n if (label$1.statementStart === node.start) {\n // Update information about previous labels on this node\n label$1.statementStart = this.start;\n label$1.kind = kind;\n } else { break }\n }\n this.labels.push({name: maybeName, kind: kind, statementStart: this.start});\n node.body = this.parseStatement(context ? context.indexOf(\"label\") === -1 ? context + \"label\" : context : \"label\");\n this.labels.pop();\n node.label = expr;\n return this.finishNode(node, \"LabeledStatement\")\n};\n\npp$8.parseExpressionStatement = function(node, expr) {\n node.expression = expr;\n this.semicolon();\n return this.finishNode(node, \"ExpressionStatement\")\n};\n\n// Parse a semicolon-enclosed block of statements, handling `\"use\n// strict\"` declarations when `allowStrict` is true (used for\n// function bodies).\n\npp$8.parseBlock = function(createNewLexicalScope, node, exitStrict) {\n if ( createNewLexicalScope === void 0 ) createNewLexicalScope = true;\n if ( node === void 0 ) node = this.startNode();\n\n node.body = [];\n this.expect(types$1.braceL);\n if (createNewLexicalScope) { this.enterScope(0); }\n while (this.type !== types$1.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n if (exitStrict) { this.strict = false; }\n this.next();\n if (createNewLexicalScope) { this.exitScope(); }\n return this.finishNode(node, \"BlockStatement\")\n};\n\n// Parse a regular `for` loop. The disambiguation code in\n// `parseStatement` will already have parsed the init statement or\n// expression.\n\npp$8.parseFor = function(node, init) {\n node.init = init;\n this.expect(types$1.semi);\n node.test = this.type === types$1.semi ? null : this.parseExpression();\n this.expect(types$1.semi);\n node.update = this.type === types$1.parenR ? null : this.parseExpression();\n this.expect(types$1.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, \"ForStatement\")\n};\n\n// Parse a `for`/`in` and `for`/`of` loop, which are almost\n// same from parser's perspective.\n\npp$8.parseForIn = function(node, init) {\n var isForIn = this.type === types$1._in;\n this.next();\n\n if (\n init.type === \"VariableDeclaration\" &&\n init.declarations[0].init != null &&\n (\n !isForIn ||\n this.options.ecmaVersion < 8 ||\n this.strict ||\n init.kind !== \"var\" ||\n init.declarations[0].id.type !== \"Identifier\"\n )\n ) {\n this.raise(\n init.start,\n ((isForIn ? \"for-in\" : \"for-of\") + \" loop variable declaration may not have an initializer\")\n );\n }\n node.left = init;\n node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();\n this.expect(types$1.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\")\n};\n\n// Parse a list of variable declarations.\n\npp$8.parseVar = function(node, isFor, kind, allowMissingInitializer) {\n node.declarations = [];\n node.kind = kind;\n for (;;) {\n var decl = this.startNode();\n this.parseVarId(decl, kind);\n if (this.eat(types$1.eq)) {\n decl.init = this.parseMaybeAssign(isFor);\n } else if (!allowMissingInitializer && kind === \"const\" && !(this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\")))) {\n this.unexpected();\n } else if (!allowMissingInitializer && (kind === \"using\" || kind === \"await using\") && this.options.ecmaVersion >= 17 && this.type !== types$1._in && !this.isContextual(\"of\")) {\n this.raise(this.lastTokEnd, (\"Missing initializer in \" + kind + \" declaration\"));\n } else if (!allowMissingInitializer && decl.id.type !== \"Identifier\" && !(isFor && (this.type === types$1._in || this.isContextual(\"of\")))) {\n this.raise(this.lastTokEnd, \"Complex binding patterns require an initialization value\");\n } else {\n decl.init = null;\n }\n node.declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n if (!this.eat(types$1.comma)) { break }\n }\n return node\n};\n\npp$8.parseVarId = function(decl, kind) {\n decl.id = kind === \"using\" || kind === \"await using\"\n ? this.parseIdent()\n : this.parseBindingAtom();\n\n this.checkLValPattern(decl.id, kind === \"var\" ? BIND_VAR : BIND_LEXICAL, false);\n};\n\nvar FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4;\n\n// Parse a function declaration or literal (depending on the\n// `statement & FUNC_STATEMENT`).\n\n// Remove `allowExpressionBody` for 7.0.0, as it is only called with false\npp$8.parseFunction = function(node, statement, allowExpressionBody, isAsync, forInit) {\n this.initFunction(node);\n if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {\n if (this.type === types$1.star && (statement & FUNC_HANGING_STATEMENT))\n { this.unexpected(); }\n node.generator = this.eat(types$1.star);\n }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n if (statement & FUNC_STATEMENT) {\n node.id = (statement & FUNC_NULLABLE_ID) && this.type !== types$1.name ? null : this.parseIdent();\n if (node.id && !(statement & FUNC_HANGING_STATEMENT))\n // If it is a regular function declaration in sloppy mode, then it is\n // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding\n // mode depends on properties of the current scope (see\n // treatFunctionsAsVar).\n { this.checkLValSimple(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION); }\n }\n\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(node.async, node.generator));\n\n if (!(statement & FUNC_STATEMENT))\n { node.id = this.type === types$1.name ? this.parseIdent() : null; }\n\n this.parseFunctionParams(node);\n this.parseFunctionBody(node, allowExpressionBody, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, (statement & FUNC_STATEMENT) ? \"FunctionDeclaration\" : \"FunctionExpression\")\n};\n\npp$8.parseFunctionParams = function(node) {\n this.expect(types$1.parenL);\n node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n};\n\n// Parse a class declaration or literal (depending on the\n// `isStatement` parameter).\n\npp$8.parseClass = function(node, isStatement) {\n this.next();\n\n // ecma-262 14.6 Class Definitions\n // A class definition is always strict mode code.\n var oldStrict = this.strict;\n this.strict = true;\n\n this.parseClassId(node, isStatement);\n this.parseClassSuper(node);\n var privateNameMap = this.enterClassBody();\n var classBody = this.startNode();\n var hadConstructor = false;\n classBody.body = [];\n this.expect(types$1.braceL);\n while (this.type !== types$1.braceR) {\n var element = this.parseClassElement(node.superClass !== null);\n if (element) {\n classBody.body.push(element);\n if (element.type === \"MethodDefinition\" && element.kind === \"constructor\") {\n if (hadConstructor) { this.raiseRecoverable(element.start, \"Duplicate constructor in the same class\"); }\n hadConstructor = true;\n } else if (element.key && element.key.type === \"PrivateIdentifier\" && isPrivateNameConflicted(privateNameMap, element)) {\n this.raiseRecoverable(element.key.start, (\"Identifier '#\" + (element.key.name) + \"' has already been declared\"));\n }\n }\n }\n this.strict = oldStrict;\n this.next();\n node.body = this.finishNode(classBody, \"ClassBody\");\n this.exitClassBody();\n return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\")\n};\n\npp$8.parseClassElement = function(constructorAllowsSuper) {\n if (this.eat(types$1.semi)) { return null }\n\n var ecmaVersion = this.options.ecmaVersion;\n var node = this.startNode();\n var keyName = \"\";\n var isGenerator = false;\n var isAsync = false;\n var kind = \"method\";\n var isStatic = false;\n\n if (this.eatContextual(\"static\")) {\n // Parse static init block\n if (ecmaVersion >= 13 && this.eat(types$1.braceL)) {\n this.parseClassStaticBlock(node);\n return node\n }\n if (this.isClassElementNameStart() || this.type === types$1.star) {\n isStatic = true;\n } else {\n keyName = \"static\";\n }\n }\n node.static = isStatic;\n if (!keyName && ecmaVersion >= 8 && this.eatContextual(\"async\")) {\n if ((this.isClassElementNameStart() || this.type === types$1.star) && !this.canInsertSemicolon()) {\n isAsync = true;\n } else {\n keyName = \"async\";\n }\n }\n if (!keyName && (ecmaVersion >= 9 || !isAsync) && this.eat(types$1.star)) {\n isGenerator = true;\n }\n if (!keyName && !isAsync && !isGenerator) {\n var lastValue = this.value;\n if (this.eatContextual(\"get\") || this.eatContextual(\"set\")) {\n if (this.isClassElementNameStart()) {\n kind = lastValue;\n } else {\n keyName = lastValue;\n }\n }\n }\n\n // Parse element name\n if (keyName) {\n // 'async', 'get', 'set', or 'static' were not a keyword contextually.\n // The last token is any of those. Make it the element name.\n node.computed = false;\n node.key = this.startNodeAt(this.lastTokStart, this.lastTokStartLoc);\n node.key.name = keyName;\n this.finishNode(node.key, \"Identifier\");\n } else {\n this.parseClassElementName(node);\n }\n\n // Parse element value\n if (ecmaVersion < 13 || this.type === types$1.parenL || kind !== \"method\" || isGenerator || isAsync) {\n var isConstructor = !node.static && checkKeyName(node, \"constructor\");\n var allowsDirectSuper = isConstructor && constructorAllowsSuper;\n // Couldn't move this check into the 'parseClassMethod' method for backward compatibility.\n if (isConstructor && kind !== \"method\") { this.raise(node.key.start, \"Constructor can't have get/set modifier\"); }\n node.kind = isConstructor ? \"constructor\" : kind;\n this.parseClassMethod(node, isGenerator, isAsync, allowsDirectSuper);\n } else {\n this.parseClassField(node);\n }\n\n return node\n};\n\npp$8.isClassElementNameStart = function() {\n return (\n this.type === types$1.name ||\n this.type === types$1.privateId ||\n this.type === types$1.num ||\n this.type === types$1.string ||\n this.type === types$1.bracketL ||\n this.type.keyword\n )\n};\n\npp$8.parseClassElementName = function(element) {\n if (this.type === types$1.privateId) {\n if (this.value === \"constructor\") {\n this.raise(this.start, \"Classes can't have an element named '#constructor'\");\n }\n element.computed = false;\n element.key = this.parsePrivateIdent();\n } else {\n this.parsePropertyName(element);\n }\n};\n\npp$8.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {\n // Check key and flags\n var key = method.key;\n if (method.kind === \"constructor\") {\n if (isGenerator) { this.raise(key.start, \"Constructor can't be a generator\"); }\n if (isAsync) { this.raise(key.start, \"Constructor can't be an async method\"); }\n } else if (method.static && checkKeyName(method, \"prototype\")) {\n this.raise(key.start, \"Classes may not have a static property named prototype\");\n }\n\n // Parse value\n var value = method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);\n\n // Check value\n if (method.kind === \"get\" && value.params.length !== 0)\n { this.raiseRecoverable(value.start, \"getter should have no params\"); }\n if (method.kind === \"set\" && value.params.length !== 1)\n { this.raiseRecoverable(value.start, \"setter should have exactly one param\"); }\n if (method.kind === \"set\" && value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(value.params[0].start, \"Setter cannot use rest params\"); }\n\n return this.finishNode(method, \"MethodDefinition\")\n};\n\npp$8.parseClassField = function(field) {\n if (checkKeyName(field, \"constructor\")) {\n this.raise(field.key.start, \"Classes can't have a field named 'constructor'\");\n } else if (field.static && checkKeyName(field, \"prototype\")) {\n this.raise(field.key.start, \"Classes can't have a static field named 'prototype'\");\n }\n\n if (this.eat(types$1.eq)) {\n // To raise SyntaxError if 'arguments' exists in the initializer.\n this.enterScope(SCOPE_CLASS_FIELD_INIT | SCOPE_SUPER);\n field.value = this.parseMaybeAssign();\n this.exitScope();\n } else {\n field.value = null;\n }\n this.semicolon();\n\n return this.finishNode(field, \"PropertyDefinition\")\n};\n\npp$8.parseClassStaticBlock = function(node) {\n node.body = [];\n\n var oldLabels = this.labels;\n this.labels = [];\n this.enterScope(SCOPE_CLASS_STATIC_BLOCK | SCOPE_SUPER);\n while (this.type !== types$1.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n this.next();\n this.exitScope();\n this.labels = oldLabels;\n\n return this.finishNode(node, \"StaticBlock\")\n};\n\npp$8.parseClassId = function(node, isStatement) {\n if (this.type === types$1.name) {\n node.id = this.parseIdent();\n if (isStatement)\n { this.checkLValSimple(node.id, BIND_LEXICAL, false); }\n } else {\n if (isStatement === true)\n { this.unexpected(); }\n node.id = null;\n }\n};\n\npp$8.parseClassSuper = function(node) {\n node.superClass = this.eat(types$1._extends) ? this.parseExprSubscripts(null, false) : null;\n};\n\npp$8.enterClassBody = function() {\n var element = {declared: Object.create(null), used: []};\n this.privateNameStack.push(element);\n return element.declared\n};\n\npp$8.exitClassBody = function() {\n var ref = this.privateNameStack.pop();\n var declared = ref.declared;\n var used = ref.used;\n if (!this.options.checkPrivateFields) { return }\n var len = this.privateNameStack.length;\n var parent = len === 0 ? null : this.privateNameStack[len - 1];\n for (var i = 0; i < used.length; ++i) {\n var id = used[i];\n if (!hasOwn(declared, id.name)) {\n if (parent) {\n parent.used.push(id);\n } else {\n this.raiseRecoverable(id.start, (\"Private field '#\" + (id.name) + \"' must be declared in an enclosing class\"));\n }\n }\n }\n};\n\nfunction isPrivateNameConflicted(privateNameMap, element) {\n var name = element.key.name;\n var curr = privateNameMap[name];\n\n var next = \"true\";\n if (element.type === \"MethodDefinition\" && (element.kind === \"get\" || element.kind === \"set\")) {\n next = (element.static ? \"s\" : \"i\") + element.kind;\n }\n\n // `class { get #a(){}; static set #a(_){} }` is also conflict.\n if (\n curr === \"iget\" && next === \"iset\" ||\n curr === \"iset\" && next === \"iget\" ||\n curr === \"sget\" && next === \"sset\" ||\n curr === \"sset\" && next === \"sget\"\n ) {\n privateNameMap[name] = \"true\";\n return false\n } else if (!curr) {\n privateNameMap[name] = next;\n return false\n } else {\n return true\n }\n}\n\nfunction checkKeyName(node, name) {\n var computed = node.computed;\n var key = node.key;\n return !computed && (\n key.type === \"Identifier\" && key.name === name ||\n key.type === \"Literal\" && key.value === name\n )\n}\n\n// Parses module export declaration.\n\npp$8.parseExportAllDeclaration = function(node, exports) {\n if (this.options.ecmaVersion >= 11) {\n if (this.eatContextual(\"as\")) {\n node.exported = this.parseModuleExportName();\n this.checkExport(exports, node.exported, this.lastTokStart);\n } else {\n node.exported = null;\n }\n }\n this.expectContextual(\"from\");\n if (this.type !== types$1.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n if (this.options.ecmaVersion >= 16)\n { node.attributes = this.parseWithClause(); }\n this.semicolon();\n return this.finishNode(node, \"ExportAllDeclaration\")\n};\n\npp$8.parseExport = function(node, exports) {\n this.next();\n // export * from '...'\n if (this.eat(types$1.star)) {\n return this.parseExportAllDeclaration(node, exports)\n }\n if (this.eat(types$1._default)) { // export default ...\n this.checkExport(exports, \"default\", this.lastTokStart);\n node.declaration = this.parseExportDefaultDeclaration();\n return this.finishNode(node, \"ExportDefaultDeclaration\")\n }\n // export var|const|let|function|class ...\n if (this.shouldParseExportStatement()) {\n node.declaration = this.parseExportDeclaration(node);\n if (node.declaration.type === \"VariableDeclaration\")\n { this.checkVariableExport(exports, node.declaration.declarations); }\n else\n { this.checkExport(exports, node.declaration.id, node.declaration.id.start); }\n node.specifiers = [];\n node.source = null;\n if (this.options.ecmaVersion >= 16)\n { node.attributes = []; }\n } else { // export { x, y as z } [from '...']\n node.declaration = null;\n node.specifiers = this.parseExportSpecifiers(exports);\n if (this.eatContextual(\"from\")) {\n if (this.type !== types$1.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n if (this.options.ecmaVersion >= 16)\n { node.attributes = this.parseWithClause(); }\n } else {\n for (var i = 0, list = node.specifiers; i < list.length; i += 1) {\n // check for keywords used as local names\n var spec = list[i];\n\n this.checkUnreserved(spec.local);\n // check if export is defined\n this.checkLocalExport(spec.local);\n\n if (spec.local.type === \"Literal\") {\n this.raise(spec.local.start, \"A string literal cannot be used as an exported binding without `from`.\");\n }\n }\n\n node.source = null;\n if (this.options.ecmaVersion >= 16)\n { node.attributes = []; }\n }\n this.semicolon();\n }\n return this.finishNode(node, \"ExportNamedDeclaration\")\n};\n\npp$8.parseExportDeclaration = function(node) {\n return this.parseStatement(null)\n};\n\npp$8.parseExportDefaultDeclaration = function() {\n var isAsync;\n if (this.type === types$1._function || (isAsync = this.isAsyncFunction())) {\n var fNode = this.startNode();\n this.next();\n if (isAsync) { this.next(); }\n return this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync)\n } else if (this.type === types$1._class) {\n var cNode = this.startNode();\n return this.parseClass(cNode, \"nullableID\")\n } else {\n var declaration = this.parseMaybeAssign();\n this.semicolon();\n return declaration\n }\n};\n\npp$8.checkExport = function(exports, name, pos) {\n if (!exports) { return }\n if (typeof name !== \"string\")\n { name = name.type === \"Identifier\" ? name.name : name.value; }\n if (hasOwn(exports, name))\n { this.raiseRecoverable(pos, \"Duplicate export '\" + name + \"'\"); }\n exports[name] = true;\n};\n\npp$8.checkPatternExport = function(exports, pat) {\n var type = pat.type;\n if (type === \"Identifier\")\n { this.checkExport(exports, pat, pat.start); }\n else if (type === \"ObjectPattern\")\n { for (var i = 0, list = pat.properties; i < list.length; i += 1)\n {\n var prop = list[i];\n\n this.checkPatternExport(exports, prop);\n } }\n else if (type === \"ArrayPattern\")\n { for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) {\n var elt = list$1[i$1];\n\n if (elt) { this.checkPatternExport(exports, elt); }\n } }\n else if (type === \"Property\")\n { this.checkPatternExport(exports, pat.value); }\n else if (type === \"AssignmentPattern\")\n { this.checkPatternExport(exports, pat.left); }\n else if (type === \"RestElement\")\n { this.checkPatternExport(exports, pat.argument); }\n};\n\npp$8.checkVariableExport = function(exports, decls) {\n if (!exports) { return }\n for (var i = 0, list = decls; i < list.length; i += 1)\n {\n var decl = list[i];\n\n this.checkPatternExport(exports, decl.id);\n }\n};\n\npp$8.shouldParseExportStatement = function() {\n return this.type.keyword === \"var\" ||\n this.type.keyword === \"const\" ||\n this.type.keyword === \"class\" ||\n this.type.keyword === \"function\" ||\n this.isLet() ||\n this.isAsyncFunction()\n};\n\n// Parses a comma-separated list of module exports.\n\npp$8.parseExportSpecifier = function(exports) {\n var node = this.startNode();\n node.local = this.parseModuleExportName();\n\n node.exported = this.eatContextual(\"as\") ? this.parseModuleExportName() : node.local;\n this.checkExport(\n exports,\n node.exported,\n node.exported.start\n );\n\n return this.finishNode(node, \"ExportSpecifier\")\n};\n\npp$8.parseExportSpecifiers = function(exports) {\n var nodes = [], first = true;\n // export { x, y as z } [from '...']\n this.expect(types$1.braceL);\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n nodes.push(this.parseExportSpecifier(exports));\n }\n return nodes\n};\n\n// Parses import declaration.\n\npp$8.parseImport = function(node) {\n this.next();\n\n // import '...'\n if (this.type === types$1.string) {\n node.specifiers = empty$1;\n node.source = this.parseExprAtom();\n } else {\n node.specifiers = this.parseImportSpecifiers();\n this.expectContextual(\"from\");\n node.source = this.type === types$1.string ? this.parseExprAtom() : this.unexpected();\n }\n if (this.options.ecmaVersion >= 16)\n { node.attributes = this.parseWithClause(); }\n this.semicolon();\n return this.finishNode(node, \"ImportDeclaration\")\n};\n\n// Parses a comma-separated list of module imports.\n\npp$8.parseImportSpecifier = function() {\n var node = this.startNode();\n node.imported = this.parseModuleExportName();\n\n if (this.eatContextual(\"as\")) {\n node.local = this.parseIdent();\n } else {\n this.checkUnreserved(node.imported);\n node.local = node.imported;\n }\n this.checkLValSimple(node.local, BIND_LEXICAL);\n\n return this.finishNode(node, \"ImportSpecifier\")\n};\n\npp$8.parseImportDefaultSpecifier = function() {\n // import defaultObj, { x, y as z } from '...'\n var node = this.startNode();\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, BIND_LEXICAL);\n return this.finishNode(node, \"ImportDefaultSpecifier\")\n};\n\npp$8.parseImportNamespaceSpecifier = function() {\n var node = this.startNode();\n this.next();\n this.expectContextual(\"as\");\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, BIND_LEXICAL);\n return this.finishNode(node, \"ImportNamespaceSpecifier\")\n};\n\npp$8.parseImportSpecifiers = function() {\n var nodes = [], first = true;\n if (this.type === types$1.name) {\n nodes.push(this.parseImportDefaultSpecifier());\n if (!this.eat(types$1.comma)) { return nodes }\n }\n if (this.type === types$1.star) {\n nodes.push(this.parseImportNamespaceSpecifier());\n return nodes\n }\n this.expect(types$1.braceL);\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n nodes.push(this.parseImportSpecifier());\n }\n return nodes\n};\n\npp$8.parseWithClause = function() {\n var nodes = [];\n if (!this.eat(types$1._with)) {\n return nodes\n }\n this.expect(types$1.braceL);\n var attributeKeys = {};\n var first = true;\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n var attr = this.parseImportAttribute();\n var keyName = attr.key.type === \"Identifier\" ? attr.key.name : attr.key.value;\n if (hasOwn(attributeKeys, keyName))\n { this.raiseRecoverable(attr.key.start, \"Duplicate attribute key '\" + keyName + \"'\"); }\n attributeKeys[keyName] = true;\n nodes.push(attr);\n }\n return nodes\n};\n\npp$8.parseImportAttribute = function() {\n var node = this.startNode();\n node.key = this.type === types$1.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\");\n this.expect(types$1.colon);\n if (this.type !== types$1.string) {\n this.unexpected();\n }\n node.value = this.parseExprAtom();\n return this.finishNode(node, \"ImportAttribute\")\n};\n\npp$8.parseModuleExportName = function() {\n if (this.options.ecmaVersion >= 13 && this.type === types$1.string) {\n var stringLiteral = this.parseLiteral(this.value);\n if (loneSurrogate.test(stringLiteral.value)) {\n this.raise(stringLiteral.start, \"An export name cannot include a lone surrogate.\");\n }\n return stringLiteral\n }\n return this.parseIdent(true)\n};\n\n// Set `ExpressionStatement#directive` property for directive prologues.\npp$8.adaptDirectivePrologue = function(statements) {\n for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) {\n statements[i].directive = statements[i].expression.raw.slice(1, -1);\n }\n};\npp$8.isDirectiveCandidate = function(statement) {\n return (\n this.options.ecmaVersion >= 5 &&\n statement.type === \"ExpressionStatement\" &&\n statement.expression.type === \"Literal\" &&\n typeof statement.expression.value === \"string\" &&\n // Reject parenthesized strings.\n (this.input[statement.start] === \"\\\"\" || this.input[statement.start] === \"'\")\n )\n};\n\nvar pp$7 = Parser.prototype;\n\n// Convert existing expression atom to assignable pattern\n// if possible.\n\npp$7.toAssignable = function(node, isBinding, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 6 && node) {\n switch (node.type) {\n case \"Identifier\":\n if (this.inAsync && node.name === \"await\")\n { this.raise(node.start, \"Cannot use 'await' as identifier inside an async function\"); }\n break\n\n case \"ObjectPattern\":\n case \"ArrayPattern\":\n case \"AssignmentPattern\":\n case \"RestElement\":\n break\n\n case \"ObjectExpression\":\n node.type = \"ObjectPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n for (var i = 0, list = node.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.toAssignable(prop, isBinding);\n // Early error:\n // AssignmentRestProperty[Yield, Await] :\n // `...` DestructuringAssignmentTarget[Yield, Await]\n //\n // It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.\n if (\n prop.type === \"RestElement\" &&\n (prop.argument.type === \"ArrayPattern\" || prop.argument.type === \"ObjectPattern\")\n ) {\n this.raise(prop.argument.start, \"Unexpected token\");\n }\n }\n break\n\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n if (node.kind !== \"init\") { this.raise(node.key.start, \"Object pattern can't contain getter or setter\"); }\n this.toAssignable(node.value, isBinding);\n break\n\n case \"ArrayExpression\":\n node.type = \"ArrayPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n this.toAssignableList(node.elements, isBinding);\n break\n\n case \"SpreadElement\":\n node.type = \"RestElement\";\n this.toAssignable(node.argument, isBinding);\n if (node.argument.type === \"AssignmentPattern\")\n { this.raise(node.argument.start, \"Rest elements cannot have a default value\"); }\n break\n\n case \"AssignmentExpression\":\n if (node.operator !== \"=\") { this.raise(node.left.end, \"Only '=' operator can be used for specifying default value.\"); }\n node.type = \"AssignmentPattern\";\n delete node.operator;\n this.toAssignable(node.left, isBinding);\n break\n\n case \"ParenthesizedExpression\":\n this.toAssignable(node.expression, isBinding, refDestructuringErrors);\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(node.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (!isBinding) { break }\n\n default:\n this.raise(node.start, \"Assigning to rvalue\");\n }\n } else if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n return node\n};\n\n// Convert list of expression atoms to binding list.\n\npp$7.toAssignableList = function(exprList, isBinding) {\n var end = exprList.length;\n for (var i = 0; i < end; i++) {\n var elt = exprList[i];\n if (elt) { this.toAssignable(elt, isBinding); }\n }\n if (end) {\n var last = exprList[end - 1];\n if (this.options.ecmaVersion === 6 && isBinding && last && last.type === \"RestElement\" && last.argument.type !== \"Identifier\")\n { this.unexpected(last.argument.start); }\n }\n return exprList\n};\n\n// Parses spread element.\n\npp$7.parseSpread = function(refDestructuringErrors) {\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n return this.finishNode(node, \"SpreadElement\")\n};\n\npp$7.parseRestBinding = function() {\n var node = this.startNode();\n this.next();\n\n // RestElement inside of a function parameter must be an identifier\n if (this.options.ecmaVersion === 6 && this.type !== types$1.name)\n { this.unexpected(); }\n\n node.argument = this.parseBindingAtom();\n\n return this.finishNode(node, \"RestElement\")\n};\n\n// Parses lvalue (assignable) atom.\n\npp$7.parseBindingAtom = function() {\n if (this.options.ecmaVersion >= 6) {\n switch (this.type) {\n case types$1.bracketL:\n var node = this.startNode();\n this.next();\n node.elements = this.parseBindingList(types$1.bracketR, true, true);\n return this.finishNode(node, \"ArrayPattern\")\n\n case types$1.braceL:\n return this.parseObj(true)\n }\n }\n return this.parseIdent()\n};\n\npp$7.parseBindingList = function(close, allowEmpty, allowTrailingComma, allowModifiers) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (first) { first = false; }\n else { this.expect(types$1.comma); }\n if (allowEmpty && this.type === types$1.comma) {\n elts.push(null);\n } else if (allowTrailingComma && this.afterTrailingComma(close)) {\n break\n } else if (this.type === types$1.ellipsis) {\n var rest = this.parseRestBinding();\n this.parseBindingListItem(rest);\n elts.push(rest);\n if (this.type === types$1.comma) { this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\"); }\n this.expect(close);\n break\n } else {\n elts.push(this.parseAssignableListItem(allowModifiers));\n }\n }\n return elts\n};\n\npp$7.parseAssignableListItem = function(allowModifiers) {\n var elem = this.parseMaybeDefault(this.start, this.startLoc);\n this.parseBindingListItem(elem);\n return elem\n};\n\npp$7.parseBindingListItem = function(param) {\n return param\n};\n\n// Parses assignment pattern around given atom if possible.\n\npp$7.parseMaybeDefault = function(startPos, startLoc, left) {\n left = left || this.parseBindingAtom();\n if (this.options.ecmaVersion < 6 || !this.eat(types$1.eq)) { return left }\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.right = this.parseMaybeAssign();\n return this.finishNode(node, \"AssignmentPattern\")\n};\n\n// The following three functions all verify that a node is an lvalue —\n// something that can be bound, or assigned to. In order to do so, they perform\n// a variety of checks:\n//\n// - Check that none of the bound/assigned-to identifiers are reserved words.\n// - Record name declarations for bindings in the appropriate scope.\n// - Check duplicate argument names, if checkClashes is set.\n//\n// If a complex binding pattern is encountered (e.g., object and array\n// destructuring), the entire pattern is recursively checked.\n//\n// There are three versions of checkLVal*() appropriate for different\n// circumstances:\n//\n// - checkLValSimple() shall be used if the syntactic construct supports\n// nothing other than identifiers and member expressions. Parenthesized\n// expressions are also correctly handled. This is generally appropriate for\n// constructs for which the spec says\n//\n// > It is a Syntax Error if AssignmentTargetType of [the production] is not\n// > simple.\n//\n// It is also appropriate for checking if an identifier is valid and not\n// defined elsewhere, like import declarations or function/class identifiers.\n//\n// Examples where this is used include:\n// a += …;\n// import a from '…';\n// where a is the node to be checked.\n//\n// - checkLValPattern() shall be used if the syntactic construct supports\n// anything checkLValSimple() supports, as well as object and array\n// destructuring patterns. This is generally appropriate for constructs for\n// which the spec says\n//\n// > It is a Syntax Error if [the production] is neither an ObjectLiteral nor\n// > an ArrayLiteral and AssignmentTargetType of [the production] is not\n// > simple.\n//\n// Examples where this is used include:\n// (a = …);\n// const a = …;\n// try { … } catch (a) { … }\n// where a is the node to be checked.\n//\n// - checkLValInnerPattern() shall be used if the syntactic construct supports\n// anything checkLValPattern() supports, as well as default assignment\n// patterns, rest elements, and other constructs that may appear within an\n// object or array destructuring pattern.\n//\n// As a special case, function parameters also use checkLValInnerPattern(),\n// as they also support defaults and rest constructs.\n//\n// These functions deliberately support both assignment and binding constructs,\n// as the logic for both is exceedingly similar. If the node is the target of\n// an assignment, then bindingType should be set to BIND_NONE. Otherwise, it\n// should be set to the appropriate BIND_* constant, like BIND_VAR or\n// BIND_LEXICAL.\n//\n// If the function is called with a non-BIND_NONE bindingType, then\n// additionally a checkClashes object may be specified to allow checking for\n// duplicate argument names. checkClashes is ignored if the provided construct\n// is an assignment (i.e., bindingType is BIND_NONE).\n\npp$7.checkLValSimple = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n var isBind = bindingType !== BIND_NONE;\n\n switch (expr.type) {\n case \"Identifier\":\n if (this.strict && this.reservedWordsStrictBind.test(expr.name))\n { this.raiseRecoverable(expr.start, (isBind ? \"Binding \" : \"Assigning to \") + expr.name + \" in strict mode\"); }\n if (isBind) {\n if (bindingType === BIND_LEXICAL && expr.name === \"let\")\n { this.raiseRecoverable(expr.start, \"let is disallowed as a lexically bound name\"); }\n if (checkClashes) {\n if (hasOwn(checkClashes, expr.name))\n { this.raiseRecoverable(expr.start, \"Argument name clash\"); }\n checkClashes[expr.name] = true;\n }\n if (bindingType !== BIND_OUTSIDE) { this.declareName(expr.name, bindingType, expr.start); }\n }\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(expr.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding member expression\"); }\n break\n\n case \"ParenthesizedExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding parenthesized expression\"); }\n return this.checkLValSimple(expr.expression, bindingType, checkClashes)\n\n default:\n this.raise(expr.start, (isBind ? \"Binding\" : \"Assigning to\") + \" rvalue\");\n }\n};\n\npp$7.checkLValPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"ObjectPattern\":\n for (var i = 0, list = expr.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.checkLValInnerPattern(prop, bindingType, checkClashes);\n }\n break\n\n case \"ArrayPattern\":\n for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) {\n var elem = list$1[i$1];\n\n if (elem) { this.checkLValInnerPattern(elem, bindingType, checkClashes); }\n }\n break\n\n default:\n this.checkLValSimple(expr, bindingType, checkClashes);\n }\n};\n\npp$7.checkLValInnerPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n this.checkLValInnerPattern(expr.value, bindingType, checkClashes);\n break\n\n case \"AssignmentPattern\":\n this.checkLValPattern(expr.left, bindingType, checkClashes);\n break\n\n case \"RestElement\":\n this.checkLValPattern(expr.argument, bindingType, checkClashes);\n break\n\n default:\n this.checkLValPattern(expr, bindingType, checkClashes);\n }\n};\n\n// The algorithm used to determine whether a regexp can appear at a\n// given point in the program is loosely based on sweet.js' approach.\n// See https://github.com/mozilla/sweet.js/wiki/design\n\n\nvar TokContext = function TokContext(token, isExpr, preserveSpace, override, generator) {\n this.token = token;\n this.isExpr = !!isExpr;\n this.preserveSpace = !!preserveSpace;\n this.override = override;\n this.generator = !!generator;\n};\n\nvar types = {\n b_stat: new TokContext(\"{\", false),\n b_expr: new TokContext(\"{\", true),\n b_tmpl: new TokContext(\"${\", false),\n p_stat: new TokContext(\"(\", false),\n p_expr: new TokContext(\"(\", true),\n q_tmpl: new TokContext(\"`\", true, true, function (p) { return p.tryReadTemplateToken(); }),\n f_stat: new TokContext(\"function\", false),\n f_expr: new TokContext(\"function\", true),\n f_expr_gen: new TokContext(\"function\", true, false, null, true),\n f_gen: new TokContext(\"function\", false, false, null, true)\n};\n\nvar pp$6 = Parser.prototype;\n\npp$6.initialContext = function() {\n return [types.b_stat]\n};\n\npp$6.curContext = function() {\n return this.context[this.context.length - 1]\n};\n\npp$6.braceIsBlock = function(prevType) {\n var parent = this.curContext();\n if (parent === types.f_expr || parent === types.f_stat)\n { return true }\n if (prevType === types$1.colon && (parent === types.b_stat || parent === types.b_expr))\n { return !parent.isExpr }\n\n // The check for `tt.name && exprAllowed` detects whether we are\n // after a `yield` or `of` construct. See the `updateContext` for\n // `tt.name`.\n if (prevType === types$1._return || prevType === types$1.name && this.exprAllowed)\n { return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) }\n if (prevType === types$1._else || prevType === types$1.semi || prevType === types$1.eof || prevType === types$1.parenR || prevType === types$1.arrow)\n { return true }\n if (prevType === types$1.braceL)\n { return parent === types.b_stat }\n if (prevType === types$1._var || prevType === types$1._const || prevType === types$1.name)\n { return false }\n return !this.exprAllowed\n};\n\npp$6.inGeneratorContext = function() {\n for (var i = this.context.length - 1; i >= 1; i--) {\n var context = this.context[i];\n if (context.token === \"function\")\n { return context.generator }\n }\n return false\n};\n\npp$6.updateContext = function(prevType) {\n var update, type = this.type;\n if (type.keyword && prevType === types$1.dot)\n { this.exprAllowed = false; }\n else if (update = type.updateContext)\n { update.call(this, prevType); }\n else\n { this.exprAllowed = type.beforeExpr; }\n};\n\n// Used to handle edge cases when token context could not be inferred correctly during tokenization phase\n\npp$6.overrideContext = function(tokenCtx) {\n if (this.curContext() !== tokenCtx) {\n this.context[this.context.length - 1] = tokenCtx;\n }\n};\n\n// Token-specific context update code\n\ntypes$1.parenR.updateContext = types$1.braceR.updateContext = function() {\n if (this.context.length === 1) {\n this.exprAllowed = true;\n return\n }\n var out = this.context.pop();\n if (out === types.b_stat && this.curContext().token === \"function\") {\n out = this.context.pop();\n }\n this.exprAllowed = !out.isExpr;\n};\n\ntypes$1.braceL.updateContext = function(prevType) {\n this.context.push(this.braceIsBlock(prevType) ? types.b_stat : types.b_expr);\n this.exprAllowed = true;\n};\n\ntypes$1.dollarBraceL.updateContext = function() {\n this.context.push(types.b_tmpl);\n this.exprAllowed = true;\n};\n\ntypes$1.parenL.updateContext = function(prevType) {\n var statementParens = prevType === types$1._if || prevType === types$1._for || prevType === types$1._with || prevType === types$1._while;\n this.context.push(statementParens ? types.p_stat : types.p_expr);\n this.exprAllowed = true;\n};\n\ntypes$1.incDec.updateContext = function() {\n // tokExprAllowed stays unchanged\n};\n\ntypes$1._function.updateContext = types$1._class.updateContext = function(prevType) {\n if (prevType.beforeExpr && prevType !== types$1._else &&\n !(prevType === types$1.semi && this.curContext() !== types.p_stat) &&\n !(prevType === types$1._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) &&\n !((prevType === types$1.colon || prevType === types$1.braceL) && this.curContext() === types.b_stat))\n { this.context.push(types.f_expr); }\n else\n { this.context.push(types.f_stat); }\n this.exprAllowed = false;\n};\n\ntypes$1.colon.updateContext = function() {\n if (this.curContext().token === \"function\") { this.context.pop(); }\n this.exprAllowed = true;\n};\n\ntypes$1.backQuote.updateContext = function() {\n if (this.curContext() === types.q_tmpl)\n { this.context.pop(); }\n else\n { this.context.push(types.q_tmpl); }\n this.exprAllowed = false;\n};\n\ntypes$1.star.updateContext = function(prevType) {\n if (prevType === types$1._function) {\n var index = this.context.length - 1;\n if (this.context[index] === types.f_expr)\n { this.context[index] = types.f_expr_gen; }\n else\n { this.context[index] = types.f_gen; }\n }\n this.exprAllowed = true;\n};\n\ntypes$1.name.updateContext = function(prevType) {\n var allowed = false;\n if (this.options.ecmaVersion >= 6 && prevType !== types$1.dot) {\n if (this.value === \"of\" && !this.exprAllowed ||\n this.value === \"yield\" && this.inGeneratorContext())\n { allowed = true; }\n }\n this.exprAllowed = allowed;\n};\n\n// A recursive descent parser operates by defining functions for all\n// syntactic elements, and recursively calling those, each function\n// advancing the input stream and returning an AST node. Precedence\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n// instead of `(!x)[1]` is handled by the fact that the parser\n// function that parses unary prefix operators is called first, and\n// in turn calls the function that parses `[]` subscripts — that\n// way, it'll receive the node for `x[1]` already parsed, and wraps\n// *that* in the unary operator node.\n//\n// Acorn uses an [operator precedence parser][opp] to handle binary\n// operator precedence, because it is much more compact than using\n// the technique outlined above, which uses different, nesting\n// functions to specify precedence, for all of the ten binary\n// precedence levels that JavaScript defines.\n//\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\n\n\nvar pp$5 = Parser.prototype;\n\n// Check if property name clashes with already added.\n// Object/class getters and setters are not allowed to clash —\n// either with each other or with an init property — and in\n// strict mode, init properties are also not allowed to be repeated.\n\npp$5.checkPropClash = function(prop, propHash, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 9 && prop.type === \"SpreadElement\")\n { return }\n if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand))\n { return }\n var key = prop.key;\n var name;\n switch (key.type) {\n case \"Identifier\": name = key.name; break\n case \"Literal\": name = String(key.value); break\n default: return\n }\n var kind = prop.kind;\n if (this.options.ecmaVersion >= 6) {\n if (name === \"__proto__\" && kind === \"init\") {\n if (propHash.proto) {\n if (refDestructuringErrors) {\n if (refDestructuringErrors.doubleProto < 0) {\n refDestructuringErrors.doubleProto = key.start;\n }\n } else {\n this.raiseRecoverable(key.start, \"Redefinition of __proto__ property\");\n }\n }\n propHash.proto = true;\n }\n return\n }\n name = \"$\" + name;\n var other = propHash[name];\n if (other) {\n var redefinition;\n if (kind === \"init\") {\n redefinition = this.strict && other.init || other.get || other.set;\n } else {\n redefinition = other.init || other[kind];\n }\n if (redefinition)\n { this.raiseRecoverable(key.start, \"Redefinition of property\"); }\n } else {\n other = propHash[name] = {\n init: false,\n get: false,\n set: false\n };\n }\n other[kind] = true;\n};\n\n// ### Expression parsing\n\n// These nest, from the most general expression type at the top to\n// 'atomic', nondivisible expression types at the bottom. Most of\n// the functions will simply let the function(s) below them parse,\n// and, *if* the syntactic construct they handle is present, wrap\n// the AST node that the inner parser gave them in another node.\n\n// Parse a full expression. The optional arguments are used to\n// forbid the `in` operator (in for loops initalization expressions)\n// and provide reference for storing '=' operator inside shorthand\n// property assignment in contexts where both object expression\n// and object pattern might appear (so it's possible to raise\n// delayed syntax error at correct position).\n\npp$5.parseExpression = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeAssign(forInit, refDestructuringErrors);\n if (this.type === types$1.comma) {\n var node = this.startNodeAt(startPos, startLoc);\n node.expressions = [expr];\n while (this.eat(types$1.comma)) { node.expressions.push(this.parseMaybeAssign(forInit, refDestructuringErrors)); }\n return this.finishNode(node, \"SequenceExpression\")\n }\n return expr\n};\n\n// Parse an assignment expression. This includes applications of\n// operators like `+=`.\n\npp$5.parseMaybeAssign = function(forInit, refDestructuringErrors, afterLeftParse) {\n if (this.isContextual(\"yield\")) {\n if (this.inGenerator) { return this.parseYield(forInit) }\n // The tokenizer will assume an expression is allowed after\n // `yield`, but this isn't that kind of yield\n else { this.exprAllowed = false; }\n }\n\n var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldDoubleProto = -1;\n if (refDestructuringErrors) {\n oldParenAssign = refDestructuringErrors.parenthesizedAssign;\n oldTrailingComma = refDestructuringErrors.trailingComma;\n oldDoubleProto = refDestructuringErrors.doubleProto;\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = -1;\n } else {\n refDestructuringErrors = new DestructuringErrors;\n ownDestructuringErrors = true;\n }\n\n var startPos = this.start, startLoc = this.startLoc;\n if (this.type === types$1.parenL || this.type === types$1.name) {\n this.potentialArrowAt = this.start;\n this.potentialArrowInForAwait = forInit === \"await\";\n }\n var left = this.parseMaybeConditional(forInit, refDestructuringErrors);\n if (afterLeftParse) { left = afterLeftParse.call(this, left, startPos, startLoc); }\n if (this.type.isAssign) {\n var node = this.startNodeAt(startPos, startLoc);\n node.operator = this.value;\n if (this.type === types$1.eq)\n { left = this.toAssignable(left, false, refDestructuringErrors); }\n if (!ownDestructuringErrors) {\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1;\n }\n if (refDestructuringErrors.shorthandAssign >= left.start)\n { refDestructuringErrors.shorthandAssign = -1; } // reset because shorthand default was used correctly\n if (this.type === types$1.eq)\n { this.checkLValPattern(left); }\n else\n { this.checkLValSimple(left); }\n node.left = left;\n this.next();\n node.right = this.parseMaybeAssign(forInit);\n if (oldDoubleProto > -1) { refDestructuringErrors.doubleProto = oldDoubleProto; }\n return this.finishNode(node, \"AssignmentExpression\")\n } else {\n if (ownDestructuringErrors) { this.checkExpressionErrors(refDestructuringErrors, true); }\n }\n if (oldParenAssign > -1) { refDestructuringErrors.parenthesizedAssign = oldParenAssign; }\n if (oldTrailingComma > -1) { refDestructuringErrors.trailingComma = oldTrailingComma; }\n return left\n};\n\n// Parse a ternary conditional (`?:`) operator.\n\npp$5.parseMaybeConditional = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprOps(forInit, refDestructuringErrors);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n if (this.eat(types$1.question)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.test = expr;\n node.consequent = this.parseMaybeAssign();\n this.expect(types$1.colon);\n node.alternate = this.parseMaybeAssign(forInit);\n return this.finishNode(node, \"ConditionalExpression\")\n }\n return expr\n};\n\n// Start the precedence parser.\n\npp$5.parseExprOps = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeUnary(refDestructuringErrors, false, false, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n return expr.start === startPos && expr.type === \"ArrowFunctionExpression\" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, forInit)\n};\n\n// Parse binary operators with the operator precedence parsing\n// algorithm. `left` is the left-hand side of the operator.\n// `minPrec` provides context that allows the function to stop and\n// defer further parser to one of its callers when it encounters an\n// operator that has a lower precedence than the set it is parsing.\n\npp$5.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, forInit) {\n var prec = this.type.binop;\n if (prec != null && (!forInit || this.type !== types$1._in)) {\n if (prec > minPrec) {\n var logical = this.type === types$1.logicalOR || this.type === types$1.logicalAND;\n var coalesce = this.type === types$1.coalesce;\n if (coalesce) {\n // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n prec = types$1.logicalAND.binop;\n }\n var op = this.value;\n this.next();\n var startPos = this.start, startLoc = this.startLoc;\n var right = this.parseExprOp(this.parseMaybeUnary(null, false, false, forInit), startPos, startLoc, prec, forInit);\n var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce);\n if ((logical && this.type === types$1.coalesce) || (coalesce && (this.type === types$1.logicalOR || this.type === types$1.logicalAND))) {\n this.raiseRecoverable(this.start, \"Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses\");\n }\n return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, forInit)\n }\n }\n return left\n};\n\npp$5.buildBinary = function(startPos, startLoc, left, right, op, logical) {\n if (right.type === \"PrivateIdentifier\") { this.raise(right.start, \"Private identifier can only be left side of binary expression\"); }\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.operator = op;\n node.right = right;\n return this.finishNode(node, logical ? \"LogicalExpression\" : \"BinaryExpression\")\n};\n\n// Parse unary operators, both prefix and postfix.\n\npp$5.parseMaybeUnary = function(refDestructuringErrors, sawUnary, incDec, forInit) {\n var startPos = this.start, startLoc = this.startLoc, expr;\n if (this.isContextual(\"await\") && this.canAwait) {\n expr = this.parseAwait(forInit);\n sawUnary = true;\n } else if (this.type.prefix) {\n var node = this.startNode(), update = this.type === types$1.incDec;\n node.operator = this.value;\n node.prefix = true;\n this.next();\n node.argument = this.parseMaybeUnary(null, true, update, forInit);\n this.checkExpressionErrors(refDestructuringErrors, true);\n if (update) { this.checkLValSimple(node.argument); }\n else if (this.strict && node.operator === \"delete\" && isLocalVariableAccess(node.argument))\n { this.raiseRecoverable(node.start, \"Deleting local variable in strict mode\"); }\n else if (node.operator === \"delete\" && isPrivateFieldAccess(node.argument))\n { this.raiseRecoverable(node.start, \"Private fields can not be deleted\"); }\n else { sawUnary = true; }\n expr = this.finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n } else if (!sawUnary && this.type === types$1.privateId) {\n if ((forInit || this.privateNameStack.length === 0) && this.options.checkPrivateFields) { this.unexpected(); }\n expr = this.parsePrivateIdent();\n // only could be private fields in 'in', such as #x in obj\n if (this.type !== types$1._in) { this.unexpected(); }\n } else {\n expr = this.parseExprSubscripts(refDestructuringErrors, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n while (this.type.postfix && !this.canInsertSemicolon()) {\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.operator = this.value;\n node$1.prefix = false;\n node$1.argument = expr;\n this.checkLValSimple(expr);\n this.next();\n expr = this.finishNode(node$1, \"UpdateExpression\");\n }\n }\n\n if (!incDec && this.eat(types$1.starstar)) {\n if (sawUnary)\n { this.unexpected(this.lastTokStart); }\n else\n { return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false, false, forInit), \"**\", false) }\n } else {\n return expr\n }\n};\n\nfunction isLocalVariableAccess(node) {\n return (\n node.type === \"Identifier\" ||\n node.type === \"ParenthesizedExpression\" && isLocalVariableAccess(node.expression)\n )\n}\n\nfunction isPrivateFieldAccess(node) {\n return (\n node.type === \"MemberExpression\" && node.property.type === \"PrivateIdentifier\" ||\n node.type === \"ChainExpression\" && isPrivateFieldAccess(node.expression) ||\n node.type === \"ParenthesizedExpression\" && isPrivateFieldAccess(node.expression)\n )\n}\n\n// Parse call, dot, and `[]`-subscript expressions.\n\npp$5.parseExprSubscripts = function(refDestructuringErrors, forInit) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprAtom(refDestructuringErrors, forInit);\n if (expr.type === \"ArrowFunctionExpression\" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== \")\")\n { return expr }\n var result = this.parseSubscripts(expr, startPos, startLoc, false, forInit);\n if (refDestructuringErrors && result.type === \"MemberExpression\") {\n if (refDestructuringErrors.parenthesizedAssign >= result.start) { refDestructuringErrors.parenthesizedAssign = -1; }\n if (refDestructuringErrors.parenthesizedBind >= result.start) { refDestructuringErrors.parenthesizedBind = -1; }\n if (refDestructuringErrors.trailingComma >= result.start) { refDestructuringErrors.trailingComma = -1; }\n }\n return result\n};\n\npp$5.parseSubscripts = function(base, startPos, startLoc, noCalls, forInit) {\n var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === \"Identifier\" && base.name === \"async\" &&\n this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 &&\n this.potentialArrowAt === base.start;\n var optionalChained = false;\n\n while (true) {\n var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit);\n\n if (element.optional) { optionalChained = true; }\n if (element === base || element.type === \"ArrowFunctionExpression\") {\n if (optionalChained) {\n var chainNode = this.startNodeAt(startPos, startLoc);\n chainNode.expression = element;\n element = this.finishNode(chainNode, \"ChainExpression\");\n }\n return element\n }\n\n base = element;\n }\n};\n\npp$5.shouldParseAsyncArrow = function() {\n return !this.canInsertSemicolon() && this.eat(types$1.arrow)\n};\n\npp$5.parseSubscriptAsyncArrow = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true, forInit)\n};\n\npp$5.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit) {\n var optionalSupported = this.options.ecmaVersion >= 11;\n var optional = optionalSupported && this.eat(types$1.questionDot);\n if (noCalls && optional) { this.raise(this.lastTokStart, \"Optional chaining cannot appear in the callee of new expressions\"); }\n\n var computed = this.eat(types$1.bracketL);\n if (computed || (optional && this.type !== types$1.parenL && this.type !== types$1.backQuote) || this.eat(types$1.dot)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.object = base;\n if (computed) {\n node.property = this.parseExpression();\n this.expect(types$1.bracketR);\n } else if (this.type === types$1.privateId && base.type !== \"Super\") {\n node.property = this.parsePrivateIdent();\n } else {\n node.property = this.parseIdent(this.options.allowReserved !== \"never\");\n }\n node.computed = !!computed;\n if (optionalSupported) {\n node.optional = optional;\n }\n base = this.finishNode(node, \"MemberExpression\");\n } else if (!noCalls && this.eat(types$1.parenL)) {\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n var exprList = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors);\n if (maybeAsyncArrow && !optional && this.shouldParseAsyncArrow()) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n if (this.awaitIdentPos > 0)\n { this.raise(this.awaitIdentPos, \"Cannot use 'await' as identifier inside an async function\"); }\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.parseSubscriptAsyncArrow(startPos, startLoc, exprList, forInit)\n }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.callee = base;\n node$1.arguments = exprList;\n if (optionalSupported) {\n node$1.optional = optional;\n }\n base = this.finishNode(node$1, \"CallExpression\");\n } else if (this.type === types$1.backQuote) {\n if (optional || optionalChained) {\n this.raise(this.start, \"Optional chaining cannot appear in the tag of tagged template expressions\");\n }\n var node$2 = this.startNodeAt(startPos, startLoc);\n node$2.tag = base;\n node$2.quasi = this.parseTemplate({isTagged: true});\n base = this.finishNode(node$2, \"TaggedTemplateExpression\");\n }\n return base\n};\n\n// Parse an atomic expression — either a single token that is an\n// expression, an expression started by a keyword like `function` or\n// `new`, or an expression wrapped in punctuation like `()`, `[]`,\n// or `{}`.\n\npp$5.parseExprAtom = function(refDestructuringErrors, forInit, forNew) {\n // If a division operator appears in an expression position, the\n // tokenizer got confused, and we force it to read a regexp instead.\n if (this.type === types$1.slash) { this.readRegexp(); }\n\n var node, canBeArrow = this.potentialArrowAt === this.start;\n switch (this.type) {\n case types$1._super:\n if (!this.allowSuper)\n { this.raise(this.start, \"'super' keyword outside a method\"); }\n node = this.startNode();\n this.next();\n if (this.type === types$1.parenL && !this.allowDirectSuper)\n { this.raise(node.start, \"super() call outside constructor of a subclass\"); }\n // The `super` keyword can appear at below:\n // SuperProperty:\n // super [ Expression ]\n // super . IdentifierName\n // SuperCall:\n // super ( Arguments )\n if (this.type !== types$1.dot && this.type !== types$1.bracketL && this.type !== types$1.parenL)\n { this.unexpected(); }\n return this.finishNode(node, \"Super\")\n\n case types$1._this:\n node = this.startNode();\n this.next();\n return this.finishNode(node, \"ThisExpression\")\n\n case types$1.name:\n var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;\n var id = this.parseIdent(false);\n if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === \"async\" && !this.canInsertSemicolon() && this.eat(types$1._function)) {\n this.overrideContext(types.f_expr);\n return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true, forInit)\n }\n if (canBeArrow && !this.canInsertSemicolon()) {\n if (this.eat(types$1.arrow))\n { return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false, forInit) }\n if (this.options.ecmaVersion >= 8 && id.name === \"async\" && this.type === types$1.name && !containsEsc &&\n (!this.potentialArrowInForAwait || this.value !== \"of\" || this.containsEsc)) {\n id = this.parseIdent(false);\n if (this.canInsertSemicolon() || !this.eat(types$1.arrow))\n { this.unexpected(); }\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true, forInit)\n }\n }\n return id\n\n case types$1.regexp:\n var value = this.value;\n node = this.parseLiteral(value.value);\n node.regex = {pattern: value.pattern, flags: value.flags};\n return node\n\n case types$1.num: case types$1.string:\n return this.parseLiteral(this.value)\n\n case types$1._null: case types$1._true: case types$1._false:\n node = this.startNode();\n node.value = this.type === types$1._null ? null : this.type === types$1._true;\n node.raw = this.type.keyword;\n this.next();\n return this.finishNode(node, \"Literal\")\n\n case types$1.parenL:\n var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow, forInit);\n if (refDestructuringErrors) {\n if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr))\n { refDestructuringErrors.parenthesizedAssign = start; }\n if (refDestructuringErrors.parenthesizedBind < 0)\n { refDestructuringErrors.parenthesizedBind = start; }\n }\n return expr\n\n case types$1.bracketL:\n node = this.startNode();\n this.next();\n node.elements = this.parseExprList(types$1.bracketR, true, true, refDestructuringErrors);\n return this.finishNode(node, \"ArrayExpression\")\n\n case types$1.braceL:\n this.overrideContext(types.b_expr);\n return this.parseObj(false, refDestructuringErrors)\n\n case types$1._function:\n node = this.startNode();\n this.next();\n return this.parseFunction(node, 0)\n\n case types$1._class:\n return this.parseClass(this.startNode(), false)\n\n case types$1._new:\n return this.parseNew()\n\n case types$1.backQuote:\n return this.parseTemplate()\n\n case types$1._import:\n if (this.options.ecmaVersion >= 11) {\n return this.parseExprImport(forNew)\n } else {\n return this.unexpected()\n }\n\n default:\n return this.parseExprAtomDefault()\n }\n};\n\npp$5.parseExprAtomDefault = function() {\n this.unexpected();\n};\n\npp$5.parseExprImport = function(forNew) {\n var node = this.startNode();\n\n // Consume `import` as an identifier for `import.meta`.\n // Because `this.parseIdent(true)` doesn't check escape sequences, it needs the check of `this.containsEsc`.\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword import\"); }\n this.next();\n\n if (this.type === types$1.parenL && !forNew) {\n return this.parseDynamicImport(node)\n } else if (this.type === types$1.dot) {\n var meta = this.startNodeAt(node.start, node.loc && node.loc.start);\n meta.name = \"import\";\n node.meta = this.finishNode(meta, \"Identifier\");\n return this.parseImportMeta(node)\n } else {\n this.unexpected();\n }\n};\n\npp$5.parseDynamicImport = function(node) {\n this.next(); // skip `(`\n\n // Parse node.source.\n node.source = this.parseMaybeAssign();\n\n if (this.options.ecmaVersion >= 16) {\n if (!this.eat(types$1.parenR)) {\n this.expect(types$1.comma);\n if (!this.afterTrailingComma(types$1.parenR)) {\n node.options = this.parseMaybeAssign();\n if (!this.eat(types$1.parenR)) {\n this.expect(types$1.comma);\n if (!this.afterTrailingComma(types$1.parenR)) {\n this.unexpected();\n }\n }\n } else {\n node.options = null;\n }\n } else {\n node.options = null;\n }\n } else {\n // Verify ending.\n if (!this.eat(types$1.parenR)) {\n var errorPos = this.start;\n if (this.eat(types$1.comma) && this.eat(types$1.parenR)) {\n this.raiseRecoverable(errorPos, \"Trailing comma is not allowed in import()\");\n } else {\n this.unexpected(errorPos);\n }\n }\n }\n\n return this.finishNode(node, \"ImportExpression\")\n};\n\npp$5.parseImportMeta = function(node) {\n this.next(); // skip `.`\n\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n\n if (node.property.name !== \"meta\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for import is 'import.meta'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'import.meta' must not contain escaped characters\"); }\n if (this.options.sourceType !== \"module\" && !this.options.allowImportExportEverywhere)\n { this.raiseRecoverable(node.start, \"Cannot use 'import.meta' outside a module\"); }\n\n return this.finishNode(node, \"MetaProperty\")\n};\n\npp$5.parseLiteral = function(value) {\n var node = this.startNode();\n node.value = value;\n node.raw = this.input.slice(this.start, this.end);\n if (node.raw.charCodeAt(node.raw.length - 1) === 110)\n { node.bigint = node.value != null ? node.value.toString() : node.raw.slice(0, -1).replace(/_/g, \"\"); }\n this.next();\n return this.finishNode(node, \"Literal\")\n};\n\npp$5.parseParenExpression = function() {\n this.expect(types$1.parenL);\n var val = this.parseExpression();\n this.expect(types$1.parenR);\n return val\n};\n\npp$5.shouldParseArrow = function(exprList) {\n return !this.canInsertSemicolon()\n};\n\npp$5.parseParenAndDistinguishExpression = function(canBeArrow, forInit) {\n var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;\n if (this.options.ecmaVersion >= 6) {\n this.next();\n\n var innerStartPos = this.start, innerStartLoc = this.startLoc;\n var exprList = [], first = true, lastIsComma = false;\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;\n this.yieldPos = 0;\n this.awaitPos = 0;\n // Do not save awaitIdentPos to allow checking awaits nested in parameters\n while (this.type !== types$1.parenR) {\n first ? first = false : this.expect(types$1.comma);\n if (allowTrailingComma && this.afterTrailingComma(types$1.parenR, true)) {\n lastIsComma = true;\n break\n } else if (this.type === types$1.ellipsis) {\n spreadStart = this.start;\n exprList.push(this.parseParenItem(this.parseRestBinding()));\n if (this.type === types$1.comma) {\n this.raiseRecoverable(\n this.start,\n \"Comma is not permitted after the rest element\"\n );\n }\n break\n } else {\n exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));\n }\n }\n var innerEndPos = this.lastTokEnd, innerEndLoc = this.lastTokEndLoc;\n this.expect(types$1.parenR);\n\n if (canBeArrow && this.shouldParseArrow(exprList) && this.eat(types$1.arrow)) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n return this.parseParenArrowList(startPos, startLoc, exprList, forInit)\n }\n\n if (!exprList.length || lastIsComma) { this.unexpected(this.lastTokStart); }\n if (spreadStart) { this.unexpected(spreadStart); }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n\n if (exprList.length > 1) {\n val = this.startNodeAt(innerStartPos, innerStartLoc);\n val.expressions = exprList;\n this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc);\n } else {\n val = exprList[0];\n }\n } else {\n val = this.parseParenExpression();\n }\n\n if (this.options.preserveParens) {\n var par = this.startNodeAt(startPos, startLoc);\n par.expression = val;\n return this.finishNode(par, \"ParenthesizedExpression\")\n } else {\n return val\n }\n};\n\npp$5.parseParenItem = function(item) {\n return item\n};\n\npp$5.parseParenArrowList = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, false, forInit)\n};\n\n// New's precedence is slightly tricky. It must allow its argument to\n// be a `[]` or dot subscript expression, but not a call — at least,\n// not without wrapping it in parentheses. Thus, it uses the noCalls\n// argument to parseSubscripts to prevent it from consuming the\n// argument list.\n\nvar empty = [];\n\npp$5.parseNew = function() {\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword new\"); }\n var node = this.startNode();\n this.next();\n if (this.options.ecmaVersion >= 6 && this.type === types$1.dot) {\n var meta = this.startNodeAt(node.start, node.loc && node.loc.start);\n meta.name = \"new\";\n node.meta = this.finishNode(meta, \"Identifier\");\n this.next();\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n if (node.property.name !== \"target\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for new is 'new.target'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'new.target' must not contain escaped characters\"); }\n if (!this.allowNewDotTarget)\n { this.raiseRecoverable(node.start, \"'new.target' can only be used in functions and class static block\"); }\n return this.finishNode(node, \"MetaProperty\")\n }\n var startPos = this.start, startLoc = this.startLoc;\n node.callee = this.parseSubscripts(this.parseExprAtom(null, false, true), startPos, startLoc, true, false);\n if (this.eat(types$1.parenL)) { node.arguments = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false); }\n else { node.arguments = empty; }\n return this.finishNode(node, \"NewExpression\")\n};\n\n// Parse template expression.\n\npp$5.parseTemplateElement = function(ref) {\n var isTagged = ref.isTagged;\n\n var elem = this.startNode();\n if (this.type === types$1.invalidTemplate) {\n if (!isTagged) {\n this.raiseRecoverable(this.start, \"Bad escape sequence in untagged template literal\");\n }\n elem.value = {\n raw: this.value.replace(/\\r\\n?/g, \"\\n\"),\n cooked: null\n };\n } else {\n elem.value = {\n raw: this.input.slice(this.start, this.end).replace(/\\r\\n?/g, \"\\n\"),\n cooked: this.value\n };\n }\n this.next();\n elem.tail = this.type === types$1.backQuote;\n return this.finishNode(elem, \"TemplateElement\")\n};\n\npp$5.parseTemplate = function(ref) {\n if ( ref === void 0 ) ref = {};\n var isTagged = ref.isTagged; if ( isTagged === void 0 ) isTagged = false;\n\n var node = this.startNode();\n this.next();\n node.expressions = [];\n var curElt = this.parseTemplateElement({isTagged: isTagged});\n node.quasis = [curElt];\n while (!curElt.tail) {\n if (this.type === types$1.eof) { this.raise(this.pos, \"Unterminated template literal\"); }\n this.expect(types$1.dollarBraceL);\n node.expressions.push(this.parseExpression());\n this.expect(types$1.braceR);\n node.quasis.push(curElt = this.parseTemplateElement({isTagged: isTagged}));\n }\n this.next();\n return this.finishNode(node, \"TemplateLiteral\")\n};\n\npp$5.isAsyncProp = function(prop) {\n return !prop.computed && prop.key.type === \"Identifier\" && prop.key.name === \"async\" &&\n (this.type === types$1.name || this.type === types$1.num || this.type === types$1.string || this.type === types$1.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === types$1.star)) &&\n !lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\n// Parse an object literal or binding pattern.\n\npp$5.parseObj = function(isPattern, refDestructuringErrors) {\n var node = this.startNode(), first = true, propHash = {};\n node.properties = [];\n this.next();\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.options.ecmaVersion >= 5 && this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n var prop = this.parseProperty(isPattern, refDestructuringErrors);\n if (!isPattern) { this.checkPropClash(prop, propHash, refDestructuringErrors); }\n node.properties.push(prop);\n }\n return this.finishNode(node, isPattern ? \"ObjectPattern\" : \"ObjectExpression\")\n};\n\npp$5.parseProperty = function(isPattern, refDestructuringErrors) {\n var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;\n if (this.options.ecmaVersion >= 9 && this.eat(types$1.ellipsis)) {\n if (isPattern) {\n prop.argument = this.parseIdent(false);\n if (this.type === types$1.comma) {\n this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\");\n }\n return this.finishNode(prop, \"RestElement\")\n }\n // Parse argument.\n prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n // To disallow trailing comma via `this.toAssignable()`.\n if (this.type === types$1.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {\n refDestructuringErrors.trailingComma = this.start;\n }\n // Finish\n return this.finishNode(prop, \"SpreadElement\")\n }\n if (this.options.ecmaVersion >= 6) {\n prop.method = false;\n prop.shorthand = false;\n if (isPattern || refDestructuringErrors) {\n startPos = this.start;\n startLoc = this.startLoc;\n }\n if (!isPattern)\n { isGenerator = this.eat(types$1.star); }\n }\n var containsEsc = this.containsEsc;\n this.parsePropertyName(prop);\n if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {\n isAsync = true;\n isGenerator = this.options.ecmaVersion >= 9 && this.eat(types$1.star);\n this.parsePropertyName(prop);\n } else {\n isAsync = false;\n }\n this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);\n return this.finishNode(prop, \"Property\")\n};\n\npp$5.parseGetterSetter = function(prop) {\n var kind = prop.key.name;\n this.parsePropertyName(prop);\n prop.value = this.parseMethod(false);\n prop.kind = kind;\n var paramCount = prop.kind === \"get\" ? 0 : 1;\n if (prop.value.params.length !== paramCount) {\n var start = prop.value.start;\n if (prop.kind === \"get\")\n { this.raiseRecoverable(start, \"getter should have no params\"); }\n else\n { this.raiseRecoverable(start, \"setter should have exactly one param\"); }\n } else {\n if (prop.kind === \"set\" && prop.value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(prop.value.params[0].start, \"Setter cannot use rest params\"); }\n }\n};\n\npp$5.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {\n if ((isGenerator || isAsync) && this.type === types$1.colon)\n { this.unexpected(); }\n\n if (this.eat(types$1.colon)) {\n prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);\n prop.kind = \"init\";\n } else if (this.options.ecmaVersion >= 6 && this.type === types$1.parenL) {\n if (isPattern) { this.unexpected(); }\n prop.method = true;\n prop.value = this.parseMethod(isGenerator, isAsync);\n prop.kind = \"init\";\n } else if (!isPattern && !containsEsc &&\n this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === \"Identifier\" &&\n (prop.key.name === \"get\" || prop.key.name === \"set\") &&\n (this.type !== types$1.comma && this.type !== types$1.braceR && this.type !== types$1.eq)) {\n if (isGenerator || isAsync) { this.unexpected(); }\n this.parseGetterSetter(prop);\n } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === \"Identifier\") {\n if (isGenerator || isAsync) { this.unexpected(); }\n this.checkUnreserved(prop.key);\n if (prop.key.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = startPos; }\n if (isPattern) {\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else if (this.type === types$1.eq && refDestructuringErrors) {\n if (refDestructuringErrors.shorthandAssign < 0)\n { refDestructuringErrors.shorthandAssign = this.start; }\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else {\n prop.value = this.copyNode(prop.key);\n }\n prop.kind = \"init\";\n prop.shorthand = true;\n } else { this.unexpected(); }\n};\n\npp$5.parsePropertyName = function(prop) {\n if (this.options.ecmaVersion >= 6) {\n if (this.eat(types$1.bracketL)) {\n prop.computed = true;\n prop.key = this.parseMaybeAssign();\n this.expect(types$1.bracketR);\n return prop.key\n } else {\n prop.computed = false;\n }\n }\n return prop.key = this.type === types$1.num || this.type === types$1.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\")\n};\n\n// Initialize empty function node.\n\npp$5.initFunction = function(node) {\n node.id = null;\n if (this.options.ecmaVersion >= 6) { node.generator = node.expression = false; }\n if (this.options.ecmaVersion >= 8) { node.async = false; }\n};\n\n// Parse object or class method.\n\npp$5.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {\n var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.initFunction(node);\n if (this.options.ecmaVersion >= 6)\n { node.generator = isGenerator; }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));\n\n this.expect(types$1.parenL);\n node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n this.parseFunctionBody(node, false, true, false);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"FunctionExpression\")\n};\n\n// Parse arrow function expression with given parameters.\n\npp$5.parseArrowExpression = function(node, params, isAsync, forInit) {\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW);\n this.initFunction(node);\n if (this.options.ecmaVersion >= 8) { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n\n node.params = this.toAssignableList(params, true);\n this.parseFunctionBody(node, true, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"ArrowFunctionExpression\")\n};\n\n// Parse function body and check parameters.\n\npp$5.parseFunctionBody = function(node, isArrowFunction, isMethod, forInit) {\n var isExpression = isArrowFunction && this.type !== types$1.braceL;\n var oldStrict = this.strict, useStrict = false;\n\n if (isExpression) {\n node.body = this.parseMaybeAssign(forInit);\n node.expression = true;\n this.checkParams(node, false);\n } else {\n var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);\n if (!oldStrict || nonSimple) {\n useStrict = this.strictDirective(this.end);\n // If this is a strict mode function, verify that argument names\n // are not repeated, and it does not try to bind the words `eval`\n // or `arguments`.\n if (useStrict && nonSimple)\n { this.raiseRecoverable(node.start, \"Illegal 'use strict' directive in function with non-simple parameter list\"); }\n }\n // Start a new scope with regard to labels and the `inFunction`\n // flag (restore them to their old value afterwards).\n var oldLabels = this.labels;\n this.labels = [];\n if (useStrict) { this.strict = true; }\n\n // Add the params to varDeclaredNames to ensure that an error is thrown\n // if a let/const declaration in the function clashes with one of the params.\n this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));\n // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n if (this.strict && node.id) { this.checkLValSimple(node.id, BIND_OUTSIDE); }\n node.body = this.parseBlock(false, undefined, useStrict && !oldStrict);\n node.expression = false;\n this.adaptDirectivePrologue(node.body.body);\n this.labels = oldLabels;\n }\n this.exitScope();\n};\n\npp$5.isSimpleParamList = function(params) {\n for (var i = 0, list = params; i < list.length; i += 1)\n {\n var param = list[i];\n\n if (param.type !== \"Identifier\") { return false\n } }\n return true\n};\n\n// Checks function params for various disallowed patterns such as using \"eval\"\n// or \"arguments\" and duplicate parameters.\n\npp$5.checkParams = function(node, allowDuplicates) {\n var nameHash = Object.create(null);\n for (var i = 0, list = node.params; i < list.length; i += 1)\n {\n var param = list[i];\n\n this.checkLValInnerPattern(param, BIND_VAR, allowDuplicates ? null : nameHash);\n }\n};\n\n// Parses a comma-separated list of expressions, and returns them as\n// an array. `close` is the token type that ends the list, and\n// `allowEmpty` can be turned on to allow subsequent commas with\n// nothing in between them to be parsed as `null` (which is needed\n// for array literals).\n\npp$5.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (!first) {\n this.expect(types$1.comma);\n if (allowTrailingComma && this.afterTrailingComma(close)) { break }\n } else { first = false; }\n\n var elt = (void 0);\n if (allowEmpty && this.type === types$1.comma)\n { elt = null; }\n else if (this.type === types$1.ellipsis) {\n elt = this.parseSpread(refDestructuringErrors);\n if (refDestructuringErrors && this.type === types$1.comma && refDestructuringErrors.trailingComma < 0)\n { refDestructuringErrors.trailingComma = this.start; }\n } else {\n elt = this.parseMaybeAssign(false, refDestructuringErrors);\n }\n elts.push(elt);\n }\n return elts\n};\n\npp$5.checkUnreserved = function(ref) {\n var start = ref.start;\n var end = ref.end;\n var name = ref.name;\n\n if (this.inGenerator && name === \"yield\")\n { this.raiseRecoverable(start, \"Cannot use 'yield' as identifier inside a generator\"); }\n if (this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use 'await' as identifier inside an async function\"); }\n if (!(this.currentThisScope().flags & SCOPE_VAR) && name === \"arguments\")\n { this.raiseRecoverable(start, \"Cannot use 'arguments' in class field initializer\"); }\n if (this.inClassStaticBlock && (name === \"arguments\" || name === \"await\"))\n { this.raise(start, (\"Cannot use \" + name + \" in class static initialization block\")); }\n if (this.keywords.test(name))\n { this.raise(start, (\"Unexpected keyword '\" + name + \"'\")); }\n if (this.options.ecmaVersion < 6 &&\n this.input.slice(start, end).indexOf(\"\\\\\") !== -1) { return }\n var re = this.strict ? this.reservedWordsStrict : this.reservedWords;\n if (re.test(name)) {\n if (!this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use keyword 'await' outside an async function\"); }\n this.raiseRecoverable(start, (\"The keyword '\" + name + \"' is reserved\"));\n }\n};\n\n// Parse the next token as an identifier. If `liberal` is true (used\n// when parsing properties), it will also convert keywords into\n// identifiers.\n\npp$5.parseIdent = function(liberal) {\n var node = this.parseIdentNode();\n this.next(!!liberal);\n this.finishNode(node, \"Identifier\");\n if (!liberal) {\n this.checkUnreserved(node);\n if (node.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = node.start; }\n }\n return node\n};\n\npp$5.parseIdentNode = function() {\n var node = this.startNode();\n if (this.type === types$1.name) {\n node.name = this.value;\n } else if (this.type.keyword) {\n node.name = this.type.keyword;\n\n // To fix https://github.com/acornjs/acorn/issues/575\n // `class` and `function` keywords push new context into this.context.\n // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.\n // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword\n if ((node.name === \"class\" || node.name === \"function\") &&\n (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {\n this.context.pop();\n }\n this.type = types$1.name;\n } else {\n this.unexpected();\n }\n return node\n};\n\npp$5.parsePrivateIdent = function() {\n var node = this.startNode();\n if (this.type === types$1.privateId) {\n node.name = this.value;\n } else {\n this.unexpected();\n }\n this.next();\n this.finishNode(node, \"PrivateIdentifier\");\n\n // For validating existence\n if (this.options.checkPrivateFields) {\n if (this.privateNameStack.length === 0) {\n this.raise(node.start, (\"Private field '#\" + (node.name) + \"' must be declared in an enclosing class\"));\n } else {\n this.privateNameStack[this.privateNameStack.length - 1].used.push(node);\n }\n }\n\n return node\n};\n\n// Parses yield expression inside generator.\n\npp$5.parseYield = function(forInit) {\n if (!this.yieldPos) { this.yieldPos = this.start; }\n\n var node = this.startNode();\n this.next();\n if (this.type === types$1.semi || this.canInsertSemicolon() || (this.type !== types$1.star && !this.type.startsExpr)) {\n node.delegate = false;\n node.argument = null;\n } else {\n node.delegate = this.eat(types$1.star);\n node.argument = this.parseMaybeAssign(forInit);\n }\n return this.finishNode(node, \"YieldExpression\")\n};\n\npp$5.parseAwait = function(forInit) {\n if (!this.awaitPos) { this.awaitPos = this.start; }\n\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeUnary(null, true, false, forInit);\n return this.finishNode(node, \"AwaitExpression\")\n};\n\nvar pp$4 = Parser.prototype;\n\n// This function is used to raise exceptions on parse errors. It\n// takes an offset integer (into the current `input`) to indicate\n// the location of the error, attaches the position to the end\n// of the error message, and then raises a `SyntaxError` with that\n// message.\n\npp$4.raise = function(pos, message) {\n var loc = getLineInfo(this.input, pos);\n message += \" (\" + loc.line + \":\" + loc.column + \")\";\n if (this.sourceFile) {\n message += \" in \" + this.sourceFile;\n }\n var err = new SyntaxError(message);\n err.pos = pos; err.loc = loc; err.raisedAt = this.pos;\n throw err\n};\n\npp$4.raiseRecoverable = pp$4.raise;\n\npp$4.curPosition = function() {\n if (this.options.locations) {\n return new Position(this.curLine, this.pos - this.lineStart)\n }\n};\n\nvar pp$3 = Parser.prototype;\n\nvar Scope = function Scope(flags) {\n this.flags = flags;\n // A list of var-declared names in the current lexical scope\n this.var = [];\n // A list of lexically-declared names in the current lexical scope\n this.lexical = [];\n // A list of lexically-declared FunctionDeclaration names in the current lexical scope\n this.functions = [];\n};\n\n// The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.\n\npp$3.enterScope = function(flags) {\n this.scopeStack.push(new Scope(flags));\n};\n\npp$3.exitScope = function() {\n this.scopeStack.pop();\n};\n\n// The spec says:\n// > At the top level of a function, or script, function declarations are\n// > treated like var declarations rather than like lexical declarations.\npp$3.treatFunctionsAsVarInScope = function(scope) {\n return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP)\n};\n\npp$3.declareName = function(name, bindingType, pos) {\n var redeclared = false;\n if (bindingType === BIND_LEXICAL) {\n var scope = this.currentScope();\n redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;\n scope.lexical.push(name);\n if (this.inModule && (scope.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n } else if (bindingType === BIND_SIMPLE_CATCH) {\n var scope$1 = this.currentScope();\n scope$1.lexical.push(name);\n } else if (bindingType === BIND_FUNCTION) {\n var scope$2 = this.currentScope();\n if (this.treatFunctionsAsVar)\n { redeclared = scope$2.lexical.indexOf(name) > -1; }\n else\n { redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1; }\n scope$2.functions.push(name);\n } else {\n for (var i = this.scopeStack.length - 1; i >= 0; --i) {\n var scope$3 = this.scopeStack[i];\n if (scope$3.lexical.indexOf(name) > -1 && !((scope$3.flags & SCOPE_SIMPLE_CATCH) && scope$3.lexical[0] === name) ||\n !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {\n redeclared = true;\n break\n }\n scope$3.var.push(name);\n if (this.inModule && (scope$3.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n if (scope$3.flags & SCOPE_VAR) { break }\n }\n }\n if (redeclared) { this.raiseRecoverable(pos, (\"Identifier '\" + name + \"' has already been declared\")); }\n};\n\npp$3.checkLocalExport = function(id) {\n // scope.functions must be empty as Module code is always strict.\n if (this.scopeStack[0].lexical.indexOf(id.name) === -1 &&\n this.scopeStack[0].var.indexOf(id.name) === -1) {\n this.undefinedExports[id.name] = id;\n }\n};\n\npp$3.currentScope = function() {\n return this.scopeStack[this.scopeStack.length - 1]\n};\n\npp$3.currentVarScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & (SCOPE_VAR | SCOPE_CLASS_FIELD_INIT | SCOPE_CLASS_STATIC_BLOCK)) { return scope }\n }\n};\n\n// Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\npp$3.currentThisScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & (SCOPE_VAR | SCOPE_CLASS_FIELD_INIT | SCOPE_CLASS_STATIC_BLOCK) &&\n !(scope.flags & SCOPE_ARROW)) { return scope }\n }\n};\n\nvar Node = function Node(parser, pos, loc) {\n this.type = \"\";\n this.start = pos;\n this.end = 0;\n if (parser.options.locations)\n { this.loc = new SourceLocation(parser, loc); }\n if (parser.options.directSourceFile)\n { this.sourceFile = parser.options.directSourceFile; }\n if (parser.options.ranges)\n { this.range = [pos, 0]; }\n};\n\n// Start an AST node, attaching a start offset.\n\nvar pp$2 = Parser.prototype;\n\npp$2.startNode = function() {\n return new Node(this, this.start, this.startLoc)\n};\n\npp$2.startNodeAt = function(pos, loc) {\n return new Node(this, pos, loc)\n};\n\n// Finish an AST node, adding `type` and `end` properties.\n\nfunction finishNodeAt(node, type, pos, loc) {\n node.type = type;\n node.end = pos;\n if (this.options.locations)\n { node.loc.end = loc; }\n if (this.options.ranges)\n { node.range[1] = pos; }\n return node\n}\n\npp$2.finishNode = function(node, type) {\n return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc)\n};\n\n// Finish node at given position\n\npp$2.finishNodeAt = function(node, type, pos, loc) {\n return finishNodeAt.call(this, node, type, pos, loc)\n};\n\npp$2.copyNode = function(node) {\n var newNode = new Node(this, node.start, this.startLoc);\n for (var prop in node) { newNode[prop] = node[prop]; }\n return newNode\n};\n\n// This file was generated by \"bin/generate-unicode-script-values.js\". Do not modify manually!\nvar scriptValuesAddedInUnicode = \"Berf Beria_Erfe Gara Garay Gukh Gurung_Khema Hrkt Katakana_Or_Hiragana Kawi Kirat_Rai Krai Nag_Mundari Nagm Ol_Onal Onao Sidetic Sidt Sunu Sunuwar Tai_Yo Tayo Todhri Todr Tolong_Siki Tols Tulu_Tigalari Tutg Unknown Zzzz\";\n\n// This file contains Unicode properties extracted from the ECMAScript specification.\n// The lists are extracted like so:\n// $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)\n\n// #table-binary-unicode-properties\nvar ecma9BinaryProperties = \"ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS\";\nvar ecma10BinaryProperties = ecma9BinaryProperties + \" Extended_Pictographic\";\nvar ecma11BinaryProperties = ecma10BinaryProperties;\nvar ecma12BinaryProperties = ecma11BinaryProperties + \" EBase EComp EMod EPres ExtPict\";\nvar ecma13BinaryProperties = ecma12BinaryProperties;\nvar ecma14BinaryProperties = ecma13BinaryProperties;\n\nvar unicodeBinaryProperties = {\n 9: ecma9BinaryProperties,\n 10: ecma10BinaryProperties,\n 11: ecma11BinaryProperties,\n 12: ecma12BinaryProperties,\n 13: ecma13BinaryProperties,\n 14: ecma14BinaryProperties\n};\n\n// #table-binary-unicode-properties-of-strings\nvar ecma14BinaryPropertiesOfStrings = \"Basic_Emoji Emoji_Keycap_Sequence RGI_Emoji_Modifier_Sequence RGI_Emoji_Flag_Sequence RGI_Emoji_Tag_Sequence RGI_Emoji_ZWJ_Sequence RGI_Emoji\";\n\nvar unicodeBinaryPropertiesOfStrings = {\n 9: \"\",\n 10: \"\",\n 11: \"\",\n 12: \"\",\n 13: \"\",\n 14: ecma14BinaryPropertiesOfStrings\n};\n\n// #table-unicode-general-category-values\nvar unicodeGeneralCategoryValues = \"Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu\";\n\n// #table-unicode-script-values\nvar ecma9ScriptValues = \"Adlam Adlm Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb\";\nvar ecma10ScriptValues = ecma9ScriptValues + \" Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd\";\nvar ecma11ScriptValues = ecma10ScriptValues + \" Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho\";\nvar ecma12ScriptValues = ecma11ScriptValues + \" Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi\";\nvar ecma13ScriptValues = ecma12ScriptValues + \" Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith\";\nvar ecma14ScriptValues = ecma13ScriptValues + \" \" + scriptValuesAddedInUnicode;\n\nvar unicodeScriptValues = {\n 9: ecma9ScriptValues,\n 10: ecma10ScriptValues,\n 11: ecma11ScriptValues,\n 12: ecma12ScriptValues,\n 13: ecma13ScriptValues,\n 14: ecma14ScriptValues\n};\n\nvar data = {};\nfunction buildUnicodeData(ecmaVersion) {\n var d = data[ecmaVersion] = {\n binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + \" \" + unicodeGeneralCategoryValues),\n binaryOfStrings: wordsRegexp(unicodeBinaryPropertiesOfStrings[ecmaVersion]),\n nonBinary: {\n General_Category: wordsRegexp(unicodeGeneralCategoryValues),\n Script: wordsRegexp(unicodeScriptValues[ecmaVersion])\n }\n };\n d.nonBinary.Script_Extensions = d.nonBinary.Script;\n\n d.nonBinary.gc = d.nonBinary.General_Category;\n d.nonBinary.sc = d.nonBinary.Script;\n d.nonBinary.scx = d.nonBinary.Script_Extensions;\n}\n\nfor (var i = 0, list = [9, 10, 11, 12, 13, 14]; i < list.length; i += 1) {\n var ecmaVersion = list[i];\n\n buildUnicodeData(ecmaVersion);\n}\n\nvar pp$1 = Parser.prototype;\n\n// Track disjunction structure to determine whether a duplicate\n// capture group name is allowed because it is in a separate branch.\nvar BranchID = function BranchID(parent, base) {\n // Parent disjunction branch\n this.parent = parent;\n // Identifies this set of sibling branches\n this.base = base || this;\n};\n\nBranchID.prototype.separatedFrom = function separatedFrom (alt) {\n // A branch is separate from another branch if they or any of\n // their parents are siblings in a given disjunction\n for (var self = this; self; self = self.parent) {\n for (var other = alt; other; other = other.parent) {\n if (self.base === other.base && self !== other) { return true }\n }\n }\n return false\n};\n\nBranchID.prototype.sibling = function sibling () {\n return new BranchID(this.parent, this.base)\n};\n\nvar RegExpValidationState = function RegExpValidationState(parser) {\n this.parser = parser;\n this.validFlags = \"gim\" + (parser.options.ecmaVersion >= 6 ? \"uy\" : \"\") + (parser.options.ecmaVersion >= 9 ? \"s\" : \"\") + (parser.options.ecmaVersion >= 13 ? \"d\" : \"\") + (parser.options.ecmaVersion >= 15 ? \"v\" : \"\");\n this.unicodeProperties = data[parser.options.ecmaVersion >= 14 ? 14 : parser.options.ecmaVersion];\n this.source = \"\";\n this.flags = \"\";\n this.start = 0;\n this.switchU = false;\n this.switchV = false;\n this.switchN = false;\n this.pos = 0;\n this.lastIntValue = 0;\n this.lastStringValue = \"\";\n this.lastAssertionIsQuantifiable = false;\n this.numCapturingParens = 0;\n this.maxBackReference = 0;\n this.groupNames = Object.create(null);\n this.backReferenceNames = [];\n this.branchID = null;\n};\n\nRegExpValidationState.prototype.reset = function reset (start, pattern, flags) {\n var unicodeSets = flags.indexOf(\"v\") !== -1;\n var unicode = flags.indexOf(\"u\") !== -1;\n this.start = start | 0;\n this.source = pattern + \"\";\n this.flags = flags;\n if (unicodeSets && this.parser.options.ecmaVersion >= 15) {\n this.switchU = true;\n this.switchV = true;\n this.switchN = true;\n } else {\n this.switchU = unicode && this.parser.options.ecmaVersion >= 6;\n this.switchV = false;\n this.switchN = unicode && this.parser.options.ecmaVersion >= 9;\n }\n};\n\nRegExpValidationState.prototype.raise = function raise (message) {\n this.parser.raiseRecoverable(this.start, (\"Invalid regular expression: /\" + (this.source) + \"/: \" + message));\n};\n\n// If u flag is given, this returns the code point at the index (it combines a surrogate pair).\n// Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).\nRegExpValidationState.prototype.at = function at (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return -1\n }\n var c = s.charCodeAt(i);\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {\n return c\n }\n var next = s.charCodeAt(i + 1);\n return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c\n};\n\nRegExpValidationState.prototype.nextIndex = function nextIndex (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return l\n }\n var c = s.charCodeAt(i), next;\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l ||\n (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) {\n return i + 1\n }\n return i + 2\n};\n\nRegExpValidationState.prototype.current = function current (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.pos, forceU)\n};\n\nRegExpValidationState.prototype.lookahead = function lookahead (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.nextIndex(this.pos, forceU), forceU)\n};\n\nRegExpValidationState.prototype.advance = function advance (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n this.pos = this.nextIndex(this.pos, forceU);\n};\n\nRegExpValidationState.prototype.eat = function eat (ch, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n if (this.current(forceU) === ch) {\n this.advance(forceU);\n return true\n }\n return false\n};\n\nRegExpValidationState.prototype.eatChars = function eatChars (chs, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var pos = this.pos;\n for (var i = 0, list = chs; i < list.length; i += 1) {\n var ch = list[i];\n\n var current = this.at(pos, forceU);\n if (current === -1 || current !== ch) {\n return false\n }\n pos = this.nextIndex(pos, forceU);\n }\n this.pos = pos;\n return true\n};\n\n/**\n * Validate the flags part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$1.validateRegExpFlags = function(state) {\n var validFlags = state.validFlags;\n var flags = state.flags;\n\n var u = false;\n var v = false;\n\n for (var i = 0; i < flags.length; i++) {\n var flag = flags.charAt(i);\n if (validFlags.indexOf(flag) === -1) {\n this.raise(state.start, \"Invalid regular expression flag\");\n }\n if (flags.indexOf(flag, i + 1) > -1) {\n this.raise(state.start, \"Duplicate regular expression flag\");\n }\n if (flag === \"u\") { u = true; }\n if (flag === \"v\") { v = true; }\n }\n if (this.options.ecmaVersion >= 15 && u && v) {\n this.raise(state.start, \"Invalid regular expression flag\");\n }\n};\n\nfunction hasProp(obj) {\n for (var _ in obj) { return true }\n return false\n}\n\n/**\n * Validate the pattern part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$1.validateRegExpPattern = function(state) {\n this.regexp_pattern(state);\n\n // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of\n // parsing contains a |GroupName|, reparse with the goal symbol\n // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*\n // exception if _P_ did not conform to the grammar, if any elements of _P_\n // were not matched by the parse, or if any Early Error conditions exist.\n if (!state.switchN && this.options.ecmaVersion >= 9 && hasProp(state.groupNames)) {\n state.switchN = true;\n this.regexp_pattern(state);\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\npp$1.regexp_pattern = function(state) {\n state.pos = 0;\n state.lastIntValue = 0;\n state.lastStringValue = \"\";\n state.lastAssertionIsQuantifiable = false;\n state.numCapturingParens = 0;\n state.maxBackReference = 0;\n state.groupNames = Object.create(null);\n state.backReferenceNames.length = 0;\n state.branchID = null;\n\n this.regexp_disjunction(state);\n\n if (state.pos !== state.source.length) {\n // Make the same messages as V8.\n if (state.eat(0x29 /* ) */)) {\n state.raise(\"Unmatched ')'\");\n }\n if (state.eat(0x5D /* ] */) || state.eat(0x7D /* } */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n }\n if (state.maxBackReference > state.numCapturingParens) {\n state.raise(\"Invalid escape\");\n }\n for (var i = 0, list = state.backReferenceNames; i < list.length; i += 1) {\n var name = list[i];\n\n if (!state.groupNames[name]) {\n state.raise(\"Invalid named capture referenced\");\n }\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\npp$1.regexp_disjunction = function(state) {\n var trackDisjunction = this.options.ecmaVersion >= 16;\n if (trackDisjunction) { state.branchID = new BranchID(state.branchID, null); }\n this.regexp_alternative(state);\n while (state.eat(0x7C /* | */)) {\n if (trackDisjunction) { state.branchID = state.branchID.sibling(); }\n this.regexp_alternative(state);\n }\n if (trackDisjunction) { state.branchID = state.branchID.parent; }\n\n // Make the same message as V8.\n if (this.regexp_eatQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n if (state.eat(0x7B /* { */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\npp$1.regexp_alternative = function(state) {\n while (state.pos < state.source.length && this.regexp_eatTerm(state)) {}\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term\npp$1.regexp_eatTerm = function(state) {\n if (this.regexp_eatAssertion(state)) {\n // Handle `QuantifiableAssertion Quantifier` alternative.\n // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion\n // is a QuantifiableAssertion.\n if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {\n // Make the same message as V8.\n if (state.switchU) {\n state.raise(\"Invalid quantifier\");\n }\n }\n return true\n }\n\n if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {\n this.regexp_eatQuantifier(state);\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion\npp$1.regexp_eatAssertion = function(state) {\n var start = state.pos;\n state.lastAssertionIsQuantifiable = false;\n\n // ^, $\n if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) {\n return true\n }\n\n // \\b \\B\n if (state.eat(0x5C /* \\ */)) {\n if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) {\n return true\n }\n state.pos = start;\n }\n\n // Lookahead / Lookbehind\n if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) {\n var lookbehind = false;\n if (this.options.ecmaVersion >= 9) {\n lookbehind = state.eat(0x3C /* < */);\n }\n if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) {\n this.regexp_disjunction(state);\n if (!state.eat(0x29 /* ) */)) {\n state.raise(\"Unterminated group\");\n }\n state.lastAssertionIsQuantifiable = !lookbehind;\n return true\n }\n }\n\n state.pos = start;\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\npp$1.regexp_eatQuantifier = function(state, noError) {\n if ( noError === void 0 ) noError = false;\n\n if (this.regexp_eatQuantifierPrefix(state, noError)) {\n state.eat(0x3F /* ? */);\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\npp$1.regexp_eatQuantifierPrefix = function(state, noError) {\n return (\n state.eat(0x2A /* * */) ||\n state.eat(0x2B /* + */) ||\n state.eat(0x3F /* ? */) ||\n this.regexp_eatBracedQuantifier(state, noError)\n )\n};\npp$1.regexp_eatBracedQuantifier = function(state, noError) {\n var start = state.pos;\n if (state.eat(0x7B /* { */)) {\n var min = 0, max = -1;\n if (this.regexp_eatDecimalDigits(state)) {\n min = state.lastIntValue;\n if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) {\n max = state.lastIntValue;\n }\n if (state.eat(0x7D /* } */)) {\n // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term\n if (max !== -1 && max < min && !noError) {\n state.raise(\"numbers out of order in {} quantifier\");\n }\n return true\n }\n }\n if (state.switchU && !noError) {\n state.raise(\"Incomplete quantifier\");\n }\n state.pos = start;\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\npp$1.regexp_eatAtom = function(state) {\n return (\n this.regexp_eatPatternCharacters(state) ||\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state)\n )\n};\npp$1.regexp_eatReverseSolidusAtomEscape = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatAtomEscape(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatUncapturingGroup = function(state) {\n var start = state.pos;\n if (state.eat(0x28 /* ( */)) {\n if (state.eat(0x3F /* ? */)) {\n if (this.options.ecmaVersion >= 16) {\n var addModifiers = this.regexp_eatModifiers(state);\n var hasHyphen = state.eat(0x2D /* - */);\n if (addModifiers || hasHyphen) {\n for (var i = 0; i < addModifiers.length; i++) {\n var modifier = addModifiers.charAt(i);\n if (addModifiers.indexOf(modifier, i + 1) > -1) {\n state.raise(\"Duplicate regular expression modifiers\");\n }\n }\n if (hasHyphen) {\n var removeModifiers = this.regexp_eatModifiers(state);\n if (!addModifiers && !removeModifiers && state.current() === 0x3A /* : */) {\n state.raise(\"Invalid regular expression modifiers\");\n }\n for (var i$1 = 0; i$1 < removeModifiers.length; i$1++) {\n var modifier$1 = removeModifiers.charAt(i$1);\n if (\n removeModifiers.indexOf(modifier$1, i$1 + 1) > -1 ||\n addModifiers.indexOf(modifier$1) > -1\n ) {\n state.raise(\"Duplicate regular expression modifiers\");\n }\n }\n }\n }\n }\n if (state.eat(0x3A /* : */)) {\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n return true\n }\n state.raise(\"Unterminated group\");\n }\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatCapturingGroup = function(state) {\n if (state.eat(0x28 /* ( */)) {\n if (this.options.ecmaVersion >= 9) {\n this.regexp_groupSpecifier(state);\n } else if (state.current() === 0x3F /* ? */) {\n state.raise(\"Invalid group\");\n }\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n state.numCapturingParens += 1;\n return true\n }\n state.raise(\"Unterminated group\");\n }\n return false\n};\n// RegularExpressionModifiers ::\n// [empty]\n// RegularExpressionModifiers RegularExpressionModifier\npp$1.regexp_eatModifiers = function(state) {\n var modifiers = \"\";\n var ch = 0;\n while ((ch = state.current()) !== -1 && isRegularExpressionModifier(ch)) {\n modifiers += codePointToString(ch);\n state.advance();\n }\n return modifiers\n};\n// RegularExpressionModifier :: one of\n// `i` `m` `s`\nfunction isRegularExpressionModifier(ch) {\n return ch === 0x69 /* i */ || ch === 0x6d /* m */ || ch === 0x73 /* s */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom\npp$1.regexp_eatExtendedAtom = function(state) {\n return (\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state) ||\n this.regexp_eatInvalidBracedQuantifier(state) ||\n this.regexp_eatExtendedPatternCharacter(state)\n )\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier\npp$1.regexp_eatInvalidBracedQuantifier = function(state) {\n if (this.regexp_eatBracedQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\npp$1.regexp_eatSyntaxCharacter = function(state) {\n var ch = state.current();\n if (isSyntaxCharacter(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n return false\n};\nfunction isSyntaxCharacter(ch) {\n return (\n ch === 0x24 /* $ */ ||\n ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ||\n ch === 0x2E /* . */ ||\n ch === 0x3F /* ? */ ||\n ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ ||\n ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n// But eat eager.\npp$1.regexp_eatPatternCharacters = function(state) {\n var start = state.pos;\n var ch = 0;\n while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {\n state.advance();\n }\n return state.pos !== start\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter\npp$1.regexp_eatExtendedPatternCharacter = function(state) {\n var ch = state.current();\n if (\n ch !== -1 &&\n ch !== 0x24 /* $ */ &&\n !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) &&\n ch !== 0x2E /* . */ &&\n ch !== 0x3F /* ? */ &&\n ch !== 0x5B /* [ */ &&\n ch !== 0x5E /* ^ */ &&\n ch !== 0x7C /* | */\n ) {\n state.advance();\n return true\n }\n return false\n};\n\n// GroupSpecifier ::\n// [empty]\n// `?` GroupName\npp$1.regexp_groupSpecifier = function(state) {\n if (state.eat(0x3F /* ? */)) {\n if (!this.regexp_eatGroupName(state)) { state.raise(\"Invalid group\"); }\n var trackDisjunction = this.options.ecmaVersion >= 16;\n var known = state.groupNames[state.lastStringValue];\n if (known) {\n if (trackDisjunction) {\n for (var i = 0, list = known; i < list.length; i += 1) {\n var altID = list[i];\n\n if (!altID.separatedFrom(state.branchID))\n { state.raise(\"Duplicate capture group name\"); }\n }\n } else {\n state.raise(\"Duplicate capture group name\");\n }\n }\n if (trackDisjunction) {\n (known || (state.groupNames[state.lastStringValue] = [])).push(state.branchID);\n } else {\n state.groupNames[state.lastStringValue] = true;\n }\n }\n};\n\n// GroupName ::\n// `<` RegExpIdentifierName `>`\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$1.regexp_eatGroupName = function(state) {\n state.lastStringValue = \"\";\n if (state.eat(0x3C /* < */)) {\n if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) {\n return true\n }\n state.raise(\"Invalid capture group name\");\n }\n return false\n};\n\n// RegExpIdentifierName ::\n// RegExpIdentifierStart\n// RegExpIdentifierName RegExpIdentifierPart\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$1.regexp_eatRegExpIdentifierName = function(state) {\n state.lastStringValue = \"\";\n if (this.regexp_eatRegExpIdentifierStart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n while (this.regexp_eatRegExpIdentifierPart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n }\n return true\n }\n return false\n};\n\n// RegExpIdentifierStart ::\n// UnicodeIDStart\n// `$`\n// `_`\n// `\\` RegExpUnicodeEscapeSequence[+U]\npp$1.regexp_eatRegExpIdentifierStart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierStart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n};\nfunction isRegExpIdentifierStart(ch) {\n return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */\n}\n\n// RegExpIdentifierPart ::\n// UnicodeIDContinue\n// `$`\n// `_`\n// `\\` RegExpUnicodeEscapeSequence[+U]\n// <ZWNJ>\n// <ZWJ>\npp$1.regexp_eatRegExpIdentifierPart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierPart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n};\nfunction isRegExpIdentifierPart(ch) {\n return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* <ZWNJ> */ || ch === 0x200D /* <ZWJ> */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape\npp$1.regexp_eatAtomEscape = function(state) {\n if (\n this.regexp_eatBackReference(state) ||\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state) ||\n (state.switchN && this.regexp_eatKGroupName(state))\n ) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n if (state.current() === 0x63 /* c */) {\n state.raise(\"Invalid unicode escape\");\n }\n state.raise(\"Invalid escape\");\n }\n return false\n};\npp$1.regexp_eatBackReference = function(state) {\n var start = state.pos;\n if (this.regexp_eatDecimalEscape(state)) {\n var n = state.lastIntValue;\n if (state.switchU) {\n // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape\n if (n > state.maxBackReference) {\n state.maxBackReference = n;\n }\n return true\n }\n if (n <= state.numCapturingParens) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatKGroupName = function(state) {\n if (state.eat(0x6B /* k */)) {\n if (this.regexp_eatGroupName(state)) {\n state.backReferenceNames.push(state.lastStringValue);\n return true\n }\n state.raise(\"Invalid named reference\");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape\npp$1.regexp_eatCharacterEscape = function(state) {\n return (\n this.regexp_eatControlEscape(state) ||\n this.regexp_eatCControlLetter(state) ||\n this.regexp_eatZero(state) ||\n this.regexp_eatHexEscapeSequence(state) ||\n this.regexp_eatRegExpUnicodeEscapeSequence(state, false) ||\n (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) ||\n this.regexp_eatIdentityEscape(state)\n )\n};\npp$1.regexp_eatCControlLetter = function(state) {\n var start = state.pos;\n if (state.eat(0x63 /* c */)) {\n if (this.regexp_eatControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatZero = function(state) {\n if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) {\n state.lastIntValue = 0;\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\npp$1.regexp_eatControlEscape = function(state) {\n var ch = state.current();\n if (ch === 0x74 /* t */) {\n state.lastIntValue = 0x09; /* \\t */\n state.advance();\n return true\n }\n if (ch === 0x6E /* n */) {\n state.lastIntValue = 0x0A; /* \\n */\n state.advance();\n return true\n }\n if (ch === 0x76 /* v */) {\n state.lastIntValue = 0x0B; /* \\v */\n state.advance();\n return true\n }\n if (ch === 0x66 /* f */) {\n state.lastIntValue = 0x0C; /* \\f */\n state.advance();\n return true\n }\n if (ch === 0x72 /* r */) {\n state.lastIntValue = 0x0D; /* \\r */\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\npp$1.regexp_eatControlLetter = function(state) {\n var ch = state.current();\n if (isControlLetter(ch)) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n};\nfunction isControlLetter(ch) {\n return (\n (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) ||\n (ch >= 0x61 /* a */ && ch <= 0x7A /* z */)\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\npp$1.regexp_eatRegExpUnicodeEscapeSequence = function(state, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var start = state.pos;\n var switchU = forceU || state.switchU;\n\n if (state.eat(0x75 /* u */)) {\n if (this.regexp_eatFixedHexDigits(state, 4)) {\n var lead = state.lastIntValue;\n if (switchU && lead >= 0xD800 && lead <= 0xDBFF) {\n var leadSurrogateEnd = state.pos;\n if (state.eat(0x5C /* \\ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) {\n var trail = state.lastIntValue;\n if (trail >= 0xDC00 && trail <= 0xDFFF) {\n state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n return true\n }\n }\n state.pos = leadSurrogateEnd;\n state.lastIntValue = lead;\n }\n return true\n }\n if (\n switchU &&\n state.eat(0x7B /* { */) &&\n this.regexp_eatHexDigits(state) &&\n state.eat(0x7D /* } */) &&\n isValidUnicode(state.lastIntValue)\n ) {\n return true\n }\n if (switchU) {\n state.raise(\"Invalid unicode escape\");\n }\n state.pos = start;\n }\n\n return false\n};\nfunction isValidUnicode(ch) {\n return ch >= 0 && ch <= 0x10FFFF\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape\npp$1.regexp_eatIdentityEscape = function(state) {\n if (state.switchU) {\n if (this.regexp_eatSyntaxCharacter(state)) {\n return true\n }\n if (state.eat(0x2F /* / */)) {\n state.lastIntValue = 0x2F; /* / */\n return true\n }\n return false\n }\n\n var ch = state.current();\n if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\npp$1.regexp_eatDecimalEscape = function(state) {\n state.lastIntValue = 0;\n var ch = state.current();\n if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) {\n do {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */)\n return true\n }\n return false\n};\n\n// Return values used by character set parsing methods, needed to\n// forbid negation of sets that can match strings.\nvar CharSetNone = 0; // Nothing parsed\nvar CharSetOk = 1; // Construct parsed, cannot contain strings\nvar CharSetString = 2; // Construct parsed, can contain strings\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\npp$1.regexp_eatCharacterClassEscape = function(state) {\n var ch = state.current();\n\n if (isCharacterClassEscape(ch)) {\n state.lastIntValue = -1;\n state.advance();\n return CharSetOk\n }\n\n var negate = false;\n if (\n state.switchU &&\n this.options.ecmaVersion >= 9 &&\n ((negate = ch === 0x50 /* P */) || ch === 0x70 /* p */)\n ) {\n state.lastIntValue = -1;\n state.advance();\n var result;\n if (\n state.eat(0x7B /* { */) &&\n (result = this.regexp_eatUnicodePropertyValueExpression(state)) &&\n state.eat(0x7D /* } */)\n ) {\n if (negate && result === CharSetString) { state.raise(\"Invalid property name\"); }\n return result\n }\n state.raise(\"Invalid property name\");\n }\n\n return CharSetNone\n};\n\nfunction isCharacterClassEscape(ch) {\n return (\n ch === 0x64 /* d */ ||\n ch === 0x44 /* D */ ||\n ch === 0x73 /* s */ ||\n ch === 0x53 /* S */ ||\n ch === 0x77 /* w */ ||\n ch === 0x57 /* W */\n )\n}\n\n// UnicodePropertyValueExpression ::\n// UnicodePropertyName `=` UnicodePropertyValue\n// LoneUnicodePropertyNameOrValue\npp$1.regexp_eatUnicodePropertyValueExpression = function(state) {\n var start = state.pos;\n\n // UnicodePropertyName `=` UnicodePropertyValue\n if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) {\n var name = state.lastStringValue;\n if (this.regexp_eatUnicodePropertyValue(state)) {\n var value = state.lastStringValue;\n this.regexp_validateUnicodePropertyNameAndValue(state, name, value);\n return CharSetOk\n }\n }\n state.pos = start;\n\n // LoneUnicodePropertyNameOrValue\n if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {\n var nameOrValue = state.lastStringValue;\n return this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue)\n }\n return CharSetNone\n};\n\npp$1.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {\n if (!hasOwn(state.unicodeProperties.nonBinary, name))\n { state.raise(\"Invalid property name\"); }\n if (!state.unicodeProperties.nonBinary[name].test(value))\n { state.raise(\"Invalid property value\"); }\n};\n\npp$1.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {\n if (state.unicodeProperties.binary.test(nameOrValue)) { return CharSetOk }\n if (state.switchV && state.unicodeProperties.binaryOfStrings.test(nameOrValue)) { return CharSetString }\n state.raise(\"Invalid property name\");\n};\n\n// UnicodePropertyName ::\n// UnicodePropertyNameCharacters\npp$1.regexp_eatUnicodePropertyName = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyNameCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n};\n\nfunction isUnicodePropertyNameCharacter(ch) {\n return isControlLetter(ch) || ch === 0x5F /* _ */\n}\n\n// UnicodePropertyValue ::\n// UnicodePropertyValueCharacters\npp$1.regexp_eatUnicodePropertyValue = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyValueCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n};\nfunction isUnicodePropertyValueCharacter(ch) {\n return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch)\n}\n\n// LoneUnicodePropertyNameOrValue ::\n// UnicodePropertyValueCharacters\npp$1.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {\n return this.regexp_eatUnicodePropertyValue(state)\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\npp$1.regexp_eatCharacterClass = function(state) {\n if (state.eat(0x5B /* [ */)) {\n var negate = state.eat(0x5E /* ^ */);\n var result = this.regexp_classContents(state);\n if (!state.eat(0x5D /* ] */))\n { state.raise(\"Unterminated character class\"); }\n if (negate && result === CharSetString)\n { state.raise(\"Negated character class may contain strings\"); }\n return true\n }\n return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassContents\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\npp$1.regexp_classContents = function(state) {\n if (state.current() === 0x5D /* ] */) { return CharSetOk }\n if (state.switchV) { return this.regexp_classSetExpression(state) }\n this.regexp_nonEmptyClassRanges(state);\n return CharSetOk\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\npp$1.regexp_nonEmptyClassRanges = function(state) {\n while (this.regexp_eatClassAtom(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */) && this.regexp_eatClassAtom(state)) {\n var right = state.lastIntValue;\n if (state.switchU && (left === -1 || right === -1)) {\n state.raise(\"Invalid character class\");\n }\n if (left !== -1 && right !== -1 && left > right) {\n state.raise(\"Range out of order in character class\");\n }\n }\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\npp$1.regexp_eatClassAtom = function(state) {\n var start = state.pos;\n\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatClassEscape(state)) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n var ch$1 = state.current();\n if (ch$1 === 0x63 /* c */ || isOctalDigit(ch$1)) {\n state.raise(\"Invalid class escape\");\n }\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n\n var ch = state.current();\n if (ch !== 0x5D /* ] */) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape\npp$1.regexp_eatClassEscape = function(state) {\n var start = state.pos;\n\n if (state.eat(0x62 /* b */)) {\n state.lastIntValue = 0x08; /* <BS> */\n return true\n }\n\n if (state.switchU && state.eat(0x2D /* - */)) {\n state.lastIntValue = 0x2D; /* - */\n return true\n }\n\n if (!state.switchU && state.eat(0x63 /* c */)) {\n if (this.regexp_eatClassControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n\n return (\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state)\n )\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetExpression\n// https://tc39.es/ecma262/#prod-ClassUnion\n// https://tc39.es/ecma262/#prod-ClassIntersection\n// https://tc39.es/ecma262/#prod-ClassSubtraction\npp$1.regexp_classSetExpression = function(state) {\n var result = CharSetOk, subResult;\n if (this.regexp_eatClassSetRange(state)) ; else if (subResult = this.regexp_eatClassSetOperand(state)) {\n if (subResult === CharSetString) { result = CharSetString; }\n // https://tc39.es/ecma262/#prod-ClassIntersection\n var start = state.pos;\n while (state.eatChars([0x26, 0x26] /* && */)) {\n if (\n state.current() !== 0x26 /* & */ &&\n (subResult = this.regexp_eatClassSetOperand(state))\n ) {\n if (subResult !== CharSetString) { result = CharSetOk; }\n continue\n }\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) { return result }\n // https://tc39.es/ecma262/#prod-ClassSubtraction\n while (state.eatChars([0x2D, 0x2D] /* -- */)) {\n if (this.regexp_eatClassSetOperand(state)) { continue }\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) { return result }\n } else {\n state.raise(\"Invalid character in character class\");\n }\n // https://tc39.es/ecma262/#prod-ClassUnion\n for (;;) {\n if (this.regexp_eatClassSetRange(state)) { continue }\n subResult = this.regexp_eatClassSetOperand(state);\n if (!subResult) { return result }\n if (subResult === CharSetString) { result = CharSetString; }\n }\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetRange\npp$1.regexp_eatClassSetRange = function(state) {\n var start = state.pos;\n if (this.regexp_eatClassSetCharacter(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */) && this.regexp_eatClassSetCharacter(state)) {\n var right = state.lastIntValue;\n if (left !== -1 && right !== -1 && left > right) {\n state.raise(\"Range out of order in character class\");\n }\n return true\n }\n state.pos = start;\n }\n return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetOperand\npp$1.regexp_eatClassSetOperand = function(state) {\n if (this.regexp_eatClassSetCharacter(state)) { return CharSetOk }\n return this.regexp_eatClassStringDisjunction(state) || this.regexp_eatNestedClass(state)\n};\n\n// https://tc39.es/ecma262/#prod-NestedClass\npp$1.regexp_eatNestedClass = function(state) {\n var start = state.pos;\n if (state.eat(0x5B /* [ */)) {\n var negate = state.eat(0x5E /* ^ */);\n var result = this.regexp_classContents(state);\n if (state.eat(0x5D /* ] */)) {\n if (negate && result === CharSetString) {\n state.raise(\"Negated character class may contain strings\");\n }\n return result\n }\n state.pos = start;\n }\n if (state.eat(0x5C /* \\ */)) {\n var result$1 = this.regexp_eatCharacterClassEscape(state);\n if (result$1) {\n return result$1\n }\n state.pos = start;\n }\n return null\n};\n\n// https://tc39.es/ecma262/#prod-ClassStringDisjunction\npp$1.regexp_eatClassStringDisjunction = function(state) {\n var start = state.pos;\n if (state.eatChars([0x5C, 0x71] /* \\q */)) {\n if (state.eat(0x7B /* { */)) {\n var result = this.regexp_classStringDisjunctionContents(state);\n if (state.eat(0x7D /* } */)) {\n return result\n }\n } else {\n // Make the same message as V8.\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n return null\n};\n\n// https://tc39.es/ecma262/#prod-ClassStringDisjunctionContents\npp$1.regexp_classStringDisjunctionContents = function(state) {\n var result = this.regexp_classString(state);\n while (state.eat(0x7C /* | */)) {\n if (this.regexp_classString(state) === CharSetString) { result = CharSetString; }\n }\n return result\n};\n\n// https://tc39.es/ecma262/#prod-ClassString\n// https://tc39.es/ecma262/#prod-NonEmptyClassString\npp$1.regexp_classString = function(state) {\n var count = 0;\n while (this.regexp_eatClassSetCharacter(state)) { count++; }\n return count === 1 ? CharSetOk : CharSetString\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetCharacter\npp$1.regexp_eatClassSetCharacter = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */)) {\n if (\n this.regexp_eatCharacterEscape(state) ||\n this.regexp_eatClassSetReservedPunctuator(state)\n ) {\n return true\n }\n if (state.eat(0x62 /* b */)) {\n state.lastIntValue = 0x08; /* <BS> */\n return true\n }\n state.pos = start;\n return false\n }\n var ch = state.current();\n if (ch < 0 || ch === state.lookahead() && isClassSetReservedDoublePunctuatorCharacter(ch)) { return false }\n if (isClassSetSyntaxCharacter(ch)) { return false }\n state.advance();\n state.lastIntValue = ch;\n return true\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedDoublePunctuator\nfunction isClassSetReservedDoublePunctuatorCharacter(ch) {\n return (\n ch === 0x21 /* ! */ ||\n ch >= 0x23 /* # */ && ch <= 0x26 /* & */ ||\n ch >= 0x2A /* * */ && ch <= 0x2C /* , */ ||\n ch === 0x2E /* . */ ||\n ch >= 0x3A /* : */ && ch <= 0x40 /* @ */ ||\n ch === 0x5E /* ^ */ ||\n ch === 0x60 /* ` */ ||\n ch === 0x7E /* ~ */\n )\n}\n\n// https://tc39.es/ecma262/#prod-ClassSetSyntaxCharacter\nfunction isClassSetSyntaxCharacter(ch) {\n return (\n ch === 0x28 /* ( */ ||\n ch === 0x29 /* ) */ ||\n ch === 0x2D /* - */ ||\n ch === 0x2F /* / */ ||\n ch >= 0x5B /* [ */ && ch <= 0x5D /* ] */ ||\n ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n )\n}\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\npp$1.regexp_eatClassSetReservedPunctuator = function(state) {\n var ch = state.current();\n if (isClassSetReservedPunctuator(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\nfunction isClassSetReservedPunctuator(ch) {\n return (\n ch === 0x21 /* ! */ ||\n ch === 0x23 /* # */ ||\n ch === 0x25 /* % */ ||\n ch === 0x26 /* & */ ||\n ch === 0x2C /* , */ ||\n ch === 0x2D /* - */ ||\n ch >= 0x3A /* : */ && ch <= 0x3E /* > */ ||\n ch === 0x40 /* @ */ ||\n ch === 0x60 /* ` */ ||\n ch === 0x7E /* ~ */\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter\npp$1.regexp_eatClassControlLetter = function(state) {\n var ch = state.current();\n if (isDecimalDigit(ch) || ch === 0x5F /* _ */) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$1.regexp_eatHexEscapeSequence = function(state) {\n var start = state.pos;\n if (state.eat(0x78 /* x */)) {\n if (this.regexp_eatFixedHexDigits(state, 2)) {\n return true\n }\n if (state.switchU) {\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\npp$1.regexp_eatDecimalDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isDecimalDigit(ch = state.current())) {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n }\n return state.pos !== start\n};\nfunction isDecimalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\npp$1.regexp_eatHexDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isHexDigit(ch = state.current())) {\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return state.pos !== start\n};\nfunction isHexDigit(ch) {\n return (\n (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) ||\n (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) ||\n (ch >= 0x61 /* a */ && ch <= 0x66 /* f */)\n )\n}\nfunction hexToInt(ch) {\n if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) {\n return 10 + (ch - 0x41 /* A */)\n }\n if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) {\n return 10 + (ch - 0x61 /* a */)\n }\n return ch - 0x30 /* 0 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence\n// Allows only 0-377(octal) i.e. 0-255(decimal).\npp$1.regexp_eatLegacyOctalEscapeSequence = function(state) {\n if (this.regexp_eatOctalDigit(state)) {\n var n1 = state.lastIntValue;\n if (this.regexp_eatOctalDigit(state)) {\n var n2 = state.lastIntValue;\n if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {\n state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;\n } else {\n state.lastIntValue = n1 * 8 + n2;\n }\n } else {\n state.lastIntValue = n1;\n }\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\npp$1.regexp_eatOctalDigit = function(state) {\n var ch = state.current();\n if (isOctalDigit(ch)) {\n state.lastIntValue = ch - 0x30; /* 0 */\n state.advance();\n return true\n }\n state.lastIntValue = 0;\n return false\n};\nfunction isOctalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n// And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$1.regexp_eatFixedHexDigits = function(state, length) {\n var start = state.pos;\n state.lastIntValue = 0;\n for (var i = 0; i < length; ++i) {\n var ch = state.current();\n if (!isHexDigit(ch)) {\n state.pos = start;\n return false\n }\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return true\n};\n\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\n\nvar Token = function Token(p) {\n this.type = p.type;\n this.value = p.value;\n this.start = p.start;\n this.end = p.end;\n if (p.options.locations)\n { this.loc = new SourceLocation(p, p.startLoc, p.endLoc); }\n if (p.options.ranges)\n { this.range = [p.start, p.end]; }\n};\n\n// ## Tokenizer\n\nvar pp = Parser.prototype;\n\n// Move to the next token\n\npp.next = function(ignoreEscapeSequenceInKeyword) {\n if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc)\n { this.raiseRecoverable(this.start, \"Escape sequence in keyword \" + this.type.keyword); }\n if (this.options.onToken)\n { this.options.onToken(new Token(this)); }\n\n this.lastTokEnd = this.end;\n this.lastTokStart = this.start;\n this.lastTokEndLoc = this.endLoc;\n this.lastTokStartLoc = this.startLoc;\n this.nextToken();\n};\n\npp.getToken = function() {\n this.next();\n return new Token(this)\n};\n\n// If we're in an ES6 environment, make parsers iterable\nif (typeof Symbol !== \"undefined\")\n { pp[Symbol.iterator] = function() {\n var this$1$1 = this;\n\n return {\n next: function () {\n var token = this$1$1.getToken();\n return {\n done: token.type === types$1.eof,\n value: token\n }\n }\n }\n }; }\n\n// Toggle strict mode. Re-reads the next number or string to please\n// pedantic tests (`\"use strict\"; 010;` should fail).\n\n// Read a single token, updating the parser object's token-related\n// properties.\n\npp.nextToken = function() {\n var curContext = this.curContext();\n if (!curContext || !curContext.preserveSpace) { this.skipSpace(); }\n\n this.start = this.pos;\n if (this.options.locations) { this.startLoc = this.curPosition(); }\n if (this.pos >= this.input.length) { return this.finishToken(types$1.eof) }\n\n if (curContext.override) { return curContext.override(this) }\n else { this.readToken(this.fullCharCodeAtPos()); }\n};\n\npp.readToken = function(code) {\n // Identifier or keyword. '\\uXXXX' sequences are allowed in\n // identifiers, so '\\' also dispatches to that.\n if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\\' */)\n { return this.readWord() }\n\n return this.getTokenFromCode(code)\n};\n\npp.fullCharCodeAt = function(pos) {\n var code = this.input.charCodeAt(pos);\n if (code <= 0xd7ff || code >= 0xdc00) { return code }\n var next = this.input.charCodeAt(pos + 1);\n return next <= 0xdbff || next >= 0xe000 ? code : (code << 10) + next - 0x35fdc00\n};\n\npp.fullCharCodeAtPos = function() {\n return this.fullCharCodeAt(this.pos)\n};\n\npp.skipBlockComment = function() {\n var startLoc = this.options.onComment && this.curPosition();\n var start = this.pos, end = this.input.indexOf(\"*/\", this.pos += 2);\n if (end === -1) { this.raise(this.pos - 2, \"Unterminated comment\"); }\n this.pos = end + 2;\n if (this.options.locations) {\n for (var nextBreak = (void 0), pos = start; (nextBreak = nextLineBreak(this.input, pos, this.pos)) > -1;) {\n ++this.curLine;\n pos = this.lineStart = nextBreak;\n }\n }\n if (this.options.onComment)\n { this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos,\n startLoc, this.curPosition()); }\n};\n\npp.skipLineComment = function(startSkip) {\n var start = this.pos;\n var startLoc = this.options.onComment && this.curPosition();\n var ch = this.input.charCodeAt(this.pos += startSkip);\n while (this.pos < this.input.length && !isNewLine(ch)) {\n ch = this.input.charCodeAt(++this.pos);\n }\n if (this.options.onComment)\n { this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos,\n startLoc, this.curPosition()); }\n};\n\n// Called at the start of the parse and after every token. Skips\n// whitespace and comments, and.\n\npp.skipSpace = function() {\n loop: while (this.pos < this.input.length) {\n var ch = this.input.charCodeAt(this.pos);\n switch (ch) {\n case 32: case 160: // ' '\n ++this.pos;\n break\n case 13:\n if (this.input.charCodeAt(this.pos + 1) === 10) {\n ++this.pos;\n }\n case 10: case 8232: case 8233:\n ++this.pos;\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n break\n case 47: // '/'\n switch (this.input.charCodeAt(this.pos + 1)) {\n case 42: // '*'\n this.skipBlockComment();\n break\n case 47:\n this.skipLineComment(2);\n break\n default:\n break loop\n }\n break\n default:\n if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n ++this.pos;\n } else {\n break loop\n }\n }\n }\n};\n\n// Called at the end of every token. Sets `end`, `val`, and\n// maintains `context` and `exprAllowed`, and skips the space after\n// the token, so that the next one's `start` will point at the\n// right position.\n\npp.finishToken = function(type, val) {\n this.end = this.pos;\n if (this.options.locations) { this.endLoc = this.curPosition(); }\n var prevType = this.type;\n this.type = type;\n this.value = val;\n\n this.updateContext(prevType);\n};\n\n// ### Token reading\n\n// This is the function that is called to fetch the next token. It\n// is somewhat obscure, because it works in character codes rather\n// than characters, and because operator parsing has been inlined\n// into it.\n//\n// All in the name of speed.\n//\npp.readToken_dot = function() {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next >= 48 && next <= 57) { return this.readNumber(true) }\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot '.'\n this.pos += 3;\n return this.finishToken(types$1.ellipsis)\n } else {\n ++this.pos;\n return this.finishToken(types$1.dot)\n }\n};\n\npp.readToken_slash = function() { // '/'\n var next = this.input.charCodeAt(this.pos + 1);\n if (this.exprAllowed) { ++this.pos; return this.readRegexp() }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.slash, 1)\n};\n\npp.readToken_mult_modulo_exp = function(code) { // '%*'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n var tokentype = code === 42 ? types$1.star : types$1.modulo;\n\n // exponentiation operator ** and **=\n if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {\n ++size;\n tokentype = types$1.starstar;\n next = this.input.charCodeAt(this.pos + 2);\n }\n\n if (next === 61) { return this.finishOp(types$1.assign, size + 1) }\n return this.finishOp(tokentype, size)\n};\n\npp.readToken_pipe_amp = function(code) { // '|&'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (this.options.ecmaVersion >= 12) {\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (next2 === 61) { return this.finishOp(types$1.assign, 3) }\n }\n return this.finishOp(code === 124 ? types$1.logicalOR : types$1.logicalAND, 2)\n }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(code === 124 ? types$1.bitwiseOR : types$1.bitwiseAND, 1)\n};\n\npp.readToken_caret = function() { // '^'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.bitwiseXOR, 1)\n};\n\npp.readToken_plus_min = function(code) { // '+-'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 &&\n (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {\n // A `-->` line comment\n this.skipLineComment(3);\n this.skipSpace();\n return this.nextToken()\n }\n return this.finishOp(types$1.incDec, 2)\n }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.plusMin, 1)\n};\n\npp.readToken_lt_gt = function(code) { // '<>'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n if (next === code) {\n size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;\n if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types$1.assign, size + 1) }\n return this.finishOp(types$1.bitShift, size)\n }\n if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&\n this.input.charCodeAt(this.pos + 3) === 45) {\n // `<!--`, an XML-style comment that should be interpreted as a line comment\n this.skipLineComment(4);\n this.skipSpace();\n return this.nextToken()\n }\n if (next === 61) { size = 2; }\n return this.finishOp(types$1.relational, size)\n};\n\npp.readToken_eq_excl = function(code) { // '=!'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 61) { return this.finishOp(types$1.equality, this.input.charCodeAt(this.pos + 2) === 61 ? 3 : 2) }\n if (code === 61 && next === 62 && this.options.ecmaVersion >= 6) { // '=>'\n this.pos += 2;\n return this.finishToken(types$1.arrow)\n }\n return this.finishOp(code === 61 ? types$1.eq : types$1.prefix, 1)\n};\n\npp.readToken_question = function() { // '?'\n var ecmaVersion = this.options.ecmaVersion;\n if (ecmaVersion >= 11) {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 46) {\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (next2 < 48 || next2 > 57) { return this.finishOp(types$1.questionDot, 2) }\n }\n if (next === 63) {\n if (ecmaVersion >= 12) {\n var next2$1 = this.input.charCodeAt(this.pos + 2);\n if (next2$1 === 61) { return this.finishOp(types$1.assign, 3) }\n }\n return this.finishOp(types$1.coalesce, 2)\n }\n }\n return this.finishOp(types$1.question, 1)\n};\n\npp.readToken_numberSign = function() { // '#'\n var ecmaVersion = this.options.ecmaVersion;\n var code = 35; // '#'\n if (ecmaVersion >= 13) {\n ++this.pos;\n code = this.fullCharCodeAtPos();\n if (isIdentifierStart(code, true) || code === 92 /* '\\' */) {\n return this.finishToken(types$1.privateId, this.readWord1())\n }\n }\n\n this.raise(this.pos, \"Unexpected character '\" + codePointToString(code) + \"'\");\n};\n\npp.getTokenFromCode = function(code) {\n switch (code) {\n // The interpretation of a dot depends on whether it is followed\n // by a digit or another two dots.\n case 46: // '.'\n return this.readToken_dot()\n\n // Punctuation tokens.\n case 40: ++this.pos; return this.finishToken(types$1.parenL)\n case 41: ++this.pos; return this.finishToken(types$1.parenR)\n case 59: ++this.pos; return this.finishToken(types$1.semi)\n case 44: ++this.pos; return this.finishToken(types$1.comma)\n case 91: ++this.pos; return this.finishToken(types$1.bracketL)\n case 93: ++this.pos; return this.finishToken(types$1.bracketR)\n case 123: ++this.pos; return this.finishToken(types$1.braceL)\n case 125: ++this.pos; return this.finishToken(types$1.braceR)\n case 58: ++this.pos; return this.finishToken(types$1.colon)\n\n case 96: // '`'\n if (this.options.ecmaVersion < 6) { break }\n ++this.pos;\n return this.finishToken(types$1.backQuote)\n\n case 48: // '0'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 120 || next === 88) { return this.readRadixNumber(16) } // '0x', '0X' - hex number\n if (this.options.ecmaVersion >= 6) {\n if (next === 111 || next === 79) { return this.readRadixNumber(8) } // '0o', '0O' - octal number\n if (next === 98 || next === 66) { return this.readRadixNumber(2) } // '0b', '0B' - binary number\n }\n\n // Anything else beginning with a digit is an integer, octal\n // number, or float.\n case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: // 1-9\n return this.readNumber(false)\n\n // Quotes produce strings.\n case 34: case 39: // '\"', \"'\"\n return this.readString(code)\n\n // Operators are parsed inline in tiny state machines. '=' (61) is\n // often referred to. `finishOp` simply skips the amount of\n // characters it is given as second argument, and returns a token\n // of the type given by its first argument.\n case 47: // '/'\n return this.readToken_slash()\n\n case 37: case 42: // '%*'\n return this.readToken_mult_modulo_exp(code)\n\n case 124: case 38: // '|&'\n return this.readToken_pipe_amp(code)\n\n case 94: // '^'\n return this.readToken_caret()\n\n case 43: case 45: // '+-'\n return this.readToken_plus_min(code)\n\n case 60: case 62: // '<>'\n return this.readToken_lt_gt(code)\n\n case 61: case 33: // '=!'\n return this.readToken_eq_excl(code)\n\n case 63: // '?'\n return this.readToken_question()\n\n case 126: // '~'\n return this.finishOp(types$1.prefix, 1)\n\n case 35: // '#'\n return this.readToken_numberSign()\n }\n\n this.raise(this.pos, \"Unexpected character '\" + codePointToString(code) + \"'\");\n};\n\npp.finishOp = function(type, size) {\n var str = this.input.slice(this.pos, this.pos + size);\n this.pos += size;\n return this.finishToken(type, str)\n};\n\npp.readRegexp = function() {\n var escaped, inClass, start = this.pos;\n for (;;) {\n if (this.pos >= this.input.length) { this.raise(start, \"Unterminated regular expression\"); }\n var ch = this.input.charAt(this.pos);\n if (lineBreak.test(ch)) { this.raise(start, \"Unterminated regular expression\"); }\n if (!escaped) {\n if (ch === \"[\") { inClass = true; }\n else if (ch === \"]\" && inClass) { inClass = false; }\n else if (ch === \"/\" && !inClass) { break }\n escaped = ch === \"\\\\\";\n } else { escaped = false; }\n ++this.pos;\n }\n var pattern = this.input.slice(start, this.pos);\n ++this.pos;\n var flagsStart = this.pos;\n var flags = this.readWord1();\n if (this.containsEsc) { this.unexpected(flagsStart); }\n\n // Validate pattern\n var state = this.regexpState || (this.regexpState = new RegExpValidationState(this));\n state.reset(start, pattern, flags);\n this.validateRegExpFlags(state);\n this.validateRegExpPattern(state);\n\n // Create Literal#value property value.\n var value = null;\n try {\n value = new RegExp(pattern, flags);\n } catch (e) {\n // ESTree requires null if it failed to instantiate RegExp object.\n // https://github.com/estree/estree/blob/a27003adf4fd7bfad44de9cef372a2eacd527b1c/es5.md#regexpliteral\n }\n\n return this.finishToken(types$1.regexp, {pattern: pattern, flags: flags, value: value})\n};\n\n// Read an integer in the given radix. Return null if zero digits\n// were read, the integer value otherwise. When `len` is given, this\n// will return `null` unless the integer has exactly `len` digits.\n\npp.readInt = function(radix, len, maybeLegacyOctalNumericLiteral) {\n // `len` is used for character escape sequences. In that case, disallow separators.\n var allowSeparators = this.options.ecmaVersion >= 12 && len === undefined;\n\n // `maybeLegacyOctalNumericLiteral` is true if it doesn't have prefix (0x,0o,0b)\n // and isn't fraction part nor exponent part. In that case, if the first digit\n // is zero then disallow separators.\n var isLegacyOctalNumericLiteral = maybeLegacyOctalNumericLiteral && this.input.charCodeAt(this.pos) === 48;\n\n var start = this.pos, total = 0, lastCode = 0;\n for (var i = 0, e = len == null ? Infinity : len; i < e; ++i, ++this.pos) {\n var code = this.input.charCodeAt(this.pos), val = (void 0);\n\n if (allowSeparators && code === 95) {\n if (isLegacyOctalNumericLiteral) { this.raiseRecoverable(this.pos, \"Numeric separator is not allowed in legacy octal numeric literals\"); }\n if (lastCode === 95) { this.raiseRecoverable(this.pos, \"Numeric separator must be exactly one underscore\"); }\n if (i === 0) { this.raiseRecoverable(this.pos, \"Numeric separator is not allowed at the first of digits\"); }\n lastCode = code;\n continue\n }\n\n if (code >= 97) { val = code - 97 + 10; } // a\n else if (code >= 65) { val = code - 65 + 10; } // A\n else if (code >= 48 && code <= 57) { val = code - 48; } // 0-9\n else { val = Infinity; }\n if (val >= radix) { break }\n lastCode = code;\n total = total * radix + val;\n }\n\n if (allowSeparators && lastCode === 95) { this.raiseRecoverable(this.pos - 1, \"Numeric separator is not allowed at the last of digits\"); }\n if (this.pos === start || len != null && this.pos - start !== len) { return null }\n\n return total\n};\n\nfunction stringToNumber(str, isLegacyOctalNumericLiteral) {\n if (isLegacyOctalNumericLiteral) {\n return parseInt(str, 8)\n }\n\n // `parseFloat(value)` stops parsing at the first numeric separator then returns a wrong value.\n return parseFloat(str.replace(/_/g, \"\"))\n}\n\nfunction stringToBigInt(str) {\n if (typeof BigInt !== \"function\") {\n return null\n }\n\n // `BigInt(value)` throws syntax error if the string contains numeric separators.\n return BigInt(str.replace(/_/g, \"\"))\n}\n\npp.readRadixNumber = function(radix) {\n var start = this.pos;\n this.pos += 2; // 0x\n var val = this.readInt(radix);\n if (val == null) { this.raise(this.start + 2, \"Expected number in radix \" + radix); }\n if (this.options.ecmaVersion >= 11 && this.input.charCodeAt(this.pos) === 110) {\n val = stringToBigInt(this.input.slice(start, this.pos));\n ++this.pos;\n } else if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n return this.finishToken(types$1.num, val)\n};\n\n// Read an integer, octal integer, or floating-point number.\n\npp.readNumber = function(startsWithDot) {\n var start = this.pos;\n if (!startsWithDot && this.readInt(10, undefined, true) === null) { this.raise(start, \"Invalid number\"); }\n var octal = this.pos - start >= 2 && this.input.charCodeAt(start) === 48;\n if (octal && this.strict) { this.raise(start, \"Invalid number\"); }\n var next = this.input.charCodeAt(this.pos);\n if (!octal && !startsWithDot && this.options.ecmaVersion >= 11 && next === 110) {\n var val$1 = stringToBigInt(this.input.slice(start, this.pos));\n ++this.pos;\n if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n return this.finishToken(types$1.num, val$1)\n }\n if (octal && /[89]/.test(this.input.slice(start, this.pos))) { octal = false; }\n if (next === 46 && !octal) { // '.'\n ++this.pos;\n this.readInt(10);\n next = this.input.charCodeAt(this.pos);\n }\n if ((next === 69 || next === 101) && !octal) { // 'eE'\n next = this.input.charCodeAt(++this.pos);\n if (next === 43 || next === 45) { ++this.pos; } // '+-'\n if (this.readInt(10) === null) { this.raise(start, \"Invalid number\"); }\n }\n if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n\n var val = stringToNumber(this.input.slice(start, this.pos), octal);\n return this.finishToken(types$1.num, val)\n};\n\n// Read a string value, interpreting backslash-escapes.\n\npp.readCodePoint = function() {\n var ch = this.input.charCodeAt(this.pos), code;\n\n if (ch === 123) { // '{'\n if (this.options.ecmaVersion < 6) { this.unexpected(); }\n var codePos = ++this.pos;\n code = this.readHexChar(this.input.indexOf(\"}\", this.pos) - this.pos);\n ++this.pos;\n if (code > 0x10FFFF) { this.invalidStringToken(codePos, \"Code point out of bounds\"); }\n } else {\n code = this.readHexChar(4);\n }\n return code\n};\n\npp.readString = function(quote) {\n var out = \"\", chunkStart = ++this.pos;\n for (;;) {\n if (this.pos >= this.input.length) { this.raise(this.start, \"Unterminated string constant\"); }\n var ch = this.input.charCodeAt(this.pos);\n if (ch === quote) { break }\n if (ch === 92) { // '\\'\n out += this.input.slice(chunkStart, this.pos);\n out += this.readEscapedChar(false);\n chunkStart = this.pos;\n } else if (ch === 0x2028 || ch === 0x2029) {\n if (this.options.ecmaVersion < 10) { this.raise(this.start, \"Unterminated string constant\"); }\n ++this.pos;\n if (this.options.locations) {\n this.curLine++;\n this.lineStart = this.pos;\n }\n } else {\n if (isNewLine(ch)) { this.raise(this.start, \"Unterminated string constant\"); }\n ++this.pos;\n }\n }\n out += this.input.slice(chunkStart, this.pos++);\n return this.finishToken(types$1.string, out)\n};\n\n// Reads template string tokens.\n\nvar INVALID_TEMPLATE_ESCAPE_ERROR = {};\n\npp.tryReadTemplateToken = function() {\n this.inTemplateElement = true;\n try {\n this.readTmplToken();\n } catch (err) {\n if (err === INVALID_TEMPLATE_ESCAPE_ERROR) {\n this.readInvalidTemplateToken();\n } else {\n throw err\n }\n }\n\n this.inTemplateElement = false;\n};\n\npp.invalidStringToken = function(position, message) {\n if (this.inTemplateElement && this.options.ecmaVersion >= 9) {\n throw INVALID_TEMPLATE_ESCAPE_ERROR\n } else {\n this.raise(position, message);\n }\n};\n\npp.readTmplToken = function() {\n var out = \"\", chunkStart = this.pos;\n for (;;) {\n if (this.pos >= this.input.length) { this.raise(this.start, \"Unterminated template\"); }\n var ch = this.input.charCodeAt(this.pos);\n if (ch === 96 || ch === 36 && this.input.charCodeAt(this.pos + 1) === 123) { // '`', '${'\n if (this.pos === this.start && (this.type === types$1.template || this.type === types$1.invalidTemplate)) {\n if (ch === 36) {\n this.pos += 2;\n return this.finishToken(types$1.dollarBraceL)\n } else {\n ++this.pos;\n return this.finishToken(types$1.backQuote)\n }\n }\n out += this.input.slice(chunkStart, this.pos);\n return this.finishToken(types$1.template, out)\n }\n if (ch === 92) { // '\\'\n out += this.input.slice(chunkStart, this.pos);\n out += this.readEscapedChar(true);\n chunkStart = this.pos;\n } else if (isNewLine(ch)) {\n out += this.input.slice(chunkStart, this.pos);\n ++this.pos;\n switch (ch) {\n case 13:\n if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; }\n case 10:\n out += \"\\n\";\n break\n default:\n out += String.fromCharCode(ch);\n break\n }\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n chunkStart = this.pos;\n } else {\n ++this.pos;\n }\n }\n};\n\n// Reads a template token to search for the end, without validating any escape sequences\npp.readInvalidTemplateToken = function() {\n for (; this.pos < this.input.length; this.pos++) {\n switch (this.input[this.pos]) {\n case \"\\\\\":\n ++this.pos;\n break\n\n case \"$\":\n if (this.input[this.pos + 1] !== \"{\") { break }\n // fall through\n case \"`\":\n return this.finishToken(types$1.invalidTemplate, this.input.slice(this.start, this.pos))\n\n case \"\\r\":\n if (this.input[this.pos + 1] === \"\\n\") { ++this.pos; }\n // fall through\n case \"\\n\": case \"\\u2028\": case \"\\u2029\":\n ++this.curLine;\n this.lineStart = this.pos + 1;\n break\n }\n }\n this.raise(this.start, \"Unterminated template\");\n};\n\n// Used to read escaped characters\n\npp.readEscapedChar = function(inTemplate) {\n var ch = this.input.charCodeAt(++this.pos);\n ++this.pos;\n switch (ch) {\n case 110: return \"\\n\" // 'n' -> '\\n'\n case 114: return \"\\r\" // 'r' -> '\\r'\n case 120: return String.fromCharCode(this.readHexChar(2)) // 'x'\n case 117: return codePointToString(this.readCodePoint()) // 'u'\n case 116: return \"\\t\" // 't' -> '\\t'\n case 98: return \"\\b\" // 'b' -> '\\b'\n case 118: return \"\\u000b\" // 'v' -> '\\u000b'\n case 102: return \"\\f\" // 'f' -> '\\f'\n case 13: if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; } // '\\r\\n'\n case 10: // ' \\n'\n if (this.options.locations) { this.lineStart = this.pos; ++this.curLine; }\n return \"\"\n case 56:\n case 57:\n if (this.strict) {\n this.invalidStringToken(\n this.pos - 1,\n \"Invalid escape sequence\"\n );\n }\n if (inTemplate) {\n var codePos = this.pos - 1;\n\n this.invalidStringToken(\n codePos,\n \"Invalid escape sequence in template string\"\n );\n }\n default:\n if (ch >= 48 && ch <= 55) {\n var octalStr = this.input.substr(this.pos - 1, 3).match(/^[0-7]+/)[0];\n var octal = parseInt(octalStr, 8);\n if (octal > 255) {\n octalStr = octalStr.slice(0, -1);\n octal = parseInt(octalStr, 8);\n }\n this.pos += octalStr.length - 1;\n ch = this.input.charCodeAt(this.pos);\n if ((octalStr !== \"0\" || ch === 56 || ch === 57) && (this.strict || inTemplate)) {\n this.invalidStringToken(\n this.pos - 1 - octalStr.length,\n inTemplate\n ? \"Octal literal in template string\"\n : \"Octal literal in strict mode\"\n );\n }\n return String.fromCharCode(octal)\n }\n if (isNewLine(ch)) {\n // Unicode new line characters after \\ get removed from output in both\n // template literals and strings\n if (this.options.locations) { this.lineStart = this.pos; ++this.curLine; }\n return \"\"\n }\n return String.fromCharCode(ch)\n }\n};\n\n// Used to read character escape sequences ('\\x', '\\u', '\\U').\n\npp.readHexChar = function(len) {\n var codePos = this.pos;\n var n = this.readInt(16, len);\n if (n === null) { this.invalidStringToken(codePos, \"Bad character escape sequence\"); }\n return n\n};\n\n// Read an identifier, and return it as a string. Sets `this.containsEsc`\n// to whether the word contained a '\\u' escape.\n//\n// Incrementally adds only escaped chars, adding other chunks as-is\n// as a micro-optimization.\n\npp.readWord1 = function() {\n this.containsEsc = false;\n var word = \"\", first = true, chunkStart = this.pos;\n var astral = this.options.ecmaVersion >= 6;\n while (this.pos < this.input.length) {\n var ch = this.fullCharCodeAtPos();\n if (isIdentifierChar(ch, astral)) {\n this.pos += ch <= 0xffff ? 1 : 2;\n } else if (ch === 92) { // \"\\\"\n this.containsEsc = true;\n word += this.input.slice(chunkStart, this.pos);\n var escStart = this.pos;\n if (this.input.charCodeAt(++this.pos) !== 117) // \"u\"\n { this.invalidStringToken(this.pos, \"Expecting Unicode escape sequence \\\\uXXXX\"); }\n ++this.pos;\n var esc = this.readCodePoint();\n if (!(first ? isIdentifierStart : isIdentifierChar)(esc, astral))\n { this.invalidStringToken(escStart, \"Invalid Unicode escape\"); }\n word += codePointToString(esc);\n chunkStart = this.pos;\n } else {\n break\n }\n first = false;\n }\n return word + this.input.slice(chunkStart, this.pos)\n};\n\n// Read an identifier or keyword token. Will check for reserved\n// words when necessary.\n\npp.readWord = function() {\n var word = this.readWord1();\n var type = types$1.name;\n if (this.keywords.test(word)) {\n type = keywords[word];\n }\n return this.finishToken(type, word)\n};\n\n// Acorn is a tiny, fast JavaScript parser written in JavaScript.\n//\n// Acorn was written by Marijn Haverbeke, Ingvar Stepanyan, and\n// various contributors and released under an MIT license.\n//\n// Git repositories for Acorn are available at\n//\n// http://marijnhaverbeke.nl/git/acorn\n// https://github.com/acornjs/acorn.git\n//\n// Please use the [github bug tracker][ghbt] to report issues.\n//\n// [ghbt]: https://github.com/acornjs/acorn/issues\n\n\nvar version = \"8.16.0\";\n\nParser.acorn = {\n Parser: Parser,\n version: version,\n defaultOptions: defaultOptions,\n Position: Position,\n SourceLocation: SourceLocation,\n getLineInfo: getLineInfo,\n Node: Node,\n TokenType: TokenType,\n tokTypes: types$1,\n keywordTypes: keywords,\n TokContext: TokContext,\n tokContexts: types,\n isIdentifierChar: isIdentifierChar,\n isIdentifierStart: isIdentifierStart,\n Token: Token,\n isNewLine: isNewLine,\n lineBreak: lineBreak,\n lineBreakG: lineBreakG,\n nonASCIIwhitespace: nonASCIIwhitespace\n};\n\n// The main exported interface (under `self.acorn` when in the\n// browser) is a `parse` function that takes a code string and returns\n// an abstract syntax tree as specified by the [ESTree spec][estree].\n//\n// [estree]: https://github.com/estree/estree\n\nfunction parse(input, options) {\n return Parser.parse(input, options)\n}\n\n// This function tries to parse a single expression at a given\n// offset in a string. Useful for parsing mixed-language formats\n// that embed JavaScript expressions.\n\nfunction parseExpressionAt(input, pos, options) {\n return Parser.parseExpressionAt(input, pos, options)\n}\n\n// Acorn is organized as a tokenizer and a recursive-descent parser.\n// The `tokenizer` export provides an interface to the tokenizer.\n\nfunction tokenizer(input, options) {\n return Parser.tokenizer(input, options)\n}\n\nexport { Node, Parser, Position, SourceLocation, TokContext, Token, TokenType, defaultOptions, getLineInfo, isIdentifierChar, isIdentifierStart, isNewLine, keywords as keywordTypes, lineBreak, lineBreakG, nonASCIIwhitespace, parse, parseExpressionAt, types as tokContexts, types$1 as tokTypes, tokenizer, version };\n","// AST walker module for ESTree compatible trees\n\n// A simple walk is one where you simply specify callbacks to be\n// called on specific nodes. The last two arguments are optional. A\n// simple use would be\n//\n// walk.simple(myTree, {\n// Expression: function(node) { ... }\n// });\n//\n// to do something with all expressions. All ESTree node types\n// can be used to identify node types, as well as Expression and\n// Statement, which denote categories of nodes.\n//\n// The base argument can be used to pass a custom (recursive)\n// walker, and state can be used to give this walked an initial\n// state.\n\nfunction simple(node, visitors, baseVisitor, state, override) {\n if (!baseVisitor) { baseVisitor = base\n ; }(function c(node, st, override) {\n var type = override || node.type;\n visitNode(baseVisitor, type, node, st, c);\n if (visitors[type]) { visitors[type](node, st); }\n })(node, state, override);\n}\n\n// An ancestor walk keeps an array of ancestor nodes (including the\n// current node) and passes them to the callback as third parameter\n// (and also as state parameter when no other state is present).\nfunction ancestor(node, visitors, baseVisitor, state, override) {\n var ancestors = [];\n if (!baseVisitor) { baseVisitor = base\n ; }(function c(node, st, override) {\n var type = override || node.type;\n var isNew = node !== ancestors[ancestors.length - 1];\n if (isNew) { ancestors.push(node); }\n visitNode(baseVisitor, type, node, st, c);\n if (visitors[type]) { visitors[type](node, st || ancestors, ancestors); }\n if (isNew) { ancestors.pop(); }\n })(node, state, override);\n}\n\n// A recursive walk is one where your functions override the default\n// walkers. They can modify and replace the state parameter that's\n// threaded through the walk, and can opt how and whether to walk\n// their child nodes (by calling their third argument on these\n// nodes).\nfunction recursive(node, state, funcs, baseVisitor, override) {\n var visitor = funcs ? make(funcs, baseVisitor || undefined) : baseVisitor\n ;(function c(node, st, override) {\n visitor[override || node.type](node, st, c);\n })(node, state, override);\n}\n\nfunction makeTest(test) {\n if (typeof test === \"string\")\n { return function (type) { return type === test; } }\n else if (!test)\n { return function () { return true; } }\n else\n { return test }\n}\n\nvar Found = function Found(node, state) { this.node = node; this.state = state; };\n\n// A full walk triggers the callback on each node\nfunction full(node, callback, baseVisitor, state, override) {\n if (!baseVisitor) { baseVisitor = base; }\n var last\n ;(function c(node, st, override) {\n var type = override || node.type;\n visitNode(baseVisitor, type, node, st, c);\n if (last !== node) {\n callback(node, st, type);\n last = node;\n }\n })(node, state, override);\n}\n\n// An fullAncestor walk is like an ancestor walk, but triggers\n// the callback on each node\nfunction fullAncestor(node, callback, baseVisitor, state) {\n if (!baseVisitor) { baseVisitor = base; }\n var ancestors = [], last\n ;(function c(node, st, override) {\n var type = override || node.type;\n var isNew = node !== ancestors[ancestors.length - 1];\n if (isNew) { ancestors.push(node); }\n visitNode(baseVisitor, type, node, st, c);\n if (last !== node) {\n callback(node, st || ancestors, ancestors, type);\n last = node;\n }\n if (isNew) { ancestors.pop(); }\n })(node, state);\n}\n\n// Find a node with a given start, end, and type (all are optional,\n// null can be used as wildcard). Returns a {node, state} object, or\n// undefined when it doesn't find a matching node.\nfunction findNodeAt(node, start, end, test, baseVisitor, state) {\n if (!baseVisitor) { baseVisitor = base; }\n test = makeTest(test);\n try {\n (function c(node, st, override) {\n var type = override || node.type;\n if ((start == null || node.start <= start) &&\n (end == null || node.end >= end))\n { visitNode(baseVisitor, type, node, st, c); }\n if ((start == null || node.start === start) &&\n (end == null || node.end === end) &&\n test(type, node))\n { throw new Found(node, st) }\n })(node, state);\n } catch (e) {\n if (e instanceof Found) { return e }\n throw e\n }\n}\n\n// Find the innermost node of a given type that contains the given\n// position. Interface similar to findNodeAt.\nfunction findNodeAround(node, pos, test, baseVisitor, state) {\n test = makeTest(test);\n if (!baseVisitor) { baseVisitor = base; }\n try {\n (function c(node, st, override) {\n var type = override || node.type;\n if (node.start > pos || node.end < pos) { return }\n visitNode(baseVisitor, type, node, st, c);\n if (test(type, node)) { throw new Found(node, st) }\n })(node, state);\n } catch (e) {\n if (e instanceof Found) { return e }\n throw e\n }\n}\n\n// Find the outermost matching node after a given position.\nfunction findNodeAfter(node, pos, test, baseVisitor, state) {\n test = makeTest(test);\n if (!baseVisitor) { baseVisitor = base; }\n try {\n (function c(node, st, override) {\n if (node.end < pos) { return }\n var type = override || node.type;\n if (node.start >= pos && test(type, node)) { throw new Found(node, st) }\n visitNode(baseVisitor, type, node, st, c);\n })(node, state);\n } catch (e) {\n if (e instanceof Found) { return e }\n throw e\n }\n}\n\n// Find the outermost matching node before a given position.\nfunction findNodeBefore(node, pos, test, baseVisitor, state) {\n test = makeTest(test);\n if (!baseVisitor) { baseVisitor = base; }\n var max\n ;(function c(node, st, override) {\n if (node.start > pos) { return }\n var type = override || node.type;\n if (node.end <= pos && (!max || max.node.end < node.end) && test(type, node))\n { max = new Found(node, st); }\n visitNode(baseVisitor, type, node, st, c);\n })(node, state);\n return max\n}\n\n// Used to create a custom walker. Will fill in all missing node\n// type properties with the defaults.\nfunction make(funcs, baseVisitor) {\n var visitor = Object.create(baseVisitor || base);\n for (var type in funcs) { visitor[type] = funcs[type]; }\n return visitor\n}\n\nfunction skipThrough(node, st, c) { c(node, st); }\nfunction ignore(_node, _st, _c) {}\n\nfunction visitNode(baseVisitor, type, node, st, c) {\n if (baseVisitor[type] == null) { throw new Error((\"No walker function defined for node type \" + type)) }\n baseVisitor[type](node, st, c);\n}\n\n// Node walkers.\n\nvar base = {};\n\nbase.Program = base.BlockStatement = base.StaticBlock = function (node, st, c) {\n for (var i = 0, list = node.body; i < list.length; i += 1)\n {\n var stmt = list[i];\n\n c(stmt, st, \"Statement\");\n }\n};\nbase.Statement = skipThrough;\nbase.EmptyStatement = ignore;\nbase.ExpressionStatement = base.ParenthesizedExpression = base.ChainExpression =\n function (node, st, c) { return c(node.expression, st, \"Expression\"); };\nbase.IfStatement = function (node, st, c) {\n c(node.test, st, \"Expression\");\n c(node.consequent, st, \"Statement\");\n if (node.alternate) { c(node.alternate, st, \"Statement\"); }\n};\nbase.LabeledStatement = function (node, st, c) { return c(node.body, st, \"Statement\"); };\nbase.BreakStatement = base.ContinueStatement = ignore;\nbase.WithStatement = function (node, st, c) {\n c(node.object, st, \"Expression\");\n c(node.body, st, \"Statement\");\n};\nbase.SwitchStatement = function (node, st, c) {\n c(node.discriminant, st, \"Expression\");\n for (var i = 0, list = node.cases; i < list.length; i += 1) {\n var cs = list[i];\n\n c(cs, st);\n }\n};\nbase.SwitchCase = function (node, st, c) {\n if (node.test) { c(node.test, st, \"Expression\"); }\n for (var i = 0, list = node.consequent; i < list.length; i += 1)\n {\n var cons = list[i];\n\n c(cons, st, \"Statement\");\n }\n};\nbase.ReturnStatement = base.YieldExpression = base.AwaitExpression = function (node, st, c) {\n if (node.argument) { c(node.argument, st, \"Expression\"); }\n};\nbase.ThrowStatement = base.SpreadElement =\n function (node, st, c) { return c(node.argument, st, \"Expression\"); };\nbase.TryStatement = function (node, st, c) {\n c(node.block, st, \"Statement\");\n if (node.handler) { c(node.handler, st); }\n if (node.finalizer) { c(node.finalizer, st, \"Statement\"); }\n};\nbase.CatchClause = function (node, st, c) {\n if (node.param) { c(node.param, st, \"Pattern\"); }\n c(node.body, st, \"Statement\");\n};\nbase.WhileStatement = base.DoWhileStatement = function (node, st, c) {\n c(node.test, st, \"Expression\");\n c(node.body, st, \"Statement\");\n};\nbase.ForStatement = function (node, st, c) {\n if (node.init) { c(node.init, st, \"ForInit\"); }\n if (node.test) { c(node.test, st, \"Expression\"); }\n if (node.update) { c(node.update, st, \"Expression\"); }\n c(node.body, st, \"Statement\");\n};\nbase.ForInStatement = base.ForOfStatement = function (node, st, c) {\n c(node.left, st, \"ForInit\");\n c(node.right, st, \"Expression\");\n c(node.body, st, \"Statement\");\n};\nbase.ForInit = function (node, st, c) {\n if (node.type === \"VariableDeclaration\") { c(node, st); }\n else { c(node, st, \"Expression\"); }\n};\nbase.DebuggerStatement = ignore;\n\nbase.FunctionDeclaration = function (node, st, c) { return c(node, st, \"Function\"); };\nbase.VariableDeclaration = function (node, st, c) {\n for (var i = 0, list = node.declarations; i < list.length; i += 1)\n {\n var decl = list[i];\n\n c(decl, st);\n }\n};\nbase.VariableDeclarator = function (node, st, c) {\n c(node.id, st, \"Pattern\");\n if (node.init) { c(node.init, st, \"Expression\"); }\n};\n\nbase.Function = function (node, st, c) {\n if (node.id) { c(node.id, st, \"Pattern\"); }\n for (var i = 0, list = node.params; i < list.length; i += 1)\n {\n var param = list[i];\n\n c(param, st, \"Pattern\");\n }\n c(node.body, st, node.expression ? \"Expression\" : \"Statement\");\n};\n\nbase.Pattern = function (node, st, c) {\n if (node.type === \"Identifier\")\n { c(node, st, \"VariablePattern\"); }\n else if (node.type === \"MemberExpression\")\n { c(node, st, \"MemberPattern\"); }\n else\n { c(node, st); }\n};\nbase.VariablePattern = ignore;\nbase.MemberPattern = skipThrough;\nbase.RestElement = function (node, st, c) { return c(node.argument, st, \"Pattern\"); };\nbase.ArrayPattern = function (node, st, c) {\n for (var i = 0, list = node.elements; i < list.length; i += 1) {\n var elt = list[i];\n\n if (elt) { c(elt, st, \"Pattern\"); }\n }\n};\nbase.ObjectPattern = function (node, st, c) {\n for (var i = 0, list = node.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n if (prop.type === \"Property\") {\n if (prop.computed) { c(prop.key, st, \"Expression\"); }\n c(prop.value, st, \"Pattern\");\n } else if (prop.type === \"RestElement\") {\n c(prop.argument, st, \"Pattern\");\n }\n }\n};\n\nbase.Expression = skipThrough;\nbase.ThisExpression = base.Super = base.MetaProperty = ignore;\nbase.ArrayExpression = function (node, st, c) {\n for (var i = 0, list = node.elements; i < list.length; i += 1) {\n var elt = list[i];\n\n if (elt) { c(elt, st, \"Expression\"); }\n }\n};\nbase.ObjectExpression = function (node, st, c) {\n for (var i = 0, list = node.properties; i < list.length; i += 1)\n {\n var prop = list[i];\n\n c(prop, st);\n }\n};\nbase.FunctionExpression = base.ArrowFunctionExpression = base.FunctionDeclaration;\nbase.SequenceExpression = function (node, st, c) {\n for (var i = 0, list = node.expressions; i < list.length; i += 1)\n {\n var expr = list[i];\n\n c(expr, st, \"Expression\");\n }\n};\nbase.TemplateLiteral = function (node, st, c) {\n for (var i = 0, list = node.quasis; i < list.length; i += 1)\n {\n var quasi = list[i];\n\n c(quasi, st);\n }\n\n for (var i$1 = 0, list$1 = node.expressions; i$1 < list$1.length; i$1 += 1)\n {\n var expr = list$1[i$1];\n\n c(expr, st, \"Expression\");\n }\n};\nbase.TemplateElement = ignore;\nbase.UnaryExpression = base.UpdateExpression = function (node, st, c) {\n c(node.argument, st, \"Expression\");\n};\nbase.BinaryExpression = base.LogicalExpression = function (node, st, c) {\n c(node.left, st, \"Expression\");\n c(node.right, st, \"Expression\");\n};\nbase.AssignmentExpression = base.AssignmentPattern = function (node, st, c) {\n c(node.left, st, \"Pattern\");\n c(node.right, st, \"Expression\");\n};\nbase.ConditionalExpression = function (node, st, c) {\n c(node.test, st, \"Expression\");\n c(node.consequent, st, \"Expression\");\n c(node.alternate, st, \"Expression\");\n};\nbase.NewExpression = base.CallExpression = function (node, st, c) {\n c(node.callee, st, \"Expression\");\n if (node.arguments)\n { for (var i = 0, list = node.arguments; i < list.length; i += 1)\n {\n var arg = list[i];\n\n c(arg, st, \"Expression\");\n } }\n};\nbase.MemberExpression = function (node, st, c) {\n c(node.object, st, \"Expression\");\n if (node.computed) { c(node.property, st, \"Expression\"); }\n};\nbase.ExportNamedDeclaration = base.ExportDefaultDeclaration = function (node, st, c) {\n if (node.declaration)\n { c(node.declaration, st, node.type === \"ExportNamedDeclaration\" || node.declaration.id ? \"Statement\" : \"Expression\"); }\n if (node.source) { c(node.source, st, \"Expression\"); }\n if (node.attributes)\n { for (var i = 0, list = node.attributes; i < list.length; i += 1)\n {\n var attr = list[i];\n\n c(attr, st);\n } }\n};\nbase.ExportAllDeclaration = function (node, st, c) {\n if (node.exported)\n { c(node.exported, st); }\n c(node.source, st, \"Expression\");\n if (node.attributes)\n { for (var i = 0, list = node.attributes; i < list.length; i += 1)\n {\n var attr = list[i];\n\n c(attr, st);\n } }\n};\nbase.ImportAttribute = function (node, st, c) {\n c(node.value, st, \"Expression\");\n};\nbase.ImportDeclaration = function (node, st, c) {\n for (var i = 0, list = node.specifiers; i < list.length; i += 1)\n {\n var spec = list[i];\n\n c(spec, st);\n }\n c(node.source, st, \"Expression\");\n if (node.attributes)\n { for (var i$1 = 0, list$1 = node.attributes; i$1 < list$1.length; i$1 += 1)\n {\n var attr = list$1[i$1];\n\n c(attr, st);\n } }\n};\nbase.ImportExpression = function (node, st, c) {\n c(node.source, st, \"Expression\");\n if (node.options) { c(node.options, st, \"Expression\"); }\n};\nbase.ImportSpecifier = base.ImportDefaultSpecifier = base.ImportNamespaceSpecifier = base.Identifier = base.PrivateIdentifier = base.Literal = ignore;\n\nbase.TaggedTemplateExpression = function (node, st, c) {\n c(node.tag, st, \"Expression\");\n c(node.quasi, st, \"Expression\");\n};\nbase.ClassDeclaration = base.ClassExpression = function (node, st, c) { return c(node, st, \"Class\"); };\nbase.Class = function (node, st, c) {\n if (node.id) { c(node.id, st, \"Pattern\"); }\n if (node.superClass) { c(node.superClass, st, \"Expression\"); }\n c(node.body, st);\n};\nbase.ClassBody = function (node, st, c) {\n for (var i = 0, list = node.body; i < list.length; i += 1)\n {\n var elt = list[i];\n\n c(elt, st);\n }\n};\nbase.MethodDefinition = base.PropertyDefinition = base.Property = function (node, st, c) {\n if (node.computed) { c(node.key, st, \"Expression\"); }\n if (node.value) { c(node.value, st, \"Expression\"); }\n};\n\nexport { ancestor, base, findNodeAfter, findNodeAround, findNodeAt, findNodeBefore, full, fullAncestor, make, recursive, simple };\n","import { parse } from \"acorn\";\nimport type {\n CallExpression,\n Identifier,\n Literal,\n MemberExpression,\n TemplateLiteral,\n WhileStatement,\n} from \"acorn\";\nimport { simple } from \"acorn-walk\";\nimport type { AiChatValidationResult, ValidationComplexity } from \"@blinq/schemas\";\n\n/**\n * Identifiers that must never appear in generated code.\n * Matched against every Identifier and literal property access in the AST.\n */\nconst BLOCKED_IDENTIFIERS = new Set([\n \"require\",\n \"process\",\n \"fs\",\n \"child_process\",\n \"Function\",\n \"eval\",\n \"globalThis\",\n \"global\",\n \"window\",\n \"self\",\n]);\n\n/**\n * Dynamic import (`import(\"…\")`) is represented as an ImportExpression node.\n * We block it unconditionally.\n */\nconst BLOCK_DYNAMIC_IMPORT = true;\n\n/**\n * Member-expression patterns like `page.close`, `browser.close` etc.\n * Matched as `object.property` on MemberExpression nodes.\n */\nconst BLOCKED_MEMBER_EXPRESSIONS = new Set([\n \"page.close\",\n \"browser.close\",\n \"browserContext.close\",\n \"page.waitForLoadState\",\n]);\nconst BLOCKED_MEMBER_PROPERTIES = new Set([\n \"constructor\",\n \"__proto__\",\n \"prototype\",\n \"evaluate\",\n \"evaluateHandle\",\n]);\n\nfunction inferComplexity(nodeCount: number): ValidationComplexity {\n if (nodeCount <= 12) return \"simple\";\n if (nodeCount <= 40) return \"moderate\";\n return \"complex\";\n}\n\n/**\n * Return the `object.property` string for a simple (non-computed) MemberExpression,\n * or `null` for computed or chained expressions.\n */\nfunction memberExprKey(node: MemberExpression): string | null {\n if (node.computed || node.object.type !== \"Identifier\" || node.property.type !== \"Identifier\") {\n return null;\n }\n return `${(node.object as Identifier).name}.${(node.property as Identifier).name}`;\n}\n\n/**\n * True if `node` is a `while (true) { … }` loop.\n */\nfunction isInfiniteWhile(node: WhileStatement): boolean {\n if (node.test.type !== \"Literal\") return false;\n return (node.test as Literal).value === true;\n}\n\n/**\n * Playwright method names that constitute a \"significant action\" — i.e., a call that\n * mutates browser state or navigates. Companion calls (waitFor*, expect, checkpoint,\n * locator-resolution methods, metadata getters) are intentionally excluded.\n *\n * Used by validateSingleActionStep to enforce one-action-per-snippet discipline.\n */\nconst SIGNIFICANT_ACTIONS = new Set([\n \"goto\",\n \"fill\",\n \"click\",\n \"press\",\n \"pressSequentially\",\n \"selectOption\",\n \"check\",\n \"uncheck\",\n \"dragAndDrop\",\n \"setInputFiles\",\n \"tap\",\n]);\n\nconst FORBIDDEN_ACTION_CODE_MEMBERS = new Map<string, string>([\n [\n \"page.waitForURL\",\n \"page.waitForURL is forbidden in actionCode. Emit a structured URL postcondition instead — the postcondition evaluator uses a tolerant wait mode that survives heavy third-party pages.\",\n ],\n [\n \"page.waitForLoadState\",\n \"page.waitForLoadState is not available in this sandbox. Use a structured DOM or text postcondition instead.\",\n ],\n]);\n\nexport type StepValidationResult = {\n valid: boolean;\n actionCount: number;\n errors: string[];\n};\n\n/**\n * Validates that a Playwright code snippet contains at most ONE significant action.\n *\n * Uses the same AST parser (acorn) as analyzePlaywrightCode — comments and string\n * literals are never matched, so there are no false positives from code like\n * `// page.click(` or `const s = \".fill(\"`.\n *\n * Significant actions: goto, fill, click, press, pressSequentially, selectOption,\n * check, uncheck, dragAndDrop, setInputFiles, tap.\n *\n * Companion calls (waitFor*, expect, checkpoint, getBy*, locator, nth, url, title)\n * do NOT count — a snippet like `await page.getByRole(\"button\").click()` is one action.\n */\nexport function validateSingleActionStep(code: string): StepValidationResult {\n let ast: ReturnType<typeof parse>;\n try {\n // Newlines around ${code} are load-bearing: without them a trailing\n // `// comment` in the generated code swallows the closing `})` and\n // acorn reports a spurious \"Unexpected token\" syntax error.\n ast = parse(`(async function generated(page, context, checkpoint) {\\n${code}\\n})`, {\n ecmaVersion: \"latest\",\n sourceType: \"module\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { valid: false, actionCount: 0, errors: [`Syntax error: ${message}`] };\n }\n\n let actionCount = 0;\n const forbiddenErrors: string[] = [];\n\n simple(ast, {\n CallExpression(node: CallExpression) {\n if (node.callee.type !== \"MemberExpression\") return;\n const callee = node.callee as MemberExpression;\n if (callee.property.type !== \"Identifier\") return;\n const prop = callee.property as Identifier;\n if (SIGNIFICANT_ACTIONS.has(prop.name)) {\n actionCount++;\n }\n const exprKey = memberExprKey(callee);\n if (exprKey !== null) {\n const forbiddenMessage = FORBIDDEN_ACTION_CODE_MEMBERS.get(exprKey);\n if (forbiddenMessage !== undefined) {\n forbiddenErrors.push(forbiddenMessage);\n }\n }\n },\n });\n\n if (forbiddenErrors.length > 0) {\n const uniqueErrors = Array.from(new Set(forbiddenErrors));\n return { valid: false, actionCount, errors: uniqueErrors };\n }\n\n if (actionCount > 1) {\n return {\n valid: false,\n actionCount,\n errors: [\"Split this into a smaller step with only one significant action.\"],\n };\n }\n\n return { valid: true, actionCount, errors: [] };\n}\n\nexport function analyzePlaywrightCode(code: string): AiChatValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // ── 1. Parse into AST ──────────────────────────────────────────────\n let ast: ReturnType<typeof parse>;\n try {\n // Wrap in async function so top-level `await` is valid.\n // Newlines around ${code} are load-bearing: without them a trailing\n // `// comment` in the generated code swallows the closing `})` and\n // acorn reports a spurious \"Unexpected token\" syntax error.\n ast = parse(`(async function generated(page, context, checkpoint) {\\n${code}\\n})`, {\n ecmaVersion: \"latest\",\n sourceType: \"module\",\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n errors.push(`Syntax error: ${message}`);\n return { valid: false, complexity: \"simple\", errors, warnings };\n }\n\n // ── 2. Walk the AST and collect violations ─────────────────────────\n let nodeCount = 0;\n\n simple(ast, {\n // Count all nodes for complexity estimation\n // (acorn-walk calls the handler for every matching node type,\n // so we hook into a few high-frequency node types)\n ExpressionStatement() {\n nodeCount++;\n },\n VariableDeclaration() {\n nodeCount++;\n },\n IfStatement() {\n nodeCount++;\n },\n ForStatement() {\n nodeCount++;\n },\n ForInStatement() {\n nodeCount++;\n },\n ForOfStatement() {\n nodeCount++;\n },\n ReturnStatement() {\n nodeCount++;\n },\n AwaitExpression() {\n nodeCount++;\n },\n\n Identifier(node: Identifier) {\n if (BLOCKED_IDENTIFIERS.has(node.name)) {\n errors.push(`Blocked identifier: ${node.name}`);\n }\n },\n\n MemberExpression(node: MemberExpression) {\n const key = memberExprKey(node);\n if (key && BLOCKED_MEMBER_EXPRESSIONS.has(key)) {\n errors.push(`Blocked API call: ${key}`);\n }\n\n if (node.property.type === \"Identifier\") {\n const propName = (node.property as Identifier).name;\n if (BLOCKED_MEMBER_PROPERTIES.has(propName)) {\n errors.push(`Blocked property access: ${propName}`);\n }\n }\n },\n\n ThisExpression() {\n errors.push(\"Blocked token: this\");\n },\n\n WhileStatement(node: WhileStatement) {\n nodeCount++;\n if (isInfiniteWhile(node)) {\n errors.push(\"Infinite loop detected: while(true)\");\n }\n },\n\n ImportExpression() {\n if (BLOCK_DYNAMIC_IMPORT) {\n errors.push(\"Blocked token: dynamic import()\");\n }\n },\n });\n\n return {\n valid: errors.length === 0,\n complexity: inferComplexity(nodeCount),\n errors,\n warnings,\n };\n}\n\n/**\n * `page.locator` is the only Playwright API that takes a CSS/XPath selector\n * as its first argument. A comma in that argument indicates a multi-element\n * CSS selector list. `getByRole`, `getByText`, etc. take human-readable\n * labels/names — commas in those strings are NOT CSS selector separators.\n */\nconst LOCATOR_ONLY_METHODS_SET = new Set([\"locator\"]);\nconst LOCATOR_ROOT_METHODS_SET = new Set([\n \"locator\",\n \"getByRole\",\n \"getByText\",\n \"getByLabel\",\n \"getByPlaceholder\",\n \"getByTestId\",\n \"getByTitle\",\n \"getByAltText\",\n]);\nconst LOCATOR_CHAIN_METHODS_SET = new Set([\"first\", \"last\", \"nth\", \"filter\"]);\n\nfunction isPageIdentifier(node: MemberExpression[\"object\"]): boolean {\n return node.type === \"Identifier\" && (node as Identifier).name === \"page\";\n}\n\nfunction isLocatorReturningCall(node: { type: string }): boolean {\n if (node.type === \"MemberExpression\") {\n return isLocatorReturningCall((node as MemberExpression).object);\n }\n if (node.type !== \"CallExpression\") return false;\n const call = node as CallExpression;\n if (call.callee.type !== \"MemberExpression\") return false;\n\n const callee = call.callee as MemberExpression;\n if (callee.property.type !== \"Identifier\") return false;\n\n const prop = callee.property as Identifier;\n if (LOCATOR_ROOT_METHODS_SET.has(prop.name)) {\n return isPageIdentifier(callee.object);\n }\n return (\n LOCATOR_CHAIN_METHODS_SET.has(prop.name) &&\n (callee.object.type === \"CallExpression\" || callee.object.type === \"MemberExpression\") &&\n isLocatorReturningCall(callee.object)\n );\n}\n\nfunction hasTopLevelSelectorComma(selector: string): boolean {\n let bracketDepth = 0;\n let parenDepth = 0;\n let quote: string | null = null;\n\n for (let i = 0; i < selector.length; i += 1) {\n const char = selector[i];\n if (char === \"\\\\\") {\n i += 1;\n continue;\n }\n if (quote !== null) {\n if (char === quote) quote = null;\n continue;\n }\n if (char === `\"` || char === `'`) {\n quote = char;\n continue;\n }\n if (char === \"[\") {\n bracketDepth += 1;\n continue;\n }\n if (char === \"]\" && bracketDepth > 0) {\n bracketDepth -= 1;\n continue;\n }\n if (char === \"(\") {\n parenDepth += 1;\n continue;\n }\n if (char === \")\" && parenDepth > 0) {\n parenDepth -= 1;\n continue;\n }\n if (char === \",\" && bracketDepth === 0 && parenDepth === 0) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Rejects code containing multi-element locator literals:\n * - comma-separated CSS selectors inside `locator(...)` (AST-based)\n * - `.or(...)` chains on a locator (AST-based)\n *\n * `getByRole`, `getByText`, `getByLabel`, `getByPlaceholder`, `getByTestId`,\n * `getByTitle`, and `getByAltText` are intentionally excluded from the comma\n * check because their string arguments are human-readable labels, not CSS\n * selectors. This fixes false positives for selectors like\n * `page.getByRole('button', { name: 'Show, hide' })`.\n *\n * Used by predicate evaluator's `expression` leaf and by the loop's\n * post-wrap defensive pass to prevent strict-mode-violation classes.\n */\nexport function validateSelectorUniqueness(code: string): {\n valid: boolean;\n errors: string[];\n} {\n const errors: string[] = [];\n\n try {\n const ast = parse(`(async function (page) {\\n${code}\\n})`, {\n ecmaVersion: \"latest\",\n sourceType: \"module\",\n });\n\n simple(ast, {\n CallExpression(node: CallExpression) {\n if (node.callee.type !== \"MemberExpression\") return;\n const callee = node.callee as MemberExpression;\n if (callee.property.type !== \"Identifier\") return;\n const prop = callee.property as Identifier;\n\n // 1. Reject .or(...) member chains.\n if (\n prop.name === \"or\" &&\n (callee.object.type === \"CallExpression\" || callee.object.type === \"MemberExpression\") &&\n isLocatorReturningCall(callee.object)\n ) {\n errors.push(\n \"locator chain uses .or(...) — express multi-target verification as all-of/any-of instead\",\n );\n }\n\n // 2. Reject page.locator(\"a, b\") — but NOT getByRole/getByText/etc.\n // AST replaces the prior regex text pass to eliminate false positives\n // for commas inside getByX human-readable string arguments.\n if (LOCATOR_ONLY_METHODS_SET.has(prop.name)) {\n const firstArg = node.arguments[0];\n if (firstArg !== undefined) {\n const hasComma =\n (firstArg.type === \"Literal\" &&\n typeof (firstArg as Literal).value === \"string\" &&\n hasTopLevelSelectorComma((firstArg as Literal).value as string)) ||\n (firstArg.type === \"TemplateLiteral\" &&\n (firstArg as TemplateLiteral).quasis.some((q) =>\n hasTopLevelSelectorComma(q.value.cooked ?? q.value.raw),\n ));\n if (hasComma) {\n errors.push(\n \"locator selector contains comma — use all-of/any-of for multi-target verification\",\n );\n }\n }\n }\n },\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n errors.push(`Selector uniqueness analyzer failed to parse: ${message}`);\n }\n\n return { valid: errors.length === 0, errors };\n}\n\n/**\n * Verifies a committed code snippet contains exactly one canonical pair of\n * `onCommandStart(...)` and `onCommandPass()` markers. Defensive check\n * applied after runtime wrapper injection.\n */\nexport function validateWrappedSnippet(code: string): {\n valid: boolean;\n errors: string[];\n} {\n const errors: string[] = [];\n const startPositions: number[] = [];\n const passPositions: number[] = [];\n\n try {\n const ast = parse(`(async function (page) {\\n${code}\\n})`, {\n ecmaVersion: \"latest\",\n sourceType: \"module\",\n });\n\n simple(ast, {\n CallExpression(node: CallExpression) {\n if (node.callee.type !== \"Identifier\") return;\n const callee = node.callee as Identifier;\n if (callee.name === \"onCommandStart\") startPositions.push(node.start);\n if (callee.name === \"onCommandPass\") passPositions.push(node.start);\n },\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n errors.push(`Wrapper analyzer failed to parse: ${message}`);\n }\n\n if (startPositions.length !== 1) {\n errors.push(`Expected exactly one onCommandStart, found ${startPositions.length}`);\n }\n if (passPositions.length !== 1) {\n errors.push(`Expected exactly one onCommandPass, found ${passPositions.length}`);\n }\n if (\n startPositions.length === 1 &&\n passPositions.length === 1 &&\n passPositions[0] < startPositions[0]\n ) {\n errors.push(\"onCommandPass occurs before onCommandStart\");\n }\n return { valid: errors.length === 0, errors };\n}\n\n/**\n * Rejects code containing any significant action call. Used for\n * assertion-kind step bodies and for the `expression` leaf analyzer —\n * assertions never mutate page state.\n */\nexport function validateNoActionStep(code: string): {\n valid: boolean;\n errors: string[];\n} {\n const errors: string[] = [];\n try {\n const ast = parse(`(async function (page) {\\n${code}\\n})`, {\n ecmaVersion: \"latest\",\n sourceType: \"module\",\n });\n simple(ast, {\n CallExpression(node: CallExpression) {\n if (node.callee.type !== \"MemberExpression\") return;\n const callee = node.callee as MemberExpression;\n if (callee.property.type !== \"Identifier\") return;\n const prop = callee.property as Identifier;\n if (SIGNIFICANT_ACTIONS.has(prop.name)) {\n errors.push(`Assertion body contains a significant action: ${prop.name}`);\n }\n },\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n errors.push(`No-action analyzer failed to parse: ${message}`);\n }\n return { valid: errors.length === 0, errors };\n}\n","import type { AiChatValidationResult } from \"@blinq/schemas\";\nimport { analyzePlaywrightCode } from \"./playwright-static-analyzer\";\n\nexport async function validatePlaywrightCode(code: string): Promise<AiChatValidationResult> {\n return analyzePlaywrightCode(code);\n}\n","import { createContext, runInContext } from \"node:vm\";\nimport type { TestDataApi } from \"./test-data-api\";\n\ntype PlaywrightExecutionContext = {\n stepId: string;\n variables: Readonly<Record<string, string>>;\n};\n\ntype RunnerLogLevel = \"error\" | \"log\" | \"warn\";\n\n/**\n * Optional delegate for the sandbox's onCommandStart / onCommandPass helpers.\n * Emitted code calls `await onCommandStart(\"<label>\")` / `await onCommandPass()`\n * around its significant action; those helpers route here.\n * - Tester run session: forwards to `browserContext.tracing.group/groupEnd`\n * so AI-authored step names nest inside Tester's own step/command groups\n * in the uploaded trace zip.\n * - Any other caller (AI-chat live run, raw Playwright Test): pass\n * `undefined`. onCommandStart still fires the `onCheckpoint` signal\n * (progress UI + salvage); the tracing-group forwarding is skipped.\n */\ntype TraceDelegate = {\n startGroup: (name: string) => void | Promise<void>;\n endGroup: () => void | Promise<void>;\n};\n\ntype RunPlaywrightCodeInput = {\n page: object;\n code: string;\n context: PlaywrightExecutionContext;\n timeoutMs: number;\n signal?: AbortSignal;\n onLog: (level: RunnerLogLevel, args: unknown[]) => void;\n onCheckpoint: (label: string, data?: unknown) => void;\n traceDelegate?: TraceDelegate;\n testData?: TestDataApi;\n};\n\ntype BridgeValue =\n | {\n type: \"locator\";\n locatorId: number;\n }\n | {\n type: \"value\";\n value: unknown;\n };\n\n/**\n * Blocked methods are dangerous in a sandbox context (code execution, request\n * interception, browser/context escape, etc.). Everything else discovered at\n * runtime on the real Playwright objects is automatically allowed, so new\n * Playwright API additions work without manual updates.\n */\nconst BLOCKED_PAGE_METHODS = new Set([\n // Code execution – can escape the VM sandbox\n \"evaluate\",\n \"evaluateHandle\",\n \"$eval\",\n \"$$eval\",\n \"addScriptTag\",\n \"addStyleTag\",\n \"exposeFunction\",\n \"exposeBinding\",\n \"addInitScript\",\n // Request / response interception\n \"route\",\n \"unroute\",\n \"routeFromHAR\",\n \"unrouteAll\",\n // Browser / context escape\n \"context\",\n \"close\",\n \"bringToFront\",\n // Sensitive page manipulation\n \"setContent\",\n \"setExtraHTTPHeaders\",\n \"setInputFiles\",\n \"pdf\",\n \"screenshot\",\n \"video\",\n // Event / worker access\n \"on\",\n \"off\",\n \"once\",\n \"emit\",\n \"removeListener\",\n \"removeAllListeners\",\n \"addListener\",\n \"setMaxListeners\",\n \"waitForEvent\",\n \"workers\",\n \"frames\",\n \"mainFrame\",\n \"opener\",\n]);\n\nconst BLOCKED_LOCATOR_METHODS = new Set([\n // Code execution\n \"evaluate\",\n \"evaluateHandle\",\n \"evaluateAll\",\n // Event access\n \"on\",\n \"off\",\n \"once\",\n \"emit\",\n \"removeListener\",\n \"removeAllListeners\",\n \"addListener\",\n \"setMaxListeners\",\n // Potentially dangerous\n \"setInputFiles\",\n \"screenshot\",\n]);\n\n/**\n * Walk the prototype chain and collect every function-valued own-property.\n * Uses property descriptors to avoid triggering getters/accessors (e.g.\n * Playwright's `keyboard`, `mouse` accessors) during introspection.\n */\nfunction extractMethods(obj: object): string[] {\n const methods = new Set<string>();\n let current: object | null = obj;\n while (current && current !== Object.prototype) {\n for (const key of Object.getOwnPropertyNames(current)) {\n const descriptor = Object.getOwnPropertyDescriptor(current, key);\n if (key !== \"constructor\" && descriptor && typeof descriptor.value === \"function\") {\n methods.add(key);\n }\n }\n current = Object.getPrototypeOf(current);\n }\n return [...methods];\n}\n\n/**\n * Fallback method lists used when runtime introspection yields nothing\n * (e.g. Proxy-based dry-run mocks where Object.getOwnPropertyNames returns []).\n */\ntype HelperArg = BridgeValue;\n\nconst HOST_HELPER_METHODS = [\n \"getPreferredInteractiveTargetSelector\",\n \"activatePreferredInteractiveTarget\",\n \"activateWithRecovery\",\n] as const;\n\nconst FALLBACK_PAGE_METHODS = [\n \"getByAltText\",\n \"getByDisplayValue\",\n \"getByLabel\",\n \"getByPlaceholder\",\n \"getByRole\",\n \"getByTestId\",\n \"getByText\",\n \"getByTitle\",\n \"goto\",\n \"reload\",\n \"goBack\",\n \"goForward\",\n \"locator\",\n \"title\",\n \"url\",\n \"waitForSelector\",\n \"waitForTimeout\",\n \"waitForURL\",\n \"waitForLoadState\",\n];\n\nconst FALLBACK_LOCATOR_METHODS = [\n \"allTextContents\",\n \"and\",\n \"blur\",\n \"check\",\n \"clear\",\n \"click\",\n \"count\",\n \"fill\",\n \"filter\",\n \"first\",\n \"focus\",\n \"getAttribute\",\n \"getByAltText\",\n \"getByDisplayValue\",\n \"getByLabel\",\n \"getByPlaceholder\",\n \"getByRole\",\n \"getByTestId\",\n \"getByText\",\n \"getByTitle\",\n \"hover\",\n \"innerText\",\n \"inputValue\",\n \"isChecked\",\n \"isDisabled\",\n \"isEnabled\",\n \"isHidden\",\n \"isVisible\",\n \"last\",\n \"locator\",\n \"nth\",\n \"or\",\n \"press\",\n \"scrollIntoViewIfNeeded\",\n \"selectOption\",\n \"textContent\",\n \"type\",\n \"uncheck\",\n \"waitFor\",\n];\n\nfunction buildAllowedMethods(\n obj: object,\n blocked: ReadonlySet<string>,\n fallback: string[],\n): { methods: string[]; methodSet: Set<string> } {\n let all = extractMethods(obj);\n // Fall back to a static safe list when introspection finds nothing\n // (e.g. Proxy objects used in dry-run validation).\n if (all.length === 0) {\n all = fallback;\n }\n const methods = all.filter((m) => !blocked.has(m));\n return { methods, methodSet: new Set(methods) };\n}\nconst HELPER_METHOD_SET = new Set<string>(HOST_HELPER_METHODS);\nconst BRIDGE_ERROR_PREFIX = \"[playwright-bridge]\";\nconst RECOVERY_LOCATOR_OPERATION_TIMEOUT_MS = 2_000;\n\nfunction recoveryLocatorOptions(extra?: Record<string, unknown>): Record<string, unknown> {\n return {\n timeout: RECOVERY_LOCATOR_OPERATION_TIMEOUT_MS,\n ...extra,\n };\n}\n\nfunction formatLogMessage(args: unknown[]): string {\n return args\n .map((arg) => {\n if (typeof arg === \"string\") {\n return arg;\n }\n\n try {\n return JSON.stringify(arg);\n } catch {\n return String(arg);\n }\n })\n .join(\" \");\n}\n\nfunction buildBootstrap(code: string, pageMethods: string[], locatorMethods: string[]): string {\n return `\n(() => {\n \"use strict\";\n\n const PAGE_METHODS = ${JSON.stringify(pageMethods)};\n const LOCATOR_METHODS = ${JSON.stringify(locatorMethods)};\n\n const toVmValue = (bridgeValue) => {\n if (bridgeValue && typeof bridgeValue.then === \"function\") {\n return bridgeValue.then((resolved) => toVmValue(resolved));\n }\n\n if (!bridgeValue || typeof bridgeValue !== \"object\") {\n return bridgeValue;\n }\n\n if (bridgeValue.type === \"locator\") {\n return createLocator(bridgeValue.locatorId);\n }\n\n if (bridgeValue.type === \"value\") {\n return bridgeValue.value;\n }\n\n return bridgeValue;\n };\n\n const toBridgeArg = (value) => {\n if (value && typeof value === \"object\" && typeof value.__locatorId === \"number\") {\n return {\n type: \"locator\",\n locatorId: value.__locatorId,\n };\n }\n\n return {\n type: \"value\",\n value,\n };\n };\n\n const buildMethods = (methodNames, caller) => {\n const api = Object.create(null);\n for (const methodName of methodNames) {\n api[methodName] = (...args) => caller(methodName, args);\n }\n return api;\n };\n\n const createLocator = (locatorId) => {\n const locator = buildMethods(LOCATOR_METHODS, (methodName, args) =>\n toVmValue(__bridgeLocator(locatorId, methodName, args)),\n );\n Object.defineProperty(locator, \"__locatorId\", {\n value: locatorId,\n enumerable: false,\n configurable: false,\n writable: false,\n });\n return Object.freeze(locator);\n };\n\n const page = Object.freeze(\n buildMethods(PAGE_METHODS, (methodName, args) => toVmValue(__bridgePage(methodName, args))),\n );\n\n const helpers = Object.freeze({\n getPreferredInteractiveTarget: async (locator) => {\n const selector = await toVmValue(\n __bridgeHelper(\"getPreferredInteractiveTargetSelector\", [toBridgeArg(locator)]),\n );\n\n if (typeof selector === \"string\" && selector.length > 0) {\n return page.locator(selector);\n }\n\n return locator;\n },\n activatePreferredInteractiveTarget: async (locator) =>\n toVmValue(__bridgeHelper(\"activatePreferredInteractiveTarget\", [toBridgeArg(locator)])),\n activateWithRecovery: async (locator) =>\n toVmValue(__bridgeHelper(\"activateWithRecovery\", [toBridgeArg(locator)])),\n });\n\n const testData = Object.freeze({\n setRuntime: async (key, value, opts) => {\n const result = __bridgeTestData(\"setRuntime\", [key, value, opts]);\n if (result && typeof result.then === \"function\") {\n const resolved = await result;\n return resolved && resolved.type === \"value\" ? resolved.value : undefined;\n }\n return undefined;\n },\n getRuntime: async (key) => {\n const result = __bridgeTestData(\"getRuntime\", [key]);\n const resolved = result && typeof result.then === \"function\" ? await result : result;\n return resolved && resolved.type === \"value\" ? resolved.value : null;\n },\n });\n\n const context = Object.freeze({ ...__contextData, testData });\n\n const console = Object.freeze({\n log: (...args) => __bridgeLog(\"log\", args),\n warn: (...args) => __bridgeLog(\"warn\", args),\n error: (...args) => __bridgeLog(\"error\", args),\n });\n\n const checkpoint = (label, data) => {\n __bridgeCheckpoint(String(label), data);\n };\n\n // ── Generic pre/post command helpers ──────────────────────────────────\n // Ergonomics mirror Tester's onCommandStart/onCommandPass. Generated\n // actionCode wraps its single significant action between:\n // await onCommandStart(\"<label>\")\n // <action>\n // await onCommandPass()\n //\n // onCommandStart: opens a Playwright trace group labelled <label>, fires\n // the onCheckpoint bridge signal (drives live ai-chat\n // progress timeline + action-landed salvage detection).\n // onCommandPass: ends the trace group AND sleeps a short delay so users\n // watching the browser can follow what just happened during\n // generation. Delay skipped via { delayMs: 0 }.\n const ON_COMMAND_PASS_DEFAULT_DELAY_MS = 1000;\n const onCommandStart = async (label) => {\n await __bridgeDelay(ON_COMMAND_PASS_DEFAULT_DELAY_MS);\n __bridgeOnCommandStart(String(label ?? \"\"));\n };\n const onCommandPass = async (opts) => {\n const result = __bridgeOnCommandPass();\n if (result && typeof result.then === \"function\") {\n await result;\n }\n const delayMs =\n opts && typeof opts.delayMs === \"number\" && opts.delayMs >= 0\n ? opts.delayMs\n : ON_COMMAND_PASS_DEFAULT_DELAY_MS;\n if (delayMs > 0) {\n await __bridgeDelay(delayMs);\n }\n };\n\n // ── Minimal expect() shim for postcondition snippets ────────────────────\n // Not a full Playwright @playwright/test expect; covers common matchers.\n // Supports .not inversion and { timeout } option on every matcher.\n const EXPECT_DEFAULT_TIMEOUT_MS = 15000;\n const EXPECT_POLL_INTERVAL_MS = 100;\n const expectRegexOrStringEq = (actual, expected) => {\n const str = actual == null ? \"\" : String(actual);\n if (expected instanceof RegExp) return expected.test(str);\n return str === String(expected);\n };\n const expectRegexOrStringContains = (actual, expected) => {\n const str = actual == null ? \"\" : String(actual);\n if (expected instanceof RegExp) return expected.test(str);\n return str.includes(String(expected));\n };\n const expectPoll = async (predicate, timeout, errorBuilder) => {\n const deadline = Date.now() + timeout;\n let lastDetail = \"<never observed>\";\n while (Date.now() < deadline) {\n try {\n const result = await predicate();\n if (result && result.ok) return;\n if (result && result.detail !== undefined) lastDetail = result.detail;\n } catch (err) {\n lastDetail = err && err.message ? err.message : String(err);\n }\n const remaining = deadline - Date.now();\n if (remaining <= 0) break;\n await __bridgeDelay(Math.min(EXPECT_POLL_INTERVAL_MS, remaining));\n }\n throw new Error(errorBuilder(lastDetail));\n };\n const expect = (subject) => {\n const isLocator = subject != null && typeof subject.__locatorId === \"number\";\n const isPage = subject === page;\n const ensureLocator = (matcher) => {\n if (!isLocator) throw new Error(matcher + \" requires a locator subject\");\n };\n const ensurePage = (matcher) => {\n if (!isPage) throw new Error(matcher + \" requires a page subject\");\n };\n const make = (negate) => {\n const flip = (ok) => (negate ? !ok : ok);\n const flipWord = negate ? \"NOT \" : \"\";\n const api = {\n async toBeVisible(opts = {}) {\n ensureLocator(\"toBeVisible\");\n const timeout = opts.timeout ?? EXPECT_DEFAULT_TIMEOUT_MS;\n await subject.waitFor({ state: negate ? \"hidden\" : \"visible\", timeout: timeout });\n },\n async toBeHidden(opts = {}) {\n ensureLocator(\"toBeHidden\");\n const timeout = opts.timeout ?? EXPECT_DEFAULT_TIMEOUT_MS;\n await subject.waitFor({ state: negate ? \"visible\" : \"hidden\", timeout: timeout });\n },\n async toBeAttached(opts = {}) {\n ensureLocator(\"toBeAttached\");\n const timeout = opts.timeout ?? EXPECT_DEFAULT_TIMEOUT_MS;\n await subject.waitFor({ state: negate ? \"detached\" : \"attached\", timeout: timeout });\n },\n async toBeEnabled(opts = {}) {\n ensureLocator(\"toBeEnabled\");\n const timeout = opts.timeout ?? EXPECT_DEFAULT_TIMEOUT_MS;\n await expectPoll(\n async () => {\n const enabled = await subject.isEnabled();\n return flip(enabled) ? { ok: true } : { ok: false, detail: \"isEnabled=\" + enabled };\n },\n timeout,\n (detail) => \"Expected locator \" + flipWord + \"to be enabled. Last: \" + detail,\n );\n },\n async toBeDisabled(opts = {}) {\n ensureLocator(\"toBeDisabled\");\n const timeout = opts.timeout ?? EXPECT_DEFAULT_TIMEOUT_MS;\n await expectPoll(\n async () => {\n const disabled = await subject.isDisabled();\n return flip(disabled) ? { ok: true } : { ok: false, detail: \"isDisabled=\" + disabled };\n },\n timeout,\n (detail) => \"Expected locator \" + flipWord + \"to be disabled. Last: \" + detail,\n );\n },\n async toBeChecked(opts = {}) {\n ensureLocator(\"toBeChecked\");\n const timeout = opts.timeout ?? EXPECT_DEFAULT_TIMEOUT_MS;\n await expectPoll(\n async () => {\n const checked = await subject.isChecked();\n return flip(checked) ? { ok: true } : { ok: false, detail: \"isChecked=\" + checked };\n },\n timeout,\n (detail) => \"Expected locator \" + flipWord + \"to be checked. Last: \" + detail,\n );\n },\n async toHaveCount(expected, opts = {}) {\n ensureLocator(\"toHaveCount\");\n const timeout = opts.timeout ?? EXPECT_DEFAULT_TIMEOUT_MS;\n await expectPoll(\n async () => {\n const count = await subject.count();\n return flip(count === expected)\n ? { ok: true }\n : { ok: false, detail: \"count=\" + count };\n },\n timeout,\n (detail) => \"Expected count \" + flipWord + \"to equal \" + expected + \". Last: \" + detail,\n );\n },\n async toHaveText(expected, opts = {}) {\n ensureLocator(\"toHaveText\");\n const timeout = opts.timeout ?? EXPECT_DEFAULT_TIMEOUT_MS;\n await expectPoll(\n async () => {\n const text = await subject.textContent();\n return flip(expectRegexOrStringEq(text, expected))\n ? { ok: true }\n : { ok: false, detail: \"textContent=\" + JSON.stringify(text) };\n },\n timeout,\n (detail) =>\n \"Expected text \" + flipWord + \"to match \" + String(expected) + \". Last: \" + detail,\n );\n },\n async toContainText(expected, opts = {}) {\n ensureLocator(\"toContainText\");\n const timeout = opts.timeout ?? EXPECT_DEFAULT_TIMEOUT_MS;\n await expectPoll(\n async () => {\n const text = await subject.textContent();\n return flip(expectRegexOrStringContains(text, expected))\n ? { ok: true }\n : { ok: false, detail: \"textContent=\" + JSON.stringify(text) };\n },\n timeout,\n (detail) =>\n \"Expected text \" +\n flipWord +\n \"to contain \" +\n String(expected) +\n \". Last: \" +\n detail,\n );\n },\n async toHaveValue(expected, opts = {}) {\n ensureLocator(\"toHaveValue\");\n const timeout = opts.timeout ?? EXPECT_DEFAULT_TIMEOUT_MS;\n await expectPoll(\n async () => {\n const value = await subject.inputValue();\n return flip(expectRegexOrStringEq(value, expected))\n ? { ok: true }\n : { ok: false, detail: \"inputValue=\" + JSON.stringify(value) };\n },\n timeout,\n (detail) =>\n \"Expected value \" + flipWord + \"to equal \" + String(expected) + \". Last: \" + detail,\n );\n },\n async toHaveAttribute(name, expected, opts = {}) {\n ensureLocator(\"toHaveAttribute\");\n const timeout = (opts && opts.timeout) ?? EXPECT_DEFAULT_TIMEOUT_MS;\n await expectPoll(\n async () => {\n const actual = await subject.getAttribute(name);\n if (expected === undefined) {\n return flip(actual !== null)\n ? { ok: true }\n : { ok: false, detail: \"attr[\" + name + \"]=\" + JSON.stringify(actual) };\n }\n return flip(expectRegexOrStringEq(actual, expected))\n ? { ok: true }\n : { ok: false, detail: \"attr[\" + name + \"]=\" + JSON.stringify(actual) };\n },\n timeout,\n (detail) =>\n \"Expected attribute \" +\n name +\n \" \" +\n flipWord +\n \"to match. Last: \" +\n detail,\n );\n },\n async toHaveURL(expected, opts = {}) {\n ensurePage(\"toHaveURL\");\n const timeout = opts.timeout ?? EXPECT_DEFAULT_TIMEOUT_MS;\n // Poll page.url() instead of page.waitForURL. waitForURL waits for a\n // NEW navigation event and does not short-circuit when navigation\n // has already settled before the call (common for fast clicks).\n await expectPoll(\n async () => {\n const url = await page.url();\n const ok = expectRegexOrStringEq(url, expected);\n return flip(ok)\n ? { ok: true }\n : { ok: false, detail: \"url=\" + String(url) };\n },\n timeout,\n (detail) =>\n \"Expected URL \" + flipWord + \"to match \" + String(expected) + \". Last: \" + detail,\n );\n },\n async toHaveTitle(expected, opts = {}) {\n ensurePage(\"toHaveTitle\");\n const timeout = opts.timeout ?? EXPECT_DEFAULT_TIMEOUT_MS;\n await expectPoll(\n async () => {\n const title = await page.title();\n return flip(expectRegexOrStringEq(title, expected))\n ? { ok: true }\n : { ok: false, detail: \"title=\" + JSON.stringify(title) };\n },\n timeout,\n (detail) =>\n \"Expected title \" + flipWord + \"to match \" + String(expected) + \". Last: \" + detail,\n );\n },\n };\n Object.defineProperty(api, \"not\", {\n get() {\n return make(!negate);\n },\n });\n return api;\n };\n return make(false);\n };\n\n return (async (page, context, console, checkpoint, helpers, expect, onCommandStart, onCommandPass) => {\n ${code}\n })(page, context, console, checkpoint, helpers, expect, onCommandStart, onCommandPass);\n})()\n`;\n}\n\nfunction cloneSerializableValue<T>(value: T): T {\n try {\n return structuredClone(value);\n } catch (error) {\n const isDataCloneError =\n (error instanceof DOMException && error.name === \"DataCloneError\") ||\n (error instanceof Error && error.name === \"DataCloneError\");\n if (!isDataCloneError) {\n console.warn(\n \"⚠️ Failed to clone value using structuredClone, falling back to JSON serialization:\",\n error,\n );\n }\n try {\n return JSON.parse(JSON.stringify(value));\n } catch (error) {\n throw new Error(\n `cloneSerializableValue: value is not serializable. ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n}\n\nfunction toAbortError(reason: unknown): Error {\n if (reason instanceof Error) {\n return reason;\n }\n\n if (typeof reason === \"string\" && reason.trim().length > 0) {\n return new Error(reason);\n }\n\n return new Error(\"Execution aborted\");\n}\n\nfunction throwIfAborted(signal?: AbortSignal): void {\n if (signal?.aborted) {\n throw toAbortError(signal.reason);\n }\n}\n\nfunction raceWithAbort<T>(promise: Promise<T>, signal?: AbortSignal): Promise<T> {\n if (!signal) {\n return promise;\n }\n\n if (signal.aborted) {\n return Promise.reject(toAbortError(signal.reason));\n }\n\n return new Promise<T>((resolve, reject) => {\n const onAbort = () => {\n signal.removeEventListener(\"abort\", onAbort);\n reject(toAbortError(signal.reason));\n };\n\n signal.addEventListener(\"abort\", onAbort, { once: true });\n\n promise.then(\n (value) => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve(value);\n },\n (error) => {\n signal.removeEventListener(\"abort\", onAbort);\n reject(error);\n },\n );\n });\n}\n\nfunction isLocatorLike(value: unknown): boolean {\n if (!value || (typeof value !== \"object\" && typeof value !== \"function\")) {\n return false;\n }\n\n const candidate = value as Record<string, unknown>;\n return FALLBACK_LOCATOR_METHODS.some((methodName) => typeof candidate[methodName] === \"function\");\n}\n\nfunction bridgeResultFromValue(\n value: unknown,\n locatorIds: WeakMap<object, number>,\n locators: Map<number, object>,\n): BridgeValue {\n if (isLocatorLike(value)) {\n const locatorObject = value as object;\n const existingLocatorId = locatorIds.get(locatorObject);\n\n if (existingLocatorId !== undefined) {\n return {\n type: \"locator\",\n locatorId: existingLocatorId,\n };\n }\n\n const locatorId = locators.size + 1;\n locatorIds.set(locatorObject, locatorId);\n locators.set(locatorId, locatorObject);\n\n return {\n type: \"locator\",\n locatorId,\n };\n }\n\n return {\n type: \"value\",\n value: value === undefined ? undefined : cloneSerializableValue(value),\n };\n}\n\nfunction invokeBridgeMethod(\n target: Record<string, unknown>,\n methodName: string,\n args: unknown[],\n allowedMethods: ReadonlySet<string>,\n locatorIds: WeakMap<object, number>,\n locators: Map<number, object>,\n signal?: AbortSignal,\n): BridgeValue | Promise<BridgeValue> {\n throwIfAborted(signal);\n\n if (!allowedMethods.has(methodName)) {\n throw new Error(`${BRIDGE_ERROR_PREFIX} Blocked Playwright API call: ${methodName}`);\n }\n\n const method = target[methodName];\n if (typeof method !== \"function\") {\n throw new Error(`${BRIDGE_ERROR_PREFIX} Playwright API is unavailable: ${methodName}`);\n }\n\n const result = Reflect.apply(method, target, args);\n if (result instanceof Promise) {\n return raceWithAbort(\n Promise.resolve(result).then((resolved) =>\n bridgeResultFromValue(resolved, locatorIds, locators),\n ),\n signal,\n );\n }\n\n return bridgeResultFromValue(result, locatorIds, locators);\n}\n\nasync function getPreferredInteractiveTargetSelector(\n locator: Record<string, unknown> | null | undefined,\n): Promise<string | null> {\n if (!locator || typeof locator !== \"object\") {\n return null;\n }\n\n const targetLocator =\n typeof locator.first === \"function\" ? Reflect.apply(locator.first, locator, []) : locator;\n\n if (typeof targetLocator.evaluate !== \"function\") {\n return null;\n }\n\n let preferredSelector: unknown;\n try {\n preferredSelector = await Reflect.apply(targetLocator.evaluate, targetLocator, [\n (element: Element) => {\n const observer = (globalThis as { __bvt?: unknown }).__bvt as\n | {\n BrowserObserver?: {\n instance?: {\n getPreferredPlaywrightSelectorForElement?: (element: Element) => string;\n };\n };\n }\n | undefined;\n const browserObserver = observer?.BrowserObserver?.instance;\n if (!browserObserver?.getPreferredPlaywrightSelectorForElement) {\n return null;\n }\n\n return browserObserver.getPreferredPlaywrightSelectorForElement(element);\n },\n undefined,\n recoveryLocatorOptions(),\n ]);\n } catch {\n return null;\n }\n\n if (typeof preferredSelector !== \"string\" || preferredSelector.trim().length === 0) {\n return null;\n }\n\n return preferredSelector;\n}\n\nasync function attemptLocatorAction(\n locator: Record<string, unknown> | null | undefined,\n methodName: \"scrollIntoViewIfNeeded\" | \"click\" | \"check\" | \"focus\",\n): Promise<void> {\n if (!locator || typeof locator !== \"object\") {\n return;\n }\n\n const method = locator[methodName];\n if (typeof method !== \"function\") {\n return;\n }\n\n await Reflect.apply(method, locator, [recoveryLocatorOptions()]);\n}\n\nasync function isLocatorEnabled(\n locator: Record<string, unknown> | null | undefined,\n): Promise<boolean | null> {\n if (!locator || typeof locator !== \"object\") {\n return null;\n }\n\n const method = locator.isEnabled;\n if (typeof method !== \"function\") {\n return null;\n }\n\n try {\n const enabled = await Reflect.apply(method, locator, [recoveryLocatorOptions()]);\n return typeof enabled === \"boolean\" ? enabled : null;\n } catch {\n return null;\n }\n}\n\nfunction resolveFirstLocator(locator: Record<string, unknown> | null | undefined) {\n if (!locator || typeof locator !== \"object\") {\n return null;\n }\n\n return typeof locator.first === \"function\"\n ? (Reflect.apply(locator.first, locator, []) as Record<string, unknown>)\n : locator;\n}\n\nasync function resolvePreferredInteractiveLocator(\n page: Record<string, unknown>,\n locator: Record<string, unknown> | null | undefined,\n): Promise<Record<string, unknown> | null> {\n const preferredSelector = await getPreferredInteractiveTargetSelector(locator ?? undefined);\n if (preferredSelector && typeof page.locator === \"function\") {\n const preferredTarget = Reflect.apply(page.locator, page, [preferredSelector]) as\n | Record<string, unknown>\n | undefined;\n return resolveFirstLocator(preferredTarget);\n }\n\n return resolveFirstLocator(locator);\n}\n\ntype ActivationState = {\n checked?: boolean;\n ariaChecked?: string | null;\n ariaPressed?: string | null;\n dataState?: string | null;\n};\n\nasync function readActivationState(\n locator: Record<string, unknown> | null | undefined,\n): Promise<ActivationState | null> {\n if (!locator || typeof locator !== \"object\") {\n return null;\n }\n\n if (typeof locator.isChecked === \"function\") {\n try {\n const checked = await Reflect.apply(locator.isChecked, locator, [recoveryLocatorOptions()]);\n if (typeof checked === \"boolean\") {\n return { checked };\n }\n } catch {\n // fall through to DOM inspection\n }\n }\n\n if (typeof locator.evaluate !== \"function\") {\n return null;\n }\n\n try {\n const state = await Reflect.apply(locator.evaluate, locator, [\n (element: Element) => {\n const isNativeCheckable =\n element instanceof HTMLInputElement &&\n [\"checkbox\", \"radio\"].includes(element.type.toLowerCase());\n\n return {\n checked: isNativeCheckable ? element.checked : undefined,\n ariaChecked: element.getAttribute(\"aria-checked\"),\n ariaPressed: element.getAttribute(\"aria-pressed\"),\n dataState: element.getAttribute(\"data-state\"),\n };\n },\n undefined,\n recoveryLocatorOptions(),\n ]);\n\n return state && typeof state === \"object\" ? (state as ActivationState) : null;\n } catch {\n return null;\n }\n}\n\nfunction hasCheckableSignal(state: ActivationState | null | undefined): boolean {\n if (!state) {\n return false;\n }\n\n return (\n typeof state.checked === \"boolean\" ||\n state.ariaChecked != null ||\n state.ariaPressed != null ||\n state.dataState != null\n );\n}\n\nfunction didActivationChange(\n before: ActivationState | null | undefined,\n after: ActivationState | null | undefined,\n): boolean {\n if (!hasCheckableSignal(before) && !hasCheckableSignal(after)) {\n return true;\n }\n\n if (!after) {\n return false;\n }\n\n if (after.checked === true && before?.checked !== true) {\n return true;\n }\n\n return (\n before?.checked !== after.checked ||\n before?.ariaChecked !== after.ariaChecked ||\n before?.ariaPressed !== after.ariaPressed ||\n before?.dataState !== after.dataState\n );\n}\n\nasync function getLocatorCenterPoint(\n locator: Record<string, unknown> | null | undefined,\n): Promise<{ x: number; y: number } | null> {\n if (!locator || typeof locator !== \"object\" || typeof locator.evaluate !== \"function\") {\n return null;\n }\n\n try {\n const point = await Reflect.apply(locator.evaluate, locator, [\n (element: Element) => {\n const rect = element.getBoundingClientRect();\n if (rect.width <= 0 || rect.height <= 0) {\n return null;\n }\n\n return {\n x: rect.left + rect.width / 2,\n y: rect.top + rect.height / 2,\n };\n },\n undefined,\n recoveryLocatorOptions(),\n ]);\n\n if (\n point &&\n typeof point === \"object\" &&\n typeof (point as { x?: unknown }).x === \"number\" &&\n typeof (point as { y?: unknown }).y === \"number\"\n ) {\n return point as { x: number; y: number };\n }\n } catch {\n return null;\n }\n\n return null;\n}\n\nasync function tryKeyboardActivation(\n page: Record<string, unknown>,\n locator: Record<string, unknown> | null | undefined,\n key: \"Space\" | \"Enter\",\n beforeState: ActivationState | null,\n): Promise<boolean> {\n const keyboard = (page as { keyboard?: { press?: (key: string) => Promise<void> } }).keyboard;\n if (!keyboard?.press) {\n return false;\n }\n\n await attemptLocatorAction(locator, \"focus\");\n await Reflect.apply(keyboard.press, keyboard, [key]);\n const afterState = await readActivationState(locator);\n return didActivationChange(beforeState, afterState);\n}\n\nasync function tryMouseActivation(\n page: Record<string, unknown>,\n locator: Record<string, unknown> | null | undefined,\n beforeState: ActivationState | null,\n): Promise<boolean> {\n const mouse = (page as { mouse?: { click?: (x: number, y: number) => Promise<void> } }).mouse;\n if (!mouse?.click) {\n return false;\n }\n\n const point = await getLocatorCenterPoint(locator);\n if (!point) {\n return false;\n }\n\n await Reflect.apply(mouse.click, mouse, [point.x, point.y]);\n const afterState = await readActivationState(locator);\n return didActivationChange(beforeState, afterState);\n}\n\nasync function activatePreferredInteractiveTarget(\n page: Record<string, unknown>,\n locator: Record<string, unknown> | null | undefined,\n): Promise<boolean> {\n if (!locator || typeof locator !== \"object\") {\n return false;\n }\n\n const targetLocator = resolveFirstLocator(locator);\n const failures: Error[] = [];\n const beforeState = await readActivationState(targetLocator);\n const preferredTarget = await resolvePreferredInteractiveLocator(page, locator);\n\n if (preferredTarget) {\n try {\n await attemptLocatorAction(preferredTarget, \"scrollIntoViewIfNeeded\");\n await (page as { evaluate?: (...args: unknown[]) => Promise<unknown> }).evaluate?.(() => {\n const offset = Math.max(\n 0,\n ...Array.from(document.querySelectorAll<HTMLElement>(\"*\"))\n .filter((el) => {\n const s = getComputedStyle(el);\n return (\n (s.position === \"sticky\" || s.position === \"fixed\") &&\n el.getBoundingClientRect().top <= 0\n );\n })\n .map((el) => el.getBoundingClientRect().bottom),\n );\n if (offset > 0) window.scrollBy(0, -(offset + 16));\n });\n await attemptLocatorAction(preferredTarget, \"click\");\n const afterState = await readActivationState(targetLocator);\n if (didActivationChange(beforeState, afterState)) {\n return true;\n }\n failures.push(new Error(\"Preferred target click did not change state.\"));\n } catch (error) {\n failures.push(error instanceof Error ? error : new Error(String(error)));\n }\n }\n\n try {\n await attemptLocatorAction(targetLocator, \"check\");\n const afterState = await readActivationState(targetLocator);\n if (didActivationChange(beforeState, afterState)) {\n return true;\n }\n failures.push(new Error(\"Checkable activation did not change state.\"));\n } catch (error) {\n failures.push(error instanceof Error ? error : new Error(String(error)));\n }\n\n try {\n await attemptLocatorAction(targetLocator, \"scrollIntoViewIfNeeded\");\n await (page as { evaluate?: (...args: unknown[]) => Promise<unknown> }).evaluate?.(() => {\n const offset = Math.max(\n 0,\n ...Array.from(document.querySelectorAll<HTMLElement>(\"*\"))\n .filter((el) => {\n const s = getComputedStyle(el);\n return (\n (s.position === \"sticky\" || s.position === \"fixed\") &&\n el.getBoundingClientRect().top <= 0\n );\n })\n .map((el) => el.getBoundingClientRect().bottom),\n );\n if (offset > 0) window.scrollBy(0, -(offset + 16));\n });\n await attemptLocatorAction(targetLocator, \"click\");\n const afterState = await readActivationState(targetLocator);\n if (didActivationChange(beforeState, afterState)) {\n return true;\n }\n failures.push(new Error(\"Fallback locator click did not change state.\"));\n } catch (error) {\n failures.push(error instanceof Error ? error : new Error(String(error)));\n }\n\n throw failures.at(-1) ?? new Error(\"Unable to activate the preferred interactive target.\");\n}\n\nasync function activateWithRecovery(\n page: Record<string, unknown>,\n locator: Record<string, unknown> | null | undefined,\n): Promise<boolean> {\n if (!locator || typeof locator !== \"object\") {\n return false;\n }\n\n const targetLocator = resolveFirstLocator(locator);\n const preferredTarget = await resolvePreferredInteractiveLocator(page, locator);\n const heuristicTarget = preferredTarget ?? targetLocator;\n const failures: Error[] = [];\n\n try {\n return await activatePreferredInteractiveTarget(page, locator);\n } catch (error) {\n failures.push(error instanceof Error ? error : new Error(String(error)));\n }\n\n const beforeState = await readActivationState(targetLocator);\n const enabledState = await isLocatorEnabled(heuristicTarget);\n if (enabledState === false) {\n throw new Error(\"Recovery activation is blocked because the preferred target is disabled.\");\n }\n\n for (const key of [\"Space\", \"Enter\"] as const) {\n try {\n if (await tryKeyboardActivation(page, heuristicTarget, key, beforeState)) {\n return true;\n }\n failures.push(new Error(`Keyboard ${key} activation did not change state.`));\n } catch (error) {\n failures.push(error instanceof Error ? error : new Error(String(error)));\n }\n }\n\n try {\n await attemptLocatorAction(heuristicTarget, \"scrollIntoViewIfNeeded\");\n if (await tryMouseActivation(page, heuristicTarget, beforeState)) {\n return true;\n }\n failures.push(new Error(\"Mouse recovery activation did not change state.\"));\n } catch (error) {\n failures.push(error instanceof Error ? error : new Error(String(error)));\n }\n\n const forceLocator = heuristicTarget as { click?: (opts: unknown) => Promise<void> };\n if (forceLocator.click) {\n try {\n await forceLocator.click(recoveryLocatorOptions({ force: true }));\n const afterState = await readActivationState(targetLocator);\n if (didActivationChange(beforeState, afterState)) {\n return true;\n }\n failures.push(new Error(\"Force click did not change state.\"));\n } catch (error) {\n failures.push(error instanceof Error ? error : new Error(String(error)));\n }\n }\n\n throw failures.at(-1) ?? new Error(\"Unable to activate the target with recovery heuristics.\");\n}\n\nfunction invokeHelperMethod(\n helperName: string,\n args: HelperArg[],\n page: Record<string, unknown>,\n locatorIds: WeakMap<object, number>,\n locators: Map<number, object>,\n): BridgeValue | Promise<BridgeValue> {\n if (!HELPER_METHOD_SET.has(helperName)) {\n throw new Error(`${BRIDGE_ERROR_PREFIX} Blocked helper call: ${helperName}`);\n }\n\n const [firstArg] = args;\n const resolvedLocator =\n firstArg?.type === \"locator\" ? locators.get(firstArg.locatorId) : firstArg?.value;\n\n const helperResult =\n helperName === \"getPreferredInteractiveTargetSelector\"\n ? getPreferredInteractiveTargetSelector(resolvedLocator as Record<string, unknown>)\n : helperName === \"activatePreferredInteractiveTarget\"\n ? activatePreferredInteractiveTarget(page, resolvedLocator as Record<string, unknown>)\n : helperName === \"activateWithRecovery\"\n ? activateWithRecovery(page, resolvedLocator as Record<string, unknown>)\n : resolvedLocator;\n\n if (helperResult instanceof Promise) {\n return helperResult.then((value) => bridgeResultFromValue(value, locatorIds, locators));\n }\n\n return bridgeResultFromValue(helperResult, locatorIds, locators);\n}\n\nexport async function runPlaywrightCode({\n page,\n code,\n context,\n timeoutMs,\n signal,\n onLog,\n onCheckpoint,\n traceDelegate,\n testData,\n}: RunPlaywrightCodeInput): Promise<unknown> {\n // Derive allowed methods at runtime from the real Playwright objects.\n const allowedPage = buildAllowedMethods(\n page as object,\n BLOCKED_PAGE_METHODS,\n FALLBACK_PAGE_METHODS,\n );\n\n // Try to obtain a sample locator so we can introspect its methods.\n // Prefer page.locator(\"body\"), fall back to the first getBy* method.\n const pageFns = page as Record<string, (...args: unknown[]) => unknown>;\n let sampleLocator: object | undefined;\n if (typeof pageFns.locator === \"function\") {\n sampleLocator = pageFns.locator(\"body\") as object;\n } else {\n for (const name of [\"getByRole\", \"getByText\", \"getByTestId\", \"getByLabel\"]) {\n if (typeof pageFns[name] === \"function\") {\n try {\n const loc = pageFns[name](\"_blinq_probe_\");\n if (loc && typeof loc === \"object\") {\n sampleLocator = loc as object;\n break;\n }\n } catch {\n // ignore – mock/real may throw for invalid args\n }\n }\n }\n }\n\n const allowedLocator = sampleLocator\n ? buildAllowedMethods(sampleLocator, BLOCKED_LOCATOR_METHODS, FALLBACK_LOCATOR_METHODS)\n : buildAllowedMethods({}, BLOCKED_LOCATOR_METHODS, FALLBACK_LOCATOR_METHODS);\n\n const locatorIds = new WeakMap<object, number>();\n const locators = new Map<number, object>();\n const sandbox = Object.create(null) as Record<string, unknown>;\n\n sandbox.__contextData = cloneSerializableValue({\n stepId: context.stepId,\n variables: context.variables,\n });\n // Bridge for the sandbox's onCommandStart / onCommandPass helpers. startGroup\n // always fires `onCheckpoint` — the live signal consumers rely on\n // (ExecutionResult.checkpoints, salvage heuristic, progress UI). The trace\n // delegate is optional; when absent the actual Playwright trace-group\n // forwarding is skipped but the checkpoint still lands.\n sandbox.__bridgeOnCommandStart = (label: string) => {\n const name = String(label ?? \"\");\n try {\n onCheckpoint(name);\n } catch (err) {\n onLog(\"warn\", [\"[trace] onCheckpoint failed\", err instanceof Error ? err.message : err]);\n }\n if (!traceDelegate) {\n return undefined;\n }\n return Promise.resolve(traceDelegate.startGroup(name)).catch((err) => {\n onLog(\"warn\", [\"[trace] startGroup failed\", err instanceof Error ? err.message : err]);\n });\n };\n sandbox.__bridgeOnCommandPass = () => {\n if (!traceDelegate) {\n return undefined;\n }\n return Promise.resolve(traceDelegate.endGroup()).catch((err) => {\n onLog(\"warn\", [\"[trace] endGroup failed\", err instanceof Error ? err.message : err]);\n });\n };\n sandbox.__bridgeLog = (level: RunnerLogLevel, args: unknown[]) => {\n onLog(level, args);\n };\n sandbox.__bridgeCheckpoint = (label: string, data?: unknown) => {\n onCheckpoint(label, data === undefined ? undefined : cloneSerializableValue(data));\n };\n sandbox.__bridgePage = (methodName: string, args: unknown[]) =>\n invokeBridgeMethod(\n page as Record<string, unknown>,\n methodName,\n args,\n allowedPage.methodSet,\n locatorIds,\n locators,\n signal,\n );\n sandbox.__bridgeLocator = (locatorId: number, methodName: string, args: unknown[]) => {\n const locator = locators.get(locatorId);\n if (!locator) {\n throw new Error(`${BRIDGE_ERROR_PREFIX} Unknown locator handle: ${locatorId}`);\n }\n\n return invokeBridgeMethod(\n locator as Record<string, unknown>,\n methodName,\n args,\n allowedLocator.methodSet,\n locatorIds,\n locators,\n signal,\n );\n };\n sandbox.__bridgeHelper = (helperName: string, args: HelperArg[]) =>\n invokeHelperMethod(helperName, args, page as Record<string, unknown>, locatorIds, locators);\n // setTimeout is a Node host global, not a VM builtin — expose it via bridge\n // so sandbox helpers (onCommandPass delay, expect() polling) can sleep.\n sandbox.__bridgeDelay = (ms: number) =>\n new Promise<void>((resolve) => setTimeout(resolve, Math.max(0, Number(ms) || 0)));\n sandbox.__bridgeTestData = async (methodName: string, args: unknown[]) => {\n const api = testData;\n if (!api) {\n throw new Error(\n \"context.testData is not available (testData is not available) — no resolutionContext on this step\",\n );\n }\n switch (methodName) {\n case \"setRuntime\": {\n const [key, value, opts] = args as [string, string, { dataType?: string } | undefined];\n await api.setRuntime(key, value, opts as Parameters<TestDataApi[\"setRuntime\"]>[2]);\n return { type: \"value\", value: undefined };\n }\n case \"getRuntime\": {\n const [key] = args as [string];\n const v = await api.getRuntime(key);\n return { type: \"value\", value: v };\n }\n default:\n throw new Error(`__bridgeTestData: unknown method ${methodName}`);\n }\n };\n sandbox.Array = Array;\n sandbox.Boolean = Boolean;\n sandbox.Date = Date;\n sandbox.Error = Error;\n sandbox.JSON = JSON;\n sandbox.Map = Map;\n sandbox.Math = Math;\n sandbox.Number = Number;\n sandbox.Object = Object;\n sandbox.Promise = Promise;\n sandbox.RegExp = RegExp;\n sandbox.Set = Set;\n sandbox.String = String;\n sandbox.Symbol = Symbol;\n sandbox.URL = URL;\n sandbox.URLSearchParams = URLSearchParams;\n sandbox.WeakMap = WeakMap;\n sandbox.WeakSet = WeakSet;\n sandbox.Infinity = Infinity;\n sandbox.NaN = NaN;\n sandbox.isFinite = isFinite;\n sandbox.isNaN = isNaN;\n sandbox.parseFloat = parseFloat;\n sandbox.parseInt = parseInt;\n\n const contextifiedSandbox = createContext(sandbox, {\n codeGeneration: {\n strings: false,\n wasm: false,\n },\n });\n\n return runInContext(\n buildBootstrap(code, allowedPage.methods, allowedLocator.methods),\n contextifiedSandbox,\n {\n timeout: timeoutMs,\n displayErrors: true,\n },\n );\n}\n\nexport { formatLogMessage };\nexport { BRIDGE_ERROR_PREFIX };\nexport type { PlaywrightExecutionContext, TestDataApi, TraceDelegate };\n","import type { Checkpoint, ExecutionResult } from \"@blinq/schemas\";\nimport { validatePlaywrightCode } from \"./playwright-validator\";\nimport {\n formatLogMessage,\n runPlaywrightCode,\n type PlaywrightExecutionContext,\n type TestDataApi,\n type TraceDelegate,\n} from \"./playwright-runner\";\n\nconst PLAYWRIGHT_DEFAULT_TIMEOUT_MS = 30_000;\nconst AI_PLAYWRIGHT_ACTION_TIMEOUT_MS = 10_000;\n\ntype ExecutePlaywrightCodeInput = {\n page: object;\n code: string;\n context: PlaywrightExecutionContext;\n timeoutMs?: number;\n signal?: AbortSignal;\n /**\n * Optional tracing bridge. When present, the sandbox's top-level\n * `onCommandStart(label)` / `onCommandPass()` helpers route here. Tester run\n * sessions pass a delegate that forwards to\n * `browserContext.tracing.group/groupEnd`. Live AI-chat calls may pass a\n * no-op delegate for signal capture. Omit entirely and the helpers become\n * pure checkpoint emitters (plus the onCommandPass delay).\n */\n traceDelegate?: TraceDelegate;\n testData?: TestDataApi;\n};\n\ntype PageWithDefaultTimeouts = {\n setDefaultTimeout?: (timeoutMs: number) => void;\n setDefaultNavigationTimeout?: (timeoutMs: number) => void;\n};\n\nfunction applyAiPlaywrightTimeouts(page: object): () => void {\n const pageWithTimeouts = page as PageWithDefaultTimeouts;\n\n pageWithTimeouts.setDefaultTimeout?.(AI_PLAYWRIGHT_ACTION_TIMEOUT_MS);\n pageWithTimeouts.setDefaultNavigationTimeout?.(AI_PLAYWRIGHT_ACTION_TIMEOUT_MS);\n\n return () => {\n pageWithTimeouts.setDefaultTimeout?.(PLAYWRIGHT_DEFAULT_TIMEOUT_MS);\n pageWithTimeouts.setDefaultNavigationTimeout?.(PLAYWRIGHT_DEFAULT_TIMEOUT_MS);\n };\n}\n\n// When the caller's AbortSignal fires mid-execution, collapse Playwright's\n// default timeouts so any in-flight action (click, fill, waitFor..., goto)\n// times out within ~1ms. Without this, the JS-side promise races to rejection\n// via `raceWithAbort` but the actual Playwright call keeps polling the\n// browser for its full timeout window — the session stays busy and the user\n// waits.\n//\n// Also calls `window.stop()` to halt in-flight navigation loads.\nfunction wireHardAbortOnSignal(page: object, signal: AbortSignal): () => void {\n const pageWithTimeouts = page as {\n setDefaultTimeout?: (timeoutMs: number) => void;\n setDefaultNavigationTimeout?: (timeoutMs: number) => void;\n evaluate?: (fn: string | (() => unknown)) => Promise<unknown>;\n };\n const onAbort = () => {\n try {\n pageWithTimeouts.setDefaultTimeout?.(1);\n pageWithTimeouts.setDefaultNavigationTimeout?.(1);\n } catch {\n // swallow — best-effort hard-abort\n }\n try {\n void pageWithTimeouts.evaluate?.(\"() => window.stop()\");\n } catch {\n // swallow — window.stop() is best-effort\n }\n };\n if (signal.aborted) {\n onAbort();\n } else {\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n return () => {\n signal.removeEventListener(\"abort\", onAbort);\n };\n}\n\nexport async function executePlaywrightCode({\n page,\n code,\n context,\n timeoutMs = PLAYWRIGHT_DEFAULT_TIMEOUT_MS,\n signal,\n traceDelegate,\n testData,\n}: ExecutePlaywrightCodeInput): Promise<ExecutionResult> {\n const validation = await validatePlaywrightCode(code);\n if (!validation.valid) {\n return {\n success: false,\n error: validation.errors.join(\"; \"),\n logs: [],\n checkpoints: [],\n duration: 0,\n };\n }\n\n const logs: string[] = [];\n const checkpoints: Checkpoint[] = [];\n const startedAt = Date.now();\n const restorePlaywrightTimeouts = applyAiPlaywrightTimeouts(page);\n const detachAbortListener = signal ? wireHardAbortOnSignal(page, signal) : () => {};\n\n try {\n const result = await runPlaywrightCode({\n page,\n code,\n context,\n timeoutMs,\n signal,\n traceDelegate,\n testData,\n onLog(level, args) {\n const message = formatLogMessage(args);\n if (level === \"log\") {\n logs.push(message);\n return;\n }\n\n logs.push(`[${level}] ${message}`);\n },\n onCheckpoint(label, data) {\n checkpoints.push({\n label,\n timestampMs: Date.now() - startedAt,\n ...(data !== undefined ? { data } : {}),\n });\n },\n });\n\n return {\n success: true,\n result,\n logs,\n checkpoints,\n duration: Date.now() - startedAt,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n logs,\n checkpoints,\n duration: Date.now() - startedAt,\n };\n } finally {\n detachAbortListener();\n restorePlaywrightTimeouts();\n }\n}\n","export class Queue {\n private queue: (() => Promise<void>)[] = [];\n private processing = false;\n enqueue(task: () => Promise<void>) {\n this.queue.push(task);\n this.processNext();\n }\n private async processNext() {\n if (this.processing) return;\n const nextTask = this.queue.shift();\n if (!nextTask) return;\n this.processing = true;\n try {\n await nextTask();\n } catch (error) {\n console.error(\"Error processing task:\", error);\n } finally {\n this.processing = false;\n this.processNext();\n }\n }\n}\n\nexport const hasUnresolvedTokens = (obj: any): boolean => {\n const str = JSON.stringify(obj);\n return /{{.*}}/.test(str);\n};\n\nexport const formatForLog = (value: unknown): string => {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n};\n\nexport const getValueFromStringOrRegex = (\n input:\n | {\n type: \"string\";\n value: string;\n }\n | {\n type: \"regex\";\n source: string;\n flags?: string;\n },\n) => {\n switch (input.type) {\n case \"string\":\n return input.value;\n case \"regex\":\n return new RegExp(input.source, input.flags);\n default:\n const _exhaustiveCheck: never = input;\n throw new Error(`Unsupported type: ${(_exhaustiveCheck as any).type}`);\n }\n};\n\nexport const getValueFromPrimitiveOrRegex = (\n input:\n | { type: \"string\"; value: string }\n | { type: \"regex\"; source: string; flags?: string }\n | { type: \"number\"; value: number }\n | { type: \"boolean\"; value: boolean },\n): string | number | boolean | RegExp => {\n switch (input.type) {\n case \"string\":\n return input.value;\n case \"regex\":\n return new RegExp(input.source, input.flags);\n case \"number\":\n return input.value;\n case \"boolean\":\n return input.value;\n default: {\n const _exhaustiveCheck: never = input;\n throw new Error(`Unsupported type: ${(_exhaustiveCheck as any).type}`);\n }\n }\n};\n","import type {\n ApiAssertionOperator,\n ApiRequest,\n ApiResponseAssertionCommandData,\n ApiResponseSnapshot,\n} from \"@blinq/schemas\";\n\nexport type ApiExecutionResponse = ApiResponseSnapshot;\n\ntype ApiFetch = typeof fetch;\n\nconst NO_BODY_METHODS = new Set([\"GET\"]);\n\nfunction normalizeHeaders(headers: Headers): Record<string, string> {\n const result: Record<string, string> = {};\n headers.forEach((value, key) => {\n result[key.toLowerCase()] = value;\n });\n return result;\n}\n\nfunction getHeader(headers: Record<string, string>, name: string): string | undefined {\n const lowerName = name.toLowerCase();\n return (\n headers[lowerName] ??\n Object.entries(headers).find(([key]) => key.toLowerCase() === lowerName)?.[1]\n );\n}\n\nfunction parseJsonBody(bodyText: string, headers: Record<string, string>): unknown | undefined {\n const contentType = getHeader(headers, \"content-type\") ?? \"\";\n if (!contentType.toLowerCase().includes(\"json\")) {\n return undefined;\n }\n\n try {\n return JSON.parse(bodyText);\n } catch {\n return undefined;\n }\n}\n\nfunction createAbortSignal(\n timeoutMs: number,\n callerSignal?: AbortSignal,\n): { signal: AbortSignal; cleanup: () => void } {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => {\n controller.abort(new Error(`API request timed out after ${timeoutMs}ms.`));\n }, timeoutMs);\n\n const abortFromCaller = () => {\n controller.abort(callerSignal?.reason);\n };\n\n if (callerSignal) {\n if (callerSignal.aborted) {\n abortFromCaller();\n } else {\n callerSignal.addEventListener(\"abort\", abortFromCaller, { once: true });\n }\n }\n\n return {\n signal: controller.signal,\n cleanup: () => {\n clearTimeout(timeoutId);\n callerSignal?.removeEventListener(\"abort\", abortFromCaller);\n },\n };\n}\n\nexport async function executeApiRequest(\n request: ApiRequest,\n options: {\n fetchImpl?: ApiFetch;\n signal?: AbortSignal;\n } = {},\n): Promise<ApiExecutionResponse> {\n const fetchImpl = options.fetchImpl ?? globalThis.fetch;\n if (typeof fetchImpl !== \"function\") {\n throw new Error(\"API step execution requires a fetch implementation.\");\n }\n\n const timeoutMs = request.options?.timeout ?? 60_000;\n const { signal, cleanup } = createAbortSignal(timeoutMs, options.signal);\n const startedAt = performance.now();\n\n try {\n const response = await fetchImpl(request.url, {\n method: request.method,\n headers: request.headers,\n ...(request.body && !NO_BODY_METHODS.has(request.method) ? { body: request.body } : {}),\n signal,\n });\n const bodyText = await response.text();\n const headers = normalizeHeaders(response.headers);\n const bodyJson = parseJsonBody(bodyText, headers);\n\n return {\n status: response.status,\n statusText: response.statusText,\n timeMs: Math.round(performance.now() - startedAt),\n sizeBytes: new TextEncoder().encode(bodyText).byteLength,\n headers,\n bodyText,\n ...(bodyJson !== undefined ? { bodyJson } : {}),\n };\n } finally {\n cleanup();\n }\n}\n\nfunction getValueAtPath(value: unknown, path: string): unknown {\n if (!path) return value;\n\n let current: unknown = value;\n for (const segment of path.split(\".\")) {\n if (current === null || current === undefined) {\n return undefined;\n }\n\n const parts = [...segment.matchAll(/([^[]+)|\\[(\\d+)]/g)];\n for (const part of parts) {\n if (current === null || current === undefined) {\n return undefined;\n }\n\n const key = part[1] ?? part[2];\n if (Array.isArray(current) && part[2] !== undefined) {\n current = current[Number(key)];\n } else if (typeof current === \"object\") {\n current = (current as Record<string, unknown>)[key];\n } else {\n return undefined;\n }\n }\n }\n\n return current;\n}\n\nfunction toComparableString(value: unknown): string {\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n if (value === null) return \"null\";\n if (value === undefined) return \"undefined\";\n return JSON.stringify(value);\n}\n\nfunction labelForAssertion(assertion: ApiResponseAssertionCommandData): string {\n switch (assertion.target) {\n case \"status\":\n return \"API status\";\n case \"responseTime\":\n return \"API response time\";\n case \"header\":\n return `API header \"${assertion.path}\"`;\n case \"bodyField\":\n return `API body field \"${assertion.path}\"`;\n }\n}\n\nfunction operatorLabel(operator: ApiAssertionOperator): string {\n switch (operator) {\n case \"equals\":\n return \"equal\";\n case \"notEquals\":\n return \"not equal\";\n case \"contains\":\n return \"contain\";\n case \"lessThan\":\n return \"be less than\";\n case \"greaterThan\":\n return \"be greater than\";\n case \"exists\":\n return \"exist\";\n }\n}\n\nfunction compareValues(actual: unknown, operator: ApiAssertionOperator, expected: string): boolean {\n switch (operator) {\n case \"equals\":\n return toComparableString(actual) === expected;\n case \"notEquals\":\n return toComparableString(actual) !== expected;\n case \"contains\":\n return toComparableString(actual).includes(expected);\n case \"lessThan\":\n return Number(actual) < Number(expected);\n case \"greaterThan\":\n return Number(actual) > Number(expected);\n case \"exists\":\n return actual !== undefined && actual !== null;\n }\n}\n\nfunction getAssertionActual(\n response: ApiExecutionResponse,\n assertion: ApiResponseAssertionCommandData,\n): unknown {\n switch (assertion.target) {\n case \"status\":\n return response.status;\n case \"responseTime\":\n return response.timeMs;\n case \"header\":\n return getHeader(response.headers, assertion.path);\n case \"bodyField\":\n return getValueAtPath(response.bodyJson, assertion.path);\n }\n}\n\nexport function assertApiResponse(\n response: ApiExecutionResponse,\n assertion: ApiResponseAssertionCommandData,\n): void {\n const actual = getAssertionActual(response, assertion);\n const expected = assertion.expected ?? \"\";\n if (compareValues(actual, assertion.operator, expected)) {\n return;\n }\n\n throw new Error(\n `Expected ${labelForAssertion(assertion)} to ${operatorLabel(assertion.operator)} \"${\n expected\n }\", received \"${toComparableString(actual)}\".`,\n );\n}\n\nexport function serializeApiResponseForRuntime(response: ApiExecutionResponse): string {\n if (response.bodyJson !== undefined) {\n return JSON.stringify(response.bodyJson);\n }\n\n return response.bodyText;\n}\n","import type { BrowserContext, Page } from \"playwright\";\n\nexport type PlaywrightStorageState = Awaited<ReturnType<BrowserContext[\"storageState\"]>>;\n\ntype BrowserContextWithSetStorageState = BrowserContext & {\n setStorageState?: (storageState: PlaywrightStorageState | string) => Promise<void>;\n};\n\ntype StorageOrigin = PlaywrightStorageState[\"origins\"][number];\n\nexport function parseSessionStorageState(value: string): PlaywrightStorageState {\n let parsed: unknown;\n try {\n parsed = JSON.parse(value);\n } catch {\n throw new Error(\"Session state must be valid JSON.\");\n }\n\n if (typeof parsed !== \"object\" || parsed === null) {\n throw new Error(\"Session state must be a JSON object.\");\n }\n\n const candidate = parsed as Partial<PlaywrightStorageState>;\n if (!Array.isArray(candidate.cookies)) {\n throw new Error(\"Session state must include a cookies array.\");\n }\n if (!Array.isArray(candidate.origins)) {\n throw new Error(\"Session state must include an origins array.\");\n }\n\n return {\n cookies: candidate.cookies as PlaywrightStorageState[\"cookies\"],\n origins: candidate.origins as PlaywrightStorageState[\"origins\"],\n };\n}\n\nexport async function captureSessionStorageState(\n page: Page,\n options: { includeIndexedDB?: boolean } = {},\n): Promise<{ value: string; cookieCount: number; originCount: number }> {\n const storageState = await page.context().storageState({\n indexedDB: options.includeIndexedDB ?? true,\n });\n\n return {\n value: JSON.stringify(storageState),\n cookieCount: storageState.cookies.length,\n originCount: storageState.origins.length,\n };\n}\n\nfunction getPageOrigin(page: Page): string | null {\n try {\n const url = page.url();\n if (!url || url === \"about:blank\") {\n return null;\n }\n return new URL(url).origin;\n } catch {\n return null;\n }\n}\n\nasync function restoreOriginLocalStorage(\n context: BrowserContext,\n activePage: Page,\n origin: StorageOrigin,\n): Promise<void> {\n if (!origin.localStorage?.length) {\n return;\n }\n\n const activePageOrigin = getPageOrigin(activePage);\n const page = activePageOrigin === origin.origin ? activePage : await context.newPage();\n const shouldClosePage = page !== activePage;\n\n try {\n if (shouldClosePage) {\n await page.goto(origin.origin, {\n waitUntil: \"domcontentloaded\",\n timeout: 15000,\n });\n }\n\n await page.evaluate((entries) => {\n localStorage.clear();\n for (const entry of entries) {\n localStorage.setItem(entry.name, entry.value);\n }\n }, origin.localStorage);\n } finally {\n if (shouldClosePage) {\n await page.close().catch(() => undefined);\n }\n }\n}\n\nexport async function restoreSessionStorageState(page: Page, value: string): Promise<void> {\n const storageState = parseSessionStorageState(value);\n const context = page.context() as BrowserContextWithSetStorageState;\n\n if (typeof context.setStorageState === \"function\") {\n await context.setStorageState(storageState);\n await page.reload({\n timeout: 20000,\n });\n return;\n }\n\n await context.clearCookies();\n if (storageState.cookies.length > 0) {\n await context.addCookies(storageState.cookies);\n }\n\n for (const origin of storageState.origins) {\n await restoreOriginLocalStorage(context, page, origin);\n }\n await page.reload({\n timeout: 20000,\n });\n}\n","import { chromium, firefox, webkit } from \"playwright\";\nimport type {\n Browser,\n BrowserContext,\n ConnectOptions,\n Frame,\n FrameLocator,\n LaunchOptions,\n Locator,\n Page,\n} from \"playwright\";\n\nimport type { BrowserObserver } from \"./_dep\";\nimport { TestDataApi } from \"./test-data-api\";\nimport { CommandSchema } from \"@blinq/schemas\";\nimport type {\n BrowserObserverStateK,\n Command,\n ElementAction,\n ElementAssertion,\n ElementCommand,\n ElementExtract,\n ExtractStorageDetails,\n PageAction,\n PageAssertion,\n PageExtract,\n ResolutionContext,\n TestDataType,\n UniqueSelector,\n UtilityCommand,\n ExecutionResult,\n ExecutionStatusUpdateEventData,\n ExecutionCompletedEventData,\n ExecutionStartedEventData,\n Step,\n StepDefinition,\n StepReplayTelemetry,\n PageCommand,\n} from \"@blinq/schemas\";\nimport { expect } from \"playwright/test\";\nimport { attachDownloadInterceptor } from \"./download-interceptor\";\nimport { NoOpRecoveryController } from \"./recovery\";\nimport type { RecoveryController, RecoveryDecision } from \"./recovery\";\nimport { applyRepairPlan } from \"./recovery/apply-repair-plan\";\nimport { persistStepRepair } from \"./recovery/persist-step-repair\";\nimport type { Unboxed } from \"../browser-observer/pw\";\nimport type { ITestDataProvider } from \"@blinq/data-resolver\";\n\nimport { mkdirSync, readFileSync, statSync } from \"fs\";\nimport { dirname } from \"path\";\nimport type { TesterApiClient } from \"./tester-api-client\";\nimport {\n CommandPreprocessorPipeline,\n type CommandExecutionContext,\n type CommandPreprocessor,\n} from \"./command-preprocessor\";\nimport { executePlaywrightCode } from \"./playwright-sandbox\";\nimport {\n getValueFromStringOrRegex,\n getValueFromPrimitiveOrRegex,\n hasUnresolvedTokens,\n formatForLog,\n} from \"./utils\";\nimport { resolveAgentObservability } from \"./logger\";\nimport type { AgentObservability, AgentObservabilityInput } from \"./logger\";\nimport { ulid } from \"ulid\";\nimport {\n assertApiResponse,\n executeApiRequest,\n serializeApiResponseForRuntime,\n} from \"./api-command\";\nimport { captureSessionStorageState, restoreSessionStorageState } from \"./session-storage-state\";\n\ntype UnboxedTuple<T extends unknown[]> = { [K in keyof T]: Unboxed<T[K]> };\ntype LocatorScope = Frame | FrameLocator;\n\n/**\n * Internal helper to cast Playwright's single-argument evaluate to support our spread pattern.\n * This is safer than 'as any' as it preserves the R and UnboxedTuple<T> link.\n */\ntype EvaluateWithSpread = <T extends any[], R>(\n pageFunction: ((...args: UnboxedTuple<T>) => R) | string,\n ...args: T\n) => Promise<R>;\n\ntype GlobalThis = {\n __bvt: {\n BrowserObserver: typeof BrowserObserver;\n };\n __bvt_emit: (event: any) => void;\n};\nconst browserTypesMap = {\n chromium,\n firefox,\n webkit,\n};\nexport type BrowserConnectInput = {\n browser: {\n type: keyof typeof browserTypesMap;\n connection: {\n wsEndpoint: string;\n options: ConnectOptions;\n };\n };\n context: {\n options: Parameters<Browser[\"newContext\"]>[0];\n };\n page?: {\n url?: string;\n };\n browserObserver?: {\n initialState?: BrowserObserverStateK;\n };\n token?: string;\n};\n\nexport type BrowserLaunchInput = {\n browser: {\n type: keyof typeof browserTypesMap;\n options: LaunchOptions;\n };\n context: {\n options: Parameters<Browser[\"newContext\"]>[0];\n };\n page?: {\n url?: string;\n };\n browserObserver?: {\n initialState?: BrowserObserverStateK;\n };\n token?: string;\n};\n\nexport type StepTraceChunkCallbacks = {\n onStart?: (tracing: import(\"playwright\").Tracing, stepId: string) => Promise<void>;\n onStop?: (tracing: import(\"playwright\").Tracing, runId: string, stepId: string) => Promise<void>;\n};\n\nexport type StepStartRecoveryRestoreInput = {\n recoveryAttemptId: string;\n stepId: string;\n stepDefinitionId: string;\n commandId: string;\n targetStepIndex: number;\n session?: TesterSession;\n};\n\nexport type StepStartRecoveryRestorer = (input: StepStartRecoveryRestoreInput) => Promise<void>;\n\n/**\n * Resolves a test-data key (dataType: \"file\") to a local file path the tester\n * can hand to Playwright's `locator.setInputFiles`. Symmetric to the recorder\n * version — the worker provides the same implementation to both.\n */\nexport interface TesterFileResolver {\n resolve(testDataKey: string): Promise<string>;\n}\n\ntype TesterOptions = {\n recoveryController?: RecoveryController;\n restoreStepStartForRepair?: StepStartRecoveryRestorer;\n commandPreprocessors?: readonly CommandPreprocessor[];\n provider?: ITestDataProvider;\n context?: ResolutionContext;\n onTestDataChange?: () => void;\n getApiFetchImpl?: () => typeof fetch;\n stepTraceChunkCallbacks?: StepTraceChunkCallbacks;\n /**\n * Used by the `setInputFiles` step handler to resolve `testDataKey` to a\n * downloaded local file path. When absent, `testDataKey`-bearing actions\n * throw so misconfiguration is loud.\n */\n fileResolver?: TesterFileResolver;\n /**\n * Session-scoped log of downloads captured by the `page.on(\"download\")`\n * interceptor. Read by the `verifyDownload` utility executor to assert\n * that a particular file appeared. When absent, `verifyDownload` throws\n * so misconfiguration is loud.\n *\n * Lives on Tester (not Recorder) because Tester is the shared seam used\n * by both the recording flow AND the execution-planner — putting the\n * interceptor here means planner-run scenarios capture downloads too,\n * which is required for `verifyDownload` steps to work in non-recorder\n * execution paths.\n */\n downloadStore?: import(\"./download-store\").DownloadStore;\n /**\n * Resolves the on-disk path the download interceptor should save a\n * download to. Required for the interceptor to actually run (paired with\n * `downloadStore`). Receives the browser-suggested filename and returns\n * an absolute path. Lets the caller (worker / planner) own FS layout.\n */\n getDownloadTargetPath?: (fileName: string) => string;\n};\n\ntype TesterTraceConfig =\n | {\n mode?: \"upload\";\n outputPath?: string;\n }\n | {\n mode: \"local\";\n outputPath: string;\n };\n\ntype TesterSession =\n | {\n type: \"recording\";\n }\n | {\n type: \"run\";\n reportId: string;\n testCaseId: string;\n token?: string;\n trace?: TesterTraceConfig;\n runWithAiRecovery?: boolean;\n };\n\ntype ExecuteStepsInput = {\n recorderSteps: {\n _id: string;\n step: Step;\n definition: StepDefinition;\n replayTelemetry?: StepReplayTelemetry;\n }[];\n resolutionContext?: ResolutionContext;\n session?: TesterSession;\n};\n\ntype ExecuteStepsOptions = {\n onStart?: () => Promise<void>;\n onFinish?: () => Promise<void>;\n onError?: (error: Error) => Promise<void>;\n abortController?: AbortController;\n};\n\ntype BrowserWithStopPendingOperations = Browser & {\n _stopPendingOperations?: (reason: string) => Promise<void>;\n};\n\ntype GetAPIClient = (sessionToken: string) => TesterApiClient;\n\nconst unconfiguredGetAPIClient: GetAPIClient = () => {\n throw new Error(\"Tester was created without an API client.\");\n};\nexport const toRegex = (\n value: string | RegExp,\n options?: {\n withSurroundingSpaces?: boolean;\n },\n): RegExp => {\n if (value instanceof RegExp) {\n return value;\n }\n // Escape special regex characters in the string\n let escapedValue = value.replace(/[/.*+?^${}()|[\\]\\\\\\-'\"<>]/g, \"\\\\$&\");\n if (options?.withSurroundingSpaces) {\n escapedValue = `\\\\s*${escapedValue}\\\\s*`;\n }\n return new RegExp(escapedValue);\n};\n\nfunction isFailedCustomCommandResult(\n value: unknown,\n): value is ExecutionResult & { success: false } {\n return (\n !!value &&\n typeof value === \"object\" &&\n \"success\" in value &&\n (value as { success?: unknown }).success === false\n );\n}\n\nexport class Tester {\n private pipeline: CommandPreprocessorPipeline;\n private dataProvider?: ITestDataProvider;\n private dataContext?: ResolutionContext;\n private readonly onTestDataChange?: () => void;\n private readonly getAPIClient: GetAPIClient;\n private readonly obs: AgentObservability;\n private readonly getApiFetchImpl?: () => typeof fetch;\n private stepTraceChunkCallbacks?: StepTraceChunkCallbacks;\n private readonly recoveryController: RecoveryController;\n private restoreStepStartForRepair?: StepStartRecoveryRestorer;\n private readonly fileResolver?: TesterFileResolver;\n private readonly downloadStore?: import(\"./download-store\").DownloadStore;\n private readonly getDownloadTargetPath?: (fileName: string) => string;\n // lastActivePage: Page | null = null;\n private pageList = new Array<Page>();\n private sessionToken: string = \"\";\n private activeBrowserContext: BrowserContext | null = null;\n private reportId = ulid();\n constructor(\n getAPIClient: GetAPIClient = unconfiguredGetAPIClient,\n observabilityOrOptions?: AgentObservabilityInput | TesterOptions,\n optionsArg: TesterOptions = {},\n ) {\n this.getAPIClient = getAPIClient;\n // If the second argument looks like TesterOptions (has a known TesterOptions field),\n // treat it as options and leave observability undefined.\n const isTesterOptions =\n observabilityOrOptions !== null &&\n typeof observabilityOrOptions === \"object\" &&\n (\"commandPreprocessors\" in observabilityOrOptions ||\n \"recoveryController\" in observabilityOrOptions ||\n \"restoreStepStartForRepair\" in observabilityOrOptions ||\n \"provider\" in observabilityOrOptions ||\n \"getApiFetchImpl\" in observabilityOrOptions ||\n \"stepTraceChunkCallbacks\" in observabilityOrOptions ||\n \"context\" in observabilityOrOptions ||\n \"onTestDataChange\" in observabilityOrOptions);\n const observability = isTesterOptions\n ? undefined\n : (observabilityOrOptions as AgentObservabilityInput | undefined);\n const options: TesterOptions = isTesterOptions\n ? (observabilityOrOptions as TesterOptions)\n : optionsArg;\n this.obs = resolveAgentObservability(observability);\n this.pipeline = new CommandPreprocessorPipeline(options.commandPreprocessors ?? []);\n this.dataProvider = options.provider;\n this.dataContext = options.context;\n this.onTestDataChange = options.onTestDataChange;\n this.getApiFetchImpl = options.getApiFetchImpl;\n this.stepTraceChunkCallbacks = options.stepTraceChunkCallbacks;\n this.recoveryController = options.recoveryController ?? new NoOpRecoveryController();\n this.restoreStepStartForRepair = options.restoreStepStartForRepair;\n this.fileResolver = options.fileResolver;\n this.downloadStore = options.downloadStore;\n this.getDownloadTargetPath = options.getDownloadTargetPath;\n }\n setContext(context: ResolutionContext) {\n this.dataContext = context;\n }\n setStepTraceChunkCallbacks(callbacks: StepTraceChunkCallbacks | undefined) {\n this.stepTraceChunkCallbacks = callbacks;\n }\n setStepStartRecoveryRestorer(restorer: StepStartRecoveryRestorer | undefined) {\n this.restoreStepStartForRepair = restorer;\n }\n get lastActivePage() {\n return this.pageList[this.pageList.length - 1] ?? null;\n }\n private toExecutionError(error: unknown): Error {\n return error instanceof Error ? error : new Error(String(error));\n }\n private toFailureResult(error: unknown) {\n const executionError = this.toExecutionError(error);\n return {\n type: \"failure\" as const,\n errorMessage: executionError.message,\n errorStack: executionError.stack,\n };\n }\n private summarizeErrorForExecutionLog(error: unknown) {\n if (error instanceof Error) {\n return {\n name: error.name,\n message: error.message,\n };\n }\n\n return {\n message: String(error),\n };\n }\n private summarizeSessionForExecutionLog(session?: TesterSession) {\n if (!session) {\n return { type: \"none\" as const };\n }\n if (session.type === \"recording\") {\n return { type: \"recording\" as const };\n }\n return {\n type: \"run\" as const,\n reportId: session.reportId,\n testCaseId: session.testCaseId,\n hasTrace: Boolean(session.trace),\n runWithAiRecovery: Boolean(session.runWithAiRecovery),\n };\n }\n private getCommandText(command: Command): string {\n switch (command.type) {\n case \"custom\":\n return `Custom`;\n case \"element.action\":\n case \"element.assertion\":\n return `${command.data.type} ${command.target.name ? `\"${command.target.name}\"` : \"\"}`.trim();\n case \"element.extract\":\n return `${command.data.type} ${command.target.name ? `\"${command.target.name}\"` : \"\"}`.trim();\n case \"page.action\":\n case \"page.assertion\":\n case \"page.extract\":\n return `${command.data.type}`.trim();\n case \"utility\":\n return `${command.data.type}`.trim();\n default:\n return `Unknown Command`;\n }\n }\n\n private async onCommandStart(\n command: Command,\n stepDefinitionId: string,\n session?: TesterSession,\n ): Promise<ExecutionStatusUpdateEventData> {\n this.obs.logger.log(\"Starting execution of command\", {\n commandId: command._id,\n commandType: command.type,\n stepDefinitionId,\n });\n if (session?.type === \"run\") {\n const cmdText = this.getCommandText(command);\n this.obs.logger.log(`Starting Playwright tracing group for command: ${cmdText}`);\n await this.activeBrowserContext!.tracing.group(cmdText);\n }\n if (command.config && command.config.preCommandDelay) {\n this.obs.logger.log(\n `Waiting for ${command.config.preCommandDelay}ms before executing command as per configuration...`,\n );\n await new Promise((resolve) => setTimeout(resolve, command.config!.preCommandDelay));\n }\n\n if ([\"element.action\", \"element.assertion\", \"element.extract\"].includes(command.type)) {\n // parameterize locators if target has paramterValue\n const elementCommand = command as ElementCommand;\n if (elementCommand.target.parameter && elementCommand.target.parameter.enabled) {\n const parameterValue = elementCommand.target.parameter.value;\n const parameterName = elementCommand.target.parameter.name;\n const paramterizedSelectors = elementCommand.target.uniqueSelectors.map((sel) => {\n let clonedSelector = JSON.parse(JSON.stringify(sel)) as UniqueSelector;\n\n switch (clonedSelector.type) {\n case \"pw.selectorString\": {\n clonedSelector.selectorString = clonedSelector.selectorString.replaceAll(\n parameterValue,\n `<${parameterName}>`,\n );\n break;\n }\n case \"bvt.selectorObject\": {\n throw new Error(\n \"Selector parameterization is not currently supported for selector objects. Please use selector strings with regex syntax for parameterization.\",\n );\n }\n default: {\n const _exhaustiveCheck: never = clonedSelector;\n throw new Error(\n `Unsupported selector type for parameterization: ${JSON.stringify(sel, null, 2)}`,\n );\n }\n }\n return clonedSelector;\n });\n const parameterizedTarget = {\n ...elementCommand.target,\n uniqueSelectors: paramterizedSelectors,\n };\n elementCommand.target = parameterizedTarget;\n }\n }\n\n return {\n type: \"command_started\",\n commandId: command._id,\n stepDefinitionId,\n startedAt: new Date(),\n };\n }\n private async onCommandPass(\n command: Command,\n stepDefinitionId: string,\n session?: TesterSession,\n recovery?: import(\"@blinq/schemas\").RecoveryMetadata,\n ): Promise<ExecutionStatusUpdateEventData> {\n this.obs.logger.log(`Command executed successfully: ${command}`);\n if (session?.type === \"run\") {\n this.obs.logger.log(`Ending Playwright tracing group for command: ${command}`);\n await this.activeBrowserContext!.tracing.groupEnd();\n }\n const completedAt = new Date();\n if (command.config && command.config.postCommandDelay) {\n this.obs.logger.log(\n `Waiting for ${command.config.postCommandDelay}ms after executing command as per configuration...`,\n );\n await new Promise((resolve) => setTimeout(resolve, command.config!.postCommandDelay));\n }\n\n return {\n type: \"command_finished\",\n commandId: command._id,\n stepDefinitionId,\n completedAt,\n result: {\n type: \"success\",\n },\n recovery,\n };\n }\n private async onCommandFail(\n command: Command,\n stepDefinitionId: string,\n error: unknown,\n session?: TesterSession,\n recovery?: import(\"@blinq/schemas\").RecoveryMetadata,\n ): Promise<ExecutionStatusUpdateEventData> {\n this.obs.logger.error(`Error executing command ${command._id}:`, {\n error: this.summarizeErrorForExecutionLog(error),\n });\n if (session?.type === \"run\") {\n this.obs.logger.log(`Ending Playwright tracing group for command: ${command._id}`);\n await this.activeBrowserContext!.tracing.groupEnd();\n }\n const completedAt = new Date();\n if (command.config && command.config.postCommandDelay) {\n this.obs.logger.log(\n `Waiting for ${command.config.postCommandDelay}ms after executing command as per configuration...`,\n );\n await new Promise((resolve) => setTimeout(resolve, command.config!.postCommandDelay));\n }\n\n return {\n type: \"command_finished\",\n commandId: command._id,\n stepDefinitionId,\n completedAt,\n result: this.toFailureResult(error),\n recovery,\n };\n }\n\n private async onStepStart(\n step: Step,\n session?: TesterSession,\n ): Promise<ExecutionStatusUpdateEventData> {\n // wait for page to be fully loaded\n\n this.obs.logger.log(`Starting execution of step: ${step.text}`);\n if (this.isRecordingReplaySession(session)) {\n try {\n await this.stepTraceChunkCallbacks?.onStart?.(this.activeBrowserContext!.tracing, step._id);\n } catch (err) {\n this.obs.logger.warn(\"startChunk failed\", err);\n }\n }\n if (session?.type === \"run\") {\n const stepName = `${step.keyword} ${step.text}`;\n this.obs.logger.log(`Starting Playwright tracing group for step: ${stepName}`);\n await this.activeBrowserContext!.tracing.group(stepName);\n }\n return {\n type: \"step_started\",\n stepId: step._id,\n };\n }\n private async onStepPass(\n stepId: string,\n session?: TesterSession,\n recovery?: import(\"@blinq/schemas\").RecoveryMetadata,\n ): Promise<ExecutionStatusUpdateEventData> {\n this.obs.logger.log(`Step executed successfully: ${stepId}`);\n if (session?.type === \"run\") {\n this.obs.logger.log(`Ending Playwright tracing group for step: ${stepId}`);\n await this.activeBrowserContext!.tracing.groupEnd();\n }\n if (this.isRecordingReplaySession(session)) {\n try {\n await this.stepTraceChunkCallbacks?.onStop?.(\n this.activeBrowserContext!.tracing,\n this.reportId,\n stepId,\n );\n } catch {\n // swallow chunk stop errors\n }\n }\n return {\n type: \"step_finished\",\n stepId,\n result: {\n type: \"success\",\n },\n recovery,\n };\n }\n private async onStepFail(\n stepId: string,\n error: unknown,\n session?: TesterSession,\n ): Promise<ExecutionStatusUpdateEventData> {\n this.obs.logger.error(`Error executing step ${stepId}:`, {\n error: this.summarizeErrorForExecutionLog(error),\n });\n if (session?.type === \"run\") {\n this.obs.logger.log(`Ending Playwright tracing group for step: ${stepId}`);\n await this.activeBrowserContext!.tracing.groupEnd();\n }\n if (this.isRecordingReplaySession(session)) {\n try {\n await this.stepTraceChunkCallbacks?.onStop?.(\n this.activeBrowserContext!.tracing,\n this.reportId,\n stepId,\n );\n } catch {\n // swallow chunk stop errors\n }\n }\n return {\n type: \"step_finished\",\n stepId,\n result: this.toFailureResult(error),\n };\n }\n private async onTestCaseStart(session?: TesterSession): Promise<ExecutionStartedEventData> {\n this.obs.logger.log(`Starting test case execution with session: ${JSON.stringify(session)}`);\n if (this.isRunSession(session)) {\n if (session.token) {\n this.sessionToken = session.token;\n }\n this.obs.logger.log(\n `Starting Playwright tracing for test case report (reportId: ${session.reportId}, testCaseId: ${session.testCaseId})...`,\n );\n await this.activeBrowserContext!.tracing.start({\n screenshots: true,\n snapshots: true,\n sources: true,\n });\n this.obs.logger.log(`Playwright tracing started for test case run.`);\n }\n return {\n type: \"execution_started\",\n };\n }\n private async getTempPathForTrace(): Promise<string> {\n return `/tmp/temp-trace-${Date.now()}.zip`;\n }\n private isRunSession(\n session?: TesterSession,\n ): session is Extract<TesterSession, { type: \"run\" }> {\n return session?.type === \"run\";\n }\n private isRecordingReplaySession(\n session?: TesterSession,\n ): session is Extract<TesterSession, { type: \"recording\" }> {\n return session?.type === \"recording\";\n }\n private shouldAttemptAiRecovery(session?: TesterSession): boolean {\n return (\n !session ||\n this.isRecordingReplaySession(session) ||\n (session.type === \"run\" && session.runWithAiRecovery === true)\n );\n }\n private isSupportedRepairContext(decision: RecoveryDecision, session?: TesterSession): boolean {\n if (decision.kind !== \"step-repair\") {\n return false;\n }\n if (this.isRecordingReplaySession(session) || !session) {\n return decision.repairContext === \"recorder-replay\";\n }\n return (\n session.type === \"run\" &&\n session.runWithAiRecovery === true &&\n (decision.repairContext === \"local-run\" ||\n decision.repairContext === \"execution-planner\" ||\n decision.repairContext === \"recorder-replay\")\n );\n }\n private shouldUploadTrace(session: Extract<TesterSession, { type: \"run\" }>): boolean {\n return (session.trace?.mode ?? \"upload\") === \"upload\";\n }\n private async resolveTraceOutputPath(\n session: Extract<TesterSession, { type: \"run\" }>,\n ): Promise<string> {\n return session.trace?.outputPath ?? this.getTempPathForTrace();\n }\n private ensureTraceOutputDirectory(path: string) {\n mkdirSync(dirname(path), { recursive: true });\n }\n private async stopTracingAndHandleTrace(session: Extract<TesterSession, { type: \"run\" }>) {\n let path: string;\n try {\n path = await this.resolveTraceOutputPath(session);\n this.ensureTraceOutputDirectory(path);\n if (!this.activeBrowserContext) {\n throw new Error(\"No active browser context is available to stop Playwright tracing.\");\n }\n await this.activeBrowserContext.tracing.stop({\n path,\n });\n } catch (traceError) {\n this.obs.logger.warn(\n `Trace capture failed for reportId: ${session.reportId}, testCaseId: ${session.testCaseId}. Continuing without failing execution result.`,\n traceError,\n );\n return;\n }\n try {\n const stat = statSync(path);\n this.obs.logger.log(\n `Trace file written path=${path} size=${stat.size} bytes mtime=${stat.mtime.toISOString()}`,\n );\n } catch (statError) {\n const e = statError instanceof Error ? statError : new Error(String(statError));\n this.obs.logger.warn(`Could not stat trace file at ${path}:`, {\n name: e.name,\n message: e.message,\n });\n }\n\n if (!this.shouldUploadTrace(session)) {\n this.obs.logger.log(\n `Playwright tracing stopped. Trace file saved locally at ${path}. Skipping upload by configuration.`,\n );\n return;\n }\n\n if (!session.token) {\n this.obs.logger.warn(\n `Trace upload skipped because no session token was provided for reportId: ${session.reportId}, testCaseId: ${session.testCaseId}.`,\n );\n return;\n }\n\n this.obs.logger.log(\n `Playwright tracing stopped. Trace file saved at ${path}. Uploading trace file...`,\n );\n this.obs.logger.log(\n `Uploading trace file for reportId: ${session.reportId}, testCaseId: ${session.testCaseId}...`,\n );\n const uploadSucceeded = await this.uploadTraceFile({ session, path });\n if (uploadSucceeded) {\n this.obs.logger.log(\n `Trace file uploaded successfully for reportId: ${session.reportId}, testCaseId: ${session.testCaseId}.`,\n );\n } else {\n this.obs.logger.warn(\n `Trace upload failed for reportId: ${session.reportId}, testCaseId: ${session.testCaseId}. Continuing without failing execution result.`,\n );\n }\n }\n private async onTestCasePass(session?: TesterSession): Promise<ExecutionCompletedEventData> {\n this.obs.logger.log(\n `Test case execution completed successfully with session: ${JSON.stringify(session)}`,\n );\n if (this.isRunSession(session)) {\n this.obs.logger.log(\n `Stopping Playwright tracing for reportId: ${session.reportId}, testCaseId: ${session.testCaseId}...`,\n );\n await this.stopTracingAndHandleTrace(session);\n }\n return {\n type: \"execution_completed\",\n result: {\n type: \"success\",\n },\n };\n }\n private async getPresignedUrlForTrace(\n input: Extract<TesterSession, { type: \"run\" }>,\n ): Promise<string> {\n if (!input.token) {\n throw new Error(\"Trace upload requires a run session with a bearer token\");\n }\n this.obs.logger.log(`Requesting presigned URL for trace upload with input:`, {\n reportId: input.reportId,\n testCaseId: input.testCaseId,\n projectId: this.dataContext?.projectId ?? \"\",\n });\n const presignedURL = await this.getAPIClient(\n this.sessionToken,\n ).presignedUrls.getPresignedUrlForTraceUpload.query({\n reportId: input.reportId,\n testCaseId: input.testCaseId,\n projectId: this.dataContext?.projectId ?? \"\",\n });\n this.obs.logger.log(`Received presigned URL for trace upload.`);\n return presignedURL;\n }\n private async wait(ms: number) {\n await new Promise<void>((resolve) => {\n setTimeout(resolve, ms);\n });\n }\n private async uploadFile(presignedUrl: string, filePath: string) {\n const fileData = readFileSync(filePath);\n this.obs.logger.log(\n `Uploading file from ${filePath} (size=${fileData.byteLength} bytes) via PUT`,\n );\n const response = await fetch(presignedUrl, {\n method: \"PUT\",\n headers: {\n \"Content-Type\": \"application/zip\",\n },\n body: fileData,\n });\n if (!response.ok) {\n throw new Error(\n `Failed to upload file. Status: ${response.status}: ${await response.text()}`,\n );\n }\n this.obs.logger.log(\n `Upload PUT completed status=${response.status} bytes=${fileData.byteLength}`,\n );\n }\n private async uploadTraceFile(input: {\n session: Extract<TesterSession, { type: \"run\" }>;\n path: string;\n }): Promise<boolean> {\n const maxAttempts = 3;\n const baseDelayMs = 250;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n try {\n const presignedUrl = await this.getPresignedUrlForTrace(input.session);\n await this.uploadFile(presignedUrl, input.path);\n this.obs.logger.log(`Trace file uploaded successfully on attempt ${attempt}`);\n return true;\n } catch (error) {\n if (attempt === maxAttempts) {\n this.obs.logger.error(`Trace upload failed after ${maxAttempts} attempts`, error);\n return false;\n }\n\n const delayMs = baseDelayMs * 2 ** (attempt - 1);\n this.obs.logger.warn(`Trace upload failed, retrying`, {\n attempt,\n maxAttempts,\n delayMs,\n error,\n });\n await this.wait(delayMs);\n }\n }\n\n return false;\n }\n private async onTestCaseFail(\n error: unknown,\n session?: TesterSession,\n ): Promise<ExecutionCompletedEventData> {\n this.obs.logger.error(\"Test case execution failed\", {\n session: this.summarizeSessionForExecutionLog(session),\n error: this.summarizeErrorForExecutionLog(error),\n });\n if (this.isRunSession(session)) {\n this.obs.logger.log(\n `Stopping Playwright tracing for reportId: ${session.reportId}, testCaseId: ${session.testCaseId}...`,\n );\n await this.stopTracingAndHandleTrace(session);\n }\n return {\n type: \"execution_completed\",\n result: this.toFailureResult(error),\n };\n }\n\n private isBrowserDerivedCommand(command: Command): boolean {\n return (\n command.type === \"custom\" ||\n command.type === \"element.action\" ||\n command.type === \"element.assertion\" ||\n command.type === \"element.extract\" ||\n ((command.type === \"page.action\" ||\n command.type === \"page.assertion\" ||\n command.type === \"page.extract\") &&\n !!command.target)\n );\n }\n\n private buildFailureContext(\n command: Command,\n recorderStep: ExecuteStepsInput[\"recorderSteps\"][number],\n stepDefinitionId: string,\n commandIndex: number,\n commandContext: CommandExecutionContext,\n error: Error,\n ): import(\"./recovery\").FailureContext {\n return {\n failedCommand: command,\n stepDefinitionId,\n stepId: recorderStep.step._id,\n stepIntent:\n recorderStep.step.text ||\n recorderStep.definition.displayName ||\n recorderStep.step.stepDefinitionId ||\n stepDefinitionId,\n failedCommandIndex: commandIndex,\n stepCommands: recorderStep.definition.commands,\n stepParameters: commandContext.stepParameters,\n resolutionContext: commandContext.resolutionContext,\n attemptedSelectors: this.getCommandRecoverySelectors(command),\n originalError: error,\n livePageUrl: this.lastActivePage?.url() ?? \"\",\n pageSnapshotRef: undefined,\n abortSignal: commandContext.abortSignal,\n };\n }\n\n private getCommandRecoverySelectors(command: Command): UniqueSelector[] {\n if (!(\"target\" in command) || !command.target) {\n return [];\n }\n\n const target = command.target as {\n uniqueSelectors?: UniqueSelector[];\n frames?: Array<{ uniqueSelectors?: UniqueSelector[] }>;\n };\n if (Array.isArray(target.uniqueSelectors)) {\n return target.uniqueSelectors;\n }\n\n for (let i = (target.frames?.length ?? 0) - 1; i >= 0; i--) {\n const frameSelectors = target.frames?.[i]?.uniqueSelectors;\n if (Array.isArray(frameSelectors) && frameSelectors.length > 0) {\n return frameSelectors;\n }\n }\n\n return [];\n }\n private getRecorderStepIndex(\n input: ExecuteStepsInput,\n recorderStep: ExecuteStepsInput[\"recorderSteps\"][number],\n ): number {\n const exactIndex = input.recorderSteps.findIndex((step) => step === recorderStep);\n if (exactIndex >= 0) {\n return exactIndex;\n }\n return input.recorderSteps.findIndex((step) => step._id === recorderStep._id);\n }\n private async *restoreAndReplayToStepStartForRepair(input: {\n executionInput: ExecuteStepsInput;\n options: ExecuteStepsOptions;\n targetStepIndex: number;\n restoreInput: StepStartRecoveryRestoreInput;\n }): AsyncGenerator<ExecutionStatusUpdateEventData, void, undefined> {\n if (!this.restoreStepStartForRepair) {\n throw new Error(\"Start-of-step restoration is not configured for whole-step repair.\");\n }\n\n await this.restoreStepStartForRepair(input.restoreInput);\n\n for (const priorStep of input.executionInput.recorderSteps.slice(0, input.targetStepIndex)) {\n yield* this.executeStep(priorStep, input.executionInput, input.options);\n }\n }\n private async *executeStepCommands(\n recorderStep: ExecuteStepsInput[\"recorderSteps\"][number],\n input: ExecuteStepsInput,\n options: ExecuteStepsOptions,\n ): AsyncGenerator<\n ExecutionStatusUpdateEventData,\n import(\"@blinq/schemas\").RecoveryMetadata | undefined,\n undefined\n > {\n const { stepParameters } = recorderStep.step;\n const stepDefinitionId = recorderStep.definition._id;\n const session = input.session;\n const commandContext: CommandExecutionContext = {\n stepParameters,\n resolutionContext: input.resolutionContext,\n abortSignal: options.abortController?.signal,\n };\n let stepRecovery: import(\"@blinq/schemas\").RecoveryMetadata | undefined;\n\n for (\n let commandIndex = 0;\n commandIndex < recorderStep.definition.commands.length;\n commandIndex++\n ) {\n const command = recorderStep.definition.commands[commandIndex];\n this.obs.logger.log(\"Executing command\", {\n commandId: command._id,\n commandType: command.type,\n });\n try {\n yield await this.onCommandStart(command, stepDefinitionId, session);\n const commandResult = await this.executeCommand({\n page: this.lastActivePage!,\n command,\n context: commandContext,\n });\n if (\n command.type === \"custom\" &&\n commandResult &&\n isFailedCustomCommandResult(commandResult)\n ) {\n throw new Error(commandResult.error || `Custom command \"${command._id}\" failed.`);\n }\n this.obs.logger.log(`Finished executing command: ${command}`);\n yield await this.onCommandPass(command, stepDefinitionId, session);\n } catch (error) {\n const executionError = this.toExecutionError(error);\n let terminalExecutionError = executionError;\n let failedRecoveryMeta: import(\"@blinq/schemas\").RecoveryMetadata | undefined;\n\n // Always analyze browser-derived failures for root cause so every failure\n // gets a human-readable explanation stored in the DB and surfaced in\n // notifications — regardless of whether AI recovery is enabled for this\n // session. Repair is only attempted when shouldAttemptAiRecovery is true.\n if (this.isBrowserDerivedCommand(command)) {\n // Emit the \"analyzing\" UI indicator only for sessions where recovery is\n // enabled — avoids surfacing AI-related noise for plain execution runs.\n if (this.shouldAttemptAiRecovery(session)) {\n yield {\n type: \"recovery_status\",\n recoveryAttemptId: crypto.randomUUID(),\n stepId: recorderStep.step._id,\n commandId: command._id,\n phase: \"analyzing\",\n message: \"Analyzing failure\",\n timestamp: new Date().toISOString(),\n };\n }\n\n const failureContext = this.buildFailureContext(\n command,\n recorderStep,\n stepDefinitionId,\n commandIndex,\n commandContext,\n executionError,\n );\n const { decision, artifact } =\n await this.recoveryController.analyzeAndPropose(failureContext);\n\n // All repair attempts and recovery_status events are guarded behind the\n // session recovery flag — analysis above always runs, repair does not.\n if (this.shouldAttemptAiRecovery(session)) {\n let emittedTerminalRecoveryStatus = false;\n\n if (\n decision.kind === \"step-repair\" &&\n this.isSupportedRepairContext(decision, session) &&\n decision.stepRepairPlan.type === \"whole-step\"\n ) {\n yield {\n type: \"recovery_status\",\n recoveryAttemptId: decision.recoveryAttemptId,\n stepId: recorderStep.step._id,\n commandId: command._id,\n phase: \"trying_fix\",\n message: decision.userFacingMessages.trying_fix,\n timestamp: new Date().toISOString(),\n };\n\n const appliedRepair = applyRepairPlan({\n originalCommands: recorderStep.definition.commands,\n plan: decision.stepRepairPlan,\n });\n if (appliedRepair.success) {\n try {\n const targetStepIndex = this.getRecorderStepIndex(input, recorderStep);\n if (targetStepIndex < 0) {\n throw new Error(\n `Cannot restore start-of-step state because step ${recorderStep._id} is not in the execution input.`,\n );\n }\n if (!this.restoreStepStartForRepair) {\n throw new Error(\n \"Start-of-step restoration is not configured for whole-step repair.\",\n );\n }\n\n yield {\n type: \"recovery_status\",\n recoveryAttemptId: decision.recoveryAttemptId,\n stepId: recorderStep.step._id,\n commandId: command._id,\n phase: \"checking_fix\",\n message:\n \"Restarting browser and replaying earlier steps before checking the fix\",\n timestamp: new Date().toISOString(),\n };\n\n yield* this.restoreAndReplayToStepStartForRepair({\n executionInput: input,\n options,\n targetStepIndex,\n restoreInput: {\n recoveryAttemptId: decision.recoveryAttemptId,\n stepId: recorderStep.step._id,\n stepDefinitionId,\n commandId: command._id,\n targetStepIndex,\n session,\n },\n });\n\n yield {\n type: \"recovery_status\",\n recoveryAttemptId: decision.recoveryAttemptId,\n stepId: recorderStep.step._id,\n commandId: command._id,\n phase: \"checking_fix\",\n message: decision.userFacingMessages.checking_fix,\n timestamp: new Date().toISOString(),\n };\n\n for (const validationCommand of appliedRepair.commands) {\n const validationResult = await this.executeCommand({\n page: this.lastActivePage!,\n command: validationCommand,\n context: commandContext,\n });\n if (\n validationCommand.type === \"custom\" &&\n validationResult &&\n isFailedCustomCommandResult(validationResult)\n ) {\n throw new Error(\n validationResult.error ||\n `Custom command \"${validationCommand._id}\" failed.`,\n );\n }\n }\n\n const persistResult = persistStepRepair({\n stepDefinition: recorderStep.definition,\n plan: decision.stepRepairPlan,\n });\n if (!persistResult.success) {\n throw new Error(persistResult.error);\n }\n\n const recoveryMeta: import(\"@blinq/schemas\").RecoveryMetadata = {\n recoveryAttemptId: decision.recoveryAttemptId,\n originalCommandId: command._id,\n stepId: recorderStep.step._id,\n originalErrorMessage: executionError.message,\n originalErrorStack: executionError.stack,\n rcaLabel: decision.rcaLabel,\n rcaConfidence: decision.rcaConfidence,\n rootCauseAnalysis: artifact?.rootCauseAnalysis,\n evidenceSignalNames: decision.evidenceSignalNames,\n labelEvidenceConflict: decision.labelEvidenceConflict,\n targetElementSnapshot: decision.targetElementSnapshot,\n actionVerb: decision.actionVerb,\n commandPatchSummary: \"Step repair replaced entire step\",\n retryOutcome: \"passed\",\n recoveredAt: new Date().toISOString(),\n healedLocatorPersistedAt: persistResult.persistedAt,\n stepDefinitionPatch: {\n stepDefinitionId,\n commands: persistResult.commands,\n changedCommandIds: persistResult.changedCommandIds,\n preservedCommandIds: persistResult.preservedCommandIds,\n persistedAt: persistResult.persistedAt,\n },\n };\n stepRecovery = recoveryMeta;\n\n yield {\n type: \"recovery_status\",\n recoveryAttemptId: decision.recoveryAttemptId,\n stepId: recorderStep.step._id,\n commandId: command._id,\n phase: \"fixed\",\n message: decision.userFacingMessages.fixed,\n timestamp: new Date().toISOString(),\n artifact: artifact ?? null,\n };\n emittedTerminalRecoveryStatus = true;\n\n this.obs.logger.log(`Recovered command ${command._id} with whole-step repair`);\n yield await this.onCommandPass(command, stepDefinitionId, session, recoveryMeta);\n commandIndex = recorderStep.definition.commands.length - 1;\n continue;\n } catch (retryError) {\n const retryExecutionError = this.toExecutionError(retryError);\n terminalExecutionError = new Error(\n `${decision.userFacingMessages.failed}. Retry failure: ${retryExecutionError.message}. Original failure: ${executionError.message}`,\n );\n this.obs.logger.error(\n `Whole-step repair retry failed for command ${command._id}:`,\n {\n recoveryAttemptId: decision.recoveryAttemptId,\n originalError: executionError.message,\n retryError: retryExecutionError.message,\n },\n );\n yield {\n type: \"recovery_status\",\n recoveryAttemptId: decision.recoveryAttemptId,\n stepId: recorderStep.step._id,\n commandId: command._id,\n phase: \"failed\",\n message: decision.userFacingMessages.failed,\n timestamp: new Date().toISOString(),\n artifact: artifact ?? null,\n };\n emittedTerminalRecoveryStatus = true;\n }\n } else {\n terminalExecutionError = new Error(\n `${decision.userFacingMessages.failed}. Repair application failure: ${appliedRepair.error}. Original failure: ${executionError.message}`,\n );\n yield {\n type: \"recovery_status\",\n recoveryAttemptId: decision.recoveryAttemptId,\n stepId: recorderStep.step._id,\n commandId: command._id,\n phase: \"failed\",\n message: decision.userFacingMessages.failed,\n timestamp: new Date().toISOString(),\n artifact: artifact ?? null,\n };\n emittedTerminalRecoveryStatus = true;\n }\n }\n\n if (\n decision.kind === \"step-repair\" &&\n this.isSupportedRepairContext(decision, session) &&\n (decision.stepRepairPlan.type === \"single-command\" ||\n decision.stepRepairPlan.type === \"command-operations\") &&\n (decision.stepRepairPlan.type === \"single-command\"\n ? decision.stepRepairPlan.commandIndex === commandIndex\n : decision.stepRepairPlan.operations.some((operation) => {\n if (operation.type === \"insert\") {\n return operation.insertIndex <= commandIndex;\n }\n return operation.commandIndex === commandIndex;\n }))\n ) {\n yield {\n type: \"recovery_status\",\n recoveryAttemptId: decision.recoveryAttemptId,\n stepId: recorderStep.step._id,\n commandId: command._id,\n phase: \"trying_fix\",\n message: decision.userFacingMessages.trying_fix,\n timestamp: new Date().toISOString(),\n };\n\n const appliedRepair = applyRepairPlan({\n originalCommands: recorderStep.definition.commands,\n plan: decision.stepRepairPlan,\n });\n if (appliedRepair.success) {\n try {\n yield {\n type: \"recovery_status\",\n recoveryAttemptId: decision.recoveryAttemptId,\n stepId: recorderStep.step._id,\n commandId: command._id,\n phase: \"checking_fix\",\n message: decision.userFacingMessages.checking_fix,\n timestamp: new Date().toISOString(),\n };\n\n const validationCommands =\n decision.stepRepairPlan.type === \"single-command\" &&\n !decision.stepRepairPlan.preserveSuffix\n ? appliedRepair.commands.slice(commandIndex, commandIndex + 1)\n : appliedRepair.commands.slice(commandIndex);\n\n for (const validationCommand of validationCommands) {\n const validationResult = await this.executeCommand({\n page: this.lastActivePage!,\n command: validationCommand,\n context: commandContext,\n });\n if (\n validationCommand.type === \"custom\" &&\n validationResult &&\n isFailedCustomCommandResult(validationResult)\n ) {\n throw new Error(\n validationResult.error ||\n `Custom command \"${validationCommand._id}\" failed.`,\n );\n }\n }\n\n const persistResult = persistStepRepair({\n stepDefinition: recorderStep.definition,\n plan: decision.stepRepairPlan,\n });\n if (!persistResult.success) {\n throw new Error(persistResult.error);\n }\n\n const recoveryMeta: import(\"@blinq/schemas\").RecoveryMetadata = {\n recoveryAttemptId: decision.recoveryAttemptId,\n originalCommandId: command._id,\n stepId: recorderStep.step._id,\n originalErrorMessage: executionError.message,\n originalErrorStack: executionError.stack,\n rcaLabel: decision.rcaLabel,\n rcaConfidence: decision.rcaConfidence,\n rootCauseAnalysis: artifact?.rootCauseAnalysis,\n evidenceSignalNames: decision.evidenceSignalNames,\n labelEvidenceConflict: decision.labelEvidenceConflict,\n targetElementSnapshot: decision.targetElementSnapshot,\n actionVerb: decision.actionVerb,\n commandPatchSummary: `Step repair replaced command ${commandIndex}`,\n retryOutcome: \"passed\",\n recoveredAt: new Date().toISOString(),\n healedLocatorPersistedAt: persistResult.persistedAt,\n stepDefinitionPatch: {\n stepDefinitionId,\n commands: persistResult.commands,\n changedCommandIds: persistResult.changedCommandIds,\n preservedCommandIds: persistResult.preservedCommandIds,\n persistedAt: persistResult.persistedAt,\n },\n };\n if (decision.stepRepairPlan.type === \"command-operations\") {\n recoveryMeta.commandPatchSummary = `Step repair applied command operations at command ${commandIndex}`;\n }\n stepRecovery = recoveryMeta;\n\n yield {\n type: \"recovery_status\",\n recoveryAttemptId: decision.recoveryAttemptId,\n stepId: recorderStep.step._id,\n commandId: command._id,\n phase: \"fixed\",\n message: decision.userFacingMessages.fixed,\n timestamp: new Date().toISOString(),\n artifact: artifact ?? null,\n };\n emittedTerminalRecoveryStatus = true;\n\n this.obs.logger.log(`Recovered command ${command._id} with step repair`);\n yield await this.onCommandPass(command, stepDefinitionId, session, recoveryMeta);\n if (\n decision.stepRepairPlan.type === \"command-operations\" ||\n decision.stepRepairPlan.preserveSuffix\n ) {\n commandIndex = recorderStep.definition.commands.length - 1;\n }\n continue;\n } catch (retryError) {\n const retryExecutionError = this.toExecutionError(retryError);\n terminalExecutionError = new Error(\n `${decision.userFacingMessages.failed}. Retry failure: ${retryExecutionError.message}. Original failure: ${executionError.message}`,\n );\n this.obs.logger.error(`Step repair retry failed for command ${command._id}:`, {\n recoveryAttemptId: decision.recoveryAttemptId,\n originalError: executionError.message,\n retryError: retryExecutionError.message,\n });\n yield {\n type: \"recovery_status\",\n recoveryAttemptId: decision.recoveryAttemptId,\n stepId: recorderStep.step._id,\n commandId: command._id,\n phase: \"failed\",\n message: decision.userFacingMessages.failed,\n timestamp: new Date().toISOString(),\n artifact: artifact ?? null,\n };\n emittedTerminalRecoveryStatus = true;\n }\n } else {\n yield {\n type: \"recovery_status\",\n recoveryAttemptId: decision.recoveryAttemptId,\n stepId: recorderStep.step._id,\n commandId: command._id,\n phase: \"failed\",\n message: decision.userFacingMessages.failed,\n timestamp: new Date().toISOString(),\n artifact: artifact ?? null,\n };\n emittedTerminalRecoveryStatus = true;\n }\n }\n\n if (!emittedTerminalRecoveryStatus) {\n yield {\n type: \"recovery_status\",\n recoveryAttemptId: decision.recoveryAttemptId,\n stepId: recorderStep.step._id,\n commandId: command._id,\n phase: \"failed\",\n message: decision.userFacingMessages.failed,\n timestamp: new Date().toISOString(),\n artifact: artifact ?? null,\n };\n }\n } // end if (shouldAttemptAiRecovery)\n\n if (artifact?.rootCauseAnalysis) {\n failedRecoveryMeta = {\n recoveryAttemptId: decision.recoveryAttemptId,\n originalCommandId: command._id,\n stepId: recorderStep.step._id,\n originalErrorMessage: terminalExecutionError.message,\n retryOutcome: \"failed\",\n rootCauseAnalysis: artifact.rootCauseAnalysis,\n rcaLabel: decision.rcaLabel,\n rcaConfidence: decision.rcaConfidence,\n evidenceSignalNames: decision.evidenceSignalNames,\n };\n }\n }\n\n yield await this.onCommandFail(\n command,\n stepDefinitionId,\n terminalExecutionError,\n session,\n failedRecoveryMeta,\n );\n throw terminalExecutionError;\n }\n }\n return stepRecovery;\n }\n private async *executeStep(\n recorderStep: ExecuteStepsInput[\"recorderSteps\"][number],\n input: ExecuteStepsInput,\n options: ExecuteStepsOptions,\n ): AsyncGenerator<ExecutionStatusUpdateEventData, void, undefined> {\n this.obs.logger.log(`Executing step: ${recorderStep.step.text}`);\n this.obs.logger.log(\"Step parameters\", {\n parameterCount: Object.keys(recorderStep.step.stepParameters ?? {}).length,\n parameterKeys: Object.keys(recorderStep.step.stepParameters ?? {}),\n });\n\n const session = input.session;\n\n try {\n yield await this.onStepStart(recorderStep.step, session);\n const stepDefinition = recorderStep.definition;\n if (!stepDefinition) {\n throw new Error(`Step definition not found for step: ${recorderStep.step.text}`);\n }\n\n const stepRecovery = yield* this.executeStepCommands(recorderStep, input, options);\n this.obs.logger.log(`Finished executing step:\\n${formatForLog(recorderStep.step.text)}`);\n yield await this.onStepPass(recorderStep._id, session, stepRecovery);\n } catch (error) {\n const executionError = this.toExecutionError(error);\n yield await this.onStepFail(recorderStep._id, executionError, session);\n throw executionError;\n }\n }\n async getProjectSettings(token?: string) {\n if (!token) {\n this.obs.logger.warn(`No token provided for getProjectSettings. Returning undefined.`);\n return undefined;\n }\n try {\n const settings = await this.getAPIClient(token).project.getProjectSettings.query({\n projectId: this.dataContext?.projectId ?? \"\",\n });\n this.obs.logger.log(`Fetched project settings successfully.`);\n return settings;\n } catch (error) {\n this.obs.logger.error(`Error fetching project settings:`, error);\n return undefined;\n }\n }\n /**\n * Best-effort wire-up of `page.on(\"download\")` for this page. No-op when\n * the runtime didn't configure a `downloadStore` + `getDownloadTargetPath`\n * — that's the normal state for unit tests and for any caller that\n * doesn't care about downloads. The verify-download executor will throw\n * its own clear error if those callers ever try to use a verifyDownload\n * step without the store being configured.\n */\n private maybeAttachDownloadInterceptor(page: Page) {\n if (!this.downloadStore || !this.getDownloadTargetPath) return;\n attachDownloadInterceptor(page, {\n store: this.downloadStore,\n getTargetPath: this.getDownloadTargetPath,\n logger: this.obs.logger,\n });\n }\n\n async launchBrowser(input: BrowserLaunchInput) {\n const token = input.token;\n const defaultConfig = await this.getProjectSettings(token);\n const browserType = browserTypesMap[input.browser.type];\n const browser = await browserType.launch({\n ...input.browser.options,\n });\n\n const defaultBrowserContextOptions = defaultConfig?.browerLaunchConfiguration?.browserContext;\n const browserContext = await browser.newContext({\n viewport: defaultBrowserContextOptions?.viewport ?? null,\n ...input.context.options,\n });\n browserContext.on(\"page\", (page) => {\n this.obs.logger.log(`New page opened: ${page.url()}`);\n this.pageList.push(page);\n this.obs.logger.log(`Current open pages count: ${this.pageList.length}`);\n // Hook the download interceptor here (not in Recorder) so the\n // planner-run path — which bypasses Recorder and uses Tester directly\n // — captures downloads too. The helper is idempotent (WeakSet of\n // hooked pages) so Recorder calling it again is harmless.\n this.maybeAttachDownloadInterceptor(page);\n page.on(\"close\", () => {\n this.obs.logger.log(`Page closed: ${page.url()}`);\n this.pageList = this.pageList.filter((p) => p !== page);\n this.obs.logger.log(`Current open pages count: ${this.pageList.length}`);\n });\n });\n this.activeBrowserContext = browserContext;\n return { browser, browserContext, browserType };\n }\n async connectBrowser(input: BrowserConnectInput) {\n const browserType = browserTypesMap[input.browser.type];\n const browser = await browserType.connect(\n input.browser.connection.wsEndpoint,\n input.browser.connection.options,\n );\n const browserContext = await browser.newContext({\n viewport: null,\n ...input.context.options,\n });\n browserContext.on(\"page\", (page) => {\n this.obs.logger.log(`New page opened: ${page.url()}`);\n this.pageList.push(page);\n this.obs.logger.log(`Current open pages count: ${this.pageList.length}`);\n // Hook the download interceptor here (not in Recorder) so the\n // planner-run path — which bypasses Recorder and uses Tester directly\n // — captures downloads too. The helper is idempotent (WeakSet of\n // hooked pages) so Recorder calling it again is harmless.\n this.maybeAttachDownloadInterceptor(page);\n page.on(\"close\", () => {\n this.obs.logger.log(`Page closed: ${page.url()}`);\n this.pageList = this.pageList.filter((p) => p !== page);\n this.obs.logger.log(`Current open pages count: ${this.pageList.length}`);\n });\n });\n this.activeBrowserContext = browserContext;\n return { browser, browserContext, browserType };\n }\n\n async openTab(\n browserContext: BrowserContext,\n config?: {\n url?: string;\n options?: {\n timeout?: number;\n };\n },\n ) {\n const page = await browserContext.newPage();\n // await page.setViewportSize({ width: 1280, height: 800 });\n if (config?.url) {\n await page.goto(config.url, config.options);\n }\n await page.waitForLoadState(\"load\", config?.options);\n return page;\n }\n async navigate(page: Page, url: string) {\n await page.goto(url);\n }\n async closeTab(page: Page) {\n await page.close();\n }\n async closeBrowser(browser: Browser) {\n this.obs.logger.log(`Closing browser: ${browser}`);\n await browser.close();\n }\n async executeScriptInBrowserContext<T extends unknown[], R extends any>(\n browserContext: BrowserContext,\n data: T,\n script: ((this: GlobalThis, ...args: UnboxedTuple<T>) => R) | string,\n ): Promise<\n {\n frame: Frame;\n result: R;\n }[]\n > {\n const pages = browserContext.pages();\n const result: {\n frame: Frame;\n result: R;\n }[] = [];\n // Frames that are detached or mid-navigation can leave `frame.evaluate`\n // pending forever. Cap each evaluation with a timeout and skip detached\n // frames so a single transient frame can't deadlock the whole call. This\n // is critical on the run-mode `onFinish` cleanup path: if this call hangs,\n // `onTestCasePass` never runs and the client never sees execution_completed.\n const PER_FRAME_EVAL_TIMEOUT_MS = 2_000;\n for (const page of pages) {\n const frames = page.frames();\n for (const frame of frames) {\n if (frame.isDetached()) {\n this.obs.logger.log(`Skipping detached frame: ${frame.url()}`);\n continue;\n }\n try {\n this.obs.logger.log(`Executing script in frame: ${frame.url()}`);\n const frameResult = await Promise.race([\n (frame.evaluate as EvaluateWithSpread)(script, ...data),\n new Promise<R>((_, reject) =>\n setTimeout(\n () =>\n reject(\n new Error(\n `executeScriptInBrowserContext timed out after ${PER_FRAME_EVAL_TIMEOUT_MS}ms for frame ${frame.url()}`,\n ),\n ),\n PER_FRAME_EVAL_TIMEOUT_MS,\n ),\n ),\n ]);\n result.push({ frame, result: frameResult });\n } catch (error) {\n this.obs.logger.error(`Error executing script in frame ${frame.url()}:`, error);\n }\n }\n }\n return result;\n }\n async executeScriptInPageContext<T extends unknown[], R extends any>(\n page: Page,\n data: T,\n script: ((this: GlobalThis, ...args: UnboxedTuple<T>) => R) | string,\n ): Promise<R> {\n return await (page.evaluate as EvaluateWithSpread)(script, ...data);\n }\n async executeScriptInFrameContext<T extends unknown[], R extends any>(\n frame: Frame,\n data: T,\n script: ((this: GlobalThis, ...args: UnboxedTuple<T>) => R) | string,\n ): Promise<R> {\n return await (frame.evaluate as EvaluateWithSpread)(script, ...data);\n }\n isFrameObject(frameScope: LocatorScope): frameScope is Frame {\n return \"url\" in frameScope && typeof frameScope.url === \"function\";\n }\n async getFrameObjectFromFrameScope(frameScope: FrameLocator | Frame): Promise<Frame> {\n if (this.isFrameObject(frameScope)) {\n return frameScope;\n }\n const owner = frameScope.owner();\n const elementHandle = await owner.elementHandle();\n const frame = await elementHandle?.contentFrame();\n return frame!;\n }\n async getFrame(\n scope: Page,\n frameElementDescriptors: ElementCommand[\"target\"][\"frames\"],\n ): Promise<LocatorScope> {\n if (!frameElementDescriptors || frameElementDescriptors.length === 0) {\n return scope.mainFrame();\n }\n let currentFrame: LocatorScope = scope.mainFrame();\n for (const frameDescriptor of frameElementDescriptors) {\n for (const selectorInfo of frameDescriptor.uniqueSelectors) {\n const { target } = this.getLocator(currentFrame, selectorInfo);\n\n try {\n const frameElementHandle = await target.elementHandle();\n if (!frameElementHandle) {\n throw new Error(\n `Could not find element for frame selector: ${JSON.stringify(selectorInfo)}`,\n );\n }\n // @ts-ignore\n const selector = target._selector;\n currentFrame = currentFrame.frameLocator(selector);\n } catch (error) {\n this.obs.logger.error(\n `Error finding frame element for selector ${JSON.stringify(selectorInfo)}:`,\n error,\n );\n continue;\n }\n }\n }\n return currentFrame;\n }\n getLocator(scope: LocatorScope, uniqueSelector: UniqueSelector) {\n switch (uniqueSelector.type) {\n case \"pw.selectorString\":\n return { target: scope.locator(uniqueSelector.selectorString + ` >> visible=true`) };\n case \"bvt.selectorObject\":\n throw new Error(`Selector type \"bvt.selectorObject\" is not yet supported in getLocator`);\n default:\n const _exhaustiveCheck: never = uniqueSelector;\n throw new Error(`Unsupported selector type: ${(_exhaustiveCheck as any).type}`);\n }\n }\n\n async executeElementAction(locator: Locator, action: ElementAction) {\n switch (action.type) {\n case \"click\": {\n await locator.click(action.options);\n break;\n }\n case \"hover\": {\n await locator.hover(action.options);\n break;\n }\n case \"fill\": {\n await locator.fill(action.value, action.options);\n break;\n }\n case \"selectOption\": {\n await locator.selectOption(action.value, action.options);\n break;\n }\n case \"setChecked\": {\n await locator.setChecked(action.checked, action.options);\n break;\n }\n case \"setInputFiles\": {\n if (action.testDataKey) {\n if (!this.fileResolver) {\n throw new Error(\n `setInputFiles step references test-data key \"${action.testDataKey}\" but no fileResolver is configured on the tester`,\n );\n }\n const localPath = await this.fileResolver.resolve(action.testDataKey);\n await locator.setInputFiles(localPath, action.options);\n } else {\n await locator.setInputFiles(action.files, action.options);\n }\n break;\n }\n case \"press\": {\n await locator.press(action.value, action.options);\n break;\n }\n default: {\n const _exhaustiveCheck: never = action;\n throw new Error(`Unsupported action: ${JSON.stringify(action, null, 2)}`);\n }\n }\n }\n\n async highlightElement(locator: Locator) {\n await locator.evaluate((el) => {\n const originalOutline = el.style.outline;\n el.setAttribute(\"data-bvt-current-outline\", originalOutline || \".\");\n console.log(\"Highlighting element with red outline:\", el);\n console.log(\"Original outline:\", el.getAttribute(\"data-bvt-current-outline\"));\n el.style.outline = \"2px solid red\";\n });\n }\n async unhighlightElement(locator: Locator) {\n await locator.evaluate((el) => {\n const originalOutline = el.getAttribute(\"data-bvt-current-outline\");\n if (originalOutline === null) {\n return;\n }\n const outline = originalOutline === \".\" ? \"\" : originalOutline.trim();\n console.log(\"Original outline to restore:\", outline);\n el.style.outline = outline;\n console.log(\"Unhighlighting element, restoring original outline:\", el);\n console.log(\"Restored outline:\", el.style.outline);\n el.removeAttribute(\"data-bvt-current-outline\");\n });\n }\n async executePageAction(page: Page, action: PageAction) {\n switch (action.type) {\n case \"navigate\": {\n await page.goto(action.url, action.options);\n break;\n }\n case \"close\": {\n await page.close(action.options);\n break;\n }\n case \"goBack\": {\n await page.goBack(action.options);\n break;\n }\n case \"goForward\": {\n await page.goForward(action.options);\n break;\n }\n case \"reload\": {\n await page.reload(action.options);\n break;\n }\n default: {\n const _exhaustiveCheck: never = action;\n throw new Error(`Unsupported page action: ${JSON.stringify(action, null, 2)}`);\n }\n }\n }\n async executeElementAssertion(\n locator: Locator,\n assertion: ElementAssertion,\n isNegativeAssertion = false,\n ) {\n try {\n await locator.hover();\n await new Promise((resolve) => setTimeout(resolve, 250)); // Small delay to allow hover effect to be visible\n } catch (error) {\n this.obs.logger.warn(`[Element Assertion] Locator hover (to highlight) failed : ` + error);\n }\n const asserter = isNegativeAssertion ? expect(locator).not : expect(locator);\n switch (assertion.type) {\n case \"toBeVisible\": {\n await asserter.toBeVisible(assertion.options);\n break;\n }\n case \"toHaveText\": {\n const value = getValueFromStringOrRegex(assertion.value);\n await asserter.toHaveText(value, assertion.options);\n break;\n }\n case \"toBeEnabled\": {\n await asserter.toBeEnabled(assertion.options);\n break;\n }\n case \"toBeDisabled\": {\n await asserter.toBeDisabled(assertion.options);\n break;\n }\n case \"toBeChecked\": {\n await asserter.toBeChecked(assertion.options);\n break;\n }\n case \"toBeUnchecked\": {\n await asserter.not.toBeChecked(assertion.options);\n break;\n }\n case \"toBeEditable\": {\n await asserter.toBeEditable(assertion.options);\n break;\n }\n case \"toBeHidden\": {\n await asserter.toBeHidden(assertion.options);\n break;\n }\n case \"toHaveAttribute\": {\n const value =\n assertion.value === undefined ? undefined : getValueFromStringOrRegex(assertion.value);\n if (value === undefined) {\n await asserter.toHaveAttribute(assertion.name, assertion.options);\n } else {\n await asserter.toHaveAttribute(assertion.name, value, assertion.options);\n }\n break;\n }\n case \"toHaveProperty\": {\n this.obs.logger.info(`Checking property \"${assertion.name}\"...`);\n if (assertion.value === undefined) {\n await asserter.toHaveJSProperty(assertion.name, assertion.options);\n } else {\n let value = getValueFromPrimitiveOrRegex(assertion.value);\n // if (typeof value === \"string\") {\n // value = toRegex(value, { withSurroundingSpaces: true });\n // }\n this.obs.logger.info(\n `Expected property value: \"${value}\" (timeout: ${assertion.options?.timeout ?? \"default\"}ms)`,\n );\n await asserter.toHaveJSProperty(assertion.name, value, assertion.options);\n }\n break;\n }\n case \"toHaveValue\": {\n const value = getValueFromStringOrRegex(assertion.value);\n await asserter.toHaveValue(value, assertion.options);\n break;\n }\n case \"toHaveClass\": {\n const value = getValueFromStringOrRegex(assertion.value);\n await asserter.toHaveClass(value, assertion.options);\n break;\n }\n case \"toHaveId\": {\n const value = getValueFromStringOrRegex(assertion.value);\n await asserter.toHaveId(value, assertion.options);\n break;\n }\n case \"toHaveCount\": {\n await asserter.toHaveCount(assertion.count, assertion.options);\n break;\n }\n case \"toExist\": {\n await asserter.toHaveCount(1, assertion.options);\n break;\n }\n default: {\n const _exhaustiveCheck: never = assertion;\n throw new Error(`Unsupported element assertion: ${JSON.stringify(assertion, null, 2)}`);\n }\n }\n }\n async executePageAssertion(\n page: Page,\n target: PageCommand[\"target\"],\n assertion: PageAssertion,\n isNegativeAssertion = false,\n ) {\n const asserter = isNegativeAssertion ? expect(page).not : expect(page);\n switch (assertion.type) {\n case \"toHaveURL\": {\n const value = getValueFromStringOrRegex(assertion.value);\n await asserter.toHaveURL(value, assertion.options);\n return;\n }\n case \"toHaveTitle\": {\n const value = getValueFromStringOrRegex(assertion.value);\n await asserter.toHaveTitle(value, assertion.options);\n return;\n }\n case \"toContainText\": {\n const value = getValueFromStringOrRegex(assertion.value);\n const regexValue = toRegex(value);\n const frameScope = await this.getFrame(page, target?.frames);\n const locator = frameScope.locator(`internal:text=${regexValue} >> visible=true`);\n\n if (isNegativeAssertion) {\n const frame = await this.getFrameObjectFromFrameScope(frameScope);\n this.obs.logger.info(\n // @ts-ignore\n `Checking for absence of element with text ${value} using \"${locator.first()?._selector}\" `,\n );\n this.obs.logger.info(\n `Waiting for page to load and stabilize before checking for absence of text to reduce flakiness...`,\n );\n // Wait on the page rather than the locator scope because nested iframe targets\n // are resolved via FrameLocator, which does not expose waitForLoadState.\n await frame.waitForLoadState(\"networkidle\", { timeout: 30_000 });\n this.obs.logger.info(\n `frame load detected. Waiting an additional 500ms for stabilization...`,\n );\n\n await frame.waitForTimeout(500); // Small delay to allow frame to stabilize\n this.obs.logger.info(\n `Checking for element with text \"${value}\" after page load and stabilization delay...`,\n );\n try {\n await expect(locator).toHaveCount(0, { timeout: 30_000, ...assertion.options });\n } catch (error) {\n throw new Error(\n `Element containing text \"${value}\" was found on the page, but it was expected not to be present.\\n${error}`,\n );\n }\n } else {\n try {\n this.obs.logger.info(\n // @ts-ignore\n `Checking for element with text ${value} using \"${locator.first()?._selector}\" `,\n );\n const textAsserter = expect(locator.first());\n await textAsserter.toBeAttached({ timeout: 30_000, ...assertion.options });\n\n this.obs.logger.info(\n `Element containing text \"${value}\" is present. Attempting to hover over all matching elements for visibility...`,\n );\n const startTime = Date.now();\n const allMatching = await locator.all();\n const endTime = Date.now();\n this.obs.logger.info(\n `Found ${allMatching.length} elements matching text \"${value}\" in ${endTime - startTime}ms. Hovering over them...`,\n );\n for (const el of allMatching) {\n try {\n this.obs.logger.info(\n // @ts-ignore\n `Hovering over element: \"${el._selector}\" to ensure visibility.`,\n );\n await el.hover({ timeout: 1_000 });\n await new Promise((resolve) => setTimeout(resolve, 250)); // Small delay to allow hover effect to be visible\n } catch (error) {\n this.obs.logger.warn(\n // @ts-ignore\n `Failed to hover over \"${el._selector}\": \\n` + error,\n );\n continue;\n }\n }\n return;\n } catch (error) {\n throw new Error(\n `No visible element containing text \"${value}\" was found on the page. Consider adding an appropriate delay above the step if the page is not yet loaded.\\n${error}`,\n );\n }\n }\n break;\n }\n default: {\n const _exhaustiveCheck: never = assertion;\n throw new Error(`Unsupported page assertion: ${JSON.stringify(assertion, null, 2)}`);\n }\n }\n }\n\n async executeUtilityCommand(\n data: UtilityCommand[\"data\"],\n page?: Page,\n context?: CommandExecutionContext,\n ) {\n switch (data.type) {\n case \"sleep\": {\n const duration = data.durationMs;\n await new Promise((resolve) => setTimeout(resolve, duration));\n return;\n }\n case \"saveSessionState\": {\n if (!page) {\n throw new Error(\"Save user session requires an active browser page.\");\n }\n if (!context?.testDataApi) {\n throw new Error(\"Save user session requires test data context.\");\n }\n\n const state = await captureSessionStorageState(page, {\n includeIndexedDB: data.includeIndexedDB,\n });\n await context.testDataApi.setRuntime(data.key, state.value, {\n dataType: \"sessionState\",\n });\n return;\n }\n case \"restoreSessionState\": {\n if (!page) {\n throw new Error(\"Restore user session requires an active browser page.\");\n }\n if (!context?.testDataApi) {\n throw new Error(\"Restore user session requires test data context.\");\n }\n\n const value = await context.testDataApi.getScoped(data.key);\n if (!value) {\n throw new Error(`Session state \"${data.key}\" was not found in test data.`);\n }\n\n await restoreSessionStorageState(page, value);\n return;\n }\n case \"verifyDownload\": {\n // Downloads are async — the click that triggered them may have just\n // finished, or may still be in flight. Poll the store for up to\n // `timeoutMs` so a slow download doesn't false-fail. Matching is\n // either exact-string or regex per the user's choice.\n if (!this.downloadStore) {\n throw new Error(\n \"verifyDownload requires a configured DownloadStore on the Tester. \" +\n \"This usually means the worker runtime wasn't wired up correctly.\",\n );\n }\n // Narrow once up-front; closures below capture these locals so TS\n // doesn't lose the discriminated-union narrowing across awaits.\n const exactName = data.fileName.type === \"string\" ? data.fileName.value : null;\n const regexPattern =\n data.fileName.type === \"regex\"\n ? new RegExp(data.fileName.source, data.fileName.flags)\n : null;\n const findMatch = () => {\n if (exactName !== null) {\n return this.downloadStore!.findByName(exactName);\n }\n return this.downloadStore!.findByRegex(regexPattern!);\n };\n const expected = exactName !== null ? `\"${exactName}\"` : `matching ${String(regexPattern)}`;\n\n const deadline = Date.now() + data.timeoutMs;\n let lastRejected: ReturnType<typeof this.downloadStore.list>[number] | undefined;\n while (true) {\n const hit = findMatch();\n if (hit) {\n if (hit.status.kind === \"success\") {\n this.obs.logger.info(\"verifyDownload passed\", {\n fileName: hit.fileName,\n localPath: hit.status.localPath,\n size: hit.status.size,\n });\n return;\n }\n // The download was observed but rejected — surface that\n // verbatim. The user sees \"file too large\" instead of a generic\n // \"not found\" timeout.\n lastRejected = hit;\n }\n if (Date.now() >= deadline) {\n if (lastRejected && lastRejected.status.kind === \"rejected_too_large\") {\n throw new Error(\n `Verify download: file ${expected} was downloaded but rejected for size ` +\n `(${lastRejected.status.observedBytes} bytes > ${lastRejected.status.capBytes} byte cap).`,\n );\n }\n const seen = this.downloadStore\n .list()\n .map((e) => e.fileName)\n .join(\", \");\n throw new Error(\n `Verify download: no file ${expected} appeared within ${data.timeoutMs}ms. ` +\n `Seen: ${seen || \"(none)\"}.`,\n );\n }\n await new Promise((resolve) => setTimeout(resolve, 200));\n }\n }\n default:\n const _exhaustiveCheck: never = data;\n throw new Error(`Unsupported utility command: ${JSON.stringify(data, null, 2)}`);\n }\n }\n\n async abortPendingOperations(page: Page, reason = \"Execution aborted\") {\n const browser = page.context().browser() as BrowserWithStopPendingOperations | null;\n const stopPendingOperations = browser?._stopPendingOperations;\n\n if (typeof stopPendingOperations !== \"function\") {\n this.obs.logger.warn(\n \"Active browser does not support stopping pending Playwright operations.\",\n );\n return;\n }\n\n // Playwright exposes pending-operation cancellation on an internal browser API.\n // We use it here so \"stop execution\" can interrupt in-flight custom commands.\n await stopPendingOperations.call(browser, reason);\n }\n\n async executeCommand(input: {\n page: Page;\n command: Command;\n parameters?: Record<string, string>;\n context?: CommandExecutionContext;\n }) {\n // Normalize context for backward compatibility\n const context: CommandExecutionContext = input.context ?? {\n stepParameters: input.parameters,\n };\n\n this.obs.logger.log(\n `Executing command \"${input.command._id}\" of type \"${input.command.type}\" with context:\\n${formatForLog(context)}`,\n );\n\n // Run preprocessing pipeline\n const preprocessedCommand = await this.pipeline.execute(input.command, context);\n\n this.obs.logger.log(\n `Preprocessed command \"${input.command._id}\":\\n${formatForLog(preprocessedCommand)}`,\n );\n\n // Fail fast on unresolved tokens\n if (hasUnresolvedTokens(preprocessedCommand)) {\n throw new Error(\n `Command \"${preprocessedCommand._id}\" (type: ${preprocessedCommand.type}) still contains unresolved test-data placeholders ({{ ... }}) after preprocessing.`,\n );\n }\n\n // Validate transformed command\n const command = CommandSchema.parse(preprocessedCommand);\n const commandMetricTags = {\n commandType: command.type,\n };\n const commandStartMs = Date.now();\n let commandStatus: \"success\" | \"failure\" | \"continued_on_failure\" = \"success\";\n\n this.obs.metrics.count(\"bvt_agent.command.execute.started.total\", 1, commandMetricTags);\n this.obs.logger.log(\"Prepared command for execution\", {\n commandId: command._id,\n commandType: command.type,\n });\n\n try {\n switch (command.type) {\n case \"page.action\":\n await this.executePageAction(input.page, command.data as PageAction);\n return;\n case \"page.assertion\": {\n const assertion = command as any;\n await this.executePageAssertion(\n input.page,\n assertion.target,\n assertion.data as PageAssertion,\n assertion.isNegativeAssertion,\n );\n return;\n }\n case \"element.action\": {\n const data = command.data;\n const target = command.target;\n const errors: Error[] = [];\n\n this.obs.logger.info(`Starting element action \"${data.type}\" on target \"${target.name}\"`);\n\n const chosenSelectorIndex = target.chosenSelectorIndex ?? 0;\n const selectorInfo = target.uniqueSelectors[chosenSelectorIndex];\n if (!selectorInfo) {\n throw new Error(\n `No selector found for target \"${target.name}\" at chosenSelectorIndex ${chosenSelectorIndex}. Available selectors: ${JSON.stringify(target.uniqueSelectors)}`,\n );\n }\n const frame = await this.getFrame(input.page, target.frames);\n const locator = this.getLocator(frame, selectorInfo);\n try {\n const dataWithDefaultTimeout = {\n ...data,\n options: {\n force: true, // Ensure force: true is set for the initially chosen selector to maximize chances of success\n timeout: 15_000, // Use a longer default timeout for the initially chosen selector\n ...data.options,\n },\n };\n this.obs.logger.info(\n `Executing action \"${data.type}\" using selector: ${JSON.stringify(selectorInfo)}`,\n );\n await this.executeElementAction(\n locator.target,\n dataWithDefaultTimeout as ElementAction,\n );\n this.obs.logger.info(\n `Action \"${data.type}\" completed successfully on target \"${target.name}\"`,\n );\n return; // If action succeeds, break out of the loop\n } catch (error) {\n this.obs.logger.warn(\n `Action \"${data.type}\" failed on selector \"${JSON.stringify(selectorInfo, null, 2)}\". Trying next selector if available...`,\n error,\n );\n errors.push(error instanceof Error ? error : new Error(String(error)));\n }\n\n for (let i = 0; i < target.uniqueSelectors.length; i++) {\n if (i === chosenSelectorIndex) {\n continue; // Skip the already tried selector\n }\n const selectorInfo = target.uniqueSelectors[i];\n const locator = this.getLocator(frame, selectorInfo);\n try {\n this.obs.logger.info(\n `Retrying action \"${data.type}\" using next selector: ${JSON.stringify(selectorInfo)}`,\n );\n const dataWithModifiedTimeout = {\n ...data,\n options: {\n ...data.options,\n force: true, // Ensure force: true is preserved for fallback selectors\n timeout: 1_000, // Use a shorter timeout for fallback selectors\n },\n };\n await this.executeElementAction(\n locator.target,\n dataWithModifiedTimeout as ElementAction,\n );\n this.obs.logger.info(\n `Action \"${data.type}\" completed successfully on target \"${target.name}\" with fallback selector`,\n );\n return; // If action succeeds, break out of the loop\n } catch (error) {\n this.obs.logger.warn(\n `Action \"${data.type}\" failed on fallback selector \"${JSON.stringify(selectorInfo, null, 2)}\". Trying next selector if available...`,\n error,\n );\n errors.push(error instanceof Error ? error : new Error(String(error)));\n }\n }\n throw new Error(\n `All selectors failed for element action \"${data.type}\". Errors: ${errors\n .map((e) => e.message)\n .join(\"; \")}`,\n );\n }\n case \"element.assertion\": {\n const assertion = command as any;\n const data = assertion.data;\n const target = assertion.target;\n const isNegativeAssertion = assertion.isNegativeAssertion;\n const errors: Error[] = [];\n\n this.obs.logger.info(\n `Starting element assertion \"${data.type}\" on target \"${target.name}\"`,\n );\n\n const chosenSelectorIndex = target.chosenSelectorIndex ?? 0;\n const selectorInfo = target.uniqueSelectors[chosenSelectorIndex];\n const frame = await this.getFrame(input.page, target.frames);\n const locator = this.getLocator(frame, selectorInfo);\n try {\n this.obs.logger.info(\n `Executing assertion \"${data.type}\" using selector: ${JSON.stringify(selectorInfo)}`,\n );\n const dataWithDefaultTimeout = {\n ...data,\n options: {\n timeout: 15_000, // Use a longer default timeout for the initially chosen selector\n ...data.options,\n },\n };\n await this.executeElementAssertion(\n locator.target,\n dataWithDefaultTimeout as ElementAssertion,\n isNegativeAssertion,\n );\n this.obs.logger.info(`Assertion \"${data.type}\" passed on target \"${target.name}\"`);\n return;\n } catch (error) {\n this.obs.logger.warn(\n `Assertion \"${data.type}\" failed on selector \"${JSON.stringify(selectorInfo, null, 2)}\". Trying next selector if available...`,\n error,\n );\n errors.push(error instanceof Error ? error : new Error(String(error)));\n }\n\n for (let i = 0; i < target.uniqueSelectors.length; i++) {\n if (i === chosenSelectorIndex) {\n continue; // Skip the already tried selector\n }\n const selectorInfo = target.uniqueSelectors[i];\n const locator = this.getLocator(frame, selectorInfo);\n const dataWithModifiedTimeout = {\n ...data,\n options: {\n ...data.options,\n timeout: 1_000, // Use a shorter timeout for fallback selectors\n },\n };\n try {\n this.obs.logger.info(\n `Retrying assertion \"${data.type}\" using next selector: ${JSON.stringify(selectorInfo)}`,\n );\n await this.executeElementAssertion(\n locator.target,\n dataWithModifiedTimeout as ElementAssertion,\n isNegativeAssertion,\n );\n this.obs.logger.info(\n `Assertion \"${data.type}\" passed on target \"${target.name}\" with fallback selector`,\n );\n return; // If assertion succeeds, break out of the loop\n } catch (error) {\n this.obs.logger.warn(\n `Assertion \"${data.type}\" failed on fallback selector \"${JSON.stringify(selectorInfo, null, 2)}\". Trying next selector if available...`,\n error,\n );\n errors.push(error instanceof Error ? error : new Error(String(error)));\n }\n }\n throw new Error(\n `All selectors failed for element assertion \"${data.type}\". Errors: ${errors\n .map((e) => e.message)\n .join(\"; \")}`,\n );\n }\n case \"element.extract\": {\n const extract = command.data;\n const target = command.target;\n const storageDetails = {\n dataKey: command.dataKey,\n dataType: command.dataType,\n };\n const errors: Error[] = [];\n\n this.obs.logger.info(\n `Starting element extraction \"${extract.type}\" on target \"${target.name}\"`,\n );\n\n const chosenSelectorIndex = target.chosenSelectorIndex ?? 0;\n const selectorInfo = target.uniqueSelectors[chosenSelectorIndex];\n if (!selectorInfo) {\n throw new Error(\n `No selector found for target \"${target.name}\" at chosenSelectorIndex ${chosenSelectorIndex}. Available selectors: ${JSON.stringify(target.uniqueSelectors)}`,\n );\n }\n\n const frame = await this.getFrame(input.page, target.frames);\n const locator = this.getLocator(frame, selectorInfo);\n try {\n this.obs.logger.info(\n `Executing extraction \"${extract.type}\" using selector: ${JSON.stringify(selectorInfo)}`,\n );\n await this.executeElementExtraction(\n locator.target,\n extract as ElementExtract,\n storageDetails,\n );\n this.obs.logger.info(\n `Extraction \"${extract.type}\" completed successfully on target \"${target.name}\"`,\n );\n return;\n } catch (error) {\n this.obs.logger.warn(\n `Extraction \"${extract.type}\" failed on selector \"${JSON.stringify(selectorInfo, null, 2)}\". Trying next selector if available...`,\n error,\n );\n errors.push(error instanceof Error ? error : new Error(String(error)));\n }\n\n for (let i = 0; i < target.uniqueSelectors.length; i++) {\n if (i === chosenSelectorIndex) {\n continue;\n }\n\n const fallbackSelectorInfo = target.uniqueSelectors[i];\n const fallbackLocator = this.getLocator(frame, fallbackSelectorInfo);\n try {\n this.obs.logger.info(\n `Retrying extraction \"${extract.type}\" using next selector: ${JSON.stringify(fallbackSelectorInfo)}`,\n );\n await this.executeElementExtraction(\n fallbackLocator.target,\n extract as ElementExtract,\n storageDetails,\n );\n this.obs.logger.info(\n `Extraction \"${extract.type}\" completed successfully on target \"${target.name}\" with fallback selector`,\n );\n return;\n } catch (error) {\n this.obs.logger.warn(\n `Extraction \"${extract.type}\" failed on fallback selector \"${JSON.stringify(fallbackSelectorInfo, null, 2)}\". Trying next selector if available...`,\n error,\n );\n errors.push(error instanceof Error ? error : new Error(String(error)));\n }\n }\n\n throw new Error(\n `All selectors failed for element extraction \"${extract.type}\". Errors: ${errors\n .map((e) => e.message)\n .join(\"; \")}`,\n );\n }\n case \"page.extract\":\n await this.executePageExtraction(input.page, command.data as PageExtract, {\n dataKey: command.dataKey,\n dataType: command.dataType,\n });\n return;\n case \"utility\":\n const data = command.data;\n await this.executeUtilityCommand(data, input.page, context);\n return;\n case \"custom\":\n return executePlaywrightCode({\n page: input.page,\n code: command.code,\n context: {\n stepId: command._id,\n variables: context.stepParameters ?? {},\n },\n testData: context.testDataApi,\n signal: context.abortSignal,\n // Inject the trace delegate the sandbox's `onCommandStart()` /\n // `onCommandPass()` helpers route through. AI-authored step\n // labels land as nested groups in the Playwright trace, under\n // Tester's own step + command groups. Calls are wrapped in\n // try/catch so they're harmless when tracing isn't active\n // (recording session).\n traceDelegate: {\n startGroup: async (name: string) => {\n try {\n await this.activeBrowserContext?.tracing.group(name);\n } catch {\n // Tracing not started — catch defensively so a missing\n // trace session never aborts the actual action.\n }\n },\n endGroup: async () => {\n try {\n await this.activeBrowserContext?.tracing.groupEnd();\n } catch {\n // same as above\n }\n },\n },\n });\n case \"api.action\": {\n const fetchImpl = this.getApiFetchImpl?.();\n const apiResponse = await executeApiRequest(command.data, {\n signal: context.abortSignal,\n ...(fetchImpl ? { fetchImpl } : {}),\n });\n context.lastApiResponse = apiResponse;\n\n if (command.data.saveAs && context.testDataApi) {\n await context.testDataApi.setRuntime(\n command.data.saveAs,\n serializeApiResponseForRuntime(apiResponse),\n { dataType: \"string\" },\n );\n }\n\n return apiResponse;\n }\n case \"api.assertion\": {\n if (!context.lastApiResponse) {\n throw new Error(\n \"API assertion requires a previous API request command in the same step.\",\n );\n }\n\n assertApiResponse(context.lastApiResponse, command.data);\n return;\n }\n default: {\n const _exhaustiveCheck: never = command;\n throw new Error(`Unsupported command type: ${JSON.stringify(command, null, 2)}`);\n }\n }\n } catch (error) {\n if (command.config) {\n const { continueOnFailure = false } = command.config;\n if (continueOnFailure) {\n commandStatus = \"continued_on_failure\";\n this.obs.logger.error(\n `Command \"${command._id}\" failed, but \"continueOnFailure\" is set to true. Continuing with test execution. Error:`,\n error,\n );\n return;\n }\n }\n commandStatus = \"failure\";\n throw error;\n } finally {\n this.obs.metrics.count(\"bvt_agent.command.execute.completed.total\", 1, {\n ...commandMetricTags,\n status: commandStatus,\n });\n this.obs.metrics.latency(\"bvt_agent.command.execute.duration\", commandStartMs, {\n ...commandMetricTags,\n status: commandStatus,\n });\n }\n }\n async extractToTestData(input: { key: string; value: string; dataType: TestDataType }) {\n if (!this.dataProvider || !this.dataContext) return;\n const api = new TestDataApi(this.dataProvider, this.dataContext, {\n onChange: this.onTestDataChange,\n logger: this.obs.logger,\n });\n await api.setRuntime(input.key, input.value, { dataType: input.dataType });\n }\n async executePageExtraction(\n page: Page,\n extract: PageExtract,\n storageDetails: ExtractStorageDetails,\n ) {\n switch (extract.type) {\n case \"title\": {\n const title = await page.title();\n await this.extractToTestData({\n key: storageDetails.dataKey,\n value: title,\n dataType: storageDetails.dataType,\n });\n return;\n }\n case \"url\": {\n const url = page.url();\n await this.extractToTestData({\n key: storageDetails.dataKey,\n value: url,\n dataType: storageDetails.dataType,\n });\n return;\n }\n default: {\n const _exhaustiveCheck: never = extract;\n throw new Error(`Unsupported page extraction type: ${JSON.stringify(extract, null, 2)}`);\n }\n }\n }\n async executeElementExtraction(\n locator: Locator,\n extract: ElementExtract,\n storageDetails: ExtractStorageDetails,\n ) {\n try {\n await locator.hover();\n await new Promise((resolve) => setTimeout(resolve, 250)); // Small delay to allow hover effect to be visible\n } catch (error) {\n this.obs.logger.warn(`[Element Assertion] Locator hover (to highlight) failed : ` + error);\n }\n switch (extract.type) {\n case \"text\": {\n const text = await locator.textContent();\n await this.extractToTestData({\n key: storageDetails.dataKey,\n value: text ?? \"\",\n dataType: storageDetails.dataType,\n });\n return;\n }\n case \"attribute\": {\n const attributeValue = await locator.getAttribute(extract.name);\n await this.extractToTestData({\n key: storageDetails.dataKey,\n value: attributeValue ?? \"\",\n dataType: storageDetails.dataType,\n });\n return;\n }\n case \"property\": {\n const propertyValue = await locator.evaluate((el, prop) => (el as any)[prop], extract.name);\n await this.extractToTestData({\n key: storageDetails.dataKey,\n value: String(propertyValue ?? \"\"),\n dataType: storageDetails.dataType,\n });\n return;\n }\n default: {\n const _exhaustiveCheck: never = extract;\n throw new Error(`Unsupported element extraction type: ${JSON.stringify(extract, null, 2)}`);\n }\n }\n }\n async *executeTestCase(\n input: ExecuteStepsInput,\n options: ExecuteStepsOptions,\n ): AsyncGenerator<\n ExecutionStatusUpdateEventData | ExecutionStartedEventData,\n ExecutionCompletedEventData,\n undefined\n > {\n const session = input.session;\n const testCaseStartMs = Date.now();\n let testCaseStatus: \"success\" | \"failure\" = \"success\";\n this.obs.metrics.count(\"bvt_agent.test_case.execute.started.total\", 1, {\n sessionType: session?.type ?? \"none\",\n });\n try {\n await options.onStart?.();\n this.obs.logger.log(\"Starting execution of steps with input\", {\n recorderStepCount: input.recorderSteps.length,\n hasResolutionContext: !!input.resolutionContext,\n });\n this.obs.logger.log(\n `Test case session info: ${session ? JSON.stringify(session) : \"No session\"}`,\n );\n yield await this.onTestCaseStart(session);\n for (const recorderStep of input.recorderSteps) {\n yield* this.executeStep(recorderStep, input, options);\n }\n await options.onFinish?.();\n this.obs.logger.log(\"Finished executing all steps\");\n // Wait for trace stop+upload BEFORE yielding execution_completed. If the\n // event fires earlier the client transitions to \"completed\" and the user\n // can click \"View Advanced Report\" before the trace.zip has landed in S3\n // — viewer fetches a 404 (or the previous run's trace) and renders an\n // empty timeline. Blocking on upload here keeps the UI in\n // \"Preparing run...\" until the artifact is available.\n if (this.isRunSession(session)) {\n this.obs.logger.log(\n `Stopping Playwright tracing for reportId: ${session.reportId}, testCaseId: ${session.testCaseId}...`,\n );\n await this.stopTracingAndHandleTrace(session);\n }\n this.obs.logger.log(\n `Test case execution completed successfully with session: ${JSON.stringify(session)}`,\n );\n const successEvent: ExecutionCompletedEventData = {\n type: \"execution_completed\",\n result: { type: \"success\" },\n };\n return successEvent;\n } catch (error) {\n const executionError = this.toExecutionError(error);\n testCaseStatus = \"failure\";\n await options.onError?.(executionError);\n this.obs.logger.error(\"Test case execution failed\", {\n session: this.summarizeSessionForExecutionLog(session),\n error: this.summarizeErrorForExecutionLog(executionError),\n });\n if (this.isRunSession(session)) {\n this.obs.logger.log(\n `Stopping Playwright tracing for reportId: ${session.reportId}, testCaseId: ${session.testCaseId}...`,\n );\n await this.stopTracingAndHandleTrace(session);\n }\n const failureEvent: ExecutionCompletedEventData = {\n type: \"execution_completed\",\n result: this.toFailureResult(executionError),\n };\n return failureEvent;\n } finally {\n this.obs.metrics.count(\"bvt_agent.test_case.execute.completed.total\", 1, {\n sessionType: session?.type ?? \"none\",\n status: testCaseStatus,\n });\n this.obs.metrics.latency(\"bvt_agent.test_case.execute.duration\", testCaseStartMs, {\n sessionType: session?.type ?? \"none\",\n status: testCaseStatus,\n });\n }\n }\n\n async *executeSteps(\n input: ExecuteStepsInput,\n options: ExecuteStepsOptions,\n ): AsyncGenerator<\n ExecutionStatusUpdateEventData | ExecutionStartedEventData,\n ExecutionCompletedEventData,\n undefined\n > {\n return yield* this.executeTestCase(input, options);\n }\n async getCurrentPageProperties() {\n const page = this.lastActivePage;\n if (!page) {\n throw new Error(\"No active page available to get properties from.\");\n }\n const url = page.url();\n const title = await page.title();\n return { url, title };\n }\n}\n","import type { Command } from \"@blinq/schemas\";\nimport type { CommandPreprocessor, CommandExecutionContext } from \"./command-preprocessor\";\n\nconst STEP_PARAMETER_TOKEN_RE = /<([A-Za-z_]\\w*)>/g;\n\nexport function createStepParameterPreprocessor(): CommandPreprocessor {\n return async (command: Command, context: CommandExecutionContext): Promise<Command> => {\n const params = context.stepParameters ?? {};\n const fallbackParameterValue =\n command.type === \"element.action\" ||\n command.type === \"element.assertion\" ||\n command.type === \"element.extract\"\n ? command.target.parameter?.value\n : undefined;\n\n const resolveParams = (val: any): any => {\n if (typeof val === \"string\") {\n return val.replace(STEP_PARAMETER_TOKEN_RE, (match, paramName) => {\n if (paramName === \"parameterValue\" && fallbackParameterValue !== undefined) {\n return fallbackParameterValue;\n }\n\n if (!(paramName in params)) {\n console.warn(\n `Step parameter \"<${paramName}>\" not found for command \"${command._id}\"; using literal`,\n );\n return match;\n }\n return params[paramName];\n });\n }\n\n if (Array.isArray(val)) {\n return val.map(resolveParams);\n }\n\n if (val !== null && typeof val === \"object\") {\n const result: Record<string, any> = {};\n for (const [k, v] of Object.entries(val)) {\n result[k] = resolveParams(v);\n }\n return result;\n }\n\n return val;\n };\n\n return resolveParams(command);\n };\n}\n","import type { CommandPreprocessor } from \"./command-preprocessor\";\nimport type { DataResolver } from \"@blinq/data-resolver\";\n\nexport function createDataResolverPreprocessor(resolver: DataResolver): CommandPreprocessor {\n return async (command, context) => {\n if (!context.resolutionContext) {\n return command;\n }\n\n // If this is a custom command whose code field contains no {{...}} tokens,\n // skip resolving the code string. This prevents the data-resolver from\n // incorrectly normalizing legitimate ${...} template expressions that the\n // ai-chat preprocessor has already rewritten into backtick templates.\n // Other fields of the command are still resolved as usual.\n if (\n command.type === \"custom\" &&\n typeof command.code === \"string\" &&\n !command.code.includes(\"{{\")\n ) {\n const { code, ...rest } = command;\n const resolvedRest = await resolver.resolveObject(rest, context.resolutionContext);\n return { ...resolvedRest, code } as typeof command;\n }\n\n return resolver.resolveObject(command, context.resolutionContext);\n };\n}\n","import type { LogContext, LogEntry, LogLevel } from \"./types.js\";\nimport type { ObservabilityTransport } from \"./transports/transport.js\";\n\nfunction extractEventName(metadata: Record<string, unknown> | undefined): {\n eventName?: string;\n sanitizedMetadata?: Record<string, unknown>;\n} {\n if (!metadata) {\n return {};\n }\n\n const rawEventName = metadata.eventName;\n if (typeof rawEventName !== \"string\" || rawEventName.trim().length === 0) {\n return { sanitizedMetadata: metadata };\n }\n\n const { eventName: _eventName, ...restMetadata } = metadata;\n return {\n eventName: rawEventName,\n sanitizedMetadata: Object.keys(restMetadata).length > 0 ? restMetadata : undefined,\n };\n}\n\nexport class Logger {\n constructor(\n private readonly transports: readonly ObservabilityTransport[],\n private readonly defaultContext: LogContext = { system: true },\n ) {}\n\n debug(message: string, metadata?: Record<string, unknown>, context?: LogContext): void {\n this.emit(\"debug\", message, metadata, context);\n }\n\n info(message: string, metadata?: Record<string, unknown>, context?: LogContext): void {\n this.emit(\"info\", message, metadata, context);\n }\n\n warn(message: string, metadata?: Record<string, unknown>, context?: LogContext): void {\n this.emit(\"warn\", message, metadata, context);\n }\n\n error(message: string, metadata?: Record<string, unknown>, context?: LogContext): void {\n this.emit(\"error\", message, metadata, context);\n }\n\n /** Returns a new Logger instance bound to the given context. */\n withContext(context: LogContext): Logger {\n return new Logger(this.transports, context);\n }\n\n private emit(\n level: LogLevel,\n message: string,\n metadata: Record<string, unknown> | undefined,\n context: LogContext | undefined,\n ): void {\n const { eventName, sanitizedMetadata } = extractEventName(metadata);\n const entry: LogEntry = {\n level,\n message,\n ...(eventName ? { eventName } : {}),\n context: context ?? this.defaultContext,\n timestamp: new Date(),\n metadata: sanitizedMetadata,\n };\n\n for (const transport of this.transports) {\n try {\n const result = transport.log?.(entry);\n if (result instanceof Promise) {\n result.catch((err: unknown) => {\n console.error(`[observability] Transport \"${transport.name}\" log() failed:`, err);\n });\n }\n } catch (err) {\n console.error(`[observability] Transport \"${transport.name}\" log() threw:`, err);\n }\n }\n }\n}\n","export type SerializedError = Record<string, unknown>;\n\nconst DEFAULT_MAX_DEPTH = 8;\nconst DEFAULT_MAX_ARRAY_LENGTH = 100;\nconst DEFAULT_MAX_OBJECT_KEYS = 100;\nconst DEFAULT_MAX_STRING_LENGTH = Number.MAX_SAFE_INTEGER;\n\ninterface SerializationState {\n readonly seen: WeakSet<object>;\n readonly maxDepth: number;\n readonly maxArrayLength: number;\n readonly maxObjectKeys: number;\n readonly maxStringLength: number;\n}\n\ninterface SerializationOptions {\n readonly maxDepth?: number;\n readonly maxArrayLength?: number;\n readonly maxObjectKeys?: number;\n readonly maxStringLength?: number;\n}\n\nconst ERROR_FIELD_NAMES = [\"name\", \"message\", \"code\", \"status\", \"statusCode\", \"stack\"] as const;\nconst ERROR_RESERVED_FIELDS = new Set<string>([...ERROR_FIELD_NAMES, \"cause\", \"errors\", \"details\"]);\n\nfunction safeString(value: unknown): string {\n try {\n return String(value);\n } catch {\n return \"[Unstringifiable]\";\n }\n}\n\nfunction createSerializationState(options: SerializationOptions = {}): SerializationState {\n return {\n seen: new WeakSet<object>(),\n maxDepth: options.maxDepth ?? DEFAULT_MAX_DEPTH,\n maxArrayLength: options.maxArrayLength ?? DEFAULT_MAX_ARRAY_LENGTH,\n maxObjectKeys: options.maxObjectKeys ?? DEFAULT_MAX_OBJECT_KEYS,\n maxStringLength: options.maxStringLength ?? DEFAULT_MAX_STRING_LENGTH,\n };\n}\n\nfunction truncateString(value: string, state: SerializationState): string {\n if (value.length <= state.maxStringLength) {\n return value;\n }\n\n return `${value.slice(0, state.maxStringLength)}...[truncated ${value.length - state.maxStringLength} chars]`;\n}\n\nfunction readProperty(record: Record<string, unknown>, key: string): unknown {\n try {\n return record[key];\n } catch (error) {\n return `[Unreadable property: ${error instanceof Error ? error.message : safeString(error)}]`;\n }\n}\n\nfunction hasOwnProperty(value: object, key: string): boolean {\n return Object.prototype.hasOwnProperty.call(value, key);\n}\n\nfunction tryCustomToString(value: object): string | undefined {\n const toStringMethod = (value as { toString?: unknown }).toString;\n if (\n typeof toStringMethod !== \"function\" ||\n toStringMethod === Object.prototype.toString ||\n toStringMethod === Error.prototype.toString\n ) {\n return undefined;\n }\n\n try {\n const result = toStringMethod.call(value);\n return typeof result === \"string\" ? result : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction toSafeValue(value: unknown, state: SerializationState, depth = 0): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n\n if (typeof value === \"string\") {\n return truncateString(value, state);\n }\n\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return value;\n }\n\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n\n if (typeof value === \"symbol\") {\n return value.toString();\n }\n\n if (typeof value === \"function\") {\n return `[Function ${(value as { name?: string }).name || \"anonymous\"}]`;\n }\n\n if (value instanceof Date) {\n return Number.isNaN(value.getTime()) ? value.toString() : value.toISOString();\n }\n\n if (value instanceof Error) {\n return serializeErrorInternal(value, state, depth);\n }\n\n if (typeof value !== \"object\") {\n return safeString(value);\n }\n\n if (state.seen.has(value)) {\n return \"[Circular]\";\n }\n\n if (depth >= state.maxDepth) {\n return \"[MaxDepth]\";\n }\n\n state.seen.add(value);\n try {\n if (Array.isArray(value)) {\n const items = value\n .slice(0, state.maxArrayLength)\n .map((item) => toSafeValue(item, state, depth + 1));\n if (value.length > state.maxArrayLength) {\n items.push(`[Truncated ${value.length - state.maxArrayLength} items]`);\n }\n return items;\n }\n\n if (value instanceof Map) {\n return {\n type: \"Map\",\n entries: toSafeValue(Array.from(value.entries()), state, depth + 1),\n };\n }\n\n if (value instanceof Set) {\n return {\n type: \"Set\",\n values: toSafeValue(Array.from(value.values()), state, depth + 1),\n };\n }\n\n const record = value as Record<string, unknown>;\n const output: Record<string, unknown> = {};\n const customToString = tryCustomToString(value);\n if (customToString) {\n output.stringValue = truncateString(customToString, state);\n }\n\n const keys = Object.keys(record);\n for (const key of keys.slice(0, state.maxObjectKeys)) {\n output[key] = toSafeValue(readProperty(record, key), state, depth + 1);\n }\n\n if (keys.length > state.maxObjectKeys) {\n output.__truncatedKeys = keys.length - state.maxObjectKeys;\n }\n\n return output;\n } finally {\n state.seen.delete(value);\n }\n}\n\nfunction copyErrorField(\n output: SerializedError,\n input: Record<string, unknown>,\n fieldName: (typeof ERROR_FIELD_NAMES)[number],\n state: SerializationState,\n depth: number,\n): void {\n if (!hasOwnProperty(input, fieldName)) {\n return;\n }\n\n const value = readProperty(input, fieldName);\n if (value !== undefined) {\n output[fieldName] = toSafeValue(value, state, depth + 1);\n }\n}\n\nfunction serializeErrorInternal(\n error: unknown,\n state: SerializationState,\n depth = 0,\n): SerializedError {\n if (error === null || error === undefined) {\n return { message: safeString(error) };\n }\n\n if (typeof error !== \"object\") {\n return { message: safeString(error) };\n }\n\n if (state.seen.has(error)) {\n return { message: \"[Circular]\" };\n }\n\n state.seen.add(error);\n try {\n const record = error as Record<string, unknown>;\n const output: SerializedError = {};\n\n if (error instanceof Error) {\n output.name = error.name;\n output.message = error.message;\n if (error.stack) {\n output.stack = truncateString(error.stack, state);\n }\n }\n\n for (const fieldName of ERROR_FIELD_NAMES) {\n copyErrorField(output, record, fieldName, state, depth);\n }\n\n const customToString = tryCustomToString(error);\n if (customToString) {\n output.stringValue = truncateString(customToString, state);\n }\n\n if (hasOwnProperty(record, \"details\")) {\n output.details = toSafeValue(readProperty(record, \"details\"), state, depth + 1);\n }\n\n if (hasOwnProperty(record, \"cause\")) {\n output.cause = serializeErrorInternal(readProperty(record, \"cause\"), state, depth + 1);\n }\n\n if (hasOwnProperty(record, \"errors\")) {\n output.errors = toSafeValue(readProperty(record, \"errors\"), state, depth + 1);\n }\n\n for (const key of Object.keys(record).slice(0, state.maxObjectKeys)) {\n if (ERROR_RESERVED_FIELDS.has(key) || key in output) {\n continue;\n }\n output[key] = toSafeValue(readProperty(record, key), state, depth + 1);\n }\n\n if (Object.keys(output).length === 0) {\n return {\n message: safeString(error),\n value: toSafeValue(error, state, depth + 1),\n };\n }\n\n return output;\n } finally {\n state.seen.delete(error);\n }\n}\n\nexport function serializeErrorLike(\n error: unknown,\n options: SerializationOptions = {},\n): SerializedError {\n return serializeErrorInternal(error, createSerializationState(options));\n}\n\nexport function toJsonSafeValue(value: unknown, options: SerializationOptions = {}): unknown {\n return toSafeValue(value, createSerializationState(options));\n}\n\nexport function safeJsonStringify(value: unknown, space?: number): string {\n try {\n return JSON.stringify(toJsonSafeValue(value), null, space) ?? \"undefined\";\n } catch (error) {\n return JSON.stringify({\n serializationError: error instanceof Error ? error.message : safeString(error),\n fallback: safeString(value),\n });\n }\n}\n","/**\n * Shared types and interfaces for the data-resolver package.\n *\n * These types define the contracts between the resolver, scope manager,\n * evaluator plugins, and data providers.\n */\n\nimport type {\n ResolutionContext,\n TestDataEntry,\n TestDataSource,\n TestDataType,\n} from \"@blinq/schemas\";\nimport type { ScopeType } from \"@blinq/schemas\";\nimport type { Logger } from \"@blinq/observability\";\n\n// ── Evaluator Plugin Interface ─────────────────────────────────────────────\n\n/**\n * Interface for expression evaluator plugins.\n * Each evaluator handles a specific prefix (e.g. \"faker:\", \"js:\", \"date:\").\n */\nexport interface IEvaluator {\n /** The prefix this evaluator handles (e.g. \"faker\", \"js\", \"date\"). */\n readonly prefix: string;\n\n /**\n * Evaluate an expression and return the resolved string value.\n *\n * @param expression - The expression after the prefix (e.g. \"person.firstName\" for \"faker:person.firstName\")\n * @param scopeValues - Current scope values available for variable substitution\n * @returns The resolved string value\n */\n evaluate(expression: string, scopeValues: Record<string, string>): Promise<string>;\n}\n\n// ── Data Provider Interface ────────────────────────────────────────────────\n\n/**\n * Abstraction over the test data storage backend.\n * - Server/Agent: MongoDB-backed\n * - Browser/UI: In-memory, hydrated from API calls\n * - Tests: Simple Map-based mock\n */\nexport interface ITestDataProvider {\n /** Get all entries matching the current resolution context, ordered by scope precedence. */\n getByScope(context: ResolutionContext): Promise<TestDataEntry[]>;\n\n /** Get a specific entry by key within the given context. */\n getByKey(key: string, context: ResolutionContext): Promise<TestDataEntry | null>;\n\n /** Insert or update a test data entry. */\n upsert(entry: Omit<TestDataEntry, \"_id\" | \"createdAt\" | \"updatedAt\">): Promise<TestDataEntry>;\n\n /** Delete a test data entry by ID. */\n delete(id: string): Promise<void>;\n\n /** Find entries whose value matches the given string (for auto-detection). */\n findByValue(value: string, context: ResolutionContext): Promise<TestDataEntry[]>;\n\n /** Delete all entries matching a specific scope within a context. */\n clearScope(scopeType: ScopeType, context: ResolutionContext): Promise<void>;\n}\n\n// ── Scoped Store Interface (Gauge-inspired) ────────────────────────────────\n\n/**\n * Named store interface — simple put/get API like Gauge's DataStoreFactory.\n * Each instance is bound to a specific scope and context.\n */\nexport interface ScopedStore {\n put(key: string, value: string): Promise<void>;\n get(key: string): Promise<string | null>;\n getAll(): Promise<Record<string, string>>;\n clear(): Promise<void>;\n}\n\n// ── Scoped Value (result of a lookup) ──────────────────────────────────────\n\nexport interface ScopedValue {\n key: string;\n value: string;\n scope: ScopeType;\n source: TestDataSource;\n dataType: TestDataType;\n /** If the value was found via system env override, this is true. */\n fromSystemEnv: boolean;\n}\n\n// ── Scanner Token ──────────────────────────────────────────────────────────\n\n/**\n * Represents a parsed `{{ ... }}` token found in an input string.\n */\nexport interface Token {\n /** The full matched text including delimiters, e.g. \"{{faker:person.firstName}}\" */\n raw: string;\n /** The inner expression without delimiters, e.g. \"faker:person.firstName\" */\n expression: string;\n /**\n * The evaluator prefix if present, e.g. \"faker\".\n * `null` means use the default literal/key lookup.\n */\n prefix: string | null;\n /**\n * The body after the prefix, e.g. \"person.firstName\".\n * If no prefix, this equals the full expression.\n */\n body: string;\n /** Start index in the original string. */\n start: number;\n /** End index (exclusive) in the original string. */\n end: number;\n}\n\n// ── Data Loader Interface (extensible) ─────────────────────────────────────\n\n/**\n * Interface for loading test data from external sources (JSON, YAML, CSV).\n * v1 includes only the JSON reference implementation.\n */\nexport interface IDataLoader {\n /** The type of source this loader handles (e.g. \"json\", \"yaml\", \"csv\"). */\n readonly type: string;\n\n /**\n * Load data from a source and return it as a flat key-value map.\n *\n * @param source - Path or identifier for the data source\n * @param selector - Optional selector (e.g. CSV row number, JSON path)\n * @returns Key-value map of loaded data\n */\n load(source: string, selector?: string): Promise<Record<string, string>>;\n}\n\n// ── Session State Provider (internal, not exported from package index) ──────\n\n/**\n * Abstract interface for browser session state persistence.\n * Supports both \"raw state storage + TTL\" and \"session recipe\" approaches.\n *\n * @internal NOT exported from the package — kept for future implementation.\n */\nexport interface ISessionStateProvider {\n save(context: ResolutionContext, state: unknown): Promise<void>;\n restore(context: ResolutionContext): Promise<unknown | null>;\n invalidate(context: ResolutionContext): Promise<void>;\n}\n\n// ── Resolver Options ───────────────────────────────────────────────────────\n\nexport interface ResolverOptions {\n /** Maximum recursion depth for nested {{ }} resolution. Default: 10. */\n maxRecursionDepth?: number;\n /**\n * Base64-encoded 256-bit AES key used to decrypt `secret` dataType values.\n * If not provided, secrets are returned as-is (still encrypted).\n * @deprecated Use `decryptSecret` callback instead for dynamic key derivation.\n */\n encryptionKey?: string;\n /**\n * Optional logger instance.\n * If not provided, a silent logger will be used.\n */\n logger?: Logger;\n /**\n * Callback to decrypt an encrypted `secret` value.\n * Receives the raw encrypted string and the current resolution context.\n * Implementations can derive the AES key from `context.projectId` dynamically.\n * If not provided and `encryptionKey` is not set, secret values are returned as-is.\n */\n decryptSecret?: (value: string, context?: ResolutionContext) => Promise<string>;\n /**\n * Callback to decrypt an encrypted `totp` seed before TOTP code generation.\n * Receives the raw encrypted seed string and the current resolution context.\n * Implementations can derive the AES key from `context.projectId` dynamically.\n * If not provided, the TOTP seed is used directly (plain base32).\n */\n decryptTotpSeed?: (value: string, context?: ResolutionContext) => Promise<string>;\n}\n\n// ── Circular Dependency Error ──────────────────────────────────────────────\n\nexport class CircularDependencyError extends Error {\n constructor(\n public readonly key: string,\n public readonly resolutionStack: readonly string[],\n ) {\n super(\n `Circular dependency detected for key \"${key}\". ` +\n `Resolution chain: ${[...resolutionStack, key].join(\" → \")}`,\n );\n this.name = \"CircularDependencyError\";\n }\n\n override toString(): string {\n return `${this.name}: ${this.message}`;\n }\n}\n","/**\n * Scanner: Finds all `{{ ... }}` tokens in a string, and `${ ... }` for JS expressions.\n *\n * Handles:\n * - Simple keys: `{{username}}`\n * - Prefixed keys: `{{faker:person.firstName}}`\n * - Expressions: `{{js: price * tax}}`\n * - JS shortform: `${Math.random()}` (normalized to {{js:...}})\n * - Escaped delimiters: `\\{\\{literal\\}\\}` (not treated as tokens)\n * - Nested braces: correctly tracks brace depth\n *\n * Does NOT handle recursive resolution — that is the resolver's job.\n */\n\nimport type { Token } from \"./types\";\n\n/** Known evaluator prefixes. Can be extended as new evaluators are registered. */\nconst KNOWN_PREFIXES: ReadonlySet<string> = new Set([\n \"faker\",\n \"js\",\n \"date\",\n \"secret\",\n \"totp\",\n \"mask\",\n]);\n\n/**\n * Scan an input string for `{{ ... }}` tokens.\n *\n * @param input - The raw string to scan\n * @returns An array of parsed tokens, in order of appearance\n */\nconst enum State {\n Text,\n Escape,\n OpenBrace,\n Expression,\n CloseBrace,\n}\n\nfunction scan(input: string): Token[] {\n const tokens: Token[] = [];\n\n if (typeof input !== \"string\" || input.length === 0) {\n return tokens;\n }\n\n let state: State = State.Text;\n let start = 0;\n let depth = 0;\n let expressionStart = 0;\n let i = 0;\n\n while (i < input.length) {\n const char = input[i];\n\n switch (state) {\n case State.Text:\n if (char === \"\\\\\") {\n state = State.Escape;\n } else if (char === \"{\") {\n start = i;\n state = State.OpenBrace;\n }\n break;\n\n case State.Escape:\n // After \\, just return to Text regardless of what char it was\n state = State.Text;\n break;\n\n case State.OpenBrace:\n if (char === \"{\") {\n state = State.Expression;\n expressionStart = i + 1;\n depth = 1;\n } else {\n // Lone { - return to Text and re-process this char\n state = State.Text;\n i--;\n }\n break;\n\n case State.Expression:\n if (char === \"{\" && input[i + 1] === \"{\") {\n depth++;\n i++; // skip second {\n } else if (char === \"}\" && input[i + 1] === \"}\") {\n depth--;\n if (depth === 0) {\n const end = i + 2;\n const expression = input.slice(expressionStart, i).trim();\n if (expression.length > 0) {\n const { prefix, body } = parsePrefix(expression);\n tokens.push({\n raw: input.slice(start, end),\n expression,\n prefix,\n body,\n start,\n end,\n });\n }\n state = State.Text;\n i++; // skip second }\n } else {\n i++; // skip second }\n }\n }\n break;\n }\n\n i++;\n }\n\n return tokens;\n}\n\n/**\n * Parse a prefix from an expression string.\n * E.g. \"faker:person.firstName\" → { prefix: \"faker\", body: \"person.firstName\" }\n * E.g. \"username\" → { prefix: null, body: \"username\" }\n */\nfunction parsePrefix(expression: string): { prefix: string | null; body: string } {\n const colonIndex = expression.indexOf(\":\");\n if (colonIndex === -1) {\n return { prefix: null, body: expression };\n }\n\n const candidatePrefix = expression.slice(0, colonIndex).trim().toLowerCase();\n\n // Only treat it as a prefix if it's a known evaluator prefix\n if (KNOWN_PREFIXES.has(candidatePrefix)) {\n return {\n prefix: candidatePrefix,\n body: expression.slice(colonIndex + 1).trim(),\n };\n }\n\n // Not a known prefix — treat the whole thing as a key (e.g. \"env:staging\" could be a data key)\n return { prefix: null, body: expression };\n}\n\n/**\n * Check if a string contains any `{{ ... }}` tokens.\n * Faster than a full scan when you only need a boolean check.\n */\nfunction hasTokens(input: string): boolean {\n if (typeof input !== \"string\") return false;\n return input.includes(\"{{\") && input.includes(\"}}\");\n}\n\n/**\n * Normalize `${...}` JS shortform to `{{js:...}}` format.\n * This allows recorder-authored `${Math.random()}` to resolve via the JSEvaluator.\n */\nfunction normalizeJSTokens(input: string): string {\n if (typeof input !== \"string\" || input.length === 0) return input;\n\n const enum JSState {\n Text,\n Dollar,\n Expression,\n Escape,\n SingleQuoted,\n DoubleQuoted,\n TemplateQuoted,\n }\n\n let result = \"\";\n let state: JSState = JSState.Text;\n let returnState: JSState = JSState.Text;\n let expressionStart = -1;\n let braceDepth = 0;\n let i = 0;\n\n while (i < input.length) {\n const char = input[i];\n\n switch (state) {\n case JSState.Text:\n if (char === \"$\") {\n state = JSState.Dollar;\n } else {\n result += char;\n }\n break;\n\n case JSState.Dollar:\n if (char === \"{\") {\n state = JSState.Expression;\n expressionStart = i + 1;\n braceDepth = 0;\n } else {\n result += `$${char}`;\n state = JSState.Text;\n }\n break;\n\n case JSState.Expression:\n if (char === \"\\\\\") {\n returnState = state;\n state = JSState.Escape;\n } else if (char === \"'\") {\n state = JSState.SingleQuoted;\n } else if (char === '\"') {\n state = JSState.DoubleQuoted;\n } else if (char === \"`\") {\n state = JSState.TemplateQuoted;\n } else if (char === \"{\") {\n braceDepth += 1;\n } else if (char === \"}\") {\n if (braceDepth === 0) {\n result += `{{js:${input.slice(expressionStart, i).trim()}}}`;\n expressionStart = -1;\n state = JSState.Text;\n } else {\n braceDepth -= 1;\n }\n }\n break;\n\n case JSState.SingleQuoted:\n if (char === \"\\\\\") {\n returnState = state;\n state = JSState.Escape;\n } else if (char === \"'\") {\n state = JSState.Expression;\n }\n break;\n\n case JSState.DoubleQuoted:\n if (char === \"\\\\\") {\n returnState = state;\n state = JSState.Escape;\n } else if (char === '\"') {\n state = JSState.Expression;\n }\n break;\n\n case JSState.TemplateQuoted:\n if (char === \"\\\\\") {\n returnState = state;\n state = JSState.Escape;\n } else if (char === \"`\") {\n state = JSState.Expression;\n }\n break;\n\n case JSState.Escape:\n state = returnState;\n break;\n }\n i += 1;\n }\n\n if (state === JSState.Dollar) {\n result += \"$\";\n } else if (state !== JSState.Text && expressionStart >= 0) {\n result += input.slice(expressionStart - 2);\n }\n\n return result;\n}\n\n/**\n * Check if a string contains any `${...}` tokens.\n */\nfunction hasJSTokens(input: string): boolean {\n if (typeof input !== \"string\") return false;\n return input.includes(\"${\") && input.includes(\"}\");\n}\n\nexport { scan, hasTokens, normalizeJSTokens, hasJSTokens, KNOWN_PREFIXES };\n","/**\n * ResolutionStack: Tracks keys being resolved to detect circular dependencies.\n *\n * When the resolver processes `{{A}}` which contains `{{B}}` which contains `{{A}}`,\n * the stack detects the cycle and throws a `CircularDependencyError`.\n *\n * The stack is immutable — each `push` returns a new stack instance,\n * making it safe for concurrent/recursive resolution chains.\n */\n\nimport { CircularDependencyError } from \"./types\";\n\nexport class ResolutionStack {\n private readonly keys: readonly string[];\n private readonly keySet: ReadonlySet<string>;\n\n constructor(keys: readonly string[] = []) {\n this.keys = keys;\n this.keySet = new Set(keys);\n }\n\n /**\n * Check if a key is already in the resolution chain.\n */\n has(key: string): boolean {\n return this.keySet.has(key);\n }\n\n /**\n * Push a key onto the stack, returning a new stack.\n * Throws `CircularDependencyError` if the key is already being resolved.\n */\n push(key: string): ResolutionStack {\n if (this.keySet.has(key)) {\n throw new CircularDependencyError(key, this.keys);\n }\n return new ResolutionStack([...this.keys, key]);\n }\n\n /**\n * Get the current depth of the resolution chain.\n */\n get depth(): number {\n return this.keys.length;\n }\n\n /**\n * Get a copy of the current chain for debugging/error messages.\n */\n get chain(): readonly string[] {\n return this.keys;\n }\n}\n","/**\n * Path utilities for object path parsing and construction.\n *\n * - `parsePath`: `\"user.address.city\"` → `[\"user\",\"address\",\"city\"]`\n * - `buildPath`: `[\"user\",\"address\",\"city\"]` → `\"user.address.city\"`\n *\n * Used by the LiteralEvaluator internally and exported for UI consumers\n * who need to construct valid object path expressions.\n */\n\n// ── parsePath ──────────────────────────────────────────────────────────────\n\n/**\n * Parse a path string into an array of keys using a state machine.\n *\n * Supports:\n * - Dot notation: `user.address.city` → [\"user\",\"address\",\"city\"]\n * - Bracket indices: `users[0].name` → [\"users\",\"0\",\"name\"]\n * - Quoted segments: `user.'a.b'.c` → [\"user\",\"a.b\",\"c\"]\n * - Bracket+quotes: `headers['content-type']` → [\"headers\",\"content-type\"]\n * - Escaped quotes: `user.'it\\\\'s.here'` → [\"user\",\"it's.here\"]\n * - Mixed quotes: `user.\"it's.complex\"` → [\"user\",\"it's.complex\"]\n */\n\nconst enum PathState {\n /** Default state — accumulating key characters. */\n Normal,\n /** Inside a quoted segment (single or double). */\n Quoted,\n /** Just saw `\\` inside a quoted segment — next char is literal. */\n Escape,\n}\n\nexport function parsePath(path: string): string[] {\n const parts: string[] = [];\n let current = \"\";\n let state: PathState = PathState.Normal;\n let quoteChar = \"\";\n\n for (let i = 0; i < path.length; i++) {\n const char = path[i]!;\n\n switch (state) {\n case PathState.Normal:\n if (char === \"'\" || char === '\"') {\n // Enter quoted mode, remember which quote opened it\n state = PathState.Quoted;\n quoteChar = char;\n } else if (char === \".\" || char === \"[\" || char === \"]\") {\n // Separator — emit current segment if non-empty\n if (current.length > 0) {\n parts.push(current);\n current = \"\";\n }\n } else {\n current += char;\n }\n break;\n\n case PathState.Quoted:\n if (char === \"\\\\\") {\n // Enter escape — next char is literal\n state = PathState.Escape;\n } else if (char === quoteChar) {\n // Matching close quote — return to Normal\n state = PathState.Normal;\n } else {\n current += char;\n }\n break;\n\n case PathState.Escape:\n // Append the escaped character literally and return to Quoted\n current += char;\n state = PathState.Quoted;\n break;\n }\n }\n\n if (current.length > 0) {\n parts.push(current);\n }\n\n return parts;\n}\n\n// ── buildPath ──────────────────────────────────────────────────────────────\n\n/** Characters that force a key to use bracket notation. */\nconst NEEDS_BRACKET = /[.[\\]'\"]/;\n\n/** A key that looks like a non-negative integer → bracket notation. */\nconst NUMERIC = /^\\d+$/;\n\n/**\n * Build a valid object path string from an array of key segments.\n * This is the inverse of `parsePath`.\n *\n * Rules:\n * - Numeric keys use bracket notation: `[\"users\",\"0\"]` → `users[0]`\n * - Keys with special chars use quotes: `[\"a\",\"b.c\"]` → `a['b.c']`\n * - Keys containing `'` use double quotes: `[\"a\",\"it's\"]` → `a[\"it's\"]`\n * - Keys containing both `'` and `\"` escape: `[\"a\",\"it's\\\"\"]` → `a['it\\\\'s\"']`\n * - Simple keys use dot notation: `[\"user\",\"name\"]` → `user.name`\n */\nexport function buildPath(parts: readonly string[]): string {\n if (parts.length === 0) return \"\";\n if (parts.length === 1) return parts[0]!;\n\n let result = formatSegment(parts[0]!, true);\n\n for (let i = 1; i < parts.length; i++) {\n const segment = parts[i]!;\n\n if (NUMERIC.test(segment)) {\n // Array index → bracket notation without quotes\n result += `[${segment}]`;\n } else if (NEEDS_BRACKET.test(segment)) {\n // Special characters → bracket notation with quotes\n result += `[${quoteSegment(segment)}]`;\n } else {\n // Simple key → dot notation\n result += `.${segment}`;\n }\n }\n\n return result;\n}\n\n/**\n * Format the first segment of a path.\n * The first segment uses bare notation unless it contains special characters.\n */\nfunction formatSegment(segment: string, isFirst: boolean): string {\n if (isFirst && !NEEDS_BRACKET.test(segment) && !NUMERIC.test(segment)) {\n return segment;\n }\n if (NUMERIC.test(segment)) {\n return `[${segment}]`;\n }\n if (NEEDS_BRACKET.test(segment)) {\n return quoteSegment(segment);\n }\n return segment;\n}\n\n/**\n * Quote a segment, choosing the best quote character to minimize escaping.\n * - If segment contains `'` but not `\"`, use double quotes.\n * - If segment contains `\"` but not `'`, use single quotes.\n * - If segment contains both, use single quotes and escape `'`.\n * - Otherwise, use single quotes.\n */\nfunction quoteSegment(segment: string): string {\n const hasSingle = segment.includes(\"'\");\n const hasDouble = segment.includes('\"');\n\n if (hasSingle && !hasDouble) {\n // Use double quotes to avoid escaping\n return `\"${segment}\"`;\n }\n\n if (hasSingle && hasDouble) {\n // Must escape single quotes\n return `'${segment.replace(/'/g, \"\\\\'\")}'`;\n }\n\n // Default: single quotes (also handles hasDouble && !hasSingle)\n return `'${segment}'`;\n}\n","module.exports=function(t,e,l,n,o){for(e=e.split?e.split(\".\"):e,n=0;n<e.length;n++)t=t?t[e[n]]:o;return t===o?l:t};\n//# sourceMappingURL=dlv.js.map\n","/**\n * LiteralEvaluator: The default evaluator for simple key→value lookups.\n *\n * This evaluator doesn't process expressions — it returns the value directly\n * from the scope manager. It's registered as the fallback when no prefix matches.\n */\n\nimport type { IEvaluator } from \"../types\";\nimport { parsePath } from \"../path-utils\";\nimport dlv from \"dlv\";\n\nexport interface LiteralEvaluatorOptions {\n /**\n * Custom function to extract a value from a nested object given an array of keys.\n * By default, it uses `dlv` (developit/dlv).\n *\n * @param obj The root object resolved from scope\n * @param pathParts The nested keys (e.g., `[\"address\", \"city\"]` for `user.address.city`)\n */\n pathExtractor?: (obj: unknown, pathParts: string[]) => unknown;\n}\n\nexport class LiteralEvaluator implements IEvaluator {\n readonly prefix = \"literal\";\n private readonly pathExtractor: NonNullable<LiteralEvaluatorOptions[\"pathExtractor\"]>;\n\n constructor(options?: LiteralEvaluatorOptions) {\n this.pathExtractor =\n options?.pathExtractor ?? ((obj, parts) => dlv(obj as Record<string, any>, parts));\n }\n\n async evaluate(expression: string, scopeValues: Record<string, string>): Promise<string> {\n // The expression IS the key, look it up in the provided scope values\n const value = scopeValues[expression];\n if (value !== undefined) {\n return value;\n }\n\n // Support dot-path and bracket navigation for nested keys\n // E.g. \"user.address.city\" or \"users[0]\" traverses nested objects\n const parts = parsePath(expression);\n if (parts.length > 1) {\n // Try to find a matching key with the first segment\n const rootValue = scopeValues[parts[0]!];\n if (rootValue !== undefined) {\n try {\n const parsed = JSON.parse(rootValue);\n const extracted = this.pathExtractor(parsed, parts.slice(1));\n\n if (extracted !== undefined && extracted !== null) {\n return typeof extracted === \"object\" ? JSON.stringify(extracted) : String(extracted);\n }\n } catch {\n // Not valid JSON — return the expression as-is\n }\n }\n }\n\n // Key not found — return the expression as-is (resolver will handle warning)\n return expression;\n }\n}\n","/**\n * Crypto utilities for @blinq/data-resolver.\n *\n * Uses the Web Crypto API (globalThis.crypto.subtle) which is available\n * natively in both browsers and Node.js 20+.\n *\n * - AES-256-GCM for secret encryption/decryption\n * - TOTP generation (requires otpauth dependency)\n * - Value masking for UI display\n */\n\n// ── Key helpers ─────────────────────────────────────────────────────────────\n\n/**\n * Derive a deterministic base64-encoded AES-256 key from a project ID.\n * Uses SHA-256 to hash the project ID string, producing a 32-byte key.\n * This ensures the same project always produces the same encryption key.\n */\nexport async function deriveProjectKey(projectId: string): Promise<string> {\n const raw = await globalThis.crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(projectId));\n return bytesToBase64(new Uint8Array(raw));\n}\n\n/**\n * Import a base64-encoded 32-byte key as an AES-GCM CryptoKey.\n */\nasync function importKey(keyMaterial: string): Promise<any> {\n const raw = base64ToBytes(keyMaterial);\n return globalThis.crypto.subtle.importKey(\"raw\", raw as any, { name: \"AES-GCM\" }, false, [\n \"encrypt\",\n \"decrypt\",\n ]);\n}\n\n// ── AES-256-GCM ─────────────────────────────────────────────────────────────\n\n/**\n * Encrypt a plaintext string using AES-256-GCM.\n *\n * @param plaintext - The string to encrypt\n * @param keyMaterial - Base64-encoded 32-byte AES key\n * @returns Base64-encoded string containing `iv (12 bytes) + ciphertext + auth tag`\n */\nexport async function encrypt(plaintext: string, keyMaterial: string): Promise<string> {\n const key = await importKey(keyMaterial);\n const iv = globalThis.crypto.getRandomValues(new Uint8Array(12));\n const encoded = new TextEncoder().encode(plaintext);\n\n const ciphertext = await globalThis.crypto.subtle.encrypt(\n { name: \"AES-GCM\", iv: iv as any },\n key,\n encoded as any,\n );\n\n // Concatenate iv + ciphertext (which includes the 16-byte auth tag in AES-GCM)\n const combined = new Uint8Array(iv.byteLength + ciphertext.byteLength);\n combined.set(iv, 0);\n combined.set(new Uint8Array(ciphertext), iv.byteLength);\n\n return bytesToBase64(combined);\n}\n\n/**\n * Decrypt an AES-256-GCM encrypted string.\n *\n * @param encrypted - Base64-encoded string produced by `encrypt()`\n * @param keyMaterial - Base64-encoded 32-byte AES key\n * @returns The original plaintext string\n * @throws If the key is wrong or the ciphertext is corrupted\n */\nexport async function decrypt(encrypted: string, keyMaterial: string): Promise<string> {\n const key = await importKey(keyMaterial);\n const combined = base64ToBytes(encrypted);\n\n const iv = combined.slice(0, 12);\n const ciphertext = combined.slice(12);\n\n const plaintext = await globalThis.crypto.subtle.decrypt(\n { name: \"AES-GCM\", iv: iv as any },\n key,\n ciphertext as any,\n );\n\n return new TextDecoder().decode(plaintext);\n}\n\n// ── TOTP ────────────────────────────────────────────────────────────────────\n\n/**\n * Generate the current TOTP code from a base32-encoded seed.\n * Uses the `otpauth` library (isomorphic).\n *\n * @param seed - Base32-encoded TOTP secret (as stored in TestDataEntry.value)\n * @returns 6-digit TOTP code as a string\n */\nexport async function generateTOTP(seed: string): Promise<string> {\n const { TOTP } = await import(\"otpauth\");\n const totp = new TOTP({ secret: seed, digits: 6, period: 30 });\n return totp.generate();\n}\n\n// ── Mask ────────────────────────────────────────────────────────────────────\n\n/**\n * Replace every character in a string with a bullet (•) for UI display.\n *\n * @param value - The string to mask\n * @returns A string of `•` characters with the same length\n */\nexport function mask(value: string): string {\n return \"\\u2022\".repeat(value.length);\n}\n\n// ── Base64 helpers ───────────────────────────────────────────────────────────\n\nexport function bytesToBase64(bytes: Uint8Array): string {\n let binary = \"\";\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]!);\n }\n return btoa(binary);\n}\n\nfunction base64ToBytes(b64: string): Uint8Array {\n const binary = atob(b64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n","/**\n * DataResolver: The central orchestrator for test data & expression resolution.\n *\n * Workflow:\n * 1. Scan input for `{{ ... }}` tokens\n * 2. For each token, determine the evaluator prefix\n * 3. Look up scoped values and call the appropriate evaluator\n * 4. Handle recursive resolution (if result contains more `{{ ... }}`)\n * 5. Collect warnings (system env override, fallback, unknown keys)\n *\n * Isomorphic — works in both browser (live preview) and Node.js (execution).\n */\n\nimport type { ResolutionContext, ResolutionResult, ResolutionWarning } from \"@blinq/schemas\";\nimport type { ResolverOptions } from \"./types\";\nimport type { Logger, LogContext } from \"@blinq/observability\";\nimport { Logger as ObservabilityLogger } from \"@blinq/observability\";\nimport { CircularDependencyError } from \"./types\";\nimport { scan, hasTokens, normalizeJSTokens } from \"./scanner\";\nimport { ResolutionStack } from \"./resolution-stack\";\nimport { ScopeManager } from \"./scope-manager\";\nimport { EvaluatorRegistry } from \"./evaluators/registry\";\nimport { LiteralEvaluator } from \"./evaluators/literal\";\nimport { decrypt, generateTOTP, mask } from \"./crypto\";\n\nconst DEFAULT_MAX_RECURSION_DEPTH = 10;\nconst silentLogger = new ObservabilityLogger([]);\n\nexport class DataResolver {\n private readonly scopeManager: ScopeManager;\n private readonly registry: EvaluatorRegistry;\n private readonly maxRecursionDepth: number;\n private readonly logger: Logger;\n private readonly encryptionKey: string | undefined;\n private readonly decryptSecret:\n | ((value: string, context?: ResolutionContext) => Promise<string>)\n | undefined;\n private readonly decryptTotpSeed:\n | ((value: string, context?: ResolutionContext) => Promise<string>)\n | undefined;\n\n constructor(\n scopeManager: ScopeManager,\n evaluatorRegistry: EvaluatorRegistry,\n options?: ResolverOptions,\n ) {\n this.scopeManager = scopeManager;\n this.registry = evaluatorRegistry;\n this.maxRecursionDepth = options?.maxRecursionDepth ?? DEFAULT_MAX_RECURSION_DEPTH;\n this.encryptionKey = options?.encryptionKey;\n this.decryptSecret = options?.decryptSecret;\n this.decryptTotpSeed = options?.decryptTotpSeed;\n\n // Isomorphic logger support with silent fallback\n this.logger = options?.logger ?? silentLogger;\n\n // Ensure the literal evaluator is registered as the default\n if (!this.registry.has(\"literal\")) {\n this.registry.register(new LiteralEvaluator());\n }\n }\n\n private getLogContext(context?: ResolutionContext): LogContext {\n if (!context) return { system: true };\n const logContext: LogContext = {\n userId: \"data-resolver\",\n projectId: context.projectId,\n executionId: context.executionId,\n // Metadata fields that observability transports can use\n _resolution: {\n projectId: context.projectId,\n executionId: context.executionId,\n },\n };\n return logContext;\n }\n\n /**\n * Resolve all `{{ ... }}` tokens in a string.\n */\n async resolve(input: string, context?: ResolutionContext): Promise<ResolutionResult> {\n const log = this.logger.withContext(this.getLogContext(context));\n const warnings: ResolutionWarning[] = [];\n const usedKeys: ResolutionResult[\"usedKeys\"] = [];\n const stack = new ResolutionStack();\n\n if (context) {\n this.scopeManager.setContext(context);\n }\n\n const resolved = await this.resolveString(input, stack, warnings, usedKeys, log, context);\n\n log.info(\"[DataResolver] Resolution complete\", {\n input,\n resolved,\n warningsCount: warnings.length,\n usedKeysCount: usedKeys.length,\n });\n\n return { resolved, warnings, usedKeys };\n }\n\n /**\n * Resolve all `{{ ... }}` tokens in an object or array (deep traversal).\n */\n async resolveObject<T>(input: T, context?: ResolutionContext): Promise<T> {\n const log = this.logger.withContext(this.getLogContext(context));\n if (context) {\n this.scopeManager.setContext(context);\n }\n return this.resolveValue(input, new ResolutionStack(), [], [], log, context) as Promise<T>;\n }\n\n // ── Private resolution engine ──────────────────────────────────────\n\n private async resolveString(\n input: string,\n stack: ResolutionStack,\n warnings: ResolutionWarning[],\n usedKeys: ResolutionResult[\"usedKeys\"],\n log: Logger,\n context?: ResolutionContext,\n ): Promise<string> {\n // Normalize ${...} shortform to {{js:...}} for JSEvaluator\n const normalized = normalizeJSTokens(input);\n\n if (!hasTokens(normalized)) {\n return input;\n }\n\n if (stack.depth >= this.maxRecursionDepth) {\n const message = `Maximum recursion depth (${this.maxRecursionDepth}) reached`;\n log.warn(`[DataResolver] ${message}`, { input: normalized });\n warnings.push({\n type: \"unknown_key\",\n key: normalized,\n message,\n });\n return input;\n }\n\n const tokens = scan(normalized);\n if (tokens.length === 0) {\n return input;\n }\n\n log.info(\"[DataResolver] Tokens found\", { count: tokens.length, stackDepth: stack.depth });\n\n let result = normalized;\n\n // Process tokens in reverse order so indices stay valid\n for (let i = tokens.length - 1; i >= 0; i--) {\n const token = tokens[i]!;\n const resolved = await this.resolveToken(\n token.prefix,\n token.body,\n stack,\n warnings,\n usedKeys,\n log,\n context,\n );\n\n result = result.slice(0, token.start) + resolved + result.slice(token.end);\n }\n\n // Recursive resolution: if the result still has tokens, resolve again\n if (hasTokens(result) && result !== normalized) {\n log.info(\"[DataResolver] Entering recursive pass\", {\n result,\n stackDepth: stack.depth + 1,\n });\n result = await this.resolveString(result, stack, warnings, usedKeys, log, context);\n }\n\n return result;\n }\n\n private async resolveToken(\n prefix: string | null,\n body: string,\n stack: ResolutionStack,\n warnings: ResolutionWarning[],\n usedKeys: ResolutionResult[\"usedKeys\"],\n log: Logger,\n context?: ResolutionContext,\n ): Promise<string> {\n const tokenDisplay = `{{${prefix ? prefix + \":\" : \"\"}${body}}}`;\n log.info(`[DataResolver] Resolving token: ${tokenDisplay}`, {\n prefix,\n body,\n stackDepth: stack.depth,\n });\n\n // Handle mask: prefix — resolve the key then mask the result\n if (prefix === \"mask\") {\n const { value: maskedValue, warnings: maskWarnings } = await this.scopeManager.lookup(\n body,\n context,\n );\n warnings.push(...maskWarnings);\n if (maskedValue) {\n let plaintext = maskedValue.value;\n if (maskedValue.dataType === \"secret\") {\n try {\n if (this.decryptSecret) {\n plaintext = await this.decryptSecret(maskedValue.value, context);\n } else if (this.encryptionKey) {\n plaintext = await decrypt(maskedValue.value, this.encryptionKey);\n }\n } catch {\n // If decrypt fails, mask the encrypted string length\n }\n }\n return mask(plaintext);\n }\n warnings.push({\n type: \"unknown_key\",\n key: body,\n message: `Key \"${body}\" was not found in any scope`,\n });\n return `{{mask:${body}}}`;\n }\n\n // If token has a known evaluator prefix, delegate to it\n if (prefix && this.registry.has(prefix)) {\n // For evaluators that need scope values (e.g. JS expressions), gather them\n const scopeValues = await this.gatherScopeValues(context);\n const evaluator = this.registry.get(prefix)!;\n try {\n const resolvedBody =\n prefix === \"js\" && hasTokens(body)\n ? await this.resolveString(body, stack, warnings, usedKeys, log, context)\n : body;\n return await evaluator.evaluate(resolvedBody, scopeValues);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n warnings.push({\n type: \"unknown_key\",\n key: `${prefix}:${body}`,\n message: `Evaluator \"${prefix}\" failed: ${message}`,\n });\n return `{{${prefix}:${body}}}`;\n }\n }\n\n // Known prefix but evaluator not registered — return original token with warning\n if (prefix && !this.registry.has(prefix)) {\n warnings.push({\n type: \"unknown_key\",\n key: `${prefix}:${body}`,\n message: `Evaluator prefix \"${prefix}\" is not registered`,\n });\n return `{{${prefix}:${body}}}`;\n }\n\n // No prefix — treat as a literal key lookup\n const key = body;\n\n // Push key onto the resolution stack (detects circular deps)\n let nextStack: ResolutionStack;\n try {\n nextStack = stack.push(key);\n } catch (error) {\n if (error instanceof CircularDependencyError) {\n warnings.push({\n type: \"unknown_key\",\n key,\n message: error.message,\n });\n return `{{${key}}}`;\n }\n throw error;\n }\n\n // Look up in scope manager\n const { value: scopedValue, warnings: lookupWarnings } = await this.scopeManager.lookup(\n key,\n context,\n );\n warnings.push(...lookupWarnings);\n\n if (scopedValue) {\n usedKeys.push({\n key,\n scope: scopedValue.scope,\n source: scopedValue.source,\n });\n\n // Post-process based on dataType\n if (scopedValue.dataType === \"secret\") {\n try {\n if (this.decryptSecret) {\n return await this.decryptSecret(scopedValue.value, context);\n }\n if (this.encryptionKey) {\n return await decrypt(scopedValue.value, this.encryptionKey);\n }\n // No key or callback provided — return encrypted value as-is\n return scopedValue.value;\n } catch {\n warnings.push({\n type: \"unknown_key\",\n key,\n message: `Failed to decrypt secret \"${key}\". Check that the encryption key is correct.`,\n });\n return `{{${key}}}`;\n }\n }\n\n if (scopedValue.dataType === \"totp\") {\n try {\n let seed = scopedValue.value;\n if (this.decryptTotpSeed) {\n seed = await this.decryptTotpSeed(scopedValue.value, context);\n }\n return await generateTOTP(seed);\n } catch {\n warnings.push({\n type: \"unknown_key\",\n key,\n message: `Failed to generate TOTP for \"${key}\". Check that the seed is a valid base32 string.`,\n });\n return `{{${key}}}`;\n }\n }\n\n // Recursively resolve the value (it may contain more `{{ ... }}`)\n if (hasTokens(scopedValue.value)) {\n return this.resolveString(scopedValue.value, nextStack, warnings, usedKeys, log, context);\n }\n\n return scopedValue.value;\n }\n\n // Key not found — try the literal evaluator's dot-path traversal\n const scopeValues = await this.gatherScopeValues(context);\n const literal = this.registry.get(\"literal\");\n if (literal) {\n const resolved = await literal.evaluate(key, scopeValues);\n if (resolved !== key) {\n return resolved;\n }\n }\n\n // Truly unknown key\n warnings.push({\n type: \"unknown_key\",\n key,\n message: `Key \"${key}\" was not found in any scope`,\n });\n return `{{${key}}}`;\n }\n\n private async resolveValue(\n value: unknown,\n stack: ResolutionStack,\n warnings: ResolutionWarning[],\n usedKeys: ResolutionResult[\"usedKeys\"],\n log: Logger,\n context?: ResolutionContext,\n ): Promise<unknown> {\n if (typeof value === \"string\") {\n return this.resolveString(value, stack, warnings, usedKeys, log, context);\n }\n\n if (Array.isArray(value)) {\n return Promise.all(\n value.map((item) => this.resolveValue(item, stack, warnings, usedKeys, log, context)),\n );\n }\n\n if (value !== null && typeof value === \"object\") {\n const result: Record<string, unknown> = {};\n const entries = Object.entries(value);\n for (const [k, v] of entries) {\n result[k] = await this.resolveValue(v, stack, warnings, usedKeys, log, context);\n }\n return result;\n }\n\n return value;\n }\n\n private async gatherScopeValues(context?: ResolutionContext): Promise<Record<string, string>> {\n // Get all values from each scope level, merged in precedence order\n const values: Record<string, string> = {};\n\n // global → environment → feature → scenario (reverse precedence, lower scopes override)\n const globalValues = await this.scopeManager.global.getAll();\n Object.assign(values, globalValues);\n\n const environmentValues = await this.scopeManager.environment.getAll();\n Object.assign(values, environmentValues);\n\n const featureValues = await this.scopeManager.feature.getAll();\n Object.assign(values, featureValues);\n\n const scenarioValues = await this.scopeManager.scenario.getAll();\n Object.assign(values, scenarioValues);\n\n // Add system env overrides if they exist\n if (context?.systemEnvOverrides) {\n Object.assign(values, context.systemEnvOverrides);\n }\n\n return values;\n }\n}\n","/**\n * ScopeManager: Manages scoped test data with Gauge-inspired named store accessors.\n *\n * Resolution order (default): runtime → scenario → feature → environment → global → system\n *\n * Lifecycle:\n * - `scenario` store: cleared after each scenario (≈ Gauge ScenarioStore)\n * - `feature` store: cleared after each feature (≈ Gauge SpecStore)\n * - `suite` store: cleared after entire suite, parallel-safe via executionId (improved SuiteStore)\n */\n\nimport type { ResolutionContext, TestDataEntry, TestDataSource } from \"@blinq/schemas\";\nimport type { ScopePrecedenceConfig, ScopeType } from \"@blinq/schemas\";\nimport { DEFAULT_SCOPE_PRECEDENCE } from \"@blinq/schemas\";\nimport type { ITestDataProvider, ScopedStore, ScopedValue } from \"./types\";\nimport type { ResolutionWarning } from \"@blinq/schemas\";\n\n// ── ScopedStoreImpl ────────────────────────────────────────────────────────\n\n/**\n * Concrete ScopedStore bound to a specific scope type and context.\n * Delegates all operations to the underlying ITestDataProvider.\n */\nclass ScopedStoreImpl implements ScopedStore {\n constructor(\n private readonly provider: ITestDataProvider,\n private readonly scopeType: ScopeType,\n private readonly contextFn: () => ResolutionContext,\n private readonly projectId: string,\n ) {}\n\n async put(key: string, value: string): Promise<void> {\n const context = this.contextFn();\n await this.provider.upsert({\n projectId: this.projectId,\n key,\n value,\n dataType: \"string\",\n scope: this.buildScope(context),\n source: \"extracted\" as TestDataSource,\n });\n }\n\n async get(key: string): Promise<string | null> {\n const context = this.contextFn();\n const entries = await this.provider.getByScope(context);\n const entry = entries.find((candidate) => {\n return candidate.key === key && candidate.scope.type === this.scopeType;\n });\n\n return entry?.value ?? null;\n }\n\n async getAll(): Promise<Record<string, string>> {\n const context = this.contextFn();\n const entries = await this.provider.getByScope(context);\n const result: Record<string, string> = {};\n for (const entry of entries) {\n if (entry.scope.type === this.scopeType && !(entry.key in result)) {\n result[entry.key] = entry.value;\n }\n }\n return result;\n }\n\n async clear(): Promise<void> {\n const context = this.contextFn();\n await this.provider.clearScope(this.scopeType, context);\n }\n\n private buildScope(context: ResolutionContext): TestDataEntry[\"scope\"] {\n const base: TestDataEntry[\"scope\"] = { type: this.scopeType };\n\n switch (this.scopeType) {\n case \"runtime\":\n if (context.executionId) base.executionId = context.executionId;\n if (context.scenarioId) base.scenarioId = context.scenarioId;\n break;\n case \"scenario\":\n if (context.scenarioId) base.scenarioId = context.scenarioId;\n if (context.featureId) base.featureId = context.featureId;\n break;\n case \"feature\":\n if (context.featureId) base.featureId = context.featureId;\n break;\n case \"environment\":\n if (context.environmentId) base.environmentId = context.environmentId;\n break;\n case \"global\":\n // No additional filters needed\n break;\n }\n\n return base;\n }\n}\n\n// ── ScopeManager ───────────────────────────────────────────────────────────\n\nexport class ScopeManager {\n readonly scenario: ScopedStore;\n readonly feature: ScopedStore;\n readonly environment: ScopedStore;\n readonly global: ScopedStore;\n\n private currentContext: ResolutionContext;\n private readonly precedence: ScopePrecedenceConfig;\n\n constructor(\n private readonly provider: ITestDataProvider,\n context: ResolutionContext,\n precedenceConfig?: ScopePrecedenceConfig,\n ) {\n this.currentContext = context;\n this.precedence = precedenceConfig ?? DEFAULT_SCOPE_PRECEDENCE;\n\n const ctxFn = () => this.currentContext;\n\n this.scenario = new ScopedStoreImpl(provider, \"runtime\", ctxFn, context.projectId);\n this.feature = new ScopedStoreImpl(provider, \"feature\", ctxFn, context.projectId);\n this.environment = new ScopedStoreImpl(provider, \"environment\", ctxFn, context.projectId);\n this.global = new ScopedStoreImpl(provider, \"global\", ctxFn, context.projectId);\n }\n\n /**\n * Update the current resolution context.\n * Called by the runner when moving between scenarios/features.\n */\n setContext(context: ResolutionContext): void {\n this.currentContext = context;\n }\n\n /**\n * Look up a key through the full scope chain, respecting precedence.\n * Returns the first matching value, plus any warnings.\n */\n async lookup(\n key: string,\n context?: ResolutionContext,\n ): Promise<{ value: ScopedValue | null; warnings: ResolutionWarning[] }> {\n const ctx = context ?? this.currentContext;\n const warnings: ResolutionWarning[] = [];\n\n // Walk the scope chain in precedence order (fetch early to check for scoped values)\n const allEntries = await this.provider.getByScope(ctx);\n\n // Check system env first if configured as \"before-runtime\"\n if (this.precedence.systemEnvPosition === \"before-runtime\") {\n const sysValue = this.lookupSystemEnv(key, ctx);\n if (sysValue) {\n // Only warn if a scoped value actually existed to override\n const hadScopedValue = allEntries.some((e) => e.key === key);\n if (hadScopedValue) {\n warnings.push({\n type: \"system_env_override\",\n key,\n message: `System environment variable \"${key}\" took precedence over scoped values`,\n });\n }\n return { value: sysValue, warnings };\n }\n }\n\n for (const scopeType of this.precedence.order) {\n const match = this.findInScope(key, scopeType, allEntries, ctx);\n if (match) {\n return {\n value: {\n key,\n value: match.value,\n scope: match.scope.type,\n source: match.source,\n dataType: match.dataType,\n fromSystemEnv: false,\n },\n warnings,\n };\n }\n }\n\n // Check system env last if configured as \"after-global\" (default)\n if (this.precedence.systemEnvPosition === \"after-global\") {\n const sysValue = this.lookupSystemEnv(key, ctx);\n if (sysValue) {\n // Check if a scoped value existed at any level for the warning\n const hadScopedValue = allEntries.some((e) => e.key === key);\n if (hadScopedValue) {\n warnings.push({\n type: \"system_env_override\",\n key,\n message: `System environment variable \"${key}\" took precedence over scoped values`,\n });\n }\n return { value: sysValue, warnings };\n }\n }\n\n return { value: null, warnings };\n }\n\n /**\n * Write a runtime variable created during execution.\n */\n async setRuntimeValue(key: string, value: string, context: ResolutionContext): Promise<void> {\n await this.provider.upsert({\n projectId: context.projectId,\n key,\n value,\n dataType: \"string\",\n scope: {\n type: \"runtime\",\n executionId: context.executionId,\n scenarioId: context.scenarioId,\n },\n source: \"extracted\",\n });\n }\n\n /**\n * Promote runtime values from a specific execution to global scope.\n * Used for cross-scenario data sharing (replacement for @global_test_data tag).\n */\n async promoteToGlobal(executionId: string, projectId: string): Promise<void> {\n const runtimeEntries = await this.provider.getByScope({\n projectId,\n executionId,\n systemEnvOverrides: {},\n });\n\n for (const entry of runtimeEntries) {\n if (entry.scope.type === \"runtime\") {\n await this.provider.upsert({\n projectId,\n key: entry.key,\n value: entry.value,\n dataType: entry.dataType,\n scope: { type: \"global\" },\n source: entry.source,\n });\n }\n }\n }\n\n /**\n * Find entries whose value matches a given string (for recorder auto-detection).\n */\n async findByValue(\n value: string,\n context?: ResolutionContext,\n ): Promise<Array<{ key: string; scope: ScopeType }>> {\n const ctx = context ?? this.currentContext;\n const matches = await this.provider.findByValue(value, ctx);\n return matches.map((m) => ({ key: m.key, scope: m.scope.type }));\n }\n\n // ── Lifecycle hooks ────────────────────────────────────────────────────\n\n async clearScenarioScope(context?: ResolutionContext): Promise<void> {\n const ctx = context ?? this.currentContext;\n await this.provider.clearScope(\"runtime\", ctx);\n }\n\n async clearFeatureScope(context?: ResolutionContext): Promise<void> {\n const ctx = context ?? this.currentContext;\n await this.provider.clearScope(\"feature\", ctx);\n }\n\n async clearSuiteScope(context?: ResolutionContext): Promise<void> {\n void context;\n // Global scope stores persistent project defaults, so suite teardown must not delete it.\n }\n\n // ── Private helpers ──────────────────────────────────────────────────\n\n private findInScope(\n key: string,\n scopeType: ScopeType,\n entries: TestDataEntry[],\n context: ResolutionContext,\n ): TestDataEntry | undefined {\n return entries.find((entry) => {\n if (entry.key !== key || entry.scope.type !== scopeType) return false;\n\n // Apply scope-specific filtering\n switch (scopeType) {\n case \"runtime\":\n return (\n entry.scope.executionId === context.executionId &&\n (context.scenarioId === undefined || entry.scope.scenarioId === context.scenarioId)\n );\n case \"scenario\":\n return entry.scope.scenarioId === context.scenarioId;\n case \"feature\":\n return entry.scope.featureId === context.featureId;\n case \"environment\":\n return entry.scope.environmentId === context.environmentId;\n case \"global\":\n return true;\n default:\n return false;\n }\n });\n }\n\n private lookupSystemEnv(key: string, context: ResolutionContext): ScopedValue | null {\n const envValue = context.systemEnvOverrides[key];\n if (envValue !== undefined) {\n return {\n key,\n value: envValue,\n scope: \"global\", // system env doesn't have its own scope type\n source: \"system\",\n dataType: \"string\",\n fromSystemEnv: true,\n };\n }\n return null;\n }\n}\n","/**\n * EvaluatorRegistry: Plugin registry for expression evaluators.\n *\n * Each evaluator handles a specific prefix (e.g. \"faker:\", \"js:\", \"date:\").\n * The registry is the single point of registration and lookup.\n */\n\nimport type { IEvaluator } from \"../types\";\n\nexport class EvaluatorRegistry {\n private readonly evaluators = new Map<string, IEvaluator>();\n\n /**\n * Register an evaluator for a given prefix.\n * Overwrites any previously registered evaluator for the same prefix.\n */\n register(evaluator: IEvaluator): void {\n this.evaluators.set(evaluator.prefix, evaluator);\n }\n\n /**\n * Get the evaluator for a given prefix.\n * Returns undefined if no evaluator is registered for the prefix.\n */\n get(prefix: string): IEvaluator | undefined {\n return this.evaluators.get(prefix);\n }\n\n /**\n * Check if an evaluator is registered for a given prefix.\n */\n has(prefix: string): boolean {\n return this.evaluators.has(prefix);\n }\n\n /**\n * Get all registered prefix names.\n */\n prefixes(): string[] {\n return [...this.evaluators.keys()];\n }\n}\n","import type { IEvaluator } from \"../types\";\nimport { parsePath } from \"../path-utils\";\n\n/**\n * FakerEvaluator: Generates fake data using @faker-js/faker.\n *\n * Syntax: `{{faker:person.firstName}}` or `{{faker:string.alphanumeric(10)}}`\n *\n * It uses a lazy-loading strategy for the faker library and its locales\n * to keep the initial bundle size small.\n */\nexport class FakerEvaluator implements IEvaluator {\n readonly prefix = \"faker\";\n private fakerInstance: any = null;\n private readonly locale: string;\n\n constructor(options?: { locale?: string }) {\n this.locale = options?.locale ?? \"en\";\n }\n\n async evaluate(expression: string, _scopeValues: Record<string, string>): Promise<string> {\n const faker = await this.getFaker();\n\n // Parse method path and arguments: e.g. \"string.alphanumeric(10)\"\n const match = expression.match(/^([^(]+)(?:\\((.*)\\))?$/);\n if (!match) {\n throw new Error(`Invalid faker expression: \"${expression}\"`);\n }\n\n const path = match[1]!.trim();\n const argsStr = match[2];\n\n // Split path: \"person.firstName\" -> [\"person\", \"firstName\"]\n const parts = parsePath(path);\n\n // Dynamic lookup on faker instance\n let current: any = faker;\n for (const part of parts) {\n if (current && part in current) {\n current = current[part];\n } else {\n throw new Error(`Faker method not found: \"${path}\"`);\n }\n }\n\n if (typeof current !== \"function\") {\n return String(current);\n }\n\n // Parse simple arguments (comma-separated, supports numbers and strings)\n const args = this.parseArgs(argsStr, _scopeValues);\n const result = current.apply(faker, args);\n\n return String(result);\n }\n\n private async getFaker() {\n if (this.fakerInstance) return this.fakerInstance;\n\n try {\n // Lazy load faker with the specific locale to minimize bundle size\n const { faker } = await import(/* @vite-ignore */ `@faker-js/faker/locale/${this.locale}`);\n this.fakerInstance = faker;\n return faker;\n } catch {\n // Fallback to English if the specified locale fails to load\n const { faker } = await import(\"@faker-js/faker/locale/en\");\n this.fakerInstance = faker;\n return faker;\n }\n }\n\n private parseArgs(argsStr: string | undefined, scopeValues: Record<string, string>): any[] {\n if (!argsStr) return [];\n\n const trimmed = argsStr.trim();\n\n // Support simple JSON object as a single argument (common for faker options)\n if (trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\")) {\n try {\n // Try to parse as JSON. We might need to handle single quotes or unquoted keys\n // for \"casual\" syntax, but let's stick to valid JSON for now.\n const cleaned = trimmed.replace(/(['\"])?([a-zA-Z0-9_]+)(['\"])?:/g, '\"$2\":');\n return [JSON.parse(cleaned)];\n } catch {\n // Fall back to splitting by comma\n }\n }\n\n // Smart splitter that respects quotes and brackets\n const rawArgs = this.splitByComma(trimmed);\n\n return rawArgs.map((arg) => {\n let p = arg.trim();\n\n // 1. Resolve whole tokens first: {{key}}\n const tokenMatch = p.match(/^{{(.*)}}$/);\n if (tokenMatch) {\n const key = tokenMatch[1]!.trim();\n p = scopeValues[key] ?? p;\n }\n // 4. Fallback: direct scope lookup (if not quoted and not a numeric/boolean literal)\n else if (!(p.startsWith(\"'\") || p.startsWith('\"'))) {\n // Check if it's NOT a number/bool before looking up\n const isLiteral = /^-?\\d+(\\.\\d+)?$/.test(p) || p === \"true\" || p === \"false\";\n if (!isLiteral && p in scopeValues) {\n p = scopeValues[p]!;\n }\n }\n\n // 2. Type parsing (handles numeric, boolean, quoted strings)\n // Handle numeric args\n if (/^-?\\d+(\\.\\d+)?$/.test(p)) {\n return Number(p);\n }\n // Handle boolean args\n if (p === \"true\") return true;\n if (p === \"false\") return false;\n\n // Handle quoted strings and interpolate Blinq tokens inside them\n if ((p.startsWith(\"'\") && p.endsWith(\"'\")) || (p.startsWith('\"') && p.endsWith('\"'))) {\n let content = p.slice(1, -1);\n\n // Resolve internal tokens: e.g. \"User: {{user_id}}\"\n // We use a non-greedy regex to find all double-brace patterns\n content = content.replace(/{{(.*?)}}/g, (match, key) => {\n const trimmedKey = key.trim();\n return scopeValues[trimmedKey] ?? match;\n });\n\n return content;\n }\n\n return p;\n });\n }\n\n /**\n * Simple state-machine based splitter that respects quotes and brackets.\n */\n private splitByComma(input: string): string[] {\n const enum SplitterState {\n Default,\n InQuote,\n }\n\n const args: string[] = [];\n let start = 0;\n let depth = 0;\n let state: SplitterState = SplitterState.Default;\n let quoteChar: string | null = null;\n\n for (let i = 0; i < input.length; i++) {\n const char = input[i];\n\n switch (state) {\n case SplitterState.InQuote:\n if (char === quoteChar && input[i - 1] !== \"\\\\\") {\n state = SplitterState.Default;\n quoteChar = null;\n }\n break;\n\n case SplitterState.Default:\n if (char === \"'\" || char === '\"') {\n state = SplitterState.InQuote;\n quoteChar = char;\n } else if (char === \"{\" || char === \"[\" || char === \"(\") {\n depth++;\n } else if (char === \"}\" || char === \"]\" || char === \")\") {\n depth--;\n } else if (char === \",\" && depth === 0) {\n args.push(input.substring(start, i));\n start = i + 1;\n }\n break;\n }\n }\n\n args.push(input.substring(start));\n return args;\n }\n}\n","/**\n * @implements {IHooks}\n */\nclass Hooks {\n\t/**\n\t * @callback HookCallback\n\t * @this {*|Jsep} this\n\t * @param {Jsep} env\n\t * @returns: void\n\t */\n\t/**\n\t * Adds the given callback to the list of callbacks for the given hook.\n\t *\n\t * The callback will be invoked when the hook it is registered for is run.\n\t *\n\t * One callback function can be registered to multiple hooks and the same hook multiple times.\n\t *\n\t * @param {string|object} name The name of the hook, or an object of callbacks keyed by name\n\t * @param {HookCallback|boolean} callback The callback function which is given environment variables.\n\t * @param {?boolean} [first=false] Will add the hook to the top of the list (defaults to the bottom)\n\t * @public\n\t */\n\tadd(name, callback, first) {\n\t\tif (typeof arguments[0] != 'string') {\n\t\t\t// Multiple hook callbacks, keyed by name\n\t\t\tfor (let name in arguments[0]) {\n\t\t\t\tthis.add(name, arguments[0][name], arguments[1]);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t(Array.isArray(name) ? name : [name]).forEach(function (name) {\n\t\t\t\tthis[name] = this[name] || [];\n\n\t\t\t\tif (callback) {\n\t\t\t\t\tthis[name][first ? 'unshift' : 'push'](callback);\n\t\t\t\t}\n\t\t\t}, this);\n\t\t}\n\t}\n\n\t/**\n\t * Runs a hook invoking all registered callbacks with the given environment variables.\n\t *\n\t * Callbacks will be invoked synchronously and in the order in which they were registered.\n\t *\n\t * @param {string} name The name of the hook.\n\t * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.\n\t * @public\n\t */\n\trun(name, env) {\n\t\tthis[name] = this[name] || [];\n\t\tthis[name].forEach(function (callback) {\n\t\t\tcallback.call(env && env.context ? env.context : env, env);\n\t\t});\n\t}\n}\n\n/**\n * @implements {IPlugins}\n */\nclass Plugins {\n\tconstructor(jsep) {\n\t\tthis.jsep = jsep;\n\t\tthis.registered = {};\n\t}\n\n\t/**\n\t * @callback PluginSetup\n\t * @this {Jsep} jsep\n\t * @returns: void\n\t */\n\t/**\n\t * Adds the given plugin(s) to the registry\n\t *\n\t * @param {object} plugins\n\t * @param {string} plugins.name The name of the plugin\n\t * @param {PluginSetup} plugins.init The init function\n\t * @public\n\t */\n\tregister(...plugins) {\n\t\tplugins.forEach((plugin) => {\n\t\t\tif (typeof plugin !== 'object' || !plugin.name || !plugin.init) {\n\t\t\t\tthrow new Error('Invalid JSEP plugin format');\n\t\t\t}\n\t\t\tif (this.registered[plugin.name]) {\n\t\t\t\t// already registered. Ignore.\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tplugin.init(this.jsep);\n\t\t\tthis.registered[plugin.name] = plugin;\n\t\t});\n\t}\n}\n\n// JavaScript Expression Parser (JSEP) 1.4.0\n\nclass Jsep {\n\t/**\n\t * @returns {string}\n\t */\n\tstatic get version() {\n\t\t// To be filled in by the template\n\t\treturn '1.4.0';\n\t}\n\n\t/**\n\t * @returns {string}\n\t */\n\tstatic toString() {\n\t\treturn 'JavaScript Expression Parser (JSEP) v' + Jsep.version;\n\t};\n\n\t// ==================== CONFIG ================================\n\t/**\n\t * @method addUnaryOp\n\t * @param {string} op_name The name of the unary op to add\n\t * @returns {Jsep}\n\t */\n\tstatic addUnaryOp(op_name) {\n\t\tJsep.max_unop_len = Math.max(op_name.length, Jsep.max_unop_len);\n\t\tJsep.unary_ops[op_name] = 1;\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method jsep.addBinaryOp\n\t * @param {string} op_name The name of the binary op to add\n\t * @param {number} precedence The precedence of the binary op (can be a float). Higher number = higher precedence\n\t * @param {boolean} [isRightAssociative=false] whether operator is right-associative\n\t * @returns {Jsep}\n\t */\n\tstatic addBinaryOp(op_name, precedence, isRightAssociative) {\n\t\tJsep.max_binop_len = Math.max(op_name.length, Jsep.max_binop_len);\n\t\tJsep.binary_ops[op_name] = precedence;\n\t\tif (isRightAssociative) {\n\t\t\tJsep.right_associative.add(op_name);\n\t\t}\n\t\telse {\n\t\t\tJsep.right_associative.delete(op_name);\n\t\t}\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method addIdentifierChar\n\t * @param {string} char The additional character to treat as a valid part of an identifier\n\t * @returns {Jsep}\n\t */\n\tstatic addIdentifierChar(char) {\n\t\tJsep.additional_identifier_chars.add(char);\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method addLiteral\n\t * @param {string} literal_name The name of the literal to add\n\t * @param {*} literal_value The value of the literal\n\t * @returns {Jsep}\n\t */\n\tstatic addLiteral(literal_name, literal_value) {\n\t\tJsep.literals[literal_name] = literal_value;\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeUnaryOp\n\t * @param {string} op_name The name of the unary op to remove\n\t * @returns {Jsep}\n\t */\n\tstatic removeUnaryOp(op_name) {\n\t\tdelete Jsep.unary_ops[op_name];\n\t\tif (op_name.length === Jsep.max_unop_len) {\n\t\t\tJsep.max_unop_len = Jsep.getMaxKeyLen(Jsep.unary_ops);\n\t\t}\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeAllUnaryOps\n\t * @returns {Jsep}\n\t */\n\tstatic removeAllUnaryOps() {\n\t\tJsep.unary_ops = {};\n\t\tJsep.max_unop_len = 0;\n\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeIdentifierChar\n\t * @param {string} char The additional character to stop treating as a valid part of an identifier\n\t * @returns {Jsep}\n\t */\n\tstatic removeIdentifierChar(char) {\n\t\tJsep.additional_identifier_chars.delete(char);\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeBinaryOp\n\t * @param {string} op_name The name of the binary op to remove\n\t * @returns {Jsep}\n\t */\n\tstatic removeBinaryOp(op_name) {\n\t\tdelete Jsep.binary_ops[op_name];\n\n\t\tif (op_name.length === Jsep.max_binop_len) {\n\t\t\tJsep.max_binop_len = Jsep.getMaxKeyLen(Jsep.binary_ops);\n\t\t}\n\t\tJsep.right_associative.delete(op_name);\n\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeAllBinaryOps\n\t * @returns {Jsep}\n\t */\n\tstatic removeAllBinaryOps() {\n\t\tJsep.binary_ops = {};\n\t\tJsep.max_binop_len = 0;\n\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeLiteral\n\t * @param {string} literal_name The name of the literal to remove\n\t * @returns {Jsep}\n\t */\n\tstatic removeLiteral(literal_name) {\n\t\tdelete Jsep.literals[literal_name];\n\t\treturn Jsep;\n\t}\n\n\t/**\n\t * @method removeAllLiterals\n\t * @returns {Jsep}\n\t */\n\tstatic removeAllLiterals() {\n\t\tJsep.literals = {};\n\n\t\treturn Jsep;\n\t}\n\t// ==================== END CONFIG ============================\n\n\n\t/**\n\t * @returns {string}\n\t */\n\tget char() {\n\t\treturn this.expr.charAt(this.index);\n\t}\n\n\t/**\n\t * @returns {number}\n\t */\n\tget code() {\n\t\treturn this.expr.charCodeAt(this.index);\n\t};\n\n\n\t/**\n\t * @param {string} expr a string with the passed in express\n\t * @returns Jsep\n\t */\n\tconstructor(expr) {\n\t\t// `index` stores the character number we are currently at\n\t\t// All of the gobbles below will modify `index` as we move along\n\t\tthis.expr = expr;\n\t\tthis.index = 0;\n\t}\n\n\t/**\n\t * static top-level parser\n\t * @returns {jsep.Expression}\n\t */\n\tstatic parse(expr) {\n\t\treturn (new Jsep(expr)).parse();\n\t}\n\n\t/**\n\t * Get the longest key length of any object\n\t * @param {object} obj\n\t * @returns {number}\n\t */\n\tstatic getMaxKeyLen(obj) {\n\t\treturn Math.max(0, ...Object.keys(obj).map(k => k.length));\n\t}\n\n\t/**\n\t * `ch` is a character code in the next three functions\n\t * @param {number} ch\n\t * @returns {boolean}\n\t */\n\tstatic isDecimalDigit(ch) {\n\t\treturn (ch >= 48 && ch <= 57); // 0...9\n\t}\n\n\t/**\n\t * Returns the precedence of a binary operator or `0` if it isn't a binary operator. Can be float.\n\t * @param {string} op_val\n\t * @returns {number}\n\t */\n\tstatic binaryPrecedence(op_val) {\n\t\treturn Jsep.binary_ops[op_val] || 0;\n\t}\n\n\t/**\n\t * Looks for start of identifier\n\t * @param {number} ch\n\t * @returns {boolean}\n\t */\n\tstatic isIdentifierStart(ch) {\n\t\treturn (ch >= 65 && ch <= 90) || // A...Z\n\t\t\t(ch >= 97 && ch <= 122) || // a...z\n\t\t\t(ch >= 128 && !Jsep.binary_ops[String.fromCharCode(ch)]) || // any non-ASCII that is not an operator\n\t\t\t(Jsep.additional_identifier_chars.has(String.fromCharCode(ch))); // additional characters\n\t}\n\n\t/**\n\t * @param {number} ch\n\t * @returns {boolean}\n\t */\n\tstatic isIdentifierPart(ch) {\n\t\treturn Jsep.isIdentifierStart(ch) || Jsep.isDecimalDigit(ch);\n\t}\n\n\t/**\n\t * throw error at index of the expression\n\t * @param {string} message\n\t * @throws\n\t */\n\tthrowError(message) {\n\t\tconst error = new Error(message + ' at character ' + this.index);\n\t\terror.index = this.index;\n\t\terror.description = message;\n\t\tthrow error;\n\t}\n\n\t/**\n\t * Run a given hook\n\t * @param {string} name\n\t * @param {jsep.Expression|false} [node]\n\t * @returns {?jsep.Expression}\n\t */\n\trunHook(name, node) {\n\t\tif (Jsep.hooks[name]) {\n\t\t\tconst env = { context: this, node };\n\t\t\tJsep.hooks.run(name, env);\n\t\t\treturn env.node;\n\t\t}\n\t\treturn node;\n\t}\n\n\t/**\n\t * Runs a given hook until one returns a node\n\t * @param {string} name\n\t * @returns {?jsep.Expression}\n\t */\n\tsearchHook(name) {\n\t\tif (Jsep.hooks[name]) {\n\t\t\tconst env = { context: this };\n\t\t\tJsep.hooks[name].find(function (callback) {\n\t\t\t\tcallback.call(env.context, env);\n\t\t\t\treturn env.node;\n\t\t\t});\n\t\t\treturn env.node;\n\t\t}\n\t}\n\n\t/**\n\t * Push `index` up to the next non-space character\n\t */\n\tgobbleSpaces() {\n\t\tlet ch = this.code;\n\t\t// Whitespace\n\t\twhile (ch === Jsep.SPACE_CODE\n\t\t|| ch === Jsep.TAB_CODE\n\t\t|| ch === Jsep.LF_CODE\n\t\t|| ch === Jsep.CR_CODE) {\n\t\t\tch = this.expr.charCodeAt(++this.index);\n\t\t}\n\t\tthis.runHook('gobble-spaces');\n\t}\n\n\t/**\n\t * Top-level method to parse all expressions and returns compound or single node\n\t * @returns {jsep.Expression}\n\t */\n\tparse() {\n\t\tthis.runHook('before-all');\n\t\tconst nodes = this.gobbleExpressions();\n\n\t\t// If there's only one expression just try returning the expression\n\t\tconst node = nodes.length === 1\n\t\t ? nodes[0]\n\t\t\t: {\n\t\t\t\ttype: Jsep.COMPOUND,\n\t\t\t\tbody: nodes\n\t\t\t};\n\t\treturn this.runHook('after-all', node);\n\t}\n\n\t/**\n\t * top-level parser (but can be reused within as well)\n\t * @param {number} [untilICode]\n\t * @returns {jsep.Expression[]}\n\t */\n\tgobbleExpressions(untilICode) {\n\t\tlet nodes = [], ch_i, node;\n\n\t\twhile (this.index < this.expr.length) {\n\t\t\tch_i = this.code;\n\n\t\t\t// Expressions can be separated by semicolons, commas, or just inferred without any\n\t\t\t// separators\n\t\t\tif (ch_i === Jsep.SEMCOL_CODE || ch_i === Jsep.COMMA_CODE) {\n\t\t\t\tthis.index++; // ignore separators\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Try to gobble each expression individually\n\t\t\t\tif (node = this.gobbleExpression()) {\n\t\t\t\t\tnodes.push(node);\n\t\t\t\t\t// If we weren't able to find a binary expression and are out of room, then\n\t\t\t\t\t// the expression passed in probably has too much\n\t\t\t\t}\n\t\t\t\telse if (this.index < this.expr.length) {\n\t\t\t\t\tif (ch_i === untilICode) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tthis.throwError('Unexpected \"' + this.char + '\"');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn nodes;\n\t}\n\n\t/**\n\t * The main parsing function.\n\t * @returns {?jsep.Expression}\n\t */\n\tgobbleExpression() {\n\t\tconst node = this.searchHook('gobble-expression') || this.gobbleBinaryExpression();\n\t\tthis.gobbleSpaces();\n\n\t\treturn this.runHook('after-expression', node);\n\t}\n\n\t/**\n\t * Search for the operation portion of the string (e.g. `+`, `===`)\n\t * Start by taking the longest possible binary operations (3 characters: `===`, `!==`, `>>>`)\n\t * and move down from 3 to 2 to 1 character until a matching binary operation is found\n\t * then, return that binary operation\n\t * @returns {string|boolean}\n\t */\n\tgobbleBinaryOp() {\n\t\tthis.gobbleSpaces();\n\t\tlet to_check = this.expr.substr(this.index, Jsep.max_binop_len);\n\t\tlet tc_len = to_check.length;\n\n\t\twhile (tc_len > 0) {\n\t\t\t// Don't accept a binary op when it is an identifier.\n\t\t\t// Binary ops that start with a identifier-valid character must be followed\n\t\t\t// by a non identifier-part valid character\n\t\t\tif (Jsep.binary_ops.hasOwnProperty(to_check) && (\n\t\t\t\t!Jsep.isIdentifierStart(this.code) ||\n\t\t\t\t(this.index + to_check.length < this.expr.length && !Jsep.isIdentifierPart(this.expr.charCodeAt(this.index + to_check.length)))\n\t\t\t)) {\n\t\t\t\tthis.index += tc_len;\n\t\t\t\treturn to_check;\n\t\t\t}\n\t\t\tto_check = to_check.substr(0, --tc_len);\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * This function is responsible for gobbling an individual expression,\n\t * e.g. `1`, `1+2`, `a+(b*2)-Math.sqrt(2)`\n\t * @returns {?jsep.BinaryExpression}\n\t */\n\tgobbleBinaryExpression() {\n\t\tlet node, biop, prec, stack, biop_info, left, right, i, cur_biop;\n\n\t\t// First, try to get the leftmost thing\n\t\t// Then, check to see if there's a binary operator operating on that leftmost thing\n\t\t// Don't gobbleBinaryOp without a left-hand-side\n\t\tleft = this.gobbleToken();\n\t\tif (!left) {\n\t\t\treturn left;\n\t\t}\n\t\tbiop = this.gobbleBinaryOp();\n\n\t\t// If there wasn't a binary operator, just return the leftmost node\n\t\tif (!biop) {\n\t\t\treturn left;\n\t\t}\n\n\t\t// Otherwise, we need to start a stack to properly place the binary operations in their\n\t\t// precedence structure\n\t\tbiop_info = { value: biop, prec: Jsep.binaryPrecedence(biop), right_a: Jsep.right_associative.has(biop) };\n\n\t\tright = this.gobbleToken();\n\n\t\tif (!right) {\n\t\t\tthis.throwError(\"Expected expression after \" + biop);\n\t\t}\n\n\t\tstack = [left, biop_info, right];\n\n\t\t// Properly deal with precedence using [recursive descent](http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm)\n\t\twhile ((biop = this.gobbleBinaryOp())) {\n\t\t\tprec = Jsep.binaryPrecedence(biop);\n\n\t\t\tif (prec === 0) {\n\t\t\t\tthis.index -= biop.length;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tbiop_info = { value: biop, prec, right_a: Jsep.right_associative.has(biop) };\n\n\t\t\tcur_biop = biop;\n\n\t\t\t// Reduce: make a binary expression from the three topmost entries.\n\t\t\tconst comparePrev = prev => biop_info.right_a && prev.right_a\n\t\t\t\t? prec > prev.prec\n\t\t\t\t: prec <= prev.prec;\n\t\t\twhile ((stack.length > 2) && comparePrev(stack[stack.length - 2])) {\n\t\t\t\tright = stack.pop();\n\t\t\t\tbiop = stack.pop().value;\n\t\t\t\tleft = stack.pop();\n\t\t\t\tnode = {\n\t\t\t\t\ttype: Jsep.BINARY_EXP,\n\t\t\t\t\toperator: biop,\n\t\t\t\t\tleft,\n\t\t\t\t\tright\n\t\t\t\t};\n\t\t\t\tstack.push(node);\n\t\t\t}\n\n\t\t\tnode = this.gobbleToken();\n\n\t\t\tif (!node) {\n\t\t\t\tthis.throwError(\"Expected expression after \" + cur_biop);\n\t\t\t}\n\n\t\t\tstack.push(biop_info, node);\n\t\t}\n\n\t\ti = stack.length - 1;\n\t\tnode = stack[i];\n\n\t\twhile (i > 1) {\n\t\t\tnode = {\n\t\t\t\ttype: Jsep.BINARY_EXP,\n\t\t\t\toperator: stack[i - 1].value,\n\t\t\t\tleft: stack[i - 2],\n\t\t\t\tright: node\n\t\t\t};\n\t\t\ti -= 2;\n\t\t}\n\n\t\treturn node;\n\t}\n\n\t/**\n\t * An individual part of a binary expression:\n\t * e.g. `foo.bar(baz)`, `1`, `\"abc\"`, `(a % 2)` (because it's in parenthesis)\n\t * @returns {boolean|jsep.Expression}\n\t */\n\tgobbleToken() {\n\t\tlet ch, to_check, tc_len, node;\n\n\t\tthis.gobbleSpaces();\n\t\tnode = this.searchHook('gobble-token');\n\t\tif (node) {\n\t\t\treturn this.runHook('after-token', node);\n\t\t}\n\n\t\tch = this.code;\n\n\t\tif (Jsep.isDecimalDigit(ch) || ch === Jsep.PERIOD_CODE) {\n\t\t\t// Char code 46 is a dot `.` which can start off a numeric literal\n\t\t\treturn this.gobbleNumericLiteral();\n\t\t}\n\n\t\tif (ch === Jsep.SQUOTE_CODE || ch === Jsep.DQUOTE_CODE) {\n\t\t\t// Single or double quotes\n\t\t\tnode = this.gobbleStringLiteral();\n\t\t}\n\t\telse if (ch === Jsep.OBRACK_CODE) {\n\t\t\tnode = this.gobbleArray();\n\t\t}\n\t\telse {\n\t\t\tto_check = this.expr.substr(this.index, Jsep.max_unop_len);\n\t\t\ttc_len = to_check.length;\n\n\t\t\twhile (tc_len > 0) {\n\t\t\t\t// Don't accept an unary op when it is an identifier.\n\t\t\t\t// Unary ops that start with a identifier-valid character must be followed\n\t\t\t\t// by a non identifier-part valid character\n\t\t\t\tif (Jsep.unary_ops.hasOwnProperty(to_check) && (\n\t\t\t\t\t!Jsep.isIdentifierStart(this.code) ||\n\t\t\t\t\t(this.index + to_check.length < this.expr.length && !Jsep.isIdentifierPart(this.expr.charCodeAt(this.index + to_check.length)))\n\t\t\t\t)) {\n\t\t\t\t\tthis.index += tc_len;\n\t\t\t\t\tconst argument = this.gobbleToken();\n\t\t\t\t\tif (!argument) {\n\t\t\t\t\t\tthis.throwError('missing unaryOp argument');\n\t\t\t\t\t}\n\t\t\t\t\treturn this.runHook('after-token', {\n\t\t\t\t\t\ttype: Jsep.UNARY_EXP,\n\t\t\t\t\t\toperator: to_check,\n\t\t\t\t\t\targument,\n\t\t\t\t\t\tprefix: true\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tto_check = to_check.substr(0, --tc_len);\n\t\t\t}\n\n\t\t\tif (Jsep.isIdentifierStart(ch)) {\n\t\t\t\tnode = this.gobbleIdentifier();\n\t\t\t\tif (Jsep.literals.hasOwnProperty(node.name)) {\n\t\t\t\t\tnode = {\n\t\t\t\t\t\ttype: Jsep.LITERAL,\n\t\t\t\t\t\tvalue: Jsep.literals[node.name],\n\t\t\t\t\t\traw: node.name,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\telse if (node.name === Jsep.this_str) {\n\t\t\t\t\tnode = { type: Jsep.THIS_EXP };\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (ch === Jsep.OPAREN_CODE) { // open parenthesis\n\t\t\t\tnode = this.gobbleGroup();\n\t\t\t}\n\t\t}\n\n\t\tif (!node) {\n\t\t\treturn this.runHook('after-token', false);\n\t\t}\n\n\t\tnode = this.gobbleTokenProperty(node);\n\t\treturn this.runHook('after-token', node);\n\t}\n\n\t/**\n\t * Gobble properties of of identifiers/strings/arrays/groups.\n\t * e.g. `foo`, `bar.baz`, `foo['bar'].baz`\n\t * It also gobbles function calls:\n\t * e.g. `Math.acos(obj.angle)`\n\t * @param {jsep.Expression} node\n\t * @returns {jsep.Expression}\n\t */\n\tgobbleTokenProperty(node) {\n\t\tthis.gobbleSpaces();\n\n\t\tlet ch = this.code;\n\t\twhile (ch === Jsep.PERIOD_CODE || ch === Jsep.OBRACK_CODE || ch === Jsep.OPAREN_CODE || ch === Jsep.QUMARK_CODE) {\n\t\t\tlet optional;\n\t\t\tif (ch === Jsep.QUMARK_CODE) {\n\t\t\t\tif (this.expr.charCodeAt(this.index + 1) !== Jsep.PERIOD_CODE) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\toptional = true;\n\t\t\t\tthis.index += 2;\n\t\t\t\tthis.gobbleSpaces();\n\t\t\t\tch = this.code;\n\t\t\t}\n\t\t\tthis.index++;\n\n\t\t\tif (ch === Jsep.OBRACK_CODE) {\n\t\t\t\tnode = {\n\t\t\t\t\ttype: Jsep.MEMBER_EXP,\n\t\t\t\t\tcomputed: true,\n\t\t\t\t\tobject: node,\n\t\t\t\t\tproperty: this.gobbleExpression()\n\t\t\t\t};\n\t\t\t\tif (!node.property) {\n\t\t\t\t\tthis.throwError('Unexpected \"' + this.char + '\"');\n\t\t\t\t}\n\t\t\t\tthis.gobbleSpaces();\n\t\t\t\tch = this.code;\n\t\t\t\tif (ch !== Jsep.CBRACK_CODE) {\n\t\t\t\t\tthis.throwError('Unclosed [');\n\t\t\t\t}\n\t\t\t\tthis.index++;\n\t\t\t}\n\t\t\telse if (ch === Jsep.OPAREN_CODE) {\n\t\t\t\t// A function call is being made; gobble all the arguments\n\t\t\t\tnode = {\n\t\t\t\t\ttype: Jsep.CALL_EXP,\n\t\t\t\t\t'arguments': this.gobbleArguments(Jsep.CPAREN_CODE),\n\t\t\t\t\tcallee: node\n\t\t\t\t};\n\t\t\t}\n\t\t\telse if (ch === Jsep.PERIOD_CODE || optional) {\n\t\t\t\tif (optional) {\n\t\t\t\t\tthis.index--;\n\t\t\t\t}\n\t\t\t\tthis.gobbleSpaces();\n\t\t\t\tnode = {\n\t\t\t\t\ttype: Jsep.MEMBER_EXP,\n\t\t\t\t\tcomputed: false,\n\t\t\t\t\tobject: node,\n\t\t\t\t\tproperty: this.gobbleIdentifier(),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (optional) {\n\t\t\t\tnode.optional = true;\n\t\t\t} // else leave undefined for compatibility with esprima\n\n\t\t\tthis.gobbleSpaces();\n\t\t\tch = this.code;\n\t\t}\n\n\t\treturn node;\n\t}\n\n\t/**\n\t * Parse simple numeric literals: `12`, `3.4`, `.5`. Do this by using a string to\n\t * keep track of everything in the numeric literal and then calling `parseFloat` on that string\n\t * @returns {jsep.Literal}\n\t */\n\tgobbleNumericLiteral() {\n\t\tlet number = '', ch, chCode;\n\n\t\twhile (Jsep.isDecimalDigit(this.code)) {\n\t\t\tnumber += this.expr.charAt(this.index++);\n\t\t}\n\n\t\tif (this.code === Jsep.PERIOD_CODE) { // can start with a decimal marker\n\t\t\tnumber += this.expr.charAt(this.index++);\n\n\t\t\twhile (Jsep.isDecimalDigit(this.code)) {\n\t\t\t\tnumber += this.expr.charAt(this.index++);\n\t\t\t}\n\t\t}\n\n\t\tch = this.char;\n\n\t\tif (ch === 'e' || ch === 'E') { // exponent marker\n\t\t\tnumber += this.expr.charAt(this.index++);\n\t\t\tch = this.char;\n\n\t\t\tif (ch === '+' || ch === '-') { // exponent sign\n\t\t\t\tnumber += this.expr.charAt(this.index++);\n\t\t\t}\n\n\t\t\twhile (Jsep.isDecimalDigit(this.code)) { // exponent itself\n\t\t\t\tnumber += this.expr.charAt(this.index++);\n\t\t\t}\n\n\t\t\tif (!Jsep.isDecimalDigit(this.expr.charCodeAt(this.index - 1)) ) {\n\t\t\t\tthis.throwError('Expected exponent (' + number + this.char + ')');\n\t\t\t}\n\t\t}\n\n\t\tchCode = this.code;\n\n\t\t// Check to make sure this isn't a variable name that start with a number (123abc)\n\t\tif (Jsep.isIdentifierStart(chCode)) {\n\t\t\tthis.throwError('Variable names cannot start with a number (' +\n\t\t\t\tnumber + this.char + ')');\n\t\t}\n\t\telse if (chCode === Jsep.PERIOD_CODE || (number.length === 1 && number.charCodeAt(0) === Jsep.PERIOD_CODE)) {\n\t\t\tthis.throwError('Unexpected period');\n\t\t}\n\n\t\treturn {\n\t\t\ttype: Jsep.LITERAL,\n\t\t\tvalue: parseFloat(number),\n\t\t\traw: number\n\t\t};\n\t}\n\n\t/**\n\t * Parses a string literal, staring with single or double quotes with basic support for escape codes\n\t * e.g. `\"hello world\"`, `'this is\\nJSEP'`\n\t * @returns {jsep.Literal}\n\t */\n\tgobbleStringLiteral() {\n\t\tlet str = '';\n\t\tconst startIndex = this.index;\n\t\tconst quote = this.expr.charAt(this.index++);\n\t\tlet closed = false;\n\n\t\twhile (this.index < this.expr.length) {\n\t\t\tlet ch = this.expr.charAt(this.index++);\n\n\t\t\tif (ch === quote) {\n\t\t\t\tclosed = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse if (ch === '\\\\') {\n\t\t\t\t// Check for all of the common escape codes\n\t\t\t\tch = this.expr.charAt(this.index++);\n\n\t\t\t\tswitch (ch) {\n\t\t\t\t\tcase 'n': str += '\\n'; break;\n\t\t\t\t\tcase 'r': str += '\\r'; break;\n\t\t\t\t\tcase 't': str += '\\t'; break;\n\t\t\t\t\tcase 'b': str += '\\b'; break;\n\t\t\t\t\tcase 'f': str += '\\f'; break;\n\t\t\t\t\tcase 'v': str += '\\x0B'; break;\n\t\t\t\t\tdefault : str += ch;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tstr += ch;\n\t\t\t}\n\t\t}\n\n\t\tif (!closed) {\n\t\t\tthis.throwError('Unclosed quote after \"' + str + '\"');\n\t\t}\n\n\t\treturn {\n\t\t\ttype: Jsep.LITERAL,\n\t\t\tvalue: str,\n\t\t\traw: this.expr.substring(startIndex, this.index),\n\t\t};\n\t}\n\n\t/**\n\t * Gobbles only identifiers\n\t * e.g.: `foo`, `_value`, `$x1`\n\t * Also, this function checks if that identifier is a literal:\n\t * (e.g. `true`, `false`, `null`) or `this`\n\t * @returns {jsep.Identifier}\n\t */\n\tgobbleIdentifier() {\n\t\tlet ch = this.code, start = this.index;\n\n\t\tif (Jsep.isIdentifierStart(ch)) {\n\t\t\tthis.index++;\n\t\t}\n\t\telse {\n\t\t\tthis.throwError('Unexpected ' + this.char);\n\t\t}\n\n\t\twhile (this.index < this.expr.length) {\n\t\t\tch = this.code;\n\n\t\t\tif (Jsep.isIdentifierPart(ch)) {\n\t\t\t\tthis.index++;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\ttype: Jsep.IDENTIFIER,\n\t\t\tname: this.expr.slice(start, this.index),\n\t\t};\n\t}\n\n\t/**\n\t * Gobbles a list of arguments within the context of a function call\n\t * or array literal. This function also assumes that the opening character\n\t * `(` or `[` has already been gobbled, and gobbles expressions and commas\n\t * until the terminator character `)` or `]` is encountered.\n\t * e.g. `foo(bar, baz)`, `my_func()`, or `[bar, baz]`\n\t * @param {number} termination\n\t * @returns {jsep.Expression[]}\n\t */\n\tgobbleArguments(termination) {\n\t\tconst args = [];\n\t\tlet closed = false;\n\t\tlet separator_count = 0;\n\n\t\twhile (this.index < this.expr.length) {\n\t\t\tthis.gobbleSpaces();\n\t\t\tlet ch_i = this.code;\n\n\t\t\tif (ch_i === termination) { // done parsing\n\t\t\t\tclosed = true;\n\t\t\t\tthis.index++;\n\n\t\t\t\tif (termination === Jsep.CPAREN_CODE && separator_count && separator_count >= args.length){\n\t\t\t\t\tthis.throwError('Unexpected token ' + String.fromCharCode(termination));\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse if (ch_i === Jsep.COMMA_CODE) { // between expressions\n\t\t\t\tthis.index++;\n\t\t\t\tseparator_count++;\n\n\t\t\t\tif (separator_count !== args.length) { // missing argument\n\t\t\t\t\tif (termination === Jsep.CPAREN_CODE) {\n\t\t\t\t\t\tthis.throwError('Unexpected token ,');\n\t\t\t\t\t}\n\t\t\t\t\telse if (termination === Jsep.CBRACK_CODE) {\n\t\t\t\t\t\tfor (let arg = args.length; arg < separator_count; arg++) {\n\t\t\t\t\t\t\targs.push(null);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (args.length !== separator_count && separator_count !== 0) {\n\t\t\t\t// NOTE: `&& separator_count !== 0` allows for either all commas, or all spaces as arguments\n\t\t\t\tthis.throwError('Expected comma');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconst node = this.gobbleExpression();\n\n\t\t\t\tif (!node || node.type === Jsep.COMPOUND) {\n\t\t\t\t\tthis.throwError('Expected comma');\n\t\t\t\t}\n\n\t\t\t\targs.push(node);\n\t\t\t}\n\t\t}\n\n\t\tif (!closed) {\n\t\t\tthis.throwError('Expected ' + String.fromCharCode(termination));\n\t\t}\n\n\t\treturn args;\n\t}\n\n\t/**\n\t * Responsible for parsing a group of things within parentheses `()`\n\t * that have no identifier in front (so not a function call)\n\t * This function assumes that it needs to gobble the opening parenthesis\n\t * and then tries to gobble everything within that parenthesis, assuming\n\t * that the next thing it should see is the close parenthesis. If not,\n\t * then the expression probably doesn't have a `)`\n\t * @returns {boolean|jsep.Expression}\n\t */\n\tgobbleGroup() {\n\t\tthis.index++;\n\t\tlet nodes = this.gobbleExpressions(Jsep.CPAREN_CODE);\n\t\tif (this.code === Jsep.CPAREN_CODE) {\n\t\t\tthis.index++;\n\t\t\tif (nodes.length === 1) {\n\t\t\t\treturn nodes[0];\n\t\t\t}\n\t\t\telse if (!nodes.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn {\n\t\t\t\t\ttype: Jsep.SEQUENCE_EXP,\n\t\t\t\t\texpressions: nodes,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis.throwError('Unclosed (');\n\t\t}\n\t}\n\n\t/**\n\t * Responsible for parsing Array literals `[1, 2, 3]`\n\t * This function assumes that it needs to gobble the opening bracket\n\t * and then tries to gobble the expressions as arguments.\n\t * @returns {jsep.ArrayExpression}\n\t */\n\tgobbleArray() {\n\t\tthis.index++;\n\n\t\treturn {\n\t\t\ttype: Jsep.ARRAY_EXP,\n\t\t\telements: this.gobbleArguments(Jsep.CBRACK_CODE)\n\t\t};\n\t}\n}\n\n// Static fields:\nconst hooks = new Hooks();\nObject.assign(Jsep, {\n\thooks,\n\tplugins: new Plugins(Jsep),\n\n\t// Node Types\n\t// ----------\n\t// This is the full set of types that any JSEP node can be.\n\t// Store them here to save space when minified\n\tCOMPOUND: 'Compound',\n\tSEQUENCE_EXP: 'SequenceExpression',\n\tIDENTIFIER: 'Identifier',\n\tMEMBER_EXP: 'MemberExpression',\n\tLITERAL: 'Literal',\n\tTHIS_EXP: 'ThisExpression',\n\tCALL_EXP: 'CallExpression',\n\tUNARY_EXP: 'UnaryExpression',\n\tBINARY_EXP: 'BinaryExpression',\n\tARRAY_EXP: 'ArrayExpression',\n\n\tTAB_CODE: 9,\n\tLF_CODE: 10,\n\tCR_CODE: 13,\n\tSPACE_CODE: 32,\n\tPERIOD_CODE: 46, // '.'\n\tCOMMA_CODE: 44, // ','\n\tSQUOTE_CODE: 39, // single quote\n\tDQUOTE_CODE: 34, // double quotes\n\tOPAREN_CODE: 40, // (\n\tCPAREN_CODE: 41, // )\n\tOBRACK_CODE: 91, // [\n\tCBRACK_CODE: 93, // ]\n\tQUMARK_CODE: 63, // ?\n\tSEMCOL_CODE: 59, // ;\n\tCOLON_CODE: 58, // :\n\n\n\t// Operations\n\t// ----------\n\t// Use a quickly-accessible map to store all of the unary operators\n\t// Values are set to `1` (it really doesn't matter)\n\tunary_ops: {\n\t\t'-': 1,\n\t\t'!': 1,\n\t\t'~': 1,\n\t\t'+': 1\n\t},\n\n\t// Also use a map for the binary operations but set their values to their\n\t// binary precedence for quick reference (higher number = higher precedence)\n\t// see [Order of operations](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence)\n\tbinary_ops: {\n\t\t'||': 1, '??': 1,\n\t\t'&&': 2, '|': 3, '^': 4, '&': 5,\n\t\t'==': 6, '!=': 6, '===': 6, '!==': 6,\n\t\t'<': 7, '>': 7, '<=': 7, '>=': 7,\n\t\t'<<': 8, '>>': 8, '>>>': 8,\n\t\t'+': 9, '-': 9,\n\t\t'*': 10, '/': 10, '%': 10,\n\t\t'**': 11,\n\t},\n\n\t// sets specific binary_ops as right-associative\n\tright_associative: new Set(['**']),\n\n\t// Additional valid identifier chars, apart from a-z, A-Z and 0-9 (except on the starting char)\n\tadditional_identifier_chars: new Set(['$', '_']),\n\n\t// Literals\n\t// ----------\n\t// Store the values to return for the various literals we may encounter\n\tliterals: {\n\t\t'true': true,\n\t\t'false': false,\n\t\t'null': null\n\t},\n\n\t// Except for `this`, which is special. This could be changed to something like `'self'` as well\n\tthis_str: 'this',\n});\nJsep.max_unop_len = Jsep.getMaxKeyLen(Jsep.unary_ops);\nJsep.max_binop_len = Jsep.getMaxKeyLen(Jsep.binary_ops);\n\n// Backward Compatibility:\nconst jsep = expr => (new Jsep(expr)).parse();\nconst stdClassProps = Object.getOwnPropertyNames(class Test{});\nObject.getOwnPropertyNames(Jsep)\n\t.filter(prop => !stdClassProps.includes(prop) && jsep[prop] === undefined)\n\t.forEach((m) => {\n\t\tjsep[m] = Jsep[m];\n\t});\njsep.Jsep = Jsep; // allows for const { Jsep } = require('jsep');\n\nconst CONDITIONAL_EXP = 'ConditionalExpression';\n\nvar ternary = {\n\tname: 'ternary',\n\n\tinit(jsep) {\n\t\t// Ternary expression: test ? consequent : alternate\n\t\tjsep.hooks.add('after-expression', function gobbleTernary(env) {\n\t\t\tif (env.node && this.code === jsep.QUMARK_CODE) {\n\t\t\t\tthis.index++;\n\t\t\t\tconst test = env.node;\n\t\t\t\tconst consequent = this.gobbleExpression();\n\n\t\t\t\tif (!consequent) {\n\t\t\t\t\tthis.throwError('Expected expression');\n\t\t\t\t}\n\n\t\t\t\tthis.gobbleSpaces();\n\n\t\t\t\tif (this.code === jsep.COLON_CODE) {\n\t\t\t\t\tthis.index++;\n\t\t\t\t\tconst alternate = this.gobbleExpression();\n\n\t\t\t\t\tif (!alternate) {\n\t\t\t\t\t\tthis.throwError('Expected expression');\n\t\t\t\t\t}\n\t\t\t\t\tenv.node = {\n\t\t\t\t\t\ttype: CONDITIONAL_EXP,\n\t\t\t\t\t\ttest,\n\t\t\t\t\t\tconsequent,\n\t\t\t\t\t\talternate,\n\t\t\t\t\t};\n\n\t\t\t\t\t// check for operators of higher priority than ternary (i.e. assignment)\n\t\t\t\t\t// jsep sets || at 1, and assignment at 0.9, and conditional should be between them\n\t\t\t\t\tif (test.operator && jsep.binary_ops[test.operator] <= 0.9) {\n\t\t\t\t\t\tlet newTest = test;\n\t\t\t\t\t\twhile (newTest.right.operator && jsep.binary_ops[newTest.right.operator] <= 0.9) {\n\t\t\t\t\t\t\tnewTest = newTest.right;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tenv.node.test = newTest.right;\n\t\t\t\t\t\tnewTest.right = env.node;\n\t\t\t\t\t\tenv.node = test;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.throwError('Expected :');\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n};\n\n// Add default plugins:\n\njsep.plugins.register(ternary);\n\nexport { Jsep, jsep as default };\n","import type { IEvaluator } from \"../types\";\nimport jsep from \"jsep\";\n\ntype JSPrimitive = string | number | boolean | null;\ntype JSValue = JSPrimitive | JSValue[] | { [key: string]: JSValue };\ntype EvaluatedNodeValue = JSValue | typeof MATH_IDENTIFIER;\n\nconst MAX_EXPRESSION_LENGTH = 500;\nconst MAX_AST_NODES = 100;\nconst MAX_DEPTH = 10;\nconst MAX_MEMBER_CHAIN_DEPTH = 5;\nconst BLOCKED_IDENTIFIERS = new Set([\n \"globalThis\",\n \"window\",\n \"process\",\n \"constructor\",\n \"__proto__\",\n]);\nconst BLOCKED_PROPERTIES = new Set([\"constructor\", \"__proto__\", \"prototype\"]);\nconst MATH_IDENTIFIER = Symbol(\"Math\");\n\n/**\n * JSEvaluator: Safe JavaScript expression evaluator using jsep (AST parsing).\n *\n * ## v1 Security Contract\n *\n * - NO eval(), new Function(), or node:vm — uses jsep for AST parsing only.\n * - Supported syntax: literals, arithmetic, comparison, logical, ternary, array/index access on plain data.\n * - Scope values available as identifiers (e.g. `${min}` uses scopeValues.min).\n * - Pure Math helpers: Math.random, Math.floor, Math.ceil, Math.round, Math.min, Math.max, Math.abs.\n * - Expression budgets: max 500 chars, max 100 AST nodes, max 10 depth, max 5 member-chain depth.\n *\n * ## Disallowed Constructs\n *\n * - Assignment, update operators, `new`, function declarations/arrow functions.\n * - `this`, `globalThis`, `window`, `process`, `constructor`, `__proto__`.\n * - Arbitrary function calls outside the allowlist.\n * - Prototype traversal beyond plain data objects.\n *\n * ## Error Handling\n *\n * - Evaluation failures produce warnings, leaving original token intact.\n * - Returns string for command schema compatibility.\n */\nexport class JSEvaluator implements IEvaluator {\n readonly prefix = \"js\";\n\n async evaluate(expression: string, scopeValues: Record<string, string>): Promise<string> {\n const trimmed = expression.trim();\n if (trimmed.length > MAX_EXPRESSION_LENGTH) {\n throw new Error(`Expression length exceeded (max: ${MAX_EXPRESSION_LENGTH})`);\n }\n\n const value = this.evaluateExpression(trimmed, scopeValues);\n return this.stringifyValue(value);\n }\n\n private evaluateExpression(expression: string, scopeValues: Record<string, string>): JSValue {\n const objectLiteral = this.tryEvaluateObjectLiteralExpression(expression, scopeValues);\n if (objectLiteral !== null) {\n return objectLiteral;\n }\n\n let ast: jsep.Expression;\n try {\n ast = jsep(expression);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`JS parse error: ${message}`);\n }\n\n if (this.countNodes(ast) > MAX_AST_NODES) {\n throw new Error(`AST node count exceeded (max: ${MAX_AST_NODES})`);\n }\n\n return this.ensureRuntimeValue(this.evaluateNode(ast, scopeValues, 0));\n }\n\n private evaluateNode(\n node: jsep.Expression,\n scopeValues: Record<string, string>,\n depth: number,\n ): EvaluatedNodeValue {\n if (depth > MAX_DEPTH) {\n throw new Error(`Expression depth exceeded (max: ${MAX_DEPTH})`);\n }\n\n switch (node.type) {\n case \"Literal\": {\n if (!this.isAllowedValue(node.value)) {\n throw new Error(\"Literal value is not supported\");\n }\n return node.value;\n }\n\n case \"Identifier\":\n return this.evaluateIdentifier(this.expectIdentifier(node, \"identifier\"), scopeValues);\n\n case \"UnaryExpression\":\n return this.evaluateUnary(this.expectUnaryExpression(node), scopeValues, depth + 1);\n\n case \"BinaryExpression\":\n return this.evaluateBinary(this.expectBinaryExpression(node), scopeValues, depth + 1);\n\n case \"ConditionalExpression\":\n return this.evaluateConditional(\n this.expectConditionalExpression(node),\n scopeValues,\n depth + 1,\n );\n\n case \"MemberExpression\":\n return this.evaluateMember(this.expectMemberExpression(node), scopeValues, depth + 1);\n\n case \"CallExpression\":\n return this.evaluateCall(this.expectCallExpression(node), scopeValues, depth + 1);\n\n case \"ArrayExpression\":\n return this.evaluateArray(this.expectArrayExpression(node), scopeValues, depth + 1);\n\n default:\n throw new Error(`Unsupported node type: ${node.type}`);\n }\n }\n\n private evaluateIdentifier(\n node: jsep.Identifier,\n scopeValues: Record<string, string>,\n ): JSValue | typeof MATH_IDENTIFIER {\n if (node.name === \"Math\") {\n return MATH_IDENTIFIER;\n }\n\n if (BLOCKED_IDENTIFIERS.has(node.name)) {\n throw new Error(`Unknown variable: ${node.name}`);\n }\n\n if (!(node.name in scopeValues)) {\n throw new Error(`Unknown variable: ${node.name}`);\n }\n\n return this.coerceScopeValue(scopeValues[node.name]);\n }\n\n private evaluateUnary(\n node: jsep.UnaryExpression,\n scopeValues: Record<string, string>,\n depth: number,\n ): JSValue {\n const argument = this.ensureRuntimeValue(this.evaluateNode(node.argument, scopeValues, depth));\n\n switch (node.operator) {\n case \"-\":\n return -this.toNumber(argument);\n case \"+\":\n return +this.toNumber(argument);\n case \"!\":\n return !argument;\n default:\n throw new Error(`Unsupported unary operator: ${node.operator}`);\n }\n }\n\n private evaluateBinary(\n node: jsep.BinaryExpression,\n scopeValues: Record<string, string>,\n depth: number,\n ): JSValue {\n const left = this.ensureRuntimeValue(this.evaluateNode(node.left, scopeValues, depth));\n\n if (node.operator === \"&&\") {\n return left\n ? this.ensureRuntimeValue(this.evaluateNode(node.right, scopeValues, depth))\n : left;\n }\n\n if (node.operator === \"||\") {\n return left\n ? left\n : this.ensureRuntimeValue(this.evaluateNode(node.right, scopeValues, depth));\n }\n\n const right = this.ensureRuntimeValue(this.evaluateNode(node.right, scopeValues, depth));\n\n switch (node.operator) {\n case \"+\":\n return typeof left === \"string\" || typeof right === \"string\"\n ? `${this.stringifyInline(left)}${this.stringifyInline(right)}`\n : this.toNumber(left) + this.toNumber(right);\n case \"-\":\n return this.toNumber(left) - this.toNumber(right);\n case \"*\":\n return this.toNumber(left) * this.toNumber(right);\n case \"/\":\n return this.toNumber(left) / this.toNumber(right);\n case \"%\":\n return this.toNumber(left) % this.toNumber(right);\n case \"==\":\n // eslint-disable-next-line eqeqeq\n return left == right;\n case \"!=\":\n // eslint-disable-next-line eqeqeq\n return left != right;\n case \"===\":\n return left === right;\n case \"!==\":\n return left !== right;\n case \"<\":\n return this.compareValues(left, right, \"<\");\n case \">\":\n return this.compareValues(left, right, \">\");\n case \"<=\":\n return this.compareValues(left, right, \"<=\");\n case \">=\":\n return this.compareValues(left, right, \">=\");\n default:\n throw new Error(`Unsupported operator: ${node.operator}`);\n }\n }\n\n private evaluateConditional(\n node: jsep.ConditionalExpression,\n scopeValues: Record<string, string>,\n depth: number,\n ): JSValue {\n const test = this.ensureRuntimeValue(this.evaluateNode(node.test, scopeValues, depth));\n return test\n ? this.ensureRuntimeValue(this.evaluateNode(node.consequent, scopeValues, depth))\n : this.ensureRuntimeValue(this.evaluateNode(node.alternate, scopeValues, depth));\n }\n\n private evaluateMember(\n node: jsep.MemberExpression,\n scopeValues: Record<string, string>,\n depth: number,\n ): JSValue {\n const chainDepth = this.getMemberChainDepth(node);\n if (chainDepth > MAX_MEMBER_CHAIN_DEPTH) {\n throw new Error(`Member chain depth exceeded (max: ${MAX_MEMBER_CHAIN_DEPTH})`);\n }\n\n const objectValue = this.ensureRuntimeValue(this.evaluateNode(node.object, scopeValues, depth));\n const propertyValue = this.readMemberProperty(node, scopeValues, depth);\n\n if (typeof propertyValue === \"string\" && BLOCKED_PROPERTIES.has(propertyValue)) {\n throw new Error(`Property access blocked: ${propertyValue}`);\n }\n\n if (objectValue === null || typeof objectValue !== \"object\") {\n throw new Error(\"Member access is only allowed on arrays and plain objects\");\n }\n\n if (Array.isArray(objectValue)) {\n if (typeof propertyValue !== \"number\") {\n throw new Error(\"Array access requires a numeric index\");\n }\n return objectValue[propertyValue] ?? null;\n }\n\n if (!this.isPlainObject(objectValue)) {\n throw new Error(\"Member access is only allowed on plain objects\");\n }\n\n if (typeof propertyValue !== \"string\") {\n throw new Error(\"Object property access requires a string key\");\n }\n\n return Object.hasOwn(objectValue, propertyValue) ? objectValue[propertyValue] : null;\n }\n\n private evaluateCall(\n node: jsep.CallExpression,\n scopeValues: Record<string, string>,\n depth: number,\n ): JSValue {\n if (node.callee.type !== \"MemberExpression\") {\n throw new Error(\"Only method calls supported\");\n }\n\n const callee = this.expectMemberExpression(node.callee, \"call target\");\n const args = node.arguments.map((arg) =>\n this.ensureRuntimeValue(\n this.evaluateNode(this.expectExpression(arg, \"call argument\"), scopeValues, depth),\n ),\n );\n\n const calleeObject = this.expectExpression(callee.object, \"call receiver\");\n if (calleeObject.type === \"Identifier\" && this.expectIdentifier(calleeObject).name === \"Math\") {\n const method = this.readMemberProperty(callee, scopeValues, depth);\n if (typeof method !== \"string\") {\n throw new Error(\"Math method must be a string identifier\");\n }\n return this.callMathHelper(method, args);\n }\n\n const receiver = this.ensureRuntimeValue(this.evaluateNode(calleeObject, scopeValues, depth));\n const method = this.readMemberProperty(callee, scopeValues, depth);\n\n if (method === \"toFixed\" && typeof receiver === \"number\") {\n const digits = args[0] === undefined ? 0 : this.toNumber(args[0]);\n return receiver.toFixed(digits);\n }\n\n throw new Error(`Call to undefined: ${String(method)}`);\n }\n\n private evaluateArray(\n node: jsep.ArrayExpression,\n scopeValues: Record<string, string>,\n depth: number,\n ): JSValue[] {\n return this.getArrayElements(node).map((element) =>\n this.ensureRuntimeValue(this.evaluateNode(element, scopeValues, depth)),\n );\n }\n\n private callMathHelper(method: string, args: JSValue[]): JSValue {\n const nums = args.map((arg) => this.toNumber(arg));\n\n switch (method) {\n case \"random\":\n return Math.random();\n case \"floor\":\n return Math.floor(nums[0] ?? 0);\n case \"ceil\":\n return Math.ceil(nums[0] ?? 0);\n case \"round\":\n return Math.round(nums[0] ?? 0);\n case \"min\":\n return Math.min(...nums);\n case \"max\":\n return Math.max(...nums);\n case \"abs\":\n return Math.abs(nums[0] ?? 0);\n default:\n throw new Error(`Math.${method} is not allowed`);\n }\n }\n\n private tryEvaluateObjectLiteralExpression(\n expression: string,\n scopeValues: Record<string, string>,\n ): JSValue | null {\n const parsed = this.extractWrappedObjectLiteral(expression);\n if (!parsed) {\n return null;\n }\n\n const objectValue = this.parseObjectLiteral(parsed.objectLiteral, scopeValues);\n if (!parsed.suffix) {\n return objectValue;\n }\n\n return this.applyMemberSuffix(objectValue, parsed.suffix, scopeValues);\n }\n\n private extractWrappedObjectLiteral(\n expression: string,\n ): { objectLiteral: string; suffix: string } | null {\n const trimmed = expression.trim();\n if (!trimmed.startsWith(\"(\")) {\n return null;\n }\n\n let depth = 0;\n let quote: \"'\" | '\"' | \"`\" | null = null;\n\n for (let i = 0; i < trimmed.length; i += 1) {\n const char = trimmed[i];\n\n if (quote) {\n if (char === \"\\\\\" && quote !== \"`\") {\n i += 1;\n continue;\n }\n if (char === quote && trimmed[i - 1] !== \"\\\\\") {\n quote = null;\n }\n continue;\n }\n\n if (char === \"'\" || char === '\"' || char === \"`\") {\n quote = char;\n continue;\n }\n\n if (char === \"(\") {\n depth += 1;\n continue;\n }\n\n if (char === \")\") {\n depth -= 1;\n if (depth === 0) {\n const inside = trimmed.slice(1, i).trim();\n if (!inside.startsWith(\"{\") || !inside.endsWith(\"}\")) {\n return null;\n }\n return {\n objectLiteral: inside,\n suffix: trimmed.slice(i + 1).trim(),\n };\n }\n }\n }\n\n return null;\n }\n\n private parseObjectLiteral(\n source: string,\n scopeValues: Record<string, string>,\n ): { [key: string]: JSValue } {\n const inner = source.trim().slice(1, -1).trim();\n if (!inner) {\n return {};\n }\n\n const objectValue: { [key: string]: JSValue } = {};\n for (const entry of this.splitTopLevel(inner, \",\")) {\n const colonIndex = this.findTopLevelColon(entry);\n if (colonIndex === -1) {\n throw new Error(`Invalid object literal entry: ${entry}`);\n }\n\n const rawKey = entry.slice(0, colonIndex).trim();\n const rawValue = entry.slice(colonIndex + 1).trim();\n const key = this.parseObjectKey(rawKey);\n if (BLOCKED_PROPERTIES.has(key)) {\n throw new Error(`Property access blocked: ${key}`);\n }\n\n objectValue[key] = this.evaluateExpression(rawValue, scopeValues);\n }\n\n return objectValue;\n }\n\n private applyMemberSuffix(\n target: JSValue,\n suffix: string,\n scopeValues: Record<string, string>,\n ): JSValue {\n let current = target;\n let rest = suffix.trim();\n\n while (rest.length > 0) {\n if (rest.startsWith(\".\")) {\n const match = rest.match(/^\\.([A-Za-z_$][\\w$]*)/);\n if (!match) {\n throw new Error(`Invalid member suffix: ${suffix}`);\n }\n current = this.readProperty(current, match[1]!);\n rest = rest.slice(match[0].length).trimStart();\n continue;\n }\n\n if (rest.startsWith(\"[\")) {\n const endIndex = this.findMatchingBracket(rest);\n const propertyExpression = rest.slice(1, endIndex).trim();\n const propertyValue = this.evaluateExpression(propertyExpression, scopeValues);\n current = this.readProperty(current, propertyValue);\n rest = rest.slice(endIndex + 1).trimStart();\n continue;\n }\n\n throw new Error(`Invalid member suffix: ${suffix}`);\n }\n\n return current;\n }\n\n private readProperty(target: JSValue, property: JSValue): JSValue {\n if (typeof property === \"string\" && BLOCKED_PROPERTIES.has(property)) {\n throw new Error(`Property access blocked: ${property}`);\n }\n\n if (Array.isArray(target)) {\n if (typeof property !== \"number\") {\n throw new Error(\"Array access requires a numeric index\");\n }\n return target[property] ?? null;\n }\n\n if (!this.isPlainObject(target)) {\n throw new Error(\"Member access is only allowed on arrays and plain objects\");\n }\n\n if (typeof property !== \"string\") {\n throw new Error(\"Object property access requires a string key\");\n }\n\n return Object.hasOwn(target, property) ? target[property] : null;\n }\n\n private readMemberProperty(\n node: jsep.MemberExpression,\n scopeValues: Record<string, string>,\n depth: number,\n ): JSValue {\n if (node.computed) {\n return this.ensureRuntimeValue(this.evaluateNode(node.property, scopeValues, depth));\n }\n\n return this.expectIdentifier(node.property, \"member property\").name;\n }\n\n private parseObjectKey(rawKey: string): string {\n if (\n (rawKey.startsWith(\"'\") && rawKey.endsWith(\"'\")) ||\n (rawKey.startsWith('\"') && rawKey.endsWith('\"'))\n ) {\n return rawKey.slice(1, -1);\n }\n\n if (/^[A-Za-z_$][\\w$]*$/.test(rawKey)) {\n return rawKey;\n }\n\n throw new Error(`Invalid object key: ${rawKey}`);\n }\n\n private splitTopLevel(input: string, delimiter: \",\" | \":\"): string[] {\n const parts: string[] = [];\n let start = 0;\n let braceDepth = 0;\n let bracketDepth = 0;\n let parenDepth = 0;\n let quote: \"'\" | '\"' | \"`\" | null = null;\n\n for (let i = 0; i < input.length; i += 1) {\n const char = input[i];\n\n if (quote) {\n if (char === \"\\\\\" && quote !== \"`\") {\n i += 1;\n continue;\n }\n if (char === quote && input[i - 1] !== \"\\\\\") {\n quote = null;\n }\n continue;\n }\n\n if (char === \"'\" || char === '\"' || char === \"`\") {\n quote = char;\n continue;\n }\n\n switch (char) {\n case \"{\":\n braceDepth += 1;\n break;\n case \"}\":\n braceDepth -= 1;\n break;\n case \"[\":\n bracketDepth += 1;\n break;\n case \"]\":\n bracketDepth -= 1;\n break;\n case \"(\":\n parenDepth += 1;\n break;\n case \")\":\n parenDepth -= 1;\n break;\n default:\n if (char === delimiter && braceDepth === 0 && bracketDepth === 0 && parenDepth === 0) {\n parts.push(input.slice(start, i).trim());\n start = i + 1;\n }\n }\n }\n\n parts.push(input.slice(start).trim());\n return parts.filter((part) => part.length > 0);\n }\n\n private findTopLevelColon(input: string): number {\n let braceDepth = 0;\n let bracketDepth = 0;\n let parenDepth = 0;\n let quote: \"'\" | '\"' | \"`\" | null = null;\n\n for (let i = 0; i < input.length; i += 1) {\n const char = input[i];\n\n if (quote) {\n if (char === \"\\\\\" && quote !== \"`\") {\n i += 1;\n continue;\n }\n if (char === quote && input[i - 1] !== \"\\\\\") {\n quote = null;\n }\n continue;\n }\n\n if (char === \"'\" || char === '\"' || char === \"`\") {\n quote = char;\n continue;\n }\n\n switch (char) {\n case \"{\":\n braceDepth += 1;\n break;\n case \"}\":\n braceDepth -= 1;\n break;\n case \"[\":\n bracketDepth += 1;\n break;\n case \"]\":\n bracketDepth -= 1;\n break;\n case \"(\":\n parenDepth += 1;\n break;\n case \")\":\n parenDepth -= 1;\n break;\n case \":\":\n if (braceDepth === 0 && bracketDepth === 0 && parenDepth === 0) {\n return i;\n }\n break;\n }\n }\n\n return -1;\n }\n\n private findMatchingBracket(input: string): number {\n let depth = 0;\n let quote: \"'\" | '\"' | \"`\" | null = null;\n\n for (let i = 0; i < input.length; i += 1) {\n const char = input[i];\n\n if (quote) {\n if (char === \"\\\\\" && quote !== \"`\") {\n i += 1;\n continue;\n }\n if (char === quote && input[i - 1] !== \"\\\\\") {\n quote = null;\n }\n continue;\n }\n\n if (char === \"'\" || char === '\"' || char === \"`\") {\n quote = char;\n continue;\n }\n\n if (char === \"[\") {\n depth += 1;\n } else if (char === \"]\") {\n depth -= 1;\n if (depth === 0) {\n return i;\n }\n }\n }\n\n throw new Error(`Unmatched bracket in member suffix: ${input}`);\n }\n\n private coerceScopeValue(value: string): JSValue {\n const trimmed = value.trim();\n if (trimmed === \"true\") return true;\n if (trimmed === \"false\") return false;\n if (trimmed === \"null\") return null;\n if (/^-?\\d+(\\.\\d+)?$/.test(trimmed)) return Number(trimmed);\n\n if (\n (trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\")) ||\n (trimmed.startsWith(\"[\") && trimmed.endsWith(\"]\"))\n ) {\n try {\n const parsed = JSON.parse(trimmed);\n if (this.isAllowedValue(parsed)) {\n return parsed;\n }\n } catch {\n // Fall through to raw string.\n }\n }\n\n return value;\n }\n\n private countNodes(node: jsep.Expression): number {\n switch (node.type) {\n case \"Literal\":\n case \"Identifier\":\n return 1;\n case \"UnaryExpression\":\n return 1 + this.countNodes(this.expectExpression(node.argument, \"unary argument\"));\n case \"BinaryExpression\":\n return (\n 1 +\n this.countNodes(this.expectExpression(node.left, \"binary left\")) +\n this.countNodes(this.expectExpression(node.right, \"binary right\"))\n );\n case \"ConditionalExpression\":\n return (\n 1 +\n this.countNodes(this.expectExpression(node.test, \"conditional test\")) +\n this.countNodes(this.expectExpression(node.consequent, \"conditional consequent\")) +\n this.countNodes(this.expectExpression(node.alternate, \"conditional alternate\"))\n );\n case \"MemberExpression\":\n return (\n 1 +\n this.countNodes(this.expectExpression(node.object, \"member object\")) +\n this.countNodes(this.expectExpression(node.property, \"member property\"))\n );\n case \"CallExpression\":\n return (\n 1 +\n this.countNodes(this.expectExpression(node.callee, \"call callee\")) +\n this.expectExpressionList(node.arguments, \"call arguments\").reduce(\n (count: number, arg) => count + this.countNodes(arg),\n 0,\n )\n );\n case \"ArrayExpression\":\n const arrayNode = this.expectArrayExpression(node);\n return (\n 1 +\n this.getArrayElements(arrayNode).reduce(\n (count: number, element) => count + this.countNodes(element),\n 0,\n )\n );\n default:\n return 1;\n }\n }\n\n private getMemberChainDepth(node: jsep.MemberExpression): number {\n let depth = 1;\n let current = this.expectExpression(node.object, \"member object\");\n while (current.type === \"MemberExpression\") {\n depth += 1;\n current = this.expectExpression(current.object, \"member object\");\n }\n return depth;\n }\n\n private ensureRuntimeValue(value: JSValue | typeof MATH_IDENTIFIER): JSValue {\n if (value === MATH_IDENTIFIER) {\n throw new Error(\"Math namespace is only allowed in Math.* expressions\");\n }\n return value;\n }\n\n private stringifyValue(value: JSValue): string {\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\" || value === null) {\n return String(value);\n }\n return JSON.stringify(value);\n }\n\n private stringifyInline(value: JSValue): string {\n return typeof value === \"string\" ? value : this.stringifyValue(value);\n }\n\n private toNumber(value: JSValue): number {\n const numberValue = Number(value);\n if (Number.isNaN(numberValue)) {\n throw new Error(`Value is not numeric: ${this.stringifyInline(value)}`);\n }\n return numberValue;\n }\n\n private compareValues(left: JSValue, right: JSValue, operator: \"<\" | \">\" | \"<=\" | \">=\"): boolean {\n if (typeof left === \"string\" && typeof right === \"string\") {\n switch (operator) {\n case \"<\":\n return left < right;\n case \">\":\n return left > right;\n case \"<=\":\n return left <= right;\n case \">=\":\n return left >= right;\n }\n }\n\n const leftNumber = this.toNumber(left);\n const rightNumber = this.toNumber(right);\n\n switch (operator) {\n case \"<\":\n return leftNumber < rightNumber;\n case \">\":\n return leftNumber > rightNumber;\n case \"<=\":\n return leftNumber <= rightNumber;\n case \">=\":\n return leftNumber >= rightNumber;\n }\n }\n\n private isPlainObject(value: unknown): value is { [key: string]: JSValue } {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n return false;\n }\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n }\n\n private isAllowedValue(value: unknown): value is JSValue {\n if (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return true;\n }\n\n if (Array.isArray(value)) {\n return value.every((item) => this.isAllowedValue(item));\n }\n\n if (this.isPlainObject(value)) {\n return Object.values(value).every((item) => this.isAllowedValue(item));\n }\n\n return false;\n }\n\n private expectExpression(value: unknown, label = \"expression\"): jsep.Expression {\n if (!this.isExpression(value)) {\n throw new Error(`Invalid ${label}`);\n }\n return value;\n }\n\n private expectExpressionList(value: unknown, label: string): jsep.Expression[] {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return value.map((entry) => this.expectExpression(entry, label));\n }\n\n private getArrayElements(node: jsep.ArrayExpression): jsep.Expression[] {\n if (!node.elements) {\n return [];\n }\n\n return node.elements.map((element) => {\n if (element == null) {\n throw new Error(\"Sparse arrays are not supported\");\n }\n\n return this.expectExpression(element, \"array elements\");\n });\n }\n\n private expectIdentifier(value: unknown, label = \"identifier\"): jsep.Identifier {\n const expression = this.expectExpression(value, label);\n if (!this.isIdentifierExpression(expression)) {\n throw new Error(`Expected ${label} to be an Identifier`);\n }\n return expression;\n }\n\n private expectUnaryExpression(value: unknown): jsep.UnaryExpression {\n const expression = this.expectExpression(value, \"unary expression\");\n if (!this.isUnaryExpression(expression)) {\n throw new Error(\"Expected a UnaryExpression\");\n }\n return expression;\n }\n\n private expectBinaryExpression(value: unknown): jsep.BinaryExpression {\n const expression = this.expectExpression(value, \"binary expression\");\n if (!this.isBinaryExpression(expression)) {\n throw new Error(\"Expected a BinaryExpression\");\n }\n return expression;\n }\n\n private expectConditionalExpression(value: unknown): jsep.ConditionalExpression {\n const expression = this.expectExpression(value, \"conditional expression\");\n if (!this.isConditionalExpression(expression)) {\n throw new Error(\"Expected a ConditionalExpression\");\n }\n return expression;\n }\n\n private expectMemberExpression(\n value: unknown,\n label = \"member expression\",\n ): jsep.MemberExpression {\n const expression = this.expectExpression(value, label);\n if (!this.isMemberExpression(expression)) {\n throw new Error(`Expected ${label} to be a MemberExpression`);\n }\n return expression;\n }\n\n private expectCallExpression(value: unknown): jsep.CallExpression {\n const expression = this.expectExpression(value, \"call expression\");\n if (!this.isCallExpression(expression)) {\n throw new Error(\"Expected a CallExpression\");\n }\n return expression;\n }\n\n private expectArrayExpression(value: unknown): jsep.ArrayExpression {\n const expression = this.expectExpression(value, \"array expression\");\n if (!this.isArrayExpression(expression)) {\n throw new Error(\"Expected an ArrayExpression\");\n }\n return expression;\n }\n\n private isExpression(value: unknown): value is jsep.Expression {\n return typeof value === \"object\" && value !== null && \"type\" in value;\n }\n\n private isIdentifierExpression(value: jsep.Expression): value is jsep.Identifier {\n return value.type === \"Identifier\";\n }\n\n private isUnaryExpression(value: jsep.Expression): value is jsep.UnaryExpression {\n return value.type === \"UnaryExpression\";\n }\n\n private isBinaryExpression(value: jsep.Expression): value is jsep.BinaryExpression {\n return value.type === \"BinaryExpression\";\n }\n\n private isConditionalExpression(value: jsep.Expression): value is jsep.ConditionalExpression {\n return value.type === \"ConditionalExpression\";\n }\n\n private isMemberExpression(value: jsep.Expression): value is jsep.MemberExpression {\n return value.type === \"MemberExpression\";\n }\n\n private isCallExpression(value: jsep.Expression): value is jsep.CallExpression {\n return value.type === \"CallExpression\";\n }\n\n private isArrayExpression(value: jsep.Expression): value is jsep.ArrayExpression {\n return value.type === \"ArrayExpression\";\n }\n}\n","import type { IEvaluator } from \"../types\";\n\n/**\n * DateEvaluator: Parses and formats dates using chrono-node.\n * Supports natural language like \"today\", \"tomorrow\", or \"next Friday\".\n *\n * Syntax: `{{date:tomorrow|iso}}` or `{{date:today}}`\n */\nexport class DateEvaluator implements IEvaluator {\n readonly prefix = \"date\";\n\n async evaluate(expression: string, _scopeValues: Record<string, string>): Promise<string> {\n // TODO: Implement date parsing via chrono-node\n // For now, return the expression as-is (boilerplate stage)\n return `[Date expression: ${expression}]`;\n }\n}\n","/**\n * AiChatCodeTokenPreprocessor — safe JS-context-aware rewrite of {{...}} tokens.\n *\n * Pipeline overview (5 passes):\n * Pass 1 – FSM scanner walks the source once and records the JS lexical state\n * (TEXT, string literal, comment, template expression) at every byte.\n * It also collects the ranges of all string literals and comments.\n * Pass 2 – Every token returned by data-resolver scan() is classified using\n * the state map from Pass 1:\n * • inside a comment -> SKIP (no resolver call, no metric)\n * • inside a string -> STRING_LITERAL (will become template literal)\n * • otherwise -> IDENTIFIER (standalone context.variables.__dr_N)\n * Pass 3 – Non-skipped tokens are resolved in strict source order. The first\n * unknown_key warning triggers a metric + UnknownKeyError *before*\n * any mutation. CircularDependencyError is caught, metric-ed, and\n * rethrown. Successful resolutions are assigned stable __dr_N names.\n * Pass 4 – A replacement list is built:\n * • IDENTIFIER -> splice context.variables.__dr_N over [token.start, token.end)\n * • STRING_LITERAL -> replace the *entire* enclosing literal\n * (including quotes) with a backtick template. Static runs are\n * decoded from the original quote kind and re-encoded for\n * backtick context; each token slot becomes ${context.variables.__dr_N}.\n * Pass 5 – Replacements are sorted by start (descending) and applied to the\n * source string. If any overlap is detected we throw.\n *\n * Gate (broadened in Phase 9):\n * Any custom command that carries a resolutionContext goes through the\n * rewriter. The old aiStepId guard was removed so that replay-generated\n * custom commands are also protected.\n */\n\nimport type { Command } from \"@blinq/schemas\";\nimport { type DataResolver, scan, CircularDependencyError } from \"@blinq/data-resolver\";\nimport type { Token } from \"@blinq/data-resolver\";\nimport type { CommandPreprocessor, CommandExecutionContext } from \"./command-preprocessor\";\nimport type { AgentMetrics } from \"./logger\";\nimport { resolveAgentLogger } from \"./logger\";\nimport type { AgentLoggerInput } from \"./logger\";\n\nclass UnknownKeyError extends Error {\n constructor(public readonly key: string) {\n super(`Unknown test-data key in ai-chat generated code: ${key}`);\n this.name = \"UnknownKeyError\";\n }\n\n override toString(): string {\n return `${this.name}: ${this.message}`;\n }\n}\n\n/* -------------------------------------------------------------------------- */\n/* FSM types */\n/* -------------------------------------------------------------------------- */\n\ntype State =\n | \"TEXT\"\n | \"LINE_COMMENT\"\n | \"BLOCK_COMMENT\"\n | \"SINGLE_QUOTE\"\n | \"DOUBLE_QUOTE\"\n | \"TEMPLATE\"\n | \"TEMPLATE_EXPR\";\n\ninterface StackFrame {\n state: Exclude<State, \"TEXT\">;\n braceDepth?: number; // only meaningful for TEMPLATE_EXPR\n}\n\ninterface StringLiteralRange {\n readonly kind: \"SINGLE_QUOTE\" | \"DOUBLE_QUOTE\" | \"TEMPLATE\";\n readonly start: number; // position of opening quote\n readonly end: number; // index AFTER closing quote\n}\n\ninterface CommentRange {\n readonly start: number;\n readonly end: number;\n}\n\ninterface ScanResult {\n readonly stateAt: ReadonlyArray<State>;\n readonly stringLiterals: ReadonlyArray<StringLiteralRange>;\n readonly commentRanges: ReadonlyArray<CommentRange>;\n}\n\n/* -------------------------------------------------------------------------- */\n/* Pass 1 – FSM scanner */\n/* -------------------------------------------------------------------------- */\n\nfunction scanJsContext(source: string): ScanResult {\n const stateAt: State[] = Array.from({ length: source.length });\n const stringLiterals: StringLiteralRange[] = [];\n const commentRanges: CommentRange[] = [];\n const stack: StackFrame[] = [];\n\n let i = 0;\n let literalStart = -1;\n\n while (i < source.length) {\n const top = stack.length > 0 ? stack[stack.length - 1] : undefined;\n const state: State = top?.state ?? \"TEXT\";\n stateAt[i] = state;\n\n switch (state) {\n case \"TEXT\": {\n const ch = source[i];\n if (ch === \"'\") {\n // entering single-quoted string literal\n stack.push({ state: \"SINGLE_QUOTE\" });\n literalStart = i;\n } else if (ch === '\"') {\n // entering double-quoted string literal\n stack.push({ state: \"DOUBLE_QUOTE\" });\n literalStart = i;\n } else if (ch === \"`\") {\n // entering template literal\n stack.push({ state: \"TEMPLATE\" });\n literalStart = i;\n } else if (ch === \"/\" && i + 1 < source.length && source[i + 1] === \"/\") {\n // entering line comment\n stack.push({ state: \"LINE_COMMENT\" });\n stateAt[i] = \"LINE_COMMENT\";\n stateAt[i + 1] = \"LINE_COMMENT\";\n i += 2;\n continue;\n } else if (ch === \"/\" && i + 1 < source.length && source[i + 1] === \"*\") {\n // entering block comment\n stack.push({ state: \"BLOCK_COMMENT\" });\n stateAt[i] = \"BLOCK_COMMENT\";\n stateAt[i + 1] = \"BLOCK_COMMENT\";\n i += 2;\n continue;\n }\n break;\n }\n\n case \"LINE_COMMENT\": {\n if (source[i] === \"\\n\" || source[i] === \"\\r\") {\n let end = i + 1;\n // consume \\r\\n as a single newline terminator\n if (source[i] === \"\\r\" && i + 1 < source.length && source[i + 1] === \"\\n\") {\n end = i + 2;\n stateAt[i + 1] = \"LINE_COMMENT\";\n }\n commentRanges.push({ start: literalStart, end });\n stack.pop();\n literalStart = -1;\n i = end;\n continue;\n }\n break;\n }\n\n case \"BLOCK_COMMENT\": {\n if (source[i] === \"*\" && i + 1 < source.length && source[i + 1] === \"/\") {\n stateAt[i] = \"BLOCK_COMMENT\";\n stateAt[i + 1] = \"BLOCK_COMMENT\";\n commentRanges.push({ start: literalStart, end: i + 2 });\n stack.pop();\n literalStart = -1;\n i += 2;\n continue;\n }\n break;\n }\n\n case \"SINGLE_QUOTE\": {\n if (source[i] === \"\\\\\" && i + 1 < source.length) {\n // skip escaped character\n stateAt[i + 1] = \"SINGLE_QUOTE\";\n i += 2;\n continue;\n }\n if (source[i] === \"'\") {\n // closing single quote\n stringLiterals.push({ kind: \"SINGLE_QUOTE\", start: literalStart, end: i + 1 });\n stack.pop();\n literalStart = -1;\n }\n break;\n }\n\n case \"DOUBLE_QUOTE\": {\n if (source[i] === \"\\\\\" && i + 1 < source.length) {\n stateAt[i + 1] = \"DOUBLE_QUOTE\";\n i += 2;\n continue;\n }\n if (source[i] === '\"') {\n stringLiterals.push({ kind: \"DOUBLE_QUOTE\", start: literalStart, end: i + 1 });\n stack.pop();\n literalStart = -1;\n }\n break;\n }\n\n case \"TEMPLATE\": {\n if (source[i] === \"\\\\\" && i + 1 < source.length) {\n stateAt[i + 1] = \"TEMPLATE\";\n i += 2;\n continue;\n }\n if (source[i] === \"$\" && i + 1 < source.length && source[i + 1] === \"{\") {\n // entering template expression\n stack.push({ state: \"TEMPLATE_EXPR\", braceDepth: 1 });\n stateAt[i] = \"TEMPLATE_EXPR\";\n stateAt[i + 1] = \"TEMPLATE_EXPR\";\n i += 2;\n continue;\n }\n if (source[i] === \"`\") {\n stringLiterals.push({ kind: \"TEMPLATE\", start: literalStart, end: i + 1 });\n stack.pop();\n literalStart = -1;\n }\n break;\n }\n\n case \"TEMPLATE_EXPR\": {\n if (!top) {\n // should never happen, but satisfies TS\n break;\n }\n if (source[i] === \"{\") {\n top.braceDepth = (top.braceDepth ?? 0) + 1;\n } else if (source[i] === \"}\") {\n top.braceDepth = (top.braceDepth ?? 0) - 1;\n if (top.braceDepth === 0) {\n stack.pop();\n }\n } else if (source[i] === \"'\") {\n stack.push({ state: \"SINGLE_QUOTE\" });\n literalStart = i;\n } else if (source[i] === '\"') {\n stack.push({ state: \"DOUBLE_QUOTE\" });\n literalStart = i;\n } else if (source[i] === \"`\") {\n stack.push({ state: \"TEMPLATE\" });\n literalStart = i;\n } else if (source[i] === \"/\" && i + 1 < source.length && source[i + 1] === \"/\") {\n stack.push({ state: \"LINE_COMMENT\" });\n stateAt[i] = \"LINE_COMMENT\";\n stateAt[i + 1] = \"LINE_COMMENT\";\n i += 2;\n continue;\n } else if (source[i] === \"/\" && i + 1 < source.length && source[i + 1] === \"*\") {\n stack.push({ state: \"BLOCK_COMMENT\" });\n stateAt[i] = \"BLOCK_COMMENT\";\n stateAt[i + 1] = \"BLOCK_COMMENT\";\n i += 2;\n continue;\n }\n break;\n }\n }\n\n i++;\n }\n\n // Gracefully terminate line comments that reach EOF; anything else left on\n // the stack is truly unterminated.\n while (stack.length > 0) {\n const top = stack[stack.length - 1]!;\n if (top.state === \"LINE_COMMENT\") {\n commentRanges.push({ start: literalStart, end: source.length });\n stack.pop();\n } else {\n throw new Error(\n `ai-chat preprocessor: unterminated string or comment in generated code at offset ${source.length}`,\n );\n }\n }\n\n return { stateAt, stringLiterals, commentRanges };\n}\n\n/* -------------------------------------------------------------------------- */\n/* String-literal helpers */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Decode a raw segment taken from inside a string literal of the given kind.\n * Escape sequences are expanded to their actual character values.\n */\nfunction decodeJsStringSegment(\n segment: string,\n kind: \"SINGLE_QUOTE\" | \"DOUBLE_QUOTE\" | \"TEMPLATE\",\n): string {\n let result = \"\";\n for (let i = 0; i < segment.length; i++) {\n const ch = segment[i];\n if (ch !== \"\\\\\" || i + 1 >= segment.length) {\n result += ch;\n continue;\n }\n const next = segment[i + 1];\n switch (next) {\n case \"n\":\n result += \"\\n\";\n i++;\n break;\n case \"r\":\n result += \"\\r\";\n i++;\n break;\n case \"t\":\n result += \"\\t\";\n i++;\n break;\n case \"b\":\n result += \"\\b\";\n i++;\n break;\n case \"v\":\n result += \"\\v\";\n i++;\n break;\n case \"f\":\n result += \"\\f\";\n i++;\n break;\n case \"\\\\\":\n result += \"\\\\\";\n i++;\n break;\n case \"'\":\n result += \"'\";\n i++;\n break;\n case '\"':\n result += '\"';\n i++;\n break;\n case \"`\":\n result += \"`\";\n i++;\n break;\n case \"$\": {\n // In a template literal \\$ is just $, *unless* it is followed by {\n // in which case the whole \\${ is an escaped interpolation.\n if (kind === \"TEMPLATE\" && i + 2 < segment.length && segment[i + 2] === \"{\") {\n result += \"${\";\n i += 2;\n } else {\n result += \"$\";\n i++;\n }\n break;\n }\n case \"x\": {\n if (i + 3 < segment.length) {\n const hex = segment.slice(i + 2, i + 4);\n const code = parseInt(hex, 16);\n if (!Number.isNaN(code)) {\n result += String.fromCharCode(code);\n i += 3;\n break;\n }\n }\n result += next;\n i++;\n break;\n }\n case \"u\": {\n if (i + 2 < segment.length && segment[i + 2] === \"{\") {\n const close = segment.indexOf(\"}\", i + 3);\n if (close !== -1) {\n const hex = segment.slice(i + 3, close);\n const code = parseInt(hex, 16);\n if (!Number.isNaN(code)) {\n result += String.fromCodePoint(code);\n i = close;\n break;\n }\n }\n } else if (i + 5 < segment.length) {\n const hex = segment.slice(i + 2, i + 6);\n const code = parseInt(hex, 16);\n if (!Number.isNaN(code)) {\n result += String.fromCharCode(code);\n i += 5;\n break;\n }\n }\n result += next;\n i++;\n break;\n }\n default:\n // Any other escaped character resolves to itself (e.g. \\z -> z)\n result += next;\n i++;\n break;\n }\n }\n return result;\n}\n\n/**\n * Re-encode a decoded string so it is safe inside a backtick template literal.\n * Only backtick, backslash, and ${ need escaping.\n */\nfunction encodeForTemplateLiteral(decoded: string): string {\n let result = \"\";\n for (let i = 0; i < decoded.length; i++) {\n const ch = decoded[i];\n if (ch === \"\\\\\") {\n result += \"\\\\\\\\\";\n } else if (ch === \"`\") {\n result += \"\\\\`\";\n } else if (ch === \"$\" && i + 1 < decoded.length && decoded[i + 1] === \"{\") {\n result += \"\\\\${\";\n i++;\n } else {\n result += ch;\n }\n }\n return result;\n}\n\n/* -------------------------------------------------------------------------- */\n/* Pass 4 – Literal rewriter */\n/* -------------------------------------------------------------------------- */\n\ninterface Replacement {\n readonly start: number;\n readonly end: number;\n readonly text: string;\n}\n\nfunction buildTemplateLiteralReplacement(\n literal: StringLiteralRange,\n tokensInLiteral: readonly Token[],\n varNames: ReadonlyMap<Token, string>,\n source: string,\n): Replacement {\n const { kind, start, end } = literal;\n let text = \"`\";\n let pos = start + 1; // first character after opening quote\n const interiorEnd = end - 1; // character before closing quote\n\n for (const token of tokensInLiteral) {\n if (pos < token.start) {\n const raw = source.slice(pos, token.start);\n if (kind === \"TEMPLATE\") {\n // Template literals are already in template syntax; pass raw through.\n text += raw;\n } else {\n text += encodeForTemplateLiteral(decodeJsStringSegment(raw, kind));\n }\n }\n\n const varName = varNames.get(token);\n if (!varName) {\n throw new Error(\n `ai-chat preprocessor: missing variable name for token ${token.raw} at offset ${token.start}`,\n );\n }\n text += `\\${context.variables.${varName}}`;\n pos = token.end;\n }\n\n if (pos < interiorEnd) {\n const raw = source.slice(pos, interiorEnd);\n if (kind === \"TEMPLATE\") {\n text += raw;\n } else {\n text += encodeForTemplateLiteral(decodeJsStringSegment(raw, kind));\n }\n }\n\n text += \"`\";\n return { start: literal.start, end: literal.end, text };\n}\n\n/* -------------------------------------------------------------------------- */\n/* Main factory */\n/* -------------------------------------------------------------------------- */\n\nexport function createAiChatCodeTokenPreprocessor(\n resolver: DataResolver,\n options?: { metrics?: AgentMetrics; logger?: AgentLoggerInput },\n): CommandPreprocessor {\n const metrics = options?.metrics;\n const logger = options?.logger ? resolveAgentLogger(options.logger) : undefined;\n\n return async (command: Command, context: CommandExecutionContext): Promise<Command> => {\n // Gate\n if (command.type !== \"custom\") return command;\n if (!context.resolutionContext) return command;\n\n const tokens = scan(command.code);\n if (tokens.length === 0) return command;\n\n // ------------------------------------------------------------------\n // Pass 1 – FSM scanner\n // ------------------------------------------------------------------\n const { stateAt, stringLiterals } = scanJsContext(command.code);\n\n // ------------------------------------------------------------------\n // Pass 2 – classify tokens\n // ------------------------------------------------------------------\n type ClassifiedToken =\n | { type: \"IDENTIFIER\"; token: Token }\n | { type: \"STRING_LITERAL\"; token: Token; literal: StringLiteralRange }\n | { type: \"SKIP\"; token: Token };\n\n const classified: ClassifiedToken[] = [];\n\n for (const token of tokens) {\n const state = stateAt[token.start] ?? \"TEXT\";\n\n if (state === \"LINE_COMMENT\" || state === \"BLOCK_COMMENT\") {\n classified.push({ type: \"SKIP\", token });\n continue;\n }\n\n if (state === \"SINGLE_QUOTE\" || state === \"DOUBLE_QUOTE\" || state === \"TEMPLATE\") {\n const literal = stringLiterals.find((l) => token.start >= l.start && token.start < l.end);\n if (!literal) {\n // Should not happen if the FSM is correct, but fall back to IDENTIFIER\n classified.push({ type: \"IDENTIFIER\", token });\n } else {\n classified.push({ type: \"STRING_LITERAL\", token, literal });\n }\n continue;\n }\n\n // TEXT or TEMPLATE_EXPR\n classified.push({ type: \"IDENTIFIER\", token });\n }\n\n const nonSkipped = classified.filter(\n (c): c is Exclude<ClassifiedToken, { type: \"SKIP\" }> => c.type !== \"SKIP\",\n );\n\n if (nonSkipped.length === 0) {\n // Every token was inside a comment; nothing to rewrite.\n return command;\n }\n\n // ------------------------------------------------------------------\n // Pass 3 – resolve in source order\n // ------------------------------------------------------------------\n const startedAt = Date.now();\n const resolvedValues = new Map<Token, string>();\n const varNames = new Map<Token, string>();\n const projectId = context.resolutionContext.projectId;\n\n for (let idx = 0; idx < nonSkipped.length; idx++) {\n const item = nonSkipped[idx]!;\n const token = item.token;\n const varName = `__dr_${idx}`;\n varNames.set(token, varName);\n\n try {\n const { resolved, warnings } = await resolver.resolve(token.raw, context.resolutionContext);\n const unknownKeyWarning = warnings.find((w) => w.type === \"unknown_key\");\n if (unknownKeyWarning) {\n metrics?.count(\"worker.ai_chat.code_token_preprocess.unknown_key\", 1, {\n projectId,\n prefix: token.prefix ?? \"literal\",\n });\n throw new UnknownKeyError(String(unknownKeyWarning.key));\n }\n resolvedValues.set(token, resolved);\n } catch (error) {\n if (error instanceof UnknownKeyError) {\n throw error; // metric already emitted above\n }\n if (error instanceof CircularDependencyError) {\n metrics?.count(\"worker.ai_chat.code_token_preprocess.circular_dep\", 1, { projectId });\n throw error;\n }\n throw error;\n }\n }\n\n // ------------------------------------------------------------------\n // Pass 4 – build replacement list\n // ------------------------------------------------------------------\n const replacements: Replacement[] = [];\n\n // Group STRING_LITERAL tokens by their enclosing literal.\n const literalGroups = new Map<StringLiteralRange, Token[]>();\n for (const item of nonSkipped) {\n if (item.type === \"STRING_LITERAL\") {\n const arr = literalGroups.get(item.literal) ?? [];\n arr.push(item.token);\n literalGroups.set(item.literal, arr);\n }\n }\n\n // IDENTIFIER replacements\n for (const item of nonSkipped) {\n if (item.type === \"IDENTIFIER\") {\n const varName = varNames.get(item.token);\n if (!varName) continue; // should not happen\n replacements.push({\n start: item.token.start,\n end: item.token.end,\n text: `context.variables.${varName}`,\n });\n }\n }\n\n // STRING_LITERAL replacements (one per enclosing literal)\n for (const [literal, tokensInLiteral] of literalGroups) {\n // tokens are already in source order because we scanned left-to-right\n replacements.push(\n buildTemplateLiteralReplacement(literal, tokensInLiteral, varNames, command.code),\n );\n }\n\n // Sanity: assert no overlaps\n replacements.sort((a, b) => a.start - b.start);\n for (let i = 1; i < replacements.length; i++) {\n const prev = replacements[i - 1]!;\n const curr = replacements[i]!;\n if (prev.end > curr.start) {\n throw new Error(\n `ai-chat preprocessor: overlapping replacements at [${prev.start},${prev.end}) and [${curr.start},${curr.end})`,\n );\n }\n }\n\n // ------------------------------------------------------------------\n // Pass 5 – apply replacements (descending order so indices stay valid)\n // ------------------------------------------------------------------\n const sortedDesc = [...replacements].sort((a, b) => b.start - a.start);\n let rewritten = command.code;\n for (const r of sortedDesc) {\n rewritten = rewritten.slice(0, r.start) + r.text + rewritten.slice(r.end);\n }\n\n // ------------------------------------------------------------------\n // Metrics / logs / atomic commit\n // ------------------------------------------------------------------\n metrics?.gauge(\n \"worker.ai_chat.code_token_preprocess.token_count\",\n nonSkipped.length,\n undefined,\n {\n projectId,\n },\n );\n metrics?.latency(\"worker.ai_chat.code_token_preprocess.duration\", startedAt, { projectId });\n\n logger?.info(\"[AiChatCodeTokenPreprocessor] rewrite complete\", {\n tokenCount: nonSkipped.length,\n keys: nonSkipped.map((c) => c.token.expression),\n });\n\n // Atomic: only mutate context after everything else succeeded\n context.stepParameters = {\n ...context.stepParameters,\n ...Object.fromEntries(\n nonSkipped.map((c) => [varNames.get(c.token)!, resolvedValues.get(c.token)!]),\n ),\n };\n\n return { ...command, code: rewritten };\n };\n}\n","import type { ITestDataProvider } from \"@blinq/data-resolver\";\nimport type { CommandPreprocessor } from \"./command-preprocessor\";\nimport { TestDataApi, type TestDataApiOptions } from \"./test-data-api\";\n\n/**\n * Builds a TestDataApi instance for the current step and attaches it to the\n * CommandExecutionContext as `testDataApi`. Subsequent preprocessors and the\n * sandbox bind use this instance to expose `context.testData` to user code.\n *\n * If the execution context has no resolutionContext we cannot construct a\n * TestDataApi — leave the field undefined and let downstream code skip the\n * sandbox bind.\n */\nexport function createTestDataApiPreprocessor(\n provider: ITestDataProvider,\n options: TestDataApiOptions = {},\n): CommandPreprocessor {\n return async (command, context) => {\n if (context.resolutionContext) {\n context.testDataApi = new TestDataApi(provider, context.resolutionContext, options);\n }\n return command;\n };\n}\n","import { randomUUID } from \"node:crypto\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport {\n createAiChatCodeTokenPreprocessor,\n createDataResolverPreprocessor,\n createStepParameterPreprocessor,\n createTestDataApiPreprocessor,\n Tester,\n type CommandExecutionContext,\n type CommandPreprocessor,\n} from \"@blinq/bvt-agent/tester-runtime\";\nimport {\n DataResolver,\n DateEvaluator,\n decrypt,\n deriveProjectKey,\n EvaluatorRegistry,\n FakerEvaluator,\n JSEvaluator,\n LiteralEvaluator,\n ScopeManager,\n type ITestDataProvider,\n} from \"@blinq/data-resolver\";\nimport {\n CommandSchema,\n type Command,\n type ElementTarget,\n type PageTarget,\n type ResolutionContext,\n type ScopeType,\n type TestDataEntry,\n type UniqueSelector,\n} from \"@blinq/schemas\";\nimport { test as baseTest, type FrameLocator, type Locator, type Page } from \"@playwright/test\";\n\ntype BrowserType = \"chromium\" | \"firefox\" | \"webkit\";\n\nexport type PlaywrightRunnerParameters = {\n readonly baseUrl?: string;\n readonly url?: string;\n readonly headless?: boolean;\n readonly browserType?: BrowserType;\n readonly launchOptions?: Record<string, unknown>;\n readonly contextOptions?: Record<string, unknown>;\n readonly projectId?: string;\n readonly environmentId?: string;\n readonly featureId?: string;\n readonly scenarioId?: string;\n readonly executionId?: string;\n readonly systemEnvOverrides?: Record<string, string>;\n readonly testDataFilePath?: string;\n readonly testDataSeedFilePath?: string;\n};\n\nexport type PlaywrightRunnerOptions = {\n readonly parameters?: PlaywrightRunnerParameters;\n};\n\nexport type PlaywrightRunnerTester = Pick<Tester, \"executeCommand\"> &\n Partial<Pick<Tester, \"setContext\">>;\n\nconst DEFAULT_PRE_COMMAND_DELAY_MS = 1000;\nconst DEFAULT_POST_COMMAND_DELAY_MS = 0;\n\nfunction sleep(ms: number): Promise<void> {\n if (ms <= 0) {\n return Promise.resolve();\n }\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction resolveSelectorString(selector: UniqueSelector): string {\n if (selector.type === \"pw.selectorString\") {\n return selector.selectorString;\n }\n throw new Error(\n `Unsupported selector type \"${(selector as { type: string }).type}\". ` +\n `bvt-playwright-js currently only resolves \"pw.selectorString\". ` +\n `Support for \"bvt.selectorObject\" needs to be ported from bvt-agent.`,\n );\n}\n\nexport type PlaywrightRunnerDependencies = {\n readonly tester?: PlaywrightRunnerTester;\n readonly testDataProvider?: ITestDataProvider;\n readonly logger?: Pick<Console, \"error\" | \"info\" | \"log\" | \"warn\">;\n};\n\ntype GeneratedCommand = Parameters<PlaywrightRunnerTester[\"executeCommand\"]>[0][\"command\"];\n\nconst DEFAULT_PROJECT_ID = \"01K00000000000000000000000\";\nconst BLINQ_ENVIRONMENT_ENV_VAR = \"BLINQ_ENVIRONMENT\";\n\ntype EnvironmentEntry = {\n readonly id?: string;\n readonly projectId?: string;\n readonly baseURL?: string | null;\n};\n\ntype EnvironmentsFile = {\n readonly default?: string | null;\n readonly environments?: Record<string, EnvironmentEntry>;\n};\n\nfunction toFilePath(target: URL | string | undefined): string | undefined {\n if (target === undefined) {\n return undefined;\n }\n if (typeof target === \"string\") {\n return target;\n }\n return fileURLToPath(target);\n}\n\nfunction createRegistry() {\n const registry = new EvaluatorRegistry();\n registry.register(new LiteralEvaluator());\n registry.register(new FakerEvaluator());\n registry.register(new JSEvaluator());\n registry.register(new DateEvaluator());\n return registry;\n}\n\nfunction createResolutionContext(parameters: PlaywrightRunnerParameters): ResolutionContext {\n return {\n projectId: parameters.projectId ?? DEFAULT_PROJECT_ID,\n ...(parameters.environmentId ? { environmentId: parameters.environmentId } : {}),\n ...(parameters.featureId ? { featureId: parameters.featureId } : {}),\n ...(parameters.scenarioId ? { scenarioId: parameters.scenarioId } : {}),\n ...(parameters.executionId ? { executionId: parameters.executionId } : {}),\n systemEnvOverrides: parameters.systemEnvOverrides ?? {},\n };\n}\n\nfunction scopeMatchesContext(scope: TestDataEntry[\"scope\"], context: ResolutionContext): boolean {\n switch (scope.type) {\n case \"runtime\":\n return (\n scope.executionId === context.executionId &&\n (!context.scenarioId || scope.scenarioId === context.scenarioId)\n );\n case \"scenario\":\n return scope.scenarioId === context.scenarioId;\n case \"feature\":\n return scope.featureId === context.featureId;\n case \"environment\":\n return scope.environmentId === context.environmentId;\n case \"global\":\n return true;\n default:\n return false;\n }\n}\n\nexport class TempFileTestDataProvider implements ITestDataProvider {\n constructor(\n readonly filePath: string = path.join(\n tmpdir(),\n `blinq-bvt-playwright-test-data-${process.pid}.json`,\n ),\n readonly seedFilePath?: string,\n ) {}\n\n private parseEntries(raw: string): TestDataEntry[] {\n const parsed = JSON.parse(raw) as\n | Array<\n Omit<TestDataEntry, \"createdAt\" | \"updatedAt\"> & {\n createdAt: string;\n updatedAt: string;\n }\n >\n | {\n entries: Array<\n Omit<TestDataEntry, \"createdAt\" | \"updatedAt\"> & {\n createdAt: string;\n updatedAt: string;\n }\n >;\n };\n const entries = Array.isArray(parsed) ? parsed : parsed.entries;\n return entries.map((entry) => ({\n ...entry,\n createdAt: new Date(entry.createdAt),\n updatedAt: new Date(entry.updatedAt),\n }));\n }\n\n private async readFileEntries(filePath: string): Promise<TestDataEntry[]> {\n const raw = await readFile(filePath, \"utf8\");\n return this.parseEntries(raw);\n }\n\n private async readSeedEntries(): Promise<TestDataEntry[]> {\n if (!this.seedFilePath) {\n return [];\n }\n\n try {\n return await this.readFileEntries(this.seedFilePath);\n } catch (error) {\n if (error && typeof error === \"object\" && \"code\" in error && error.code === \"ENOENT\") {\n return [];\n }\n throw error;\n }\n }\n\n private async readEntries(): Promise<TestDataEntry[]> {\n try {\n return await this.readFileEntries(this.filePath);\n } catch (error) {\n if (error && typeof error === \"object\" && \"code\" in error && error.code === \"ENOENT\") {\n return await this.readSeedEntries();\n }\n throw error;\n }\n }\n\n private async writeEntries(entries: readonly TestDataEntry[]): Promise<void> {\n await mkdir(path.dirname(this.filePath), { recursive: true });\n await writeFile(this.filePath, `${JSON.stringify(entries, null, 2)}\\n`, \"utf8\");\n }\n\n async getByScope(context: ResolutionContext): Promise<TestDataEntry[]> {\n const entries = await this.readEntries();\n return entries.filter(\n (entry) => entry.projectId === context.projectId && scopeMatchesContext(entry.scope, context),\n );\n }\n\n async getByKey(key: string, context: ResolutionContext): Promise<TestDataEntry | null> {\n const entries = await this.getByScope(context);\n return entries.find((entry) => entry.key === key) ?? null;\n }\n\n async upsert(\n entry: Omit<TestDataEntry, \"_id\" | \"createdAt\" | \"updatedAt\">,\n ): Promise<TestDataEntry> {\n const now = new Date();\n const entries = await this.readEntries();\n const existingIndex = entries.findIndex(\n (candidate) =>\n candidate.projectId === entry.projectId &&\n candidate.key === entry.key &&\n JSON.stringify(candidate.scope) === JSON.stringify(entry.scope),\n );\n const persistedEntry: TestDataEntry = {\n _id: existingIndex >= 0 ? entries[existingIndex]!._id : randomUUID(),\n createdAt: existingIndex >= 0 ? entries[existingIndex]!.createdAt : now,\n updatedAt: now,\n ...entry,\n };\n\n if (existingIndex >= 0) {\n entries[existingIndex] = persistedEntry;\n } else {\n entries.push(persistedEntry);\n }\n\n await this.writeEntries(entries);\n return persistedEntry;\n }\n\n async delete(id: string): Promise<void> {\n const entries = await this.readEntries();\n await this.writeEntries(entries.filter((entry) => entry._id !== id));\n }\n\n async findByValue(value: string, context: ResolutionContext): Promise<TestDataEntry[]> {\n const entries = await this.getByScope(context);\n return entries.filter((entry) => entry.value === value);\n }\n\n async clearScope(scopeType: ScopeType, context: ResolutionContext): Promise<void> {\n const entries = await this.readEntries();\n await this.writeEntries(\n entries.filter((entry) => {\n if (entry.projectId !== context.projectId || entry.scope.type !== scopeType) {\n return true;\n }\n return !scopeMatchesContext(entry.scope, context);\n }),\n );\n }\n}\n\nfunction createConfiguredTester(input: {\n parameters: PlaywrightRunnerParameters;\n provider: ITestDataProvider;\n logger: Pick<Console, \"error\" | \"info\" | \"log\" | \"warn\">;\n}): { tester: Tester; scopeManager: ScopeManager; preprocessors: CommandPreprocessor[] } {\n const resolutionContext = createResolutionContext(input.parameters);\n const scopeManager = new ScopeManager(input.provider, resolutionContext);\n const resolver = new DataResolver(scopeManager, createRegistry(), {\n decryptSecret: async (value, context) => {\n if (!context?.projectId) {\n throw new Error(\"decryptSecret requires a resolution context with projectId\");\n }\n const key = await deriveProjectKey(context.projectId);\n return decrypt(value, key);\n },\n decryptTotpSeed: async (value, context) => {\n if (!context?.projectId) {\n throw new Error(\"decryptTotpSeed requires a resolution context with projectId\");\n }\n const key = await deriveProjectKey(context.projectId);\n return decrypt(value, key);\n },\n });\n\n const preprocessors: CommandPreprocessor[] = [\n createTestDataApiPreprocessor(input.provider, { logger: input.logger }),\n createStepParameterPreprocessor(),\n createAiChatCodeTokenPreprocessor(resolver, { logger: input.logger }),\n createDataResolverPreprocessor(resolver),\n ];\n\n const tester = new Tester(undefined, undefined, {\n commandPreprocessors: preprocessors,\n provider: input.provider,\n context: resolutionContext,\n });\n tester.setContext(resolutionContext);\n return { tester, scopeManager, preprocessors };\n}\n\n/**\n * Low-level runner: mirrors `CucumberRunner` but attaches to a Playwright\n * `Page` provided by the test runner instead of launching its own browser.\n *\n * Use `createBlinqTest` for the typical fixture-based integration.\n */\nexport class PlaywrightRunner {\n readonly parameters: PlaywrightRunnerParameters;\n readonly tester: PlaywrightRunnerTester;\n readonly testDataProvider: ITestDataProvider;\n runtimeContext: CommandExecutionContext;\n activePage: Page | null = null;\n\n private readonly scopeManager?: ScopeManager;\n private readonly preprocessors: CommandPreprocessor[];\n private resolutionContext: ResolutionContext;\n\n constructor(\n options: PlaywrightRunnerOptions = {},\n dependencies: PlaywrightRunnerDependencies = {},\n ) {\n this.parameters = options.parameters ?? {};\n this.resolutionContext = createResolutionContext(this.parameters);\n this.testDataProvider =\n dependencies.testDataProvider ??\n new TempFileTestDataProvider(\n this.parameters.testDataFilePath,\n this.parameters.testDataSeedFilePath,\n );\n\n if (dependencies.tester) {\n this.tester = dependencies.tester;\n // Caller-supplied tester opts out of the split resolveCommand pipeline.\n this.preprocessors = [];\n } else {\n const configured = createConfiguredTester({\n parameters: this.parameters,\n provider: this.testDataProvider,\n logger: dependencies.logger ?? console,\n });\n this.tester = configured.tester;\n this.scopeManager = configured.scopeManager;\n this.preprocessors = configured.preprocessors;\n }\n\n this.runtimeContext = {\n stepParameters: {},\n resolutionContext: this.resolutionContext,\n };\n this.applyResolutionContext();\n }\n\n private applyResolutionContext(): void {\n this.scopeManager?.setContext(this.resolutionContext);\n this.tester.setContext?.(this.resolutionContext);\n this.runtimeContext = {\n ...this.runtimeContext,\n resolutionContext: this.resolutionContext,\n };\n }\n\n /**\n * Bind the runner to a Playwright `Page` for the duration of a test. The\n * caller (typically the `bvt` fixture) is responsible for cleanup.\n */\n attach(page: Page): void {\n this.activePage = page;\n }\n\n detach(): void {\n this.activePage = null;\n }\n\n async executeCommand(command: GeneratedCommand, parameters: Record<string, string> = {}) {\n if (!this.activePage) {\n throw new Error(\n \"PlaywrightRunner has no active page. Call attach(page) before executeCommand.\",\n );\n }\n\n this.runtimeContext = {\n ...this.runtimeContext,\n stepParameters: parameters,\n resolutionContext: this.resolutionContext,\n };\n return await this.tester.executeCommand({\n page: this.activePage,\n command,\n parameters,\n context: this.runtimeContext,\n });\n }\n\n /**\n * Run the preprocessor pipeline (step parameters, data-resolver tokens,\n * ai-chat code tokens, test-data API) over `command` and validate the\n * result against `CommandSchema`. Returns the resolved command with every\n * `<param>` / `{{token}}` substituted.\n *\n * Accepts `unknown` for `command` so generated code can pass a plain JSON\n * literal without satisfying `Command`'s discriminated union at compile time.\n *\n * Throws when a caller-supplied tester is in use (resolve is internal to\n * the built-in pipeline only).\n */\n async resolveCommand(\n command: unknown,\n parameters: Record<string, string> = {},\n ): Promise<Command> {\n if (this.preprocessors.length === 0) {\n throw new Error(\n \"resolveCommand requires the built-in preprocessor pipeline; \" +\n \"a caller-supplied tester opts out of it.\",\n );\n }\n\n this.runtimeContext = {\n ...this.runtimeContext,\n stepParameters: parameters,\n resolutionContext: this.resolutionContext,\n };\n let result = command as Command;\n for (const preprocessor of this.preprocessors) {\n result = await preprocessor(result, this.runtimeContext);\n }\n return CommandSchema.parse(result);\n }\n\n /**\n * Resolve `command.target` to a Playwright handle:\n * - `element.*` commands → `Locator` (chosen selector, descending into frames).\n * - `page.*` commands → `Page` (or `FrameLocator` when frames are present).\n * - `utility` / `custom` / `api.*` → `null`.\n *\n * Throws if the chosen selector is not a `pw.selectorString`.\n */\n async find(command: Command): Promise<Locator | Page | FrameLocator | null> {\n if (!this.activePage) {\n throw new Error(\"PlaywrightRunner has no active page. Call attach(page) before find.\");\n }\n\n switch (command.type) {\n case \"element.action\":\n case \"element.assertion\":\n case \"element.extract\": {\n const target = command.target as ElementTarget;\n const scope = this.resolveFrameScope(target.frames);\n const selector = target.uniqueSelectors[target.chosenSelectorIndex ?? 0];\n if (!selector) {\n throw new Error(`Target \"${target.name}\" has no selector at chosen index.`);\n }\n return scope.locator(resolveSelectorString(selector));\n }\n case \"page.action\":\n case \"page.assertion\":\n case \"page.extract\": {\n const target = (command.target ?? null) as PageTarget | null;\n return this.resolveFrameScope(target?.frames);\n }\n default:\n return null;\n }\n }\n\n /**\n * Apply the command's `preCommandDelay` (default 1000ms). Awaiting this\n * before the action gives the page a moment to settle.\n *\n * Accepts the raw command literal from generated code (typed `unknown`) so\n * the codegen doesn't need to satisfy `Command`'s discriminated union.\n */\n async preCommand(command: unknown): Promise<void> {\n const delay =\n (command as { config?: { preCommandDelay?: number } } | null | undefined)?.config\n ?.preCommandDelay ?? DEFAULT_PRE_COMMAND_DELAY_MS;\n await sleep(delay);\n }\n\n /**\n * Apply the command's `postCommandDelay` (default 0ms). Prefers the resolved\n * command's `config` when provided; falls back to the raw command.\n */\n async postCommand(command: unknown, resolvedCommand?: Command): Promise<void> {\n const source =\n resolvedCommand ?? (command as { config?: { postCommandDelay?: number } } | null);\n const delay = source?.config?.postCommandDelay ?? DEFAULT_POST_COMMAND_DELAY_MS;\n await sleep(delay);\n }\n\n private resolveFrameScope(\n frames:\n | ReadonlyArray<{\n name: string;\n uniqueSelectors: ReadonlyArray<UniqueSelector>;\n chosenSelectorIndex?: number;\n }>\n | undefined,\n ): Page | FrameLocator {\n if (!this.activePage) {\n throw new Error(\"PlaywrightRunner has no active page.\");\n }\n let scope: Page | FrameLocator = this.activePage;\n for (const frame of frames ?? []) {\n const frameSelector = frame.uniqueSelectors[frame.chosenSelectorIndex ?? 0];\n if (!frameSelector) {\n throw new Error(`Frame \"${frame.name}\" has no selector at chosen index.`);\n }\n scope = scope.frameLocator(resolveSelectorString(frameSelector));\n }\n return scope;\n }\n}\n\nexport type CreateBlinqTestOptions = {\n /**\n * Optional path to the `config/environments.json` file generated alongside\n * the Playwright tests. When present, the runner reads `BLINQ_ENVIRONMENT`\n * (falling back to `default`) to look up `projectId`/`environmentId` for\n * the resolution context.\n */\n readonly environmentsFilePath?: URL | string;\n /**\n * Optional path to the `data/test-data.json` seed file. Seeded entries are\n * read by the test-data provider but never mutated.\n */\n readonly testDataSeedFilePath?: URL | string;\n /**\n * Optional runtime test-data file path. Defaults to a worker-local temp\n * file under `tmpdir()`.\n */\n readonly testDataFilePath?: URL | string;\n readonly logger?: Pick<Console, \"error\" | \"info\" | \"log\" | \"warn\">;\n /**\n * Default runner parameters. Anything supplied here is overridden by values\n * resolved from the environments file at runtime.\n */\n readonly parameters?: PlaywrightRunnerParameters;\n};\n\nexport type BlinqTestRuntime = {\n readonly page: Page;\n readonly parameters: PlaywrightRunnerParameters;\n executeCommand(\n command: GeneratedCommand,\n parameters?: Record<string, string>,\n ): Promise<unknown>;\n resolveCommand(command: unknown, parameters?: Record<string, string>): Promise<Command>;\n find(command: Command): Promise<Locator | Page | FrameLocator | null>;\n preCommand(command: unknown): Promise<void>;\n postCommand(command: unknown, resolvedCommand?: Command): Promise<void>;\n};\n\nexport type BlinqTestFixtures = {\n readonly bvt: BlinqTestRuntime;\n};\n\nasync function loadEnvironmentsFile(\n filePath: string | undefined,\n): Promise<EnvironmentsFile | null> {\n if (!filePath) {\n return null;\n }\n try {\n const raw = await readFile(filePath, \"utf8\");\n return JSON.parse(raw) as EnvironmentsFile;\n } catch (error) {\n if (error && typeof error === \"object\" && \"code\" in error && error.code === \"ENOENT\") {\n return null;\n }\n throw error;\n }\n}\n\nfunction resolveEnvironmentParameters(\n environments: EnvironmentsFile | null,\n): Pick<PlaywrightRunnerParameters, \"projectId\" | \"environmentId\" | \"baseUrl\"> {\n if (!environments) {\n return {};\n }\n const environmentName = process.env[BLINQ_ENVIRONMENT_ENV_VAR] || environments.default;\n if (!environmentName) {\n return {};\n }\n const environment = environments.environments?.[environmentName];\n if (!environment) {\n return {};\n }\n return {\n ...(environment.projectId ? { projectId: environment.projectId } : {}),\n ...(environment.id ? { environmentId: environment.id } : {}),\n ...(environment.baseURL ? { baseUrl: environment.baseURL } : {}),\n };\n}\n\n/**\n * Build a Playwright `test` extended with a `bvt` fixture. Generated spec\n * files import `test` from this function and call `bvt.executeCommand(...)`\n * inside `test.step` blocks, exactly as they did with the cucumber runner.\n */\nexport function createBlinqTest(options: CreateBlinqTestOptions = {}) {\n const environmentsFilePath = toFilePath(options.environmentsFilePath);\n const seedFilePath = toFilePath(options.testDataSeedFilePath);\n const runtimeFilePath = toFilePath(options.testDataFilePath);\n const logger = options.logger ?? console;\n const defaultParameters = options.parameters ?? {};\n\n return baseTest.extend<BlinqTestFixtures>({\n bvt: async ({ page }, use, testInfo) => {\n const environments = await loadEnvironmentsFile(environmentsFilePath);\n const resolved = resolveEnvironmentParameters(environments);\n const parameters: PlaywrightRunnerParameters = {\n ...defaultParameters,\n ...resolved,\n scenarioId: defaultParameters.scenarioId ?? testInfo.testId,\n ...(seedFilePath ? { testDataSeedFilePath: seedFilePath } : {}),\n ...(runtimeFilePath\n ? { testDataFilePath: runtimeFilePath }\n : {\n testDataFilePath: path.join(\n tmpdir(),\n `blinq-bvt-playwright-${process.pid}-${testInfo.workerIndex}-${testInfo.testId}.json`,\n ),\n }),\n };\n\n const runner = new PlaywrightRunner({ parameters }, { logger });\n runner.attach(page);\n\n try {\n await use({\n page,\n parameters: runner.parameters,\n executeCommand: (command, stepParameters) =>\n runner.executeCommand(command, stepParameters),\n resolveCommand: (command, stepParameters) =>\n runner.resolveCommand(command, stepParameters),\n find: (command) => runner.find(command),\n preCommand: (command) => runner.preCommand(command),\n postCommand: (command) => runner.postCommand(command),\n });\n } finally {\n runner.detach();\n }\n },\n });\n}\n\nexport default createBlinqTest;\n"],"x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,48,49,50,51,52,53,54,83,88,89,106,113],"mappings":"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I;CAAI;CAAI;CAAG;CAAI;CAAI;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAI;CAAK;CAAI;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAI;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAI;CAAK;CAAI;CAAI;CAAI;CAAG;CAAI;CAAG;CAAG;CAAI;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAG;CAAG;CAAI;CAAI;CAAI;CAAI;CAAG;CAAI;CAAI;CAAI;CAAG;CAAG;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAI;CAAI;CAAI;CAAG;CAAI;CAAI;CAAG;CAAG;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAK;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAK;CAAI;CAAG;CAAG;CAAI;CAAG;CAAI;CAAI;CAAI;CAAG;CAAG;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAG;CAAG;CAAG;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAI;CAAI;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAI;CAAI;CAAG;CAAI;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAI;CAAI;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAI;CAAI;CAAI;CAAG;CAAI;CAAG;CAAI;CAAI;CAAI;CAAG;CAAG;CAAG;CAAK;CAAI;CAAI;CAAG;CAAI;CAAI;CAAI;CAAG;CAAI;CAAI;CAAI;CAAG;CAAI;CAAI;CAAI;CAAG;CAAK;CAAI;CAAK;CAAI;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAI;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAI;CAAI;CAAG;CAAG;CAAG;CAAI;CAAG;CAAI;CAAI;CAAG;CAAG;CAAI;CAAG;CAAI;CAAI;CAAI;CAAG;CAAI;CAAI;CAAK;CAAI;CAAI;CAAG;CAAG;CAAI;CAAI;CAAG;CAAI;CAAI;CAAK;CAAG;CAAG;CAAG;CAAG;CAAI;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAI;CAAI;CAAG;CAAI;CAAI;CAAK;CAAI;CAAI;CAAG;CAAG;CAAI;CAAG;CAAI;CAAK;CAAG;CAAI;CAAK;CAAK;CAAK;CAAI;CAAK;CAAM;CAAI;CAAI;CAAM;CAAI;CAAG;CAAI;CAAM;CAAG;CAAK;CAAM;CAAI;CAAM;CAAK;CAAG;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAI;CAAG;CAAI;CAAI;CAAG;CAAI;CAAK;CAAI;CAAK;CAAI;CAAI;CAAI;CAAG;CAAI;CAAI;CAAI;CAAG;CAAG;CAAI;CAAI;CAAI;CAAG;CAAG;CAAG;CAAI;CAAG;CAAI;CAAM;CAAI;CAAI;CAAI;CAAK;CAAM;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAK;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAK;CAAM;CAAK;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAM;CAAI;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAI;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAG;CAAK;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAI;CAAG;CAAG;CAAM;CAAI;CAAG;CAAG;CAAK;CAAI;CAAK;CAAI;CAAI;CAAG;CAAI;CAAG;CAAK;CAA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BAAmB;AAEf,UAAO,KAAK,kCAAkC;;EAGnD,CAAC;AAEF,QAAO;EACL,OAAO,OAAO,WAAW;EACzB,YAAY,gBAAgB,UAAU;EACtC;EACA;EACD;;;;;ACnRH,eAAsB,uBAAuB,MAA+C;AAC1F,QAAO,sBAAsB,KAAK;;;;;;;;;;;ACkDpC,MAAM,uBAAuB,IAAI,IAAI;CAEnC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAEA;CACA;CACA;CACA;CAEA;CACA;CACA;CAEA;CACA;CACA;CACA;CACA;CACA;CAEA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,MAAM,0BAA0B,IAAI,IAAI;CAEtC;CACA;CACA;CAEA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAEA;CACA;CACD,CAAC;;;;;;AAOF,SAAS,eAAe,KAAuB;CAC7C,MAAM,0BAAU,IAAI,KAAa;CACjC,IAAI,UAAyB;AAC7B,QAAO,WAAW,YAAY,OAAO,WAAW;AAC9C,OAAK,MAAM,OAAO,OAAO,oBAAoB,QAAQ,EAAE;GACrD,MAAM,aAAa,OAAO,yBAAyB,SAAS,IAAI;AAChE,OAAI,QAAQ,iBAAiB,cAAc,OAAO,WAAW,UAAU,WACrE,SAAQ,IAAI,IAAI;;AAGpB,YAAU,OAAO,eAAe,QAAQ;;AAE1C,QAAO,CAAC,GAAG,QAAQ;;AASrB,MAAM,sBAAsB;CAC1B;CACA;CACA;CACD;AAED,MAAM,wBAAwB;CAC5B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,MAAM,2BAA2B;CAC/B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,SAAS,oBACP,KACA,SACA,UAC+C;CAC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"}
|